Ricequant Docs
  • RQSDK快速上手
  • RQData - 金融数据 API

    • Python API文档
    • Http API文档
  • RQAlpha Plus - 回测框架

    • 使用教程
    • API使用手册 (opens new window)
  • RQFactor - 因子投研工具

    • 使用教程
    • API使用手册
  • RQOptimizer - 股票组合优化器

    • 使用教程
    • API使用手册 (opens new window)
  • RQPAttr - 绩效归因工具

    • 使用教程
  • RQAMS 用户说明文档
  • RQAMSC 说明文档
量化平台文档
米筐帮助中心
返回官网
  • RQSDK快速上手
  • RQData - 金融数据 API

    • Python API文档
    • Http API文档
  • RQAlpha Plus - 回测框架

    • 使用教程
    • API使用手册 (opens new window)
  • RQFactor - 因子投研工具

    • 使用教程
    • API使用手册
  • RQOptimizer - 股票组合优化器

    • 使用教程
    • API使用手册 (opens new window)
  • RQPAttr - 绩效归因工具

    • 使用教程
  • RQAMS 用户说明文档
  • RQAMSC 说明文档
量化平台文档
米筐帮助中心
返回官网
  • 量化平台文档

    • 简介
    • 投资研究
    • 因子研究
    • 回测
    • 模拟交易
    • 策略协作
    • 技术分析
      • 自定义技术指标
      • 系统预定义指标
      • 工具函数及行情变量
    • 常见问题
    • 策略开发API
    • 策略实例
    • 外部数据和 Python 模块

# 技术分析

米筐平台引入的信号计算方式能够让您更方便地进行技术分析。在技术分析过程中,您既可以使用我们预先提供的常用技术指标,也可以使用自定义指标来产生信号供策略内使用。

def MA_SIGNAL():
    # 5周期移动平均上穿10周期移动平均
    return CROSS(MA(CLOSE, 5), MA(CLOSE, 10))
def BOLL_SIGNAL():
    # 收盘价上传布林通道上轨
    MID, TOP, BOTTOM = BOLL(20, 2)
    return CROSS(CLOSE, TOP)
def init(context):
    context.s1 = '000001.XSHE'
    # 在初始化阶段注册指标函数
    # 计算5分钟线金叉信号
    reg_indicator('ma', MA_SIGNAL, '5m', win_size=20)
    # 计算日线布林通道
    reg_indicator('boll', BOLL_SIGNAL, '1d', win_size=20)
def handle_bar(context, bar_dict):
    # 获取指标结果
    ma_cross = get_indicator(context.s1, 'ma')
    boll_cross = get_indicator(context.s1, 'boll')
    # 设置入场条件
    if ma_cross and boll_cross:
        order_percent(context.s1, 0.1)

# 自定义技术指标

为满足用户对指标要求的多样性,米筐支持用户使用类似通达信公式的方式计算自定义指标,具体方法可以参考如下步骤:

首先,定义指标函数体本身。例如,

def KDJ_SIGNAL()):
    # 连续两个周期J值一直在超买区
    K, D, J = KDJ()
    return EVERY(J > 80, 2)

其次,在 init 阶段调用reg_indicator对所需取用的指标进行注册。注册时,需要指定指标名称、参数、适用的周期(比如,5 分钟线还是日线)以及初始回溯获取数据的窗口长度。例如,

reg_indicator('kdj', KDJ_SIGNAL, '1d', win_size=20)

最后,调用get_indicator获取指标计算结果。此时需要指定获取的指标名称以及所需计算的合约代码。例如,

get_indicator('000001.XSHE', 'kdj')

需要注意的是,目前技术指标计算并未包括当前“不完整”分钟线。举例来说,在 09:48 计算以 5 分钟线为周期的移动平均时,并不包括 09:45~09:48 这一“不完整”的 5 分钟线。

# 系统预定义指标

  • MACD 指数平滑移动平均
def MACD(SHORT=12, LONG=26, M=9):
    """
    MACD 指数平滑移动平均线
    """
    DIFF = EMA(CLOSE, SHORT) - EMA(CLOSE, LONG)
    DEA = EMA(DIFF, M)
    MACD = (DIFF - DEA) * 2
    return MACD
  • KDJ 随机指标
def KDJ(N=9, M1=3, M2=3):
    """
    KDJ 随机指标
    """
    RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
    K = EMA(RSV, (M1 * 2 - 1))
    D = EMA(K, (M2 * 2 - 1))
    J = K * 3 - D * 2
    return K, D, J
  • RSI 相对指标
def RSI(N1=6, N2=12, N3=24):
    """
    RSI 相对强弱指标
    """
    LC = REF(CLOSE, 1)
    RSI1 = SMA(MAX(CLOSE - LC, 0), N1, 1) / SMA(ABS(CLOSE - LC), N1, 1) * 100
    RSI2 = SMA(MAX(CLOSE - LC, 0), N2, 1) / SMA(ABS(CLOSE - LC), N2, 1) * 100
    RSI3 = SMA(MAX(CLOSE - LC, 0), N3, 1) / SMA(ABS(CLOSE - LC), N3, 1) * 100
    return RSI1, RSI2, RSI3
  • BOLL 布林带
def BOLL(N=20, P=2):
    """
    BOLL 布林带
    """
    MID = MA(CLOSE, N)
    UPPER = MID + STD(CLOSE, N) * P
    LOWER = MID - STD(CLOSE, N) * P
    return UPPER, MID, LOWER
  • WR 威廉指标
def WR(N=10, N1=6):
    """
    W&R 威廉指标
    """
    WR1 = (HHV(HIGH, N) - CLOSE) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
    WR2 = (HHV(HIGH, N1) - CLOSE) / (HHV(HIGH, N1) - LLV(LOW, N1)) * 100
    return WR1, WR2
  • DMI 趋向指标
def DMI(M1=14, M2=6):
    """
    DMI 趋向指标
    """
    TR = SUM(MAX(MAX(HIGH - LOW, ABS(HIGH - REF(CLOSE, 1))), ABS(LOW - REF(CLOSE, 1))), M1)
    HD = HIGH - REF(HIGH, 1)
    LD = REF(LOW, 1) - LOW
    DMP = SUM(IF((HD > 0) & (HD > LD), HD, 0), M1)
    DMM = SUM(IF((LD > 0) & (LD > HD), LD, 0), M1)
    DI1 = DMP * 100 / TR
    DI2 = DMM * 100 / TR
    ADX = MA(ABS(DI2 - DI1) / (DI1 + DI2) * 100, M2)
    ADXR = (ADX + REF(ADX, M2)) / 2
    return DI1, DI2, ADX, ADXR
  • BIAS 乖离率
def BIAS(L1=5, L4=3, L5=10):
    """
    BIAS 乖离率
    """
    BIAS = (CLOSE - MA(CLOSE, L1)) / MA(CLOSE, L1) * 100
    BIAS2 = (CLOSE - MA(CLOSE, L4)) / MA(CLOSE, L4) * 100
    BIAS3 = (CLOSE - MA(CLOSE, L5)) / MA(CLOSE, L5) * 100
    return BIAS, BIAS2, BIAS3
  • ASI 震动升降指标
def ASI(M1=26, M2=10):
    """
    ASI 震动升降指标
    """
    LC = REF(CLOSE, 1)
    AA = ABS(HIGH - LC)
    BB = ABS(LOW - LC)
    CC = ABS(HIGH - REF(LOW, 1))
    DD = ABS(LC - REF(OPEN, 1))
    R = IF((AA > BB) & (AA > CC), AA + BB / 2 + DD / 4, IF((BB > CC) & (BB > AA), BB + AA / 2 + DD / 4, CC + DD / 4))
    X = (CLOSE - LC + (CLOSE - OPEN) / 2 + LC - REF(OPEN, 1))
    SI = X * 16 / R * MAX(AA, BB)
    ASI = SUM(SI, M1)
    ASIT = MA(ASI, M2)
    return ASI, ASIT
  • VR 容量比率
def VR(M1=26):
    """
    VR容量比率
    """
    LC = REF(CLOSE, 1)
    VR = SUM(IF(CLOSE > LC, VOL, 0), M1) / SUM(IF(CLOSE <= LC, VOL, 0), M1) * 100
    return VR
  • ARBR 人气意愿指标
def ARBR(M1=26):
    """
    ARBR人气意愿指标
    """
    AR = SUM(HIGH - OPEN, M1) / SUM(OPEN - LOW, M1) * 100
    BR = SUM(MAX(0, HIGH - REF(CLOSE, 1)), M1) / SUM(MAX(0, REF(CLOSE, 1) - LOW), M1) * 100
    return AR, BR
  • DPO
def DPO(M1=20, M2=10, M3=6):
    DPO = CLOSE - REF(MA(CLOSE, M1), M2)
    MADPO = MA(DPO, M3)
    return DPO, MADPO
  • TRIX 三重指数平滑均线
def TRIX(M1=12, M2=20):
    TR = EMA(EMA(EMA(CLOSE, M1), M1), M1)
    TRIX = (TR - REF(TR, 1)) / REF(TR, 1) * 100
    TRMA = MA(TRIX, M2)
    return TRIX, TRMA

# 工具函数及行情变量

请注意, 由于 python 实现方式的问题, 逻辑与使用 '&' 进行判断, 逻辑或使用 '|' 进行判断。
并且逻辑判断的条件语句需要添加括号, 以明确逻辑判断的先后顺序。例如, (CLOSE > 10.2) & (VOLUME > 100).

名称
收盘价 C, CLOSE
开盘价 O, OPEN
最高价 H, HIGH
最低价 L, LOW
成交量 V, VOLUME
10 周期前收盘价 REF(CLOSE, 10)
10 周期均线 MA(CLOSE, 10)
金叉 CROSS(MA(CLOSE, 5),MA(CLOSE,10))
最大值 MAX(CLOSE, OPEN)
最小值 MIN(CLOSE, OPEN)
10 周期满足条件 EVERY(CLOSE > MA(CLOSE, 5), 10)
10 周期收阳线数量 COUNT(CLOSE > OPEN, 10)
10 周期收盘价最大值 HHV(CLOSE, 10)
10 周期收盘价最小值 LLV(CLOSE, 10)
10 周期成交量加总 SUM(VOLUME, 10)
绝对值 ABS
标准差 STD
IF 逻辑判断 IF(X, A, B) 表示 X 不为 0 则返回 A, 否则返回 B

Last Updated: 1/21/2021, 2:37:43 PM

← 策略协作 常见问题 →