VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 回測與檢驗

TradingView 策略測試器:免費回測與必先檢查的事項

TradingView 免費方案就有策略測試器。相信結果之前,先檢查四件事:測試涵蓋多少 K 棒與交易筆數、訂單在每根 K 棒內如何成交、是否設定了手續費與滑價,以及平均每筆損益是否明顯大於一買一賣(來回)的成本。

作者 · 發佈 · 更新於 · 編輯原則

目錄
  1. TradingView 可以免費回測嗎?
  2. 免費策略測試器一次實際涵蓋多少歷史資料?
  3. 策略測試器如何在 K 棒內成交訂單?
  4. K 棒放大器(bar magnifier)改變了什麼?
  5. 手續費與滑價該怎麼設定?
  6. 策略測試器報表中哪些欄位最重要?
  7. 如何在長期歷史資料上研究圖表想法,再帶回 TradingView?
  8. 常見問題
  9. 參考資料

可以。TradingView 的免費方案就包含策略測試器,所以你可以免費在圖表上執行 Pine Script 策略。在相信結果之前,先檢查四件事:測試了多少 K 棒與交易筆數、訂單在每根 K 棒內如何成交、是否設定了手續費與滑價,以及平均每筆損益是否明顯高於一買一賣(來回)的成本。

TradingView 可以免費回測嗎?

TradingView 可以免費回測,因為策略測試器在免費方案上就能使用。策略測試器是圖表下方的面板,會在該圖表已載入的 K 棒上執行策略腳本,並回報交易、損益與回撤。策略腳本是會下模擬單的 Pine Script 程式,不同於只在圖表上繪圖的指標腳本。

要執行測試,先從你自己的腳本或公開資料庫把策略加到圖表上,再開啟策略測試器面板並打開該策略的設定。設定中有兩個重要的分頁:Inputs 放策略本身的參數;Properties 放初始資金、下單大小、手續費、滑價與成交選項。本指南中的大部分檢查都在 Properties。

免費方案與付費方案執行的模擬邏輯相同。主要差別在於圖表能載入多少歷史資料,以及有哪些額外選項可用。付費方案會增加 Deep Backtesting 之類的選項,可以測試圖表上看得到的 K 棒以外的範圍。TradingView 會不定期調整方案內容,請到它的方案頁面確認目前的限制。

免費策略測試器一次實際涵蓋多少歷史資料?

策略測試器只涵蓋圖表已載入的 K 棒。在較短的 K 棒週期上,可能只有幾週。你的方案決定圖表載入多少根 K 棒,而這些 K 棒涵蓋幾天,則取決於 K 棒週期以及該市場每天交易幾小時。看報表之前先算清楚。

假設範例

假設你的圖表載入 5,000 根 K 棒。該市場每天交易 20 小時,所以每天有 240 根 5 分鐘 K 棒。5,000 ÷ 240 約為 21 個交易日,大約一個月。若改用 60 分鐘 K 棒,同樣的 5,000 根 K 棒涵蓋 250 個交易日,約一年。一個每週交易兩次的策略,在 5 分鐘測試中只會有約 8 筆交易。這個數量遠遠不足以分辨是實力還是運氣。

要確認報表涵蓋的範圍,請看交易明細中第一筆交易的日期,並與今天比較,再數一下已平倉的交易筆數。常見的經驗法則是,至少要有一百筆交易,才值得認真看獲利因子或勝率。參數較多的策略需要更多筆數。如果期間太短,就改用較高的 K 棒週期或更長的歷史資料,或者只把結果當作初步草稿。

策略測試器如何在 K 棒內成交訂單?

沒有 K 棒內資料時,策略測試器只能猜測價格在每根 K 棒內的走勢順序。這個猜測可能讓停損與限價單的結果看起來比實單交易更漂亮。TradingView 的券商模擬器是測試器中負責模擬成交的部分,它只看得到每根 K 棒的開盤、最高、最低與收盤。TradingView 的 Pine Script 文件說明了它的規則:如果最高價離開盤價比最低價更近,就假設價格走勢是開盤 → 最高 → 最低 → 收盤;否則假設為開盤 → 最低 → 最高 → 收盤。

一根假設的 K 棒,開盤 100、最高 102、最低 95、收盤 97:回測引擎假設價格路徑為開、高、低、收,因此 101.5 的停利會先於 96 的停損成交,但實際路徑可能先觸及停損 由假設路徑決定 一根假設 K 棒,兩種出場 102 100 97 95 1 2 停利 101.5 假設路徑 停損 96 實際路徑可能先觸及停損。 因此:改用 K 棒放大器重跑。
當目標價與停損價同時落在一根 K 棒內時,該 K 棒內的假設路徑決定哪一個成交。沒有較小 K 棒週期的資料,就無從得知真實路徑。

當停損與目標價可能在同一根 K 棒內都被觸及時,這一點影響最大。假設路徑決定了這筆交易的結果,但真實路徑可能剛好相反。還有三種成交行為會影響結果:

  • 市價單預設在下一根 K 棒的開盤成交。在 K 棒收盤做出決定的策略,會在下一個開盤成交,這是合理的。而「On bar close」成交選項則改為在訊號 K 棒的收盤價成交。對日內策略來說,那個收盤價是你看到之後幾乎不可能拿到的價格。
  • 停損單與限價單以各自的價格成交,除非 K 棒開盤就已跳過該價位。在快速行情中,實單的停損常常成交得更差。
  • 限價單在價格觸及時就成交。「Verify price for limit orders」設定會要求價格越過你的限價一定的跳動點數後,才算成交。實單交易中,價格只是碰到並不代表你的單子成交了。

K 棒放大器(bar magnifier)改變了什麼?

K 棒放大器用較小 K 棒週期的資料取代每根 K 棒內猜測的路徑,讓停損與目標價的成交依實際發生的順序進行。在 Properties 中,「Fill orders」選項包括「Using bar magnifier」、「On bar close」與「Using standard OHLC」。開啟放大器後,一根小時 K 棒會以其內部更小的 K 棒來檢查,測試器就能知道是停損還是目標價先被觸及。是否可用取決於你的方案。

用一個簡單的測試就能看出你的策略有多依賴假設路徑:用標準 OHLC 跑一次,再用 K 棒放大器跑一次,然後比較淨損益與交易筆數。差距很大,代表有許多交易在同一根 K 棒內同時觸及停損與目標價,這些結果是建立在假設上。停損與停利都離進場很近的策略受影響最大。

還有兩項檢查也有幫助:

  • 檢查是否重繪。重繪是指腳本在過去的 K 棒上顯示了即時交易時不會出現的訊號。這常發生在使用較高 K 棒週期的資料,或每個價格跳動點都會更新的計算上。讓策略在即時圖表上跑幾個交易時段,再檢查訊號是否停留在最初出現的位置。
  • 檢查單筆交易。打開交易明細,對照圖表與規則,查看幾筆進場。

手續費與滑價該怎麼設定?

第一次執行前就要設定手續費與滑價,因為兩者預設都是零,而零成本對交易頻繁的策略有利。在 Properties 中,手續費可以設為成交金額的百分比、每口的現金金額,或每張訂單的現金金額。滑價以每次成交的跳動點數設定。期貨請使用每口的現金金額,輸入你的期貨商手續費加上交易所與結算費用,以單邊計算。測試器會在進場時收一次,出場時再收一次。

要把跳動點換算成金額,請查你所交易合約的每跳動點價值。期貨合約計算器(跳動點大小、每跳動點價值與交易損益)可以顯示每口的數值。交易所可能調整合約規格,請到交易所的合約頁面確認。然後把成本與報表中的平均每筆損益比較。

假設範例

一份沒有設定成本的報表顯示 300 筆交易,平均每筆損益為 $40。一個跳動點價值 $12.50。手續費與規費每一買一賣(來回)$4,滑價設為每次成交一個跳動點,也就是每一買一賣(來回)$25。一買一賣(來回)的成本是 $29,所以平均每筆損益降到 $11。如果實單的滑價其實是每次成交兩個跳動點,平均每筆損益就會變成 −$14。

策略測試器報表中哪些欄位最重要?

看報表時,先看交易筆數與平均每筆損益,而不是淨損益。淨損益取決於測試跑了多久,以及交易了多少口。平均每筆損益與回撤,更能告訴你優勢在扣除成本後是否還在。

欄位它告訴你什麼要檢查什麼
已平倉交易總數報表包含多少證據交易筆數是否足以讓結果有意義;見上方關於歷史資料的段落
平均每筆損益扣除你設定的成本後,每筆交易的淨結果明顯大於一買一賣(來回)的成本
獲利因子總獲利除以總虧損要與交易筆數一起看;少數幾筆交易算出的高數值意義不大
最大回撤從權益高點往下的最大跌幅以你實際的部位大小,是否承受得了
獲利百分比與平均獲利對平均虧損的比率交易多常獲利,以及獲利相對於虧損有多大兩者並用來算出每筆交易的期望值,並確認與平均每筆損益一致
最大單筆虧損最差的單筆交易是否有一筆交易抹去了數週的獲利
已付手續費收取的總成本不應為零;與總獲利比較

還有一項檢查與你自己的流程有關。每次你更改一個輸入值再重跑測試,就是在多個變體中做選擇。你試的變體越多,表現最好的那個就越可能只是碰巧看起來漂亮(Bailey et al., 2014)。把你試過的組合數量寫下來,然後用它在你沒有調整過的期間的表現,來評斷最好的那個。

如何在長期歷史資料上研究圖表想法,再帶回 TradingView?

一個好用的循環是:在長期歷史資料上研究與檢驗,再把完成的策略帶回 TradingView 做圖表檢查與警報。圖表測試回答的是「這些規則在這些 K 棒上做了什麼?」研究流程還會問:這些規則在沒有調整過的資料上是否仍然成立,成本與設定改變後是否依然成立。

四步驟循環:在 TradingView 圖表上看到的想法,以含交易成本的多年資料進行研究,用推進分析檢驗,匯出為 Pine Script v6,並以相同設定在圖表上確認,然後以下一個想法重新開始循環 從圖表到研究,再回到圖表 每個新想法都走一遍 1 · 圖表想法 在 TradingView 上 2 · 研究 多年資料,含成本 3 · 檢驗 推進分析 4 · 匯出 成 Pine Script v6
研究循環:想法從圖表開始,在長期歷史資料上研究與檢驗,再以匯出的程式碼回到圖表。
  1. 把想法寫成規則。寫下進場、出場、停損,以及你想測試的參數範圍。不要直接鎖定在圖表上看起來最好的那一組設定。
  2. 在含成本的長期歷史資料上研究。使用你自己多年的歷史 K 棒資料。每次執行都要納入手續費、滑價與下一根 K 棒成交。
  3. 檢驗。使用推進分析等樣本外(OOS)測試。推進分析是一種測試:在一段期間調整規則,再到它從未見過的下一段期間檢查,並在整段歷史上重複這個過程。同時也要觀察結果在不同設定之間如何變化。
  4. 匯出並檢查。在 AlphaPrime(Valynox)中,把策略匯出為 Pine Script v6;步驟請見如何將 AlphaPrime 策略匯出到 TradingView。然後把它加到 TradingView 圖表上。
  5. 對齊設定。在 Properties 中使用相同的下單大小、手續費、滑價與成交選項,並在圖表上使用相同的交易時段。
  6. 在兩邊測試都涵蓋的期間比較交易。抽查一些進場與出場。小差異通常來自資料來源、交易時段設定,或轉倉的處理方式。在實單交易這個策略之前,先找出原因。

在 AlphaPrime 中,第 1 步對應策略生成,第 2 步對應含手續費、滑價與下一根 K 棒成交的回測,第 3 步對應含推進分析與自訂門檻的策略檢驗。第 4 步使用平台匯出到支援的交易平台。

如果你使用 AlphaPrime,這代表:把繁重的研究與檢驗放在 AlphaPrime 裡,用含成本的長期歷史資料來做。然後把策略匯出到 TradingView,用策略測試器以相同設定在圖表上檢查成交、交易時段與警報。

常見問題

TradingView 可以免費回測嗎?

可以。策略測試器在 TradingView 的免費方案上就能使用,你可以在圖表上執行任何策略腳本並查看它的報表。測試只涵蓋圖表載入的 K 棒,而你的方案決定這個數量。在較短的 K 棒週期上,這可能只有幾週的資料。

TradingView 策略測試器預設會包含手續費嗎?

不會。手續費與滑價預設都是零。請在第一次執行前,到該策略的 Properties 中設定。期貨請以每口的現金金額設定手續費,並以每次成交的跳動點數輸入滑價。

TradingView 的 K 棒放大器是什麼?

K 棒放大器是一個成交選項,它使用每根圖表 K 棒內較小 K 棒週期的資料,來判斷停損與限價單被觸及的順序。沒有它時,測試器會根據 K 棒的開盤、最高、最低與收盤假設一條價格路徑。開啟與不開啟各跑一次測試,就能看出結果有多依賴這個假設。

為什麼我的 TradingView 回測和實單交易不一樣?

常見原因包括成本為零、限價單只要價格碰到就成交、K 棒內的假設價格路徑,以及訊號重繪。請設定符合實際的手續費與滑價,並開啟「Verify price for limit orders」。然後讓策略即時跑幾個交易時段,看它的訊號是否停留在原位。

策略測試器報表需要多少筆交易?

沒有確切的數字。常見的經驗法則是至少一百筆已平倉交易,參數很多的策略則需要更多。只有幾十筆交易時,光是幾筆幸運或不幸的交易,就能讓獲利因子與勝率大幅改變。

參考資料

  • Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.

AlphaPrime 在這裡能幫上什麼

AlphaPrime 的策略檢驗會以推進分析與自訂門檻,在長期歷史資料上測試策略。平台匯出會把完成的策略原始碼送到支援的平台,包括以 Pine Script v6 匯出到 TradingView。

看方案與價格