TradingView Pine Script教學與指標功能進階應用

TradingView Pine Script教學與指標功能進階應用
文章目錄

進階階段的關鍵不是「寫更長的程式」,而是把策略拆成可測試的模組:趨勢判斷、入場觸發、風險控管、倉位 sizing、退場邏輯與監控警報。每個模組都能獨立驗證,最後再組合成可長可久的交易系統。

via @QuantAniki

TradingView Pine Script教學|進階重點地圖

  • 語法與結構:函式、var 狀態、陣列、參數化
  • 多時間框架與資料調度
  • 風險控管與倉位 sizing
  • 警報工程化:動態訊息與多條件管理
  • 回測優化與穩健性驗證

語法與結構升級

把重複邏輯封裝成函式,能大幅降低錯誤率;用 var 保存狀態(例如上次訊號時間、連續虧損次數),可以避開同一根 K 棒多次觸發的問題;將關鍵門檻設為 input,你就能在策略設定面板直接掃參數,建立一套「改一參數→看一效果」的實驗節奏。

  • 函式化:將重複邏輯寫成自訂函式,提升可讀性與可測試性。
  • var:宣告只初始化一次的變數,用於狀態保存(如前一筆訊號、當前持倉狀態)。
  • 陣列/循環:用於收集樣本、計算自訂統計或滑動視窗。
  • input.*:所有可調參數皆以 input 暴露,便於回測與優化。

多時間框架(MTF)思路

「大框架決定方向,小框架決定節奏」是常見的穩健作法。用較高週期(1H/4H/1D)判斷市況偏多或偏空,再在較低週期(5m/15m)等待進場觸發條件。這能有效過濾震盪噪音,但注意不同週期資料的同步問題,以及收盤觸發與盤中觸發的差異。

  • 以低週期進場(如 5m/15m),以高週期濾波(如 1h/4h 趨勢)。
  • 使用高週期指標作方向門檻,低週期觸發進場,降低雜訊。

(示例:用高週期均線濾波 + 低週期觸發)

 //@version=6
 strategy("MTF 濾波 + 低週期觸發", overlay=true)

 // 參數
 ht     = input.timeframe("60", "高週期")
 fast   = input.int(20, "高週期均線")
 shortL = input.int(10, "低週期快均")
 longL  = input.int(30, "低週期慢均")

 // 高週期方向(以收盤序列重取樣)
 // 註:此處示意使用高週期資料的概念。若需更嚴謹的 MTF 取得與同步,請依實際資料提供與語法做調整。
 ht_ma  = ta.sma(close, fast)

 // 低週期觸發
 s = ta.sma(close, shortL)
 l = ta.sma(close, longL)

 longFilter = close > ht_ma
 longTrig   = ta.crossover(s, l)

 if (longFilter and longTrig)
     strategy.entry("L", strategy.long)

風險控管與倉位管理

策略表面再漂亮,沒有風險框架都是空談。以固定風險比(如單筆 1%)倒推出數量,是最簡單也最實用的 sizing 方法;同時把停損與停利寫進腳本,確保每一筆模擬交易都有明確出場。回測時加入滑點與手續費,避免「紙上神績效」。

  • 固定風險百分比:以帳戶淨值 x 風險% / 進場到停損距離,計算張數。
  • 必設停損/停利:透過 strategy.exit() 或條件 strategy.close() 控制。
  • 避免過度參數化:用少量關鍵參數,降低過擬合風險。

(示例:布林通道突破 + 風控)

突破策略容易在盤整期連續虧損,所以用 ATR 設動態停損、拉開停利距離,是常見的改良手法。若仍覺得雜訊多,可以再加一層趨勢濾網(例如價格需在長期均線上方才允許多單突破),讓進場更有品質。

 //@version=6
 strategy("布林突破 + 風控", overlay=true, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.05)

 len  = input.int(20, "長度")
 mult = input.float(2.0, "倍數")
 risk = input.float(0.01, "單筆風險%")  // 每筆 1% 風險

 basis = ta.sma(close, len)
 dev   = ta.stdev(close, len)
 up    = basis + mult * dev
 dn    = basis - mult * dev

 longCond = ta.crossover(close, up)

 // 以 ATR 當動態停損距離
 atrLen = input.int(14, "ATR 週期")
 atr    = ta.atr(atrLen)
 stopPx = close - 1.5 * atr
 takePx = close + 3.0 * atr

 // 以風險%估算部位(此為簡化示意,實務可依合約規格/最小跳動再調整)
 capital = strategy.equity
 riskAmt = capital * risk
 qty     = math.max(riskAmt / math.max(close - stopPx, syminfo.mintick), 0)

 if (longCond)
     strategy.entry("Long", strategy.long, qty=qty)

 strategy.exit("X", "Long", stop=stopPx, limit=takePx)

 // 動態警報
 if (longCond)
     alert("布林上軌突破,多單進場。停損: " + str.tostring(stopPx) + " 停利: " + str.tostring(takePx), alert.freq_once_per_bar_close)

警報工程化

進階使用者會把警報當「資訊管線」:訊息內嵌價格、停損、倉位大小與觸發原因,並使用一致的命名規範,讓下游(手機推播、Discord、Webhook)能夠快速分類與處理。記得多用「收盤觸發」或狀態旗標,避免同一根 K 觸發多次。

  • 指標型:alertcondition() 管理多條件,命名清楚、訊息短而關鍵。
  • 策略型:alert() 內嵌變數(價格、倉位、SL/TP),建立「任何 alert() 函數呼叫」警報。
  • 規劃命名:條件名、訊息前綴一致,利於日後串接自動化或手機推播過濾。

回測優化與穩健性檢查

優化不是把參數往極端調,而是用少量關鍵參數做網格測試,檢查曲線是否平滑、性能是否集中在少數段落、在不同商品/週期是否仍然成立。最後做「樣本外驗證」:例如用前 70% 資料調參、後 30% 驗證;或跨市場驗證,避免只對單一商品有效。

  • 參數掃描:以少量關鍵參數進行網格測試,避免大規模過擬合。
  • 加入滑點與手續費:貼近真實成交。
  • 多市場/多週期:檢查策略是否僅在單一商品有效。
  • 前後分割驗證(Walk-forward 思維):以時間切割做樣本外測試。
  • 觀察指標:最大回撤、利潤因子、交易次數、平均盈虧、期望值、勝率與盈虧比。

常見進階坑位

非標準圖表回測、盤中反覆觸發、忽略極端行情與流動性都是老問題。你可以在腳本裡加「保護條件」:例如只在成交量達標時觸發、只在收盤判定、跳空過大時忽略;這些實務的小保險,往往比再多一個技術指標更有用。

  • 用非標準圖表回測(Heikin Ashi、Renko)導致成績失真。
  • 警報條件寫在每根 bar 反覆觸發,忘記使用「收盤觸發」或狀態條件。
  • 沒有處理極端行情(跳空、快速波動)與流動性不足的情境。

結論

進階階段的關鍵,是把策略結構化(函式化、參數化、狀態管理)、流程化(回測→優化→穩健性檢查→監控警報),並用嚴謹的風險控管讓策略「可長可久」。

先讓策略在少數商品與週期表現穩健,再擴散到更多市場;同時把警報與部位管理資訊工程化,縮短決策時間、降低人為失誤。持續以小幅改進累積優勢,勝過一次性的複雜大改。

延伸閱讀:TradingView 中文教學:功能總覽、版本差異、安裝指南與進階技巧
XQ全球贏家看盤自由度最高,重視量化交易者首選
籌碼K線使用教學與方案比較|專業版破解好用嗎?
TradingView腳本(Pine Script)與指標功能新手指南

有問題?想法?或需要協助?

股神God 團隊隨時準備好回應您的需求,無論是投資疑問、平台操作還是合作洽談,都歡迎您與我們聯繫。

聯絡我們股神God: 台股、美股、ETF、虛擬貨幣、黃金原油投資指南

你可能也喜歡