Loading ...

一个诡异的回测问题,请教,求指点!

Author: wildfire, Created: 2020-09-20 17:24:10, Updated:

1.OKex的BTC期货策略,使用了两个周期的数据1D和1H; 2.回测K线周期选择1D,底层K线周期选择1H,回测2018.1-2020.9回测结果很好; 如果K线周期选择1D,底层K线周期选择15M或者5M,结果就不会很理想,

不知哪里出了问题,求指点?

是数据的问题,还是代码的问题,还是自己的回测参数设置的有问题?


More

小草 底层K线周期有影响,看社区置顶初级教程关于回测的说明

小小梦 是这样的,线上的回测系统最开始要获取数据,然而代码中获取K线的参数是多少是不确定的,所以回测系统设置上要指定K线周期、底层K线周期。用于开始请求数据,并且多周期数据的支持,并不是每个周期的数据都载入到回测系统中一份,为了性能,只载入一个周期的数据,大周期的数据用小周期合成,所以K线周期、底层K线周期设置不同,获取的K线BAR数量有变动,就是这个原因。

wildfire 从这个问题来看,回测引擎好像也可以改进一下:如果采用这种获取K线的方式var records_D1 = _C(exchange.GetRecords,60*60*24),就没有必要再选择回测周期了,只需要选好底层周期就好。(现在的情况是,选了回测周期,K线就会按回测周期提供,当自由设定的K线周期和回测选择的K线周期不一致的时候,就容易出错,而这种错误很难被发现)

小小梦 是的,K线数量是会有影响。

wildfire 问题找到了! 底层K线周期相同,回测周期选择1D和1H的区别在于: 如果选1D,则计算1D和1H的指标时,数据量都是够的;如果选择1H,则计算1D的指标时,需要累计足够的K线数量

小小梦 确定底层K线周期是不是一样, 你设置默认周期的时候,底层K线周期会自动变动。

wildfire 我的策略确实是基于K线计算指标,日线和小时线是用下面两个方法获取的: 日线 var records_D1 = _C(exchange.GetRecords,60*60*24); 小时线 var records_H1 = _C(exchange.GetRecords,60*60); 这样在回测时底层周期都选择5M,回测周期分别选1D和1H,回测结果却不一样,感觉应该一样才对,因为回测周期的选择对我最终数据的选取没有影响啊

小小梦 你的策略如果基于K线算指标, 根据指标发信号, 你用的K线周期不一样,肯定发出的信号就不一样,交易结果也就不一样。 底层K线周期影响tick数据(回测时的实时价格),如果你用的底层K线周期太大,tick生成出来的数据就粒度大(粗糙,但是回测速度快,所以用多大底层K线周期看自己需求选择)也一定程度影响回测结果。

wildfire 底层周期都选5M, 回测周期分别选1D和1H,测出来的结果也不一样,这个可能是什么问题呢?

小草 再看看回测原理,底层周期越小越精确

wildfire 看了回测说明,没看明白,能具体说说问题可能出现在哪里吗?