簡體   English   中英

TradingView v1 到 v4 iff 語句 Pine 腳本

[英]TradingView v1 to v4 iff statements Pine Script

我正在嘗試將 TradingView 的股票 ATR 停止腳本(內置於 Pine Script v1 中)集成到我自己的 v4 代碼中,這導致以下 iff 語句出現錯誤“輸入'行尾沒有行繼續'的語法錯誤”。

有人可以幫我將這些行翻譯成 v4 兼容的代碼嗎?

注意:正如帖子標題所暗示的那樣,此代碼有效,但僅在 Pine Script v1 中,我正在嘗試將其調整為 v4,我認為這需要 if else 語句而不是 iff 語句。

//@version=1
study(title="ATR Stop", overlay = true)

nATRPeriod = input(5)
nATRMultip = input(2.5)

xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR

xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
                    iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
                        iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))

pos =   iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
            iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 

color = pos == -1 ? red: pos == 1 ? green : blue 

plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

試試這個,我認為你的問題是你放在最后的逗號。 IFF 可以有 2 個可能的結果,您將它們放在第一行本身。 那為什么要加逗號呢?

也使用適當的縮進

xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss)
                   iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss) 
                   iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
    
    pos =   iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
            iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))

PS:如果這不起作用,請嘗試再次編寫代碼,如果可能的話使用if else ,您將能夠正確看到嵌套。 不要忘記縮進

下面是 v4 的代碼。 縮進很重要。

//@version=4
study(title="ATR Stop", overlay = true)

nATRPeriod = input(5)
nATRMultip = input(2.5)

var float   xATRTrailingStop    = na
var int     pos                 = na

xATR                = atr(nATRPeriod)
nLoss               = nATRMultip * xATR

xATRTrailingStop    := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), 
                             max(nz(xATRTrailingStop[1]), close - nLoss), 
                             iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), 
                                 min(nz(xATRTrailingStop[1]), close + nLoss), 
                                 iff(close > nz(xATRTrailingStop[1], 0), 
                                     close - nLoss, 
                                     close + nLoss)))

pos                 := iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 
                         1, 
                         iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), 
                          -1, 
                          nz(pos[1], 0))) 

atrColor            = pos == -1 ? color.red : pos == 1 ? color.green : color.blue 

plot(xATRTrailingStop, "ATR Trailing Stop", atrColor)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM