返回《給 CFD 交易者的 TradingView PineScript》
第四部分

用 request.security 做多週期分析

在你的策略裡放入更高週期的脈絡——但前提是你要避開 Pine 警告的那兩個前視 bug。

進階閱讀時間約 12 分鐘初學 → 進階第 14 / 17 堂
在 TradingView 實際跑一次
在任何一張日內圖上畫出日線 200 EMA

lookahead=barmerge.lookahead_off 就是讓那根日線不重繪的關鍵。把它拿掉,看那條線隨著當天形成而位移——那就是那個 bug。

//@version=5
indicator("Lesson 14 - Multi-timeframe", overlay=true)

// Daily 200 EMA, pulled onto whatever timeframe you're viewing.
// lookahead_off = only use data that was already closed. No repainting.
dailyEMA = request.security(syminfo.tickerid, "D", ta.ema(close, 200),
     lookahead=barmerge.lookahead_off)

plot(dailyEMA, "Daily EMA 200", color=color.gray, linewidth=3)

// Shade by which side of the daily trend price is on.
aboveTrend = close > dailyEMA
bgcolor(aboveTrend ? color.new(color.green, 92) : color.new(color.red, 92))

// Mark the crossovers.
plotshape(aboveTrend and not aboveTrend[1], "Crossed above daily", shape.triangleup,
          location.belowbar, color=color.green, size=size.tiny)
plotshape(not aboveTrend and aboveTrend[1], "Crossed below daily", shape.triangledown,
          location.abovebar, color=color.red, size=size.tiny)
如何執行
  1. 1. 在 TradingView 打開任一圖表,點選下方的 Pine Editor
  2. 2. 把編輯器裡的內容全選,用這段程式覆蓋過去,然後按 Save
  3. 3. 點選 Add to chart。如果是策略, 再打開 Strategy Tester 分頁。

request.security 在做什麼

request.security 讓你的腳本從不同的時間週期或商品拉一條序列。基本形式:

dailyClose = request.security(syminfo.tickerid, "D", close)

這在任何一張日內圖上給你日線收盤價的一條序列。

前視 bug #1:重繪

如果你在一張 1H 圖上呼叫 request.security(... , close),你是在拉日線收盤價——但在盤中,那根日線還在形成,所以那個值會隨著新的小時 K 線進來而變。你的 1H 圖會即時重繪。Pine 有內建的防護:

dailyClose = request.security(syminfo.tickerid, "D", close, lookahead=barmerge.lookahead_off)

這樣就安全了——你會拿到前一根日線收盤價,直到目前的日線收盤為止。

前視 bug #2:同根 K 線決策

如果你的策略用日線收盤價去決定下一根 1H K 線要不要進場,確認你讀到的日線收盤價真的已經收了。用 barmerge.lookahead_off,並記得日內策略只能對「在決策那根 K 線之前就已經收盤」的資料採取行動。

tuple 回傳模式

你可以在一個呼叫裡拉多條序列:

[dHigh, dLow, dClose] = request.security(syminfo.tickerid, "D", [high, low, close], lookahead=barmerge.lookahead_off)

常見的 MTF 建法:更高週期趨勢濾網

ema200 = request.security(syminfo.tickerid, "D", ta.ema(close, 200), lookahead=barmerge.lookahead_off)
longSignal = ta.crossover(close, ta.ema(close, 20)) and close > ema200
shortSignal = ta.crossunder(close, ta.ema(close, 20)) and close < ema200

只順著日線趨勢交易。趨勢濾網在多數日內策略上把回撤砍掉大約一半——這套數學在 CTA 文獻裡有充分記載。

效能警告

每一次 request.security 呼叫都會增加執行時間。Pine 的限制很寬鬆,但你可以用每根 K 線數十次呼叫撞到它。如果你的圖開始卡,數一下你的 security 呼叫。

你剛完成了什麼

給 CFD 交易者的 TradingView PineScript》的第 14 / 17 堂課。跑完範例或讀完這段之後, 把它勾起來,然後進下一堂課。