使用K线放大器更准确地回测

May 30, 2022

Premium账户持有人现在可以通过使用K线放大器(The Bar Magnifier)选项在策略回测中获得更真实的订单执行。该工具使用intrabar检查来更深入地了解K线内的价格变动,从而实现更精确的订单成交。选中后,K线放大器模式将仅使用历史K线的OHLC值替换经纪商模拟器必须对价格变动做出的假设

K线放大器使用的intrabar时间周期随图表的时间周期动态调整。以下表格列出了用于逐渐增高的图表时间周期的intrabar时间周期:

图表时间周期,T 使用的Intrabar时间周期
1S < T < 30S 1S
30S <= T < 5 5S
5 <= T < 30 15S
30 <= T < 60 1
60 <= T < 240 5
240 <= T < D 15
D <= T < W 60
W <= T < 2W 120
T >= 2W D

表 1. 使用的Intrabar时间周期

下面是一个使用止损单而不使用K线放大器选项的策略示例:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = false)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

经纪商模拟器在 #10381 K线上放置止损单,并在满足stop = 157.0条件后立即在下一根K线上执行价格为157.0的订单。经纪商模拟器估计,在K线内部,价格从“收”到“低”,然后到“高”(触发入场),然后到“收”。 几根K线后(当前时间周期为11天),触发了以stop price = 156.0平仓的条件:

启用K线放大器时(参数 use_bar_magnifier = true),退场和入场价格不变; 但是,该仓位的退场发生在入场发生的同一根K线内:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = true)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

如果我们检查同一商品的较低时间周期图(60分钟图表,根据intrabar时间周期表)并找到对应于K线10382的时间周期,我们可以看到在每小时周期上,达到157.0并触发入场,价格跌破156.0,满足stop = 156.0条件:

启用K线放大器后,经纪商模拟器可以在回测期间从较短的时间周期内访问价格变化,使其行为更类似于在同一时间段内对策略进行前向测试时发生的情况。

下面是一个策略示例,它使用较短的时间周期在限价单和止损单上实现更精确的成交:

//@version=5
strategy(
 title                  =   "Magnifier On",
 overlay                =   true, 
 calc_on_order_fills    =   true,
 calc_on_every_tick     =   true,
 precision              =   3, 
 default_qty_type       =   strategy.cash, 
 currency               =   currency.USD, 
 default_qty_value      =   1000, 
 initial_capital        =   1000,
 use_bar_magnifier      =   true)

trailPoints = input.int(150, "Trail Points (in ticks)")
trailOffset = input.int(100, "Trail Offset (in ticks)")
stopSize    = input.int(300, "Stop Offset (in ticks)")

longCondition = bar_index % 25 == 0 and not (strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index)

if (longCondition)
    strategy.entry("Long", strategy.long)

strategy.exit("Exit", loss = stopSize, trail_points = trailPoints, trail_offset = trailOffset)

启用K线放大器选项后,策略结果更接近实时结果。当我们的测试策略启用时,盈利会降低50%,这对策略本身来说是令人沮丧的,但展示了使用较短的时间周期数据对于获得更准确的回测数据的重要性:

可以在策略的“设置/属性”窗口中切换相应的输入来切换K线放大器选项:

关闭该选项后,将使用旧逻辑重新计算策略,向我们显示有关策略行为的不太准确的信息:

要随时了解Pine的新功能,请留意用户手册的发行说明PineCoders帐户还通过其Squawk Box Telegram频道、Twitter帐户和TradingView上的“Pine Script™ Q&A”公共聊天广播更新。

我们希望大家发现这些改进很有用。请继续向我们发送您的反馈。我们为用户打造TradingView,很高兴收到您的来信。


 

还没有关注我们的中文微信公众号?快来扫二维码吧!

Look first Then leap

TradingView专门为您而打造,请确保您充分利用我们出色的功能
开启图表