1、过滤模型的编写
模型的框架结构:
条件A,买开BK;
条件B,多头加仓ADD_LONG(N);
条件C,多头减仓LOWER_LONG(N);
条件D,多头止损,SP;
条件E,卖平,结束本次交易SP;
条件A1,卖开SK;
条件B1,空头加仓ADD_SHORT(N);
条件C1,空头减仓LOWER_SHORT(N);
条件D1,空头止损,BP;
条件E1,买平,结束本次交易BP;
AUTOFILTER;
其中,开仓语句(条件,BK/SK/BPK/SPK)和平仓语句(条件,SP/BP)是模型必须要有的部分,止损、加仓(ADD_LONG/ADD_SHORT)、减仓(LOWER_LONG/LOWER_SHORT),可以根据策略思路和风控规划适当添加,以增强模型的稳定性。
注:
(1)模型必须写AUTOFILTER,过滤信号;
(2)开平仓信号不可以写手数(BK/SK/BP/SP/BPK/SPK);
(3)加减仓指令必须写手数(ADD_LONG/LOWER_LONG/ADD_SHORT/LOWER_SHORT);
(4)开平仓信号优先级高于加减仓指令;
(5)支持指令分组。
2、模型过滤机制:
(1)信号一开一平过滤机制
一次完整交易只会有一个开仓信号,一个平仓信号;
BK/SK/BPK/SPK开仓后不会再出开仓信号,只会出加减仓指令或者以SP/BP/SPK/BPK结束本次交易;
BP/SP平仓后不会再出平仓信号或加减仓指令,只会以BK/SK/BPK/SPK开始下一次完整交易。
(2)加减仓指令过滤机制
在一次完整交易中,同一个信号行的加减仓指令在一轮加减仓中只会出一次;
注:同一行号的加仓(减仓)指令出过一次之后,
只有出现过一次减仓(加仓)指令后,才可再出该行号的加仓(减仓)指令。写入TRADE_AGAIN(N)可以让同一指令行连续出至多N个信号。
没有理论持仓不可以出加减仓。
注:减仓至理论持仓为0后不可以出加仓指令了;
3、信号的下单手数
(1)开仓信号:如果有T_COMMAND函数,下单手数按照T_COMMAND函数写的手数执行,如果没有T_COMMAND函数,下单手数按照加载模组设置的默认开仓手数执行(若模组当前单元可用资金不足,根据可开仓手数执行);
(2)平仓信号:平掉模组当前单元全部理论持仓手数;
(3)加减仓指令:按照指令里写的手数下单(若模组当前单元可用资金不足,根据可开仓手数执行)。
4、模组的加载初始化
运行单元有历史信号:
如果K线接续(闭盘退出和再次打开之间K线数据相同),加载时根据历史信号自动加载模组,模组后续运行根据历史最后信号和理论持仓,计算并执行模型后续发出的信号。
如果K线不接续(盘中或退出和再次打开之间有K线数据),会清除历史信号,继承模组上次退出时的理论持仓。上次退出时理论持仓和单元持仓方向一致会继承单元头寸。如果有资金管理函数继承理论权益。
运行单元没有历史信号:
从设置的信号计算起始时间开始计算、执行信号。
重新初始化运行单元:
如果继承交易记录及头寸,会清除历史信号,但保留历史交易记录,保留实际收益,继承模组上次退出时的理论持仓。上次退出时理论持仓和单元持仓方向一致会继承单元头寸。如果有资金管理函数继承理论权益。
选择不继承交易记录及头寸,不带入持仓,不保留历史交易记录,不保留实际收益,如果有资金管理函数,可手动修改理论起始权益,按指定信号计算起始时间计算历史信号。
5、导入账户持仓
(1)单元理论持仓大于0:导入账户持仓的手数不能大于单元理论持仓。
(2)单元理论持仓等于0:不能导入账户持仓。
6、信号的下单执行规则
(1)开仓信号、加仓指令发出时,不管当前单元中是否有挂单,直接发出委托;
(2)平仓信号、减仓指令发出时:
① 如果之前发出的开仓委托还未执行将不再执行;
② 如果之前发出的开仓委托有挂单(还没有成交或部分成交),先撤掉对应的挂单,然后执行平仓委托(平模组当前单元持仓,如果0手持仓就不发委托);
(3)在系统正在执行信号消失处理的情况下,必须等信号消失处理完,再执行新的信号;
(4)信号消失的处理:
① 对应的信号还未发出委托,则停止执行该信号;
② 对应的信号有挂单,但是还没有成交,撤掉挂单;
③ 对应的开仓信号已经委托并且成交(全部成交或部分成交),则平仓对应手数,恢复0持仓状态;
④ 对应的平仓信号已经委托并且成交(全部成交或部分成交),则新开仓对应手数,恢复以前的持仓状态。