为什么TradingView策略脚本回测更准确?

TradingView中的Pine脚本策略相比与其Pine脚本指标更为复杂,策略根据历史和实时数据模拟交易的执行,以实现交易系统的回溯测试(backtesting, 回测)和前向测试(forwardtesting, 前测)。TV策略包含Pine脚本指标相同的功能,但是同时也提供下单、修改和取消假设订单以及分析结果的能力。

例如:Pine脚本使用strategy()函数进行声明时,它可以访问strategy.*命名空间,在其中可以调用函数和变量来模拟订单并访问基本策略信息。此外,该脚本将在“策略测试器”选项卡中向外部显示信息和模拟结果。

将策略应用于图表的方法和指标是一样的。当然, 这也是用策略实现回测的第一步:只需单击“Pine Editor”选项卡中的“添加到图表”,将脚本应用到图表。策略脚本编译并应用于图表后,它将在主图表窗格上绘制订单标记,并在下面的“策略测试器”选项卡中显示模拟性能结果。

值得一提的是, 这里有一个很大的坑。 因为TradingView支持很多种类型的主图图表, 所以一些人在使用非标准K线图表进行回测的时候常常觉得自己发现了“宝藏”。 注意! 这是一种海市蜃楼, 你看得见却实现不了。这一点TradingView官方曾经做过多次的说明, 甚至当你用特殊图表回测是会有黄色标签提示。 千万不要轻易用特殊图表回测的策略去实盘,除非你觉得手头的资金如粪土一样不重要。默认情况下,应用于非标准图表(Heikin Ashi、Renko、Line Break、Kagi、Point & Figure和Range)的策略结果并不反映实际市场状况。策略脚本将在模拟过程中使用这些图表中的合成价格值,这些值通常与实际市场价格不一致,从而产生不切实际的回测结果。因此,TradingView本身也一而再再而三地强烈建议使用标准图表类型进行回测策略。或者,在 Heikin Ashi 图表上,用户可以通过启用策略属性中的“使用标准 OHLC 执行订单”选项或使用fill_orders_on_standard_ohlc = true调用strategy()函数。当然, 最后这一点也是TradingView今年才作出的改进。

说到TV的策略,不得不提一下其经纪商模拟器, 这个设计是策略脚本能实现回测的基本原理。TradingView 利用经纪商模拟器来模拟交易策略的性能。与现实交易不同,模拟器严格使用可用的图表价格进行订单模拟。因此,模拟只能在K线收盘后进行历史交易,并且只能在新的价格变动上进行实时交易。有关此行为的更多信息,我在前面关于Pine脚本执行机制文章里已经进行了详述。由于模拟器只能使用图表数据,因此它会对K线内部价格变动做出假设。它使用K线的开盘价、最高价和最低价来推断K线内部活动,同时使用以下逻辑计算订单填充:

如果最高价比最低价更接近开盘价,则假定价格在K线上按以下顺序移动:开盘→最高价→最低价→收盘价。

如果最低价比最高价更接近开盘价,则假定价格在K线上按以下顺序移动:开盘→最低价→最高价→收盘价。

经纪商模拟器假设K线内的价格之间不存在差距;在模拟器的“眼睛”中,所有的K线内部价格均可用于订单执行。

由此可以见, 受限于K线内部价格的忽略, 一般的策略脚本回测和真实情况会有较大的差异。 而且这种差异会随着回测K线数量的增加而不断扩大。 TradingView这两年也提出一些改善措施, 保证策略脚本在回测中,可以跨周期地访问小周期来获取K线内部价格变化的精确值。 这是个了不起的功能,也是我在众多回测工具中看到的唯一一个支持这种高级功能的平台。TradingView命名这个功能为:K线放大镜。 但是这个功能只有高级会员Premium的用户,才可以使用。 高级账户用户可以通过strategy()函数中的use_bar_magnifier函数的参数或脚本设置的“属性”选项卡中的“使用K线放大镜”输入来覆盖经纪商模拟器的K线内部的价格假设, 从而使其更接近实际价格。K线放大镜检查比图表更小的时间周期内的数据,以获得有关K线内部价格行为的更精细信息,从而在模拟过程中实现更精确的订单填充。
Trend Analysis

Avoid losing contact!Don't miss out! The first and most important thing to do is to join my Discord chat now! Click here to start your adventure: discord.com/invite/ZTGpQJq 防止失联,请立即行动,加入本猫聊天群: discord.com/invite/ZTGpQJq
更多:

免责声明