在交易世界里理想与现实之间,隔着一道鸿沟,这道鸿沟的名字就是滑点。
你的策略回测再漂亮,如果不考虑滑点,那也只是理论模型,Pine策略里的slippage
参数,就是把你从理想拉回现实的清醒剂。它专门用来模拟市价单和止损单在真实市场中,因各种因素(如波动、流动性)导致的成交价不利于你的情况。
我们通过strategy()
函数来配置slippage
,它的值以ticks (最小价格变动单位)来计算。比如,设置3个ticks的滑点:
strategy(title="我的策略", slippage=3)
slippage
的默认值是0,也就是不考虑滑点。
一旦你设置了滑点,订单的成交价会变得更差:买入订单会以更高的价格成交;卖出订单会以更低的价格成交。
这个“更差”的成交价,会直接反映在你的回测报告上,通常会让你的盈利下降,亏损增加,但这才是更接近真实的结果。
滑点到底该设多少?这是个没有标准答案但至关重要的问题。一个合理的滑点值,主要取决于两个因素:一,像EURUSD这样的主流货币对,流动性极好,可能设置1-2个ticks就足够了。但如果你交易的是一些冷门货币对或高波动的加密货币,滑点可能需要设置到5、10甚至更高。二,一个缓慢的长线趋势策略,对滑点不那么敏感,但如果你的策略是高频剥头皮或是新闻突破的类型,这类策略天生就要承受巨大的滑点,你必须在回测中设置一个足够大的值,才能得到诚实的结果。
这个参数的设置非常简单,就不做盘中测试了,如果要设置5个点,只需要在straterg()函数
加入slippage=5
既可。
strategy(title="突破策略", overlay=true, slippage=5)
有个细节,slippage
参数只改变成交价格,但不会改变成交在哪根K线上。这看起来很奇怪,不过试想一下,如果为了让成交价落在K线范围内而把成交推迟到下一根K线,那你的交易信号就延迟了,整个策略的逻辑就都乱了。所以TV选择了价格失真(来模拟滑点),而不是时间失真,这是正确的取舍。
总结
你也可以在策略设置窗口的“属性”标签页中手动修改滑点,手动设置会覆盖代码里的值。slippage
是策略回测的过滤器,和手续费一样,是专业回测的必设项,合理设置滑点,能让你的回测结果更诚实、更具参考价值。不要被滑点恶化后的回测结果吓到,一个连基本交易成本都无法覆盖的策略,本就不该进入你的策略备选池。