一、新版模型的信号机制
本次大升级优化了编写的逻辑,过滤模型支持加仓减仓的编写,加仓减仓通过专用的信号指令来执行,信号遵循以下原则:
1、从开仓信号到平仓信号视为一个完整的交易过程;
2、开仓/平仓信号在一个交易过程中只能出现一次,加减仓信号可以出现N次;
3、模型必须写AUTOFILTER
具体机制说明详见链接:
https://www.wenhua.com.cn/popwin/guolvmx3.htm
例子:
//定义变量
MA5:MA(C,5);
MA10:MA(C,10);
MA20:MA(C,20);
//做多策略
MA5>MA10,BK;//5周期均线大于10周期均线,开多仓2手
MA5>MA20,ADD_LONG(1);//5周期均线大于20周期均线,加多仓1手
BARSBK>=10&&MA5
MA5
C<=(LONG_AVPRICE-25*MINPRICE),SP;//止损,亏损25个最小变动价位全部平仓
//做空策略
MA5
MA5
BARSSK>=10&&MA5>MA10,LOWER_SHORT(1);//开仓10周期后,5周期均线大于10周期均线,减空仓1手
MA5>MA10&&MA5>MA20,BP;//均线多头排列,平空仓
C>=(SHORT_AVPRICE+25*MINPRICE),BP;//止损,亏损25个最小变动价位全部平仓
//设置
T_COMMAND(2); //设置首次开仓手数为2手
TRADE_AGAIN(2);//设置加减仓执行次数
AUTOFILTER;
另外,新的机制下,对回测和运行也有优化。
回测方面,可以展示sigcheck运行优化函数带来的收益差,加减仓模型的胜率统计也会更加精确。
运行方面,新的信号机制支持新建模组带入账户持仓,模组根据带入持仓方向计算第一个信号。
二、指令调整
1、新增指令
Add_Long 多头加仓
Lower_Long 多头减仓
Add_Short 空头加仓
Lower_Short 空头减仓
2、删除指令
Closeout 清仓指令
STOP 止损指令
***新版统一用BP、SP指令来写止损、清仓。
三、函数调整
1、新增函数
①运行优化函数:
SIGCHECK
SIGCHECK_MIN(MODE,TIME)
②信号记录函数:
ADDLONG_PRICE
ADDLONG_VOL
ADDLONG_PLACE
ADDSHORT_PRICE
ADDSHORT_VOL
ADDSHORT_PLACE
LOWERLONG_PRICE
LOWERLONG_VOL
LOWERLONG_PLACE
LOWERSHORT_PRICE
LOWERSHORT_VOL
LOWERSHORT_PLACE
③头寸管理函数:
LONG_AVPRICE
SHORT_AVPRICE
T_COMMAND
④信号执行函数:
SETOTHERPRICE
2、删除函数
①运行优化函数:
CHECKSIG
CHECKSIG_MIN
CLOSEKLINE
MULTSIG
MULTSIG_MIN
②时间函数:
CURRENTDATE
CURRENTTIME
③计算控制函数: AUTOFINANCING
WEEKTRADE
WEEKTRADE1
MONTHTRADE
MONTHTRADE1
QUARTERTRADE
QUARTERTRADE1
YEARTRADE
YEARTRADE1
④信号记录函数:
KLINESIG
LASTSIG
ISLASTSTOP
ISLASTCLOSEOUT
SIGNUM/SIGVOL
ENTRYSIG_PLACE
ENTRYSIG_PRICE
ENTRYSIG_VOL
EXITSIG_PLACE
EXITSIG_PRICE
EXITSIG_VOL
REFSIG_PLACE
REFSIG_PRICE
REFSIG_PRICE1
REFSIG_PRICE2
REFSIG_VOL
BKPRICE1
SKPRICE1
⑤头寸管理函数:
BKPRICEAV1
SKPRICEAV1
T_PLUS
⑥信号执行函数:
SETSIGPRICE
3、修改函数
①T_MAX(TYPE,N) 改为 T_MAX(N)设置模型最大理论持仓为N手。N是变量,参与计算开仓信号的手数
②TRADE_AGAIN(N)只对加减仓指令有效
③BKPRICE、BARSBK、ISLASTBK、BKHIGH等信号记录函数,均为从BK信号开始计算,不统计加仓指令
④模型含有运行优化函数SIGCHECK/SIGCHECK_MIN(MODE,TIME) 时,BKPIRCE取信号当根的收盘价
⑤模型含有运行优化函数SIGCHECK/SIGCHECK_MIN(MODE,TIME) 时BKHIGH\MONEY\MONEYTOT均根据信号当根的收盘价计算或开始统计计算,不再支持从信号下单时刻开始统计计算
四、参数优化机制调整
参数优化是针对策略信号进行的优化,不再考虑写了运行优化函数的影响。
模型含有运行优化函数SIGCHECK/SIGCHECK_MIN(MODE,TIME) 时,参数优化和不写这二个函数结果是一样的
五、典型问题解答
(一)、语法检测不通过,可以从以下方面排查
1、新版模型都是过滤模型,必须写AUTOFILTER;
2、BK/SK/BPK/SPK/BP/SP/BPK/SPK指令不再支持写手数
3、包含有新版不再支持的指令
解决方案:
(1)删除不支持的指令STOP\CLOSEOUT,可使用SP\BP指令替代
(2)如果模型需要加减仓,请根据新机制进行改写
4、如果模型含有以下这些函数,则需要直接删除,或者重新调整模型思路进行改写
(1)时间函数: CURRENTDATE/CURRENTTIME
(2)计算控制函数: AUTOFINANCING/WEEKTRADE/WEEKTRADE1/MONTHTRADE/MONTHTRADE1/QUARTERTRADE/QUARTERTRADE1/YEARTRADE/YEARTRADE1
(3)信号记录函数: KLINESIG//LASTSIG/ISLASTSTOP/ISLASTCLOSEOUT/SIGNUM/SIGVOL/ENTRYSIG_PLACE/ENTRYSIG_PRICE/ENTRYSIG_VOL/EXITSIG_PLACE/EXITSIG_PRICE/EXITSIG_VOL/ REFSIG_PLACE/REFSIG_PRICE/REFSIG_PRICE1/REFSIG_PRICE2/REFSIG_VOL BKPRICE1/SKPRICE1
5、如果模型含有以下函数,修改为对应函数即可
(1)T_MAX,根据函数说明,删除函数的第一个参数即可
(2)BKPRICEAV改为LONG_AVPRICE
(3)SKPRICEAV改为SHORT_AVPRICE
(4)T_PLUS改为T_COMMAND
6、不支持CHECKSIG、CHECKSIG_MIN怎么解决?
删除CHECKSIG、CHECKSIG_MIN函数,使用新函数替代SIGCHECK、SIGCHECK_MIN(MODE,TIME)替代
例如:
sigcheck('A',3)出信号3秒下单,k线走完复核,这个写法用tick逐笔数据计算,计算量大,回测速度慢。
sigcheck_min('A',1)出信号1分钟下单,k线走完复核,这个写法用1分钟数据计算,回测速度适中。
***品种加权合约加载模型,大于15分钟的周期只支持sigcheck_min
7、不支持CLOSEKLINE怎么解决?
删除不支持的函数CLOSEKLINE,使用新函数SIGCHECK、SIGCHECK_MIN(MODE,TIME)替代
例如:
sigcheck('C',3)小节最后一根k线提前3秒下单,这个写法用tick逐笔数据计算,计算量大,回测速度慢。
sigcheck_min('C',1)小节最后一根k线提前1分钟下单,这个写法用1分钟数据计算,回测速度适中。
***品种加权合约加载模型,大于15分钟的周期只支持sigcheck_min
回测时临时注释掉sigcheck、sigcheck_min函数的语句,加载模组运行时恢复,就和老版本的closekline函数的效果一样了。
老版本的closekine之所有回测速度快,是因为这个函数不参与回测计算的,优点是回测速度快,缺点是回测和实盘有效果不一致的情况。
8、Multisig不支持了,怎么解决?
新版不再支持一根k线上多个信号,需要删除不支持的函数MULTSIG/MULTSIG_MIN
***解决方案:
(1)对于多信号的需求,可以在更小周期k线上运行模型,来实现及时开启下一次交易的效果。
(2)对于一个信号及时下单的需求,新版不再支持了。
(二)、模组、盒子因为语法问题无法加载
修改模型后重新打开即可,模组单元会自动继承头寸,根据新模型继续运行
(三)、回测报告结果跟之前不同
如果模型含SIGCHECK/SIGCHECK_MIN,主图回测报告用数据合约收盘价计算,报告增加二列新数据:运行优化收差、最终收益。