为什么回测和实盘有差异,差异最可能产生的原因有哪些?
一、什么是回测
测试里是数据的预测模型,是一种反向测试,用于估计策略或模型在过去一段时间的表现,需要提供足够的细节模拟过去的条件。
这个条件可以是收盘价的基准。
换句话说,它是一种大数据的方式去评估策略,也就是验证你设定的交易规则是否有效,从各种评价指标和统计学层面上,
需要注意的是,回测结果好不代表百分百挣钱
尤其当你看到回测结果特别好的策略,一定要慎重,需要注意买入和卖出的价格是不是对的,它们的收益是在哪个节点发生变化的,这个节点的数据是不是正确的,你不用每笔都看,但是收益从负变成正的那个节点需要注意下,或者你在最开始处理数据时,需要注意数据是否正确的,不然你的策略再好,也不能赚到钱。
二、数据回撤&实盘交易
我们平时会经常碰到一个问题,为什么数据回撤和实盘交易效果差好多,不管是好还是坏,结果就是差别很大。差异最可能产生的原因有哪些?
2.1 未来函数
今天我就来分享下我自己的体验,实际上你如果真正的去实战一个策略,比如说择时的双均线
或者布林策略
,不管你是手工去开仓平仓,或者是用自动化程序的方式,你都会发现一个问题,这个问题我们称为“未来函数”,为什么这个“未来函数
”会产生差异呢?
举一个例子,假设用布林道策略去买入卖出股票,当价格跌破下轨就买入,当价格涨到上轨就卖出。
在常规情况下,我们用的是日K
的数据,如果我们用日K
的数据会有什么问题,问题在于我们用的是收盘价的数据,那么等它收盘了,我们还买的进吗?肯定是买不进的,这里有2种解决方案:
- 方式1:第二天买入。
- 方式2:用今天分时的价格去替代收盘价
方式1的优势就是简单可理解,第二天买入更方便,它的问题就是T+1
的机制容易错过最佳入场时间,很多的量化平台用的日K
的数据,包括A股的数据只能是T+1
,而不是T+0
,它通常产生买卖的情况都是在第二天,这里第一天的收盘价和第二天的开盘价可能是不一样的,假定这个策略百分之90
是有效的,如果今天收盘前买入,大概率明天是涨的,因为这个策略是百分90有效的,但问题是,因为现在是竞价机制,假如今天收盘是30,明天开盘就飙到33,这就意味这错过了最佳的入场时间。也就是说,你可能的收益变低了。次数多了,亏损的概率就高了。
方式2 我们依然以天为单位跑策略,这时可以用分时数据,比如说用5分钟、10分钟的数据去替代日K的数据,只要今天的价格日收盘价碰到了下轨,就买入,碰到了上轨就卖出,这种方法的问题在于:会让你的代码非常复杂,因为K线当前的价格取得是当天分时的价格,所以对于数据的处理会有一定的要求。
2.2 滑点
滑点是指:一笔交易或挂单交易中,所要求的价格和实际订单执行的成交价格之间的差异。
简单来说就是:理论的成交价格和实际的成交价格不一样。为什么存在这种情况呢?举例来说,我当前按照市价单是1
元,但是当前价格变化很快,结果我刚下单,。也就是1秒或者2秒的时间,它就变成了1.1
元,这时我就有可能按照更高或者更低的价格交易了,那么我就可能损失中间的差价,。
如何解决这个问题,比较常见的方法就是挂限价单,就是按照我指定的价格去买入
,而不是市场现有的价格去买入,挂限价单也会有一个问题,因为行情依然是会变化的,比如说行情始终在浮动。比如说它一直往上涨,1.2
元,就没有回到1元的这个限价,这时就会错失成交的机会,导致无法成交 ,所以,就光是挂这个订单,就有这么多的情况变化,更不用说在我们实际策略交易的过程中,所以大家在实战的过程中要有一个心里准备,所谓的自动化交易并没有你想象的那么简单。我们在实战的交易中,兵来将挡水来土掩。
转载请注明:xuhss » Python量化交易实战-33回测和实盘有差异的原因?