Pine Script 常見問題:回測與警示
閱讀約4分鐘 · 更新於
這是一份白話的常見問題,回答在TradingView上幾乎讓每個人都踩雷的兩個 Pine 問題:為什麼策略的回測看起來比實盤感受更好,以及為什麼警示有時在與你預期不同的時刻或價格觸發。兩者出自同一個根本原因,也就是做決定時實際可得的資料,與 K 線收盤後你眼睛所見的資料之間的落差。
指標、策略和警示有什麼差別?
指標(indicator())只負責繪圖和計算,它繪製線條、顏色和標籤。策略(strategy())模擬委託單:它呼叫strategy.entry/strategy.exit,對歷史 K 線成交,並產生包含淨利、回撤和勝率的策略測試器報告。警示是TradingView在條件成立時觸發的獨立通知層;它本身不會交易任何東西。當人們把回測當成承諾、或期待警示就是成交時,混淆就開始了,它們是三種不同的工作。想深入了解這個區分,請看指標與策略的指南。
為什麼我的回測看起來很棒,實盤結果卻不一樣?
有四件事讓回測相對於現實被誇大,而且全都可以修正:
- 收盤與盤中的假設。預設情況下,策略測試器在 K 線收盤時評估邏輯。如果你的條件以只有在 K 線完成後才知道的方式使用當前 K 線的最高價、最低價或
收盤價,歷史成交用到的是實盤交易不可能擁有的資訊。 - 以不切實際的價格預設成交。測試器中的市價單以下一根 K 線的開盤價成交;在快速的開盤,那個價格在實盤可能差了好幾跳或好幾點。
- 沒有模擬手續費或滑價。如果你在
strategy()中把commission_value和slippage留在零,每一筆模擬交易都沒有摩擦成本。加入合理的數值,即使是一跳的一小部分滑價,也會讓許多「獲利」的短線系統轉為虧損。(手續費透過commission_type和commission_value設定。) - 樣本太小。十二筆全部成功的交易,樣本太小,不能稱為優勢。在你相信任何曲線之前,請看如何辨識過度配適的交易系統。
實例:一個系統在40筆ES交易中顯示 +US$4200,而成本為零,一旦加入US$2.50的來回手續費,以及每一邊(進場和出場)各一跳的滑價,看起來就大不相同了。ES一跳是0.25點 = US$12.50,所以兩跳是US$25.00;加上US$2.50的手續費,每筆交易就有US$27.50的摩擦成本。40筆交易下來約為US$1100,把表面上的 +US$4200變成大約 +US$3100,如果進場集中在波動大的開盤,真實滑價比單一跳更寬,結果會更差。
什麼是重繪,這代表腳本壞了嗎?
不一定。「重繪」是一個統稱,指腳本在歷史 K 線上顯示的數值,與它即時產生的不同。誠實的測試很簡單:這個決定能不能在同一時刻、用同樣的資訊在實盤做出來?只有在 K 線收盤後才確認的訊號,是在做它該做的事:它等收盤才確認。麻煩來自那些在進行中的K 線上繪製訊號,K 線結束後又移動它的腳本,或是啟用 lookahead 拉取較高時間框架資料的腳本。如果你想要一個可以據以行動的訊號,就用barstate.isconfirmed(K 線收盤)來評估,它只對已完成的 K 線有反應。
為什麼我的警示太晚觸發、價格不同,或觸發了兩次?
- 「每根 K 線收盤一次」與「每根 K 線一次」。設定為在進行中的 K 線上觸發的警示,可能在條件於盤中閃現為真的瞬間觸發,然後 K 線收在別處,看起來就「錯了」。在 K 線收盤時觸發比較晚,但與已確認的策略實際做決定的時刻吻合(策略接著在下一根 K 線開盤時行動)。
- 警示價格是警示觸發那一刻的快照。你的券商以即時市價成交,市價在警示和你的委託單之間的幾毫秒內就會移動。
- 重複觸發通常代表條件在多個跳動中持續成立,而警示被設定為每個跳動都觸發,本來應該是每根 K 線一次。
這與交易計畫的方法有什麼關係?
交易計畫給你固定、預先規劃的價位,繞開了整個「我的訊號有沒有重繪?」的問題。每日價位在開盤前畫在ES、SPY、NQ和QQQ上,是在前一個收盤後計算的,交易時段中不會移動,所以沒有東西可以重繪:每個價位在美東時間9:30之前就已設定,並且固定不動。MyLinedChart只繪製這些價位;它從不模擬委託單,所以不帶有上述任何回測成交的假設。如果已發布的價位與你自己的警示或策略不一致,把它視為資訊,答案常常是等待。相關用語請看交易計畫詞彙表。
相信任何 Pine 結果之前的實用檢查清單
- 在
barstate.isconfirmed上確認邏輯,讓回測和實盤共用同一個決策時刻。 - 在
strategy()中,為你實際交易的商品設定合理的手續費和滑價,包括commission_type、commission_value和slippage。 - 刻意選擇警示頻率,要確認就用 K 線收盤,要避免重複就用每根 K 線一次。
- 要有足夠多的交易筆數,結果才有參考價值。
- 把背景疊加(例如已發布的價位)與執行的決定權分開,圖表提供資訊,決定則由你寫下的規則做出。
延伸閱讀
資料來源
- TradingView Pine Script 文件:策略
- TradingView Pine Script 文件:重繪
- TradingView Pine Script 文件:警示
- CFTC:交易系統詐欺警示
僅供教育用途。不構成投資建議。
僅供教育用途。不構成投資建議。