Pine-Script - 不能在 PLOTSHAPE 上使用 IF,解决方案?

Pine-Script - can't use IF on PLOTSHAPE, solutions?

我试图让我的指标在穿过 RSI 上的高线(例如 80)时显示一个圆圈,但在接下来的 bars/points 80 或更高处不再画圆圈,除非它首先穿过较低的线(例如 30)。然后我希望它在穿过 30 时放置一个圆圈,但不再放置在后续柱上(与 80 基本上相反)。

我正在尝试使用“plotshape”,但如果不能将“plotshape”放在更复杂的 IF statement/function 中,我就无法使用它。但是“plotshape”不能在 IF 语句中使用,所以我完全被卡住了。在 C++ 或类似的语言中很简单,但在 Pine Script 中不是。

这段代码主要用于标记交叉点,但我不知道如何停止它标记后面的柱。

//@version=5
indicator(title='title', shorttitle='RSI', overlay=false)

green  = color.new(color.green,  0)
red    = color.new(color.red,    0)
yellow = color.new(color.yellow, 0)

top_line = input(title='Default bull-line', defval=80.0)
bot_line = input(title='Default bear-line', defval=30.0)

src = input(title='RSI Source', defval=close)
len = input(title='RSI Length', defval=13)
rsi = ta.rsi(src, len)
plot(rsi, color=yellow)

var int A = na
var int B = na

if rsi >= top_line and rsi[1] < top_line
    A := 0

plotshape(rsi >= top_line and rsi[1] < top_line and A == 0, location=location.top,    color=green, style=shape.circle, text='')

if rsi >= top_line and rsi[1] >= top_line
    A := 1

if rsi <= bot_line and rsi[1] > bot_line
    B := 0

plotshape(rsi <= bot_line and rsi[1] > bot_line and B == 0, location=location.bottom, color=red,   style=shape.circle, text='')

if rsi >= bot_line and rsi[1] >= bot_line
    B := 1


plot(top_line, title='bullish', color=green)
plot(bot_line, title='bearish', color=red)

您可以使用 ta.barssince() 函数阻止它在交叉后标记以下柱。

crossoverCondition = ...
crossover = ta.barssince(crossoverCondition) == 1

bgcolor(crossover ? color.green : na)

另外,正如您所说,您不能在 if 语句下使用 plotshape。你必须使用条件颜色。例如:

plot(close, color=close > ta.ema(close, 200) ? color.green : na)

我需要做的就是在代码中添加一个计数器而不是一个标志来完成这项工作。

if rsi >= top_line
    A := A + 2
    B := 0

if rsi <= bot_line
    B := count2 + 2
    A := 0

然后显然对关联的表达式进行了轻微的修改