使用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專門為您打造,請確保您充分利用我們出色的功能
開啟圖表