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 呼叫。