AIQT 策略定义及规范

AIQT 策略逻辑

AIQT 爱量化工作台专注基于日 K 线的中低频离线策略设计。所谓离线策略是指下单方式由人工执行,无需接入实时交易系统。即由工作台完成每天的策略计算,并生成交易清单,第二天人工操作下单。

AIQT 的策略由指标和配置两部分构成,其中指标的定义和计算是策略的核心内容。用日线行情和财报作为基础指标,再由基础指标使用自定义的计算式或系统内置的指标函数计算出更多指标,直到计算出买卖信号的指标,最后在配置定义项里设置相关配置即可。

例如双均价策略中,需要根据两条均线的交叉情况来判断买入或卖出。在 AIQT 的实现思路为:

1. 用每日的收盘价数据计算两条均线指标,如 MA5 和 MA10

2. 根据两条均线的交叉情况来计算买卖信号,MA5 上穿 MA10 时买入,MA5 下穿 MA10 时卖出

3. 将买卖信号填入到对应的配置项,并做相关配置

因此可编写双均线策略内容如下:

指标定义:

自定义计算,MA5;表达式:5 日收盘价平均

自定义计算,MA10;表达式:10 日收盘价平均

自定义信号,买卖信号;买入条件:MA5 大于 MA10 且 昨日 MA5 小于等于昨日 MA10,卖出条件:MA5 小于 MA10 且昨日 MA5 大于等于昨日 MA10

配置定义:

买入信号列:买卖信号

买入价格:昨日收盘价

买入股数:100

卖出信号列:买卖信号

卖出价格:昨日收盘价

为了策略设计方便,AIQT 里内置了很多技术指标,可以直接调用,如双均线策略也可直接导用内置指标 MA 和 GDX(金叉死叉信号指标)实现:

指标定义:

MA,MA5;源指标:收盘价,周期:5

MA,MA10;源指标:收盘价,周期:10

GDX,GDX5_10;短线:MA5,长线:MA10

配置定义:

买入信号列:GDX5_10

买入价格:昨日收盘价

买入股数:100

卖出信号列:GDX5_10

卖出价格:昨日收盘价

策略规范格式

策略规范格式包含两部分指标定义和配置定义

1. 指标定义

(1) 内置指标格式

指标定义:

指标名称,返回参数 1:返回列名 1,返回参数 2:返回列名 2…;输入参数 1:值 1,输入参数 2:值 2,…

当只有单个输出参数时,可以省略返回参数名:

指标名称,返回列名;输入参数 1:值 1,输入参数 2:值 2,…

(2) 自定义指标格式

自定义指标名称有两种,自定义计算和自定义信号,格式分别为:

指标定义:

自定义计算,返回列名;表达式:×××

自定义信号,返回列名;买入条件:×××

自定义信号,返回列名;买入条件:×××,卖出条件:×××

自定义计算或自定义信号的返回列名必须符合 Java 变量命名规则

(3) 财务指标格式

指标定义:

指标名称

举例:

(1) 内置指标

单个输出:

指标定义:

MA,MA5;源指标:收盘价,周期:5【单个输出参数,省略输出参数名】

GDX,GDX5_10;短线:MA5,长线:MA10

多个输出:

指标定义:

MACD,DIF:DIF,DEA:DEA,MACD:MACD;源指标:收盘价,短周期:12,长周期:26,中周期:9

(2) 自定义指标

自定义指标名称有两种,自定义计算和自定义信号,分别举例如下:

指标定义:

自定义计算,买价;表达式:23

自定义计算,股价新高;表达式:收盘价大于 10 日最高价最大

自定义信号,买入信号;买入条件:(最高价 - 最低价)/ 昨日收盘价大于 0.05 且 (收盘价 - 开盘价)/ 开盘价小于 0.02

自定义信号,买卖信号;买入条件:MA5 大于 MA10 且 昨日 MA5 小于等于昨日 MA10,卖出条件:MA5 小于 MA10 且 昨日 MA5 大于等于昨日 MA10

自定义信号,买入信号;买入条件:股价新高

自定义信号,卖出信号;卖出条件:收盘价小于昨日 MA10 或 放量滞涨

(3) 财务指标

指标定义:

营业利润(只写指标名称)

2. 配置定义

配置定义:

买入信号列:××× (填写指标,多票模式时必须配置)

买入价格:××× (填写枚举或指标,枚举为昨日收盘价、今日收盘价、今日开盘价)

买入股数:××× (填写整数)

买入金额:××× (填写数值)

最大持仓数:××× (填写整数)

卖出信号列:××× (填写指标,多票模式时必须配置)

卖出价格:××× (填写枚举或指标,枚举为昨日收盘价、今日收盘价、今日开盘价)

止盈幅度:××× (填写数值)

止损幅度:××× (填写数值)

最长持仓日:××× (填写整数)

多次买入分别平仓:××× (填写布尔值,true 或 false)

平仓缺省价格:××× (填写枚举或指标,枚举为昨日收盘价、今日收盘价、今日开盘价)

总资金数:××× (填写数值。多票模式时使用)

每次买入比例:××× (填写数值。多票模式时使用)

每次买入金额:××× (填写数值。多票模式时使用)

现金范围:××× (填写数值范围,写成一个串,最小值,最大值。多票模式时使用。最小值指的是回测过程中,帐户剩余资金少于现金最小值时,会自动补足,不填表示不做这个补足动作。最大值指的是回测过程中,帐户剩余资金大于现金最大值时,多出部分会自动被抽走不再参与交易以保护已经获得的赢利。不填表示不做这个处理,即所有帐户上的资金都会继续参与交易。)

调仓周期:××× (填写字符串,每天 / 每周 / 每月 / 每年 1 月 /…/ 每年 12 月。多票模式时使用)

调仓指标:××× (填写指标。多票模式时使用)

选出名次:××× (填写名次,直接写最大前 3,最小前 5 之类。多票模式时使用)

调仓信号:××× (填写信号指标,用信号指标判断,是 1 的时候调进来,这个和调仓指标互斥。多票模式时使用)

注意:配置项的名称不能更改,严格按照配置定义里的名称。无需配置的项目可以省略不写。

举例:

配置定义:

买入信号列:DVG(DVG 为一个指标,DVG 等于 1 时买入)

买入价格:昨日收盘价

买入股数:100

卖出信号列:DVG(DVG 等于 -1 时卖出)

卖出价格:昨日收盘价

止盈幅度:5(表示当股价上涨超过 5% 时卖出)

止损幅度:3(表示当股价下跌超过 3% 时卖出)

最长持仓日:5(表示当持仓天数超过 5 天时卖出)

平仓缺省价格:昨日收盘价

调仓周期:每周

调仓指标:成交量

选出名次:最大前 5

总资金数:100000

每次买入比例:30(表示每次买入总资金数的 30%)

策略举例

双均价策略 - 内置指标

指标定义:

MA,MA5;源指标:收盘价,周期:5

MA,MA10;源指标:收盘价,周期:10

GDX,GDX5_10;短线:MA5,长线:MA10

配置定义:

买入信号列:GDX5_10

买入价格:昨日收盘价

买入股数:100

卖出信号列:GDX5_10

卖出价格:昨日收盘价

MACD 背离策略

指标定义:

MACDSIG,MACDSIG;源指标:收盘价,短周期:12,长周期:26,中周期:9

配置定义:

买入信号列:MACDSIG

买入价格:昨日收盘价

买入股数:100

卖出信号列:MACDSIG

卖出价格:昨日收盘价

MACD 背离策略 - 多票模式

指标定义:

MACDSIG,MACDSIG;源指标:收盘价,短周期:12,长周期:26,中周期:9

配置定义:

买入信号列:MACDSIG

买入价格:昨日收盘价

买入股数:100

卖出信号列:MACDSIG

卖出价格:昨日收盘价

调仓周期:每周

调仓指标:成交量

选出名次:最大前 5

低波动率选股策略 - 多票模式

指标定义:

VOL,VOL20;源指标:收盘价,周期:20

自定义信号,买卖信号;买入条件:周末交易日

配置定义:

买入信号列:买卖信号

卖出信号列:买卖信号 (买卖信号里不写卖出条件表示只根据股票池信号卖出)

买入价格:昨日收盘价

卖出价格:昨日收盘价

总资金数:1000000

每次买入比例:5

现金范围:0,1000000

调仓周期:每周

调仓指标:VOL20

选出名次:最小前 20

趋势交易策略

指标定义:

VPTR,VPTR;周期 1:252,周期 2:3,分位数:5

配置定义:

买入信号列:VPTR

买入价格:昨日收盘价

买入股数:100

卖出信号列:VPTR

卖出价格:昨日收盘价

止盈幅度: 10

KNN 简单策略

指标定义:

KNN,KNN;周期:100,前 m 个距离最近的数据:20

配置定义:

买入信号列:KNN

买入价格:昨日收盘价

买入股数:100

最大持仓数:1

卖出信号列:KNN

卖出价格:昨日收盘价

固定价策略

指标定义:

自定义计算,买价;表达式:23

自定义计算,卖价;表达式:25.5

配置定义:

买入价格:买价

买入股数:100

卖出价格:卖价

双均价策略 - 自定义指标

指标定义:

自定义计算,MA5;表达式:5 日收盘价平均

自定义计算,MA10;表达式:10 日收盘价平均

自定义信号,买卖信号;买入条件:MA5 大于 MA10 且 昨日 MA5 小于等于昨日 MA10,卖出条件:MA5 小于 MA10 且昨日 MA5 大于等于昨日 MA10

配置定义:

买入信号列:买卖信号

买入价格:昨日收盘价

买入股数:100

卖出信号列:买卖信号

卖出价格:昨日收盘价

波动性突破策略

指标定义:

自定义计算,VF;表达式:ln(最高价 / 最低价)*10

自定义计算,VFM;表达式:20 日 VF 平均

自定义信号,VF_signal;买入条件:VF 大于昨日 VFM*1.5 且 收盘价大于开盘价

配置定义:

买入信号列:VF_signal

买入价格:昨日收盘价

买入股数:100

止盈幅度:5

止损幅度:3

最长持仓日:5

平仓缺省价格:昨日收盘价

中位数通道突破策略

指标定义:

自定义计算,ME;表达式:20 日收盘价中位数

自定义计算,最高价 20;表达式:20 日最高价最大

自定义计算,最低价 20;表达式:20 日最低价最小

自定义计算,上轨;表达式:昨日 ME+(昨日最高价 20- 昨日最低价 20)*0.5

自定义计算,下轨;表达式:昨日 ME-(昨日最高价 20- 昨日最低价 20)*0.5

自定义信号,买卖信号;买入条件:收盘价大于上轨,卖出条件:收盘价小于下轨

配置定义:

买入信号列:买卖信号

买入价格:昨日收盘价

买入股数:100

卖出信号列:买卖信号

卖出价格:昨日收盘价

放量高点阻力突破策略

指标定义:

自定义计算,Vol;表达式:成交量 / 昨日成交量

自定义计算,Resistance;表达式:100 日内 Vol 大于等于 2 的最高价最大前 5 名平均

自定义信号,买入信号;买入条件:收盘价大于昨日 Resistance 且 昨日收盘价小于等于 昨日 Resistance

自定义信号,卖出信号;卖出条件:收盘价小于昨日 Resistance

配置定义:

买入信号列:买入信号

买入价格:昨日收盘价

买入股数:100

卖出信号列:卖出信号

卖出价格:昨日收盘价

止盈幅度:10

止损幅度:3

最长持仓日:30

布林带均值回归策略

指标定义:

自定义计算,中轨;表达式:20 日收盘价平均

自定义计算,SD;表达式:20 日收盘价标准差

自定义计算,上轨;表达式:昨日中轨 +2* 昨日 SD

自定义计算,下轨;表达式:昨日中轨 -2* 昨日 SD

自定义信号,买卖信号;买入条件:收盘价小于等于下轨,卖出条件:收盘价大于等于上轨

配置定义:

买入信号列:买卖信号

买入价格:昨日收盘价

买入股数:100

卖出信号列:买卖信号

卖出价格:昨日收盘价

止损幅度:3

海龟策略

指标定义:

自定义计算,don_up;表达式:20 日最高价最大

自定义计算,don_down;表达式:20 日最低价最小

自定义信号,买卖信号;买入条件:收盘价大于昨日 don_up,卖出条件:收盘价小于昨日 don_down

配置定义:

买入信号列:买卖信号

买入价格:昨日收盘价

买入股数:100

最大持仓数:1

卖出信号列:买卖信号

卖出价格:昨日收盘价

线性回归预测策略

指标定义:

PCALF,PCALF;训练数据天数:100,预测数据天数:5,主成分个数:4

自定义信号,买卖信号;买入条件:PCALF 大于收盘价 *1.005,卖出条件:PCALF 小于收盘价 *0.995

配置定义:

买入信号列:买卖信号

买入价格:昨日收盘价

买入股数:100

卖出信号列:买卖信号

卖出价格:昨日收盘价

双均线加速趋势策略

指标定义:

MA,MA5

MA,MA20;周期:20

GDX,GDX5_20;短线:MA5,长线:MA20

自定义计算,IsNewHighAndAboveMA;表达式:收盘价大于等于 20 日收盘价最大 且 收盘价大于 MA5 且 收盘价大于 MA20

自定义计算,加仓信号;表达式:IsNewHighAndAboveMA 且 昨日 IsNewHighAndAboveMA 且 前日 IsNewHighAndAboveMA 且 3 日前 GDX5_20 等于 1

自定义计算,破 20 日线;表达式:收盘价小于 MA20

自定义信号,最终买入信号;买入条件:GDX5_20 等于 1 或 加仓信号

自定义信号,最终卖出信号;卖出条件:GDX5_20 等于 -1 或 破 20 日线

配置定义:

买入信号列:最终买入信号

买入价格:今日开盘价

买入股数:100

卖出信号列:最终卖出信号

卖出价格:今日开盘价

止损幅度:6

MACD 趋势共振策略

指标定义:

MACD,DIF:DIF,DEA:DEA,MACD:MACD

GDX,GOLDEN_DEAD_CROSS;短线:DIF,长线:DEA

自定义计算,DIF_UP_ZERO;表达式:昨日 DIF 小于 0 且 DIF 大于 0

自定义计算,DIF_DOWN_ZERO;表达式:昨日 DIF 大于 0 且 DIF 小于 0

自定义计算,IS_OSCILLATING;表达式:DIF 大于 -0.5 且 DIF 小于 0.5 且 DEA 大于 -0.5 且 DEA 小于 0.5

自定义信号,TRADE_SIGNAL;买入条件:GOLDEN_DEAD_CROSS 等于 1 且 DIF_UP_ZERO 且 非 IS_OSCILLATING,卖出条件:GOLDEN_DEAD_CROSS 等于 -1 且 DIF_DOWN_ZERO

配置定义:

买入信号列:TRADE_SIGNAL

买入价格:昨日收盘价

买入股数:100

卖出信号列:TRADE_SIGNAL

卖出价格:昨日收盘价

振幅缩盘变盘策略

指标定义:

自定义计算,ATR_RANGE;表达式:(最高价 - 最低价)/ 开盘价

自定义计算,盘整信号;表达式:3 日 ATR_RANGE 最大小于 0.03

自定义计算,盘整区间上沿;表达式:3 日最高价最大

自定义计算,盘整区间下沿;表达式:3 日最低价最小

自定义计算,BREAKOUT_BUY;表达式:ATR_RANGE 大于 0.06 且 收盘价大于昨日盘整区间上沿 且 昨日盘整信号

自定义计算,BREAKOUT_SELL;表达式:ATR_RANGE 大于 0.06 且 收盘价小于昨日盘整区间下沿 且 昨日盘整信号

自定义信号,TRADE_SIGNAL;买入条件:BREAKOUT_BUY,卖出条件:BREAKOUT_SELL

配置定义:

买入信号列:TRADE_SIGNAL

买入价格:今日开盘价

买入股数:100

卖出信号列:TRADE_SIGNAL

卖出价格:今日开盘价

止损幅度:1.5

量能递增追涨策略

指标定义:

MA,MA5;源指标:收盘价,周期:5

自定义计算,vol_up;表达式:成交量大于昨日成交量

自定义计算,vol_up3;表达式:3 日内连续 vol_up

自定义计算,price_up;表达式:收盘价大于昨日收盘价

自定义计算,price_up3;表达式:3 日内连续 price_up

自定义计算,above_ma5;表达式:收盘价大于 MA5

自定义信号,trade_signal;买入条件:vol_up3 且 price_up3 且 above_ma5,卖出条件:3 日内不存在 vol_up3 且收盘价小于 MA5

配置定义:

买入信号列:trade_signal

买入价格:今日开盘价

买入股数:100

卖出信号列:trade_signal

卖出价格:今日开盘价

连续新高动量策略

指标定义:

MA,MA10;源指标:收盘价,周期:10

自定义计算,high20;表达式:20 日最高价最大

自定义计算,创 20 日新高;表达式:收盘价大于昨日 high20

自定义计算,连续 3 日新高;表达式:3 日内连续创 20 日新高

自定义计算,low20;表达式:20 日最低价最小

自定义计算,创 20 日新低;表达式:收盘价小于昨日 low20

自定义计算,连续 2 日新低;表达式:2 日内连续创 20 日新低

自定义信号,TradeSignal;买入条件:连续 3 日新高,卖出条件:连续 2 日新低 或 收盘价小于 MA10

配置定义:

买入信号列:TradeSignal

买入价格:昨日收盘价

买入股数:100

卖出信号列:TradeSignal

卖出价格:昨日收盘价

输出量化策略要求

1. 策略内容是指以 "指标定义:\n" 或 "参数定义:\n" 开头,以某配置定义项结束的文本串。其它文字是对策略的解释说明,不属于策略内容。策略内容里严禁出现其它内容 (比如策略名字、注释之类的)。

2. 回复内容中可能会有多个策略内容

3. 给每一个策略内容取个不同名字,名字后缀为准确的当前实时日期时间,格式化为 "月日时分秒",后缀总共 10 位数字,名字与后缀用英文下划线连接。

4. 首先输出策略名字,它独占一行,然后在策略内容开始前输出【量化策略开始】,此策略内容结束后输出【量化策略结束】

5. 在【量化策略结束】后附加策略逻辑解释

6. 量化策略输出举例如下,必须严格遵守此格式:

策略名字

【量化策略开始】

策略内容

【量化策略结束】

7. 策略内容通过组合内置指标和自定义计算来实现,如遇到写不出来的计算指标或者系统配置不支持的情况,则提示“根据系统现有规则,无法实现该策略”,并且建议系统增加 xxx 指标或 xxx 功能。指标表达式里不得出现未定义的或者三份规范文档里没有的指标或词汇。

8. 策略输出前,请检验指标定义中的指标是否都有用到,如有冗余指标则修改后输出