TradingView v1 到 v4 iff 语句 Pine 脚本
TradingView v1 to v4 iff statements Pine Script
我正在尝试将 TradingView 的股票 ATR 止损脚本(内置于 Pine Script v1)集成到我自己的 v4 代码中,这导致了错误“输入语法错误 'end of line without line continuation' for the iff statements下面。
有人可以帮我将这些行翻译成 v4 兼容代码吗?
注意:正如 post 标题所暗示的那样,此代码仅在 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)
我正在尝试将 TradingView 的股票 ATR 止损脚本(内置于 Pine Script v1)集成到我自己的 v4 代码中,这导致了错误“输入语法错误 'end of line without line continuation' for the iff statements下面。
有人可以帮我将这些行翻译成 v4 兼容代码吗?
注意:正如 post 标题所暗示的那样,此代码仅在 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)