当模型编写好后,需要先对模型进行效果测试,检验模型在历史k线上的运行效果。如果测试的数据不够多,会因为样本数据太少涵盖的行情不全面导致测试结果太片面,这样的测试结果也就失去了参考的价值。因此,历史数据的多少从一定程度上决定了模型的测试深度,也反映出测试平台价值的高低。
WT8提供海量历史数据,能够灵活选择测试起止时间,提供深度的回测分析,让模型效果测试具有真正的实际参考意义。
1、案例:国内合约提供从开市至今的全部历史数据
检验趋势模型的效果,通常需要选择连续且全面的历史数据作为测试样本,如果测试的数据不够多,无法包含市场各个阶段的行情变动,模型效果的真实性就会大打折扣。WT8提供合约从上市以来的所有数据,可以多维度剖析模型。如下图,是以股指加权合约上市至今的全部数据进行的效果测试。
2、申请海量历史数据的操作方法
如下图所示,是如何在主图点击鼠标右键来申请合约数据:
3、品种加权、主力连续回测模型,哪个更接近实战的准确性?
如果你要对模型做长期数据验证,那就需要使用品种加权、品种主连这类数据了。
品种加权、品种主连是不同的数据,具有不同的特点,有的模型适合用品种加权做回测,有的模型适合用品种主连做回测。
(一)、品种加权
品种加权数据,由各个月份合约的价格做加权平均形成,月份合约的持仓量越大,占的权重就越大,品种加权基本上代表主力月份合约的走势。因为实际交易中各个合约的调仓是逐步进行的,所以品种加权的k线图趋势的连续性较好,没有跳空情况。
品种加权数据适合用来回测长线模型,因为品种加权本身并不是交易合约,所有模型中需要写入trade_other('auto')来指定交易主力合约,主力合约切换月份时支持自动移仓。
长线模型不能包含checksig这类运行优化函数的。运行优化函数具体有哪些,参见 “插入函数” 里的函数分类列表。
建议用SETSIGPRICE函数来控制委托价格,信号价和委托价的价差,是支持纳入回测报告的,提高回测报告的准确性。
也可以使用closekline函数,在模型运行过程中收盘前几秒内下单。但是这个有瑕疵的,因为最后几秒钟内条件满足情况可能发生改变。
***因为品种加权是各个月份的平均价格,本质上是对价格走势做了钝化处理,一些细小的波动反应不出来的,所以不适合做短线交易使用,不适合用来回测短线模型。
(二)、品种主连
主连k线图数据,由各个月份合约的数据拼接形成。把每一个月份合约主力期间以前的k线图砍掉,再把主力期间以后的k线数据砍掉,剩下主力期间的部分k线图,然后按照时间顺序拼接在一起,形成品种主连数据,主连k线数据全局性好,便于看盘了解品种的长期k线价格。
但是这种掐头去尾的处理机制破坏了k线趋势的连续性和完整性,造成主力月份切换时有很大的价格跳空,造成了趋势的失真,尤其是新旧主力合约的走势不一致的情况失真更加严重,不适合直接用于策略回测计算的。
为了给量化投资者提供一个更加真实、客观的回测结果,文华财经开创了主连链回测。
(三)、主连链回测
主连链回测,不是使用你看到的品种主连k线图的数据计算信号的,而是采用主连包含的各个具体月份合约自挂牌以来的全部k线数据计算信号,规避品种主连k线数据换月跳空对量化计算准确性的影响。
调用方法:模型不要写入TRADE_OTHER('AUTO')语句,把模型直接加载到品种主连上,系统会自动调用主连链回测。
1、适用场景
针对多个年度的主力月份合约进行连续交易的模型回测计算,用长期的历史数据验证策略的有效性。
主力换月时,回测计算的处理机制如下:
旧主力合约,清仓;
新主力合约,延续使用旧主力清仓后的资金,但是重新计算信号。
注:
主连链回测只能用于分钟、小时、日线周期
主连链回测不支持运行优化函数
主连链回测不支持外盘合约
2、收盘价模型
右键菜单 -》回测报告-》月份合约线图,可以查看模型在月份合约k线图上的具体表现,原型指标线、变量数值等。
3、模型带有CHECKSIG等运行优化函数
右键菜单 -》回测报告,进行月份合约回测,可以对主连链包含的各个月份合约分别进行回测,也支持合并回测报告。
相关常见问题解答
1、信号计算起始时间是什么意思?
答:量化交易回测有两个时间,一个是数据起始时间,一个是信号计算起始时间。
以沪铜2201合约为例,该合约的数据起始时间就是合约的挂牌时间是2021年1月18日,在挂牌初期交易不活跃,交易量很少,缺少流动性,你并不会去交易这个合约。随着时间的推移,到2021年11月份以后,距离交割日时间越来越短了,沪铜2101合约交易活跃起来,成交量逐渐增大,2021年11月1日你决定开始交易这个合约,那么信号计算起始时间就应该设置为2021年11月1日。模型自11月1日以后开始计算信号,此后如果满足信号条件,就会发出交易信号。
2、选择什么k线周期交易?
答:量化交易选择哪一个k线周期?这个问题没有标准答案。越小的周期,交易机会越多,但是随之而来的是更多的手续成本和滑点损失;越大的周期,趋势越明显,单笔盈利空间越大,但是相应的需要承担的回撤风险也越大。
一个模型更适合在哪个周期上运行,可以通过历史数据回测来判断,这也是量化交易的魅力所在。实际研究过程中,可以将模型逐一放到不同的k线周期上进行回测,通过对比模型回测报告中的收益、回撤、胜率、盈亏比、滑点损失等数据,最终找到表现最好的周期,这就是这个模型最适合的周期。
3、TRADE_OTHER和逐笔计算的运行优化函数不能一起使用,怎么解决?
答:如果要做自动交易自动换月,可以删除CHECKSIG、MULTSIG语句,或者改为CHECKSIG_MIN、MULTSIG_MIN都可以的;
4、因为网络断线或其他原因,存在错误的数据,如何将错误数据更正?
答:当您发现K线数据存在错误时,可通过k线图右键->补充历史数据,在弹出界面选择清除当前周期数据,这样错误数据就会被删除,然后再重新补充数据。
5、为什么在【补充数据】中找不到想补充的合约周期。
答:加载列表中所列出的合约周期是基础数据;其他周期的数据由这些基础数据合成,因此,在申请数据的时候只对基础数据做申请。
合成原则:
用tick合成的数据:逐笔回测数据、量能周期、秒周期,自定义秒周期。
用1分钟合成的数据:15min以下的周期,以及自定义分钟周期。
用15分钟合成的周期:15min,30min,1h,2h,3h,4h,自定义小时周期。
用日线合成的周期: 日线及以上周期
6、哪些周期需要补充数据?
答:理论上来说,做回测都需要提前补充数据。但考虑到逐笔TICK类数据量大,手动补充时间长,为提高操作效率,模型中用到MULTSIG/CHECKSIG 逐笔TICK函数时,回测的时候软件会在后台自动补充数据,不需要手动补充。除上面2个函数外,其他的模型都需要提前补充好回测需要的基础数据。
7、滑点是什么意思,设置多少合适?
答:滑点是指委托时的最新价与成交价格之间的差值。回测参数中设置滑点,目的是为了让回测效果最大限度拟合实盘的成交情况,具体设置多大的滑点要根据交易的合约和委托方式调整。 比如,以对手价方式发委托,可以设置1-2个滑点,使回测结果尽可能的贴合品种行情特征,更接近实盘效果。
8、品种加权回测模型,写了TRADE_OTHER指定合约,也补充了历史数据,为什么信号计算起始时间无法指定?
答:模型回测,不仅需要品种加权的数据,也需要品种主连的数据的(做信号盈亏计算使用)。
你还需要补充品种主连的k线图数据,才可以指定更早的信号计算起始时间。
9、为什么无法补充全部的数据,在补充数据中只能看到最近几个月?
答:这种情况是因为回测合约选择的是具体月份合约,所以只能补充到自合约上市以来的数据。如果需要使用连续的历史数据进行回测,建议使用加权合约。
如:沪铜1805是2017年5月上市交易,所以只能申请到2017年5月上市以来的数据,而加权合约则支持1996年品种上市以来全部数据。
10.如何查看RB1505等已交割合约的数据?
答:在K线图界面右键->选择历史年度合约,可以查看到历史年度合约的具体行情数据。
11、模型回测为什么不包括最新一天盘中的数据?
答:最新一天盘中的数据是实时变化的,如果回测包含了最新的数据,那么每次回测的结果都是不同的,不利于对回测报告进行对比和研究。
对于量化研究来说,晚一天并不会产生很大影响。每日收盘以后,就可以对当天的数据进行回测了。