Pine script 仅绘制最后2个连接的回转高/低(重新绘制指示器)

Pine script 仅绘制最后2个连接的回转高/低(重新绘制指示器),pine-script,Pine Script,我对一个指标进行了编码,每当出现移动平均线交叉时,它都会绘制出最高点和最低点 下面的代码工作得很好,但有一个问题,那就是保持在十字架后打破的先前高点 我希望这些线只能从一个最低点和一个最高高点连接起来,因为交叉点就像一个之字形指示器 下图更好地解释了绿线是指示器绘制的。黑线是它应该绘制的 有没有解决这个问题的办法?多谢各位 //@version=4 study(title="MA Cross", overlay=true, max_bars_back=3000) MA1 = sma(clos

我对一个指标进行了编码,每当出现移动平均线交叉时,它都会绘制出最高点和最低点

下面的代码工作得很好,但有一个问题,那就是保持在十字架后打破的先前高点

我希望这些线只能从一个最低点和一个最高高点连接起来,因为交叉点就像一个之字形指示器

下图更好地解释了绿线是指示器绘制的。黑线是它应该绘制的

有没有解决这个问题的办法?多谢各位


//@version=4
study(title="MA Cross", overlay=true, max_bars_back=3000)

MA1 = sma(close, 20)
MA2 = sma(close, 100)

Highest(src, len) =>
    max = high
    for i = 1 to len
        if src[i] > max
            max := src[i]
    max

Lowest(src, len) =>
    min = src[0]
    for i = 1 to len
        if src[i] < min
            min := src[i]
    min


trend = 0
trend := na(trend[1]) ? 1 : trend[1]

LL = 0.0
HH = 0.0

HH := Highest(high, barssince(cross(MA1, MA2)))
LL := Lowest(low, barssince(cross(MA1, MA2)))

HighLow = 0.0

recent = 0

HL = 0.0

if(MA1 > MA2)

    recent := 1

    for i = 1 to 200
        if(MA1[i] < MA2[i])
            break

        if(high < high[i])
            recent := -1
            break

    HL := na
    if(recent < 0)
        HighLow := na

    else        
        HighLow := high
        HL := high


else
    recent := 1
    HL := na
    for i = 1 to 200
        if(MA1[i] > MA2[i])
            break

        if(low > low[i])
            recent := -1
            break

    if(recent < 0)
        HighLow := na

    else        
        HighLow := low
        HL := low


plot(series= HighLow, color = color.green, linewidth=3)
plot(series=MA1, color = color.aqua, linewidth=1)
plot(series=MA2, color = color.orange, linewidth=1)


正如您所说,这不会在所有数据集上绘制线,因为它使用line.new。尽管如此,在可能有用的情况下:

//@version=4
study(title="MA Cross", overlay=true, max_bars_back=3000)

MA1 = sma(close, 20)
MA2 = sma(close, 100)

// Highest/lowest hi/lo during up/dn trend.
var hi = 0.
var lo = 10e20
// Bar index of highest/lowest hi/lo.
var hiBar = 0
var loBar = 0
// Crosses.
crossUp = crossover(MA1, MA2)
crossDn = crossunder(MA1, MA2)
upTrend = MA1 > MA2

// Draw line in past when a cross occurs.
if crossUp or crossDn
    line.new(bar_index[bar_index - hiBar], high[bar_index - hiBar], bar_index[bar_index - loBar], low[bar_index - loBar], xloc.bar_index, extend.none, color.black)

// Reset hi/lo and bar index on crosses.
if crossUp
    hi := high
    hiBar := bar_index
else
    if crossDn
        lo := low
        loBar := bar_index

// Update higher/lower hi/lo during trend.
if upTrend and high > hi
    hi := high
    hiBar := bar_index
else
    if not upTrend and low < lo
        lo := low
        loBar := bar_index

plot(series=MA1, color = color.aqua, linewidth=1)
plot(series=MA2, color = color.orange, linewidth=1)

// Debugging.        
// plot(hi, "High", color.green, 1, plot.style_circles)
// plot(lo, "Low", color.red, 1, plot.style_circles)
// plotchar(bar_index, "bar_index", "", location.top)
// plotchar(hiBar, "hiBar", "", location.top, color = color.green)
// plotchar(loBar, "loBar", "", location.top, color = color.red)
// bgcolor(upTrend ? color.green : color.red)

它基于之字形指示器和之字形重绘的工作方式,所以为什么不尝试创建一个谐波模式指示器而不是使用之字形呢?因为每个MA交叉点之间的最高点和最低点是我的目标。我试图让指示器绘制交叉点之间的线,而不保留先前的破高点/低点。忘记Ma交叉点,这不是使用线输入交易的最佳方式,但我不能保证无需重新绘制的解决方案。看一看。谢谢Baris,pine脚本中的线条功能将非常有效。我发现线条的唯一问题是图表不能处理图表上超过50-55条的线条。