Pine script 在每一个像之字形的移动平均线交叉中获得最高点和最低点

Pine script 在每一个像之字形的移动平均线交叉中获得最高点和最低点,pine-script,Pine Script,我试图编写一个指标,绘制每个移动平均线交叉点之间的最高点和最低点。就像一个之字形指示器 例如,如果快速MA从下方穿过慢速MA,则指示器应仅寻找最高峰值,且两个交叉点之间应仅存在一个值。与上面的交叉相同,指示器应仅绘制自上次交叉以来最低的一个值 我不熟悉Pine脚本,但对一般的编码并不陌生。我发现用Pine脚本编写最简单的代码很有挑战性。我正在学习如何用这种语言编写代码 请帮助指导我如何找到正确答案。多谢各位 //@version=4 study(title="MA Cross", overlay

我试图编写一个指标,绘制每个移动平均线交叉点之间的最高点和最低点。就像一个之字形指示器

例如,如果快速MA从下方穿过慢速MA,则指示器应仅寻找最高峰值,且两个交叉点之间应仅存在一个值。与上面的交叉相同,指示器应仅绘制自上次交叉以来最低的一个值

我不熟悉Pine脚本,但对一般的编码并不陌生。我发现用Pine脚本编写最简单的代码很有挑战性。我正在学习如何用这种语言编写代码

请帮助指导我如何找到正确答案。多谢各位

//@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

HH = 0.0
HH := Highest(high, barssince(cross(MA1, MA2)))

LL = 0.0
LL := Lowest(low, barssince(cross(MA1, MA2)))

HighLow = 0.0

if(MA1 > MA2)
    HighLow := HH
else
    if(MA1 < MA2)
        HighLow := LL
    else
        HighLow := na


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

/@version=4
研究(title=“MA交叉”,叠加=true,最大钢筋数=3000)
MA1=sma(闭合,20)
MA2=sma(闭合,100)
最高(src,len)=>
最大值=高
对于i=1到len
如果src[i]>max
最大值:=src[i]
最大值
最低(src,len)=>
min=src[0]
对于i=1到len
如果src[i]MA2)
高低:=HH
其他的
if(MA1
我不是100%确定,但问题似乎与以下事实有关:
barssince()
返回
series[integer]
并且当您在
中为
条件使用它时,会导致问题

因此,您需要实现自己的
barssince()
。我用了一个简单的计数器

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

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

var cntA1LessThanA2 = 0
HighestCross = 0.0

MovingAverage_Long  = crossover(MA1, MA2) 

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

if (MA1 > MA2)
    cntA1LessThanA2 := cntA1LessThanA2 + 1
else
    cntA1LessThanA2 := 0

if (MA1 > MA2)
    HighestCross := Highest(high, cntA1LessThanA2)

else
    HighestCross := na

plot(series=barssince(MA1<MA2), title="barssince", color=color.green, linewidth=3)
plot(series=cntA1LessThanA2, title="cntA1LessThanA2", color=color.red, linewidth=3)
请注意,如果MA>=M1,则指示器将没有有效的输出
,因为在这种情况下,您将
na
指向
最高交叉点。但我想你已经知道了

if (MA1 > MA2)
    HighestCross := Highest(high, cntA1LessThanA2)

else
    HighestCross := na

plot(HighestCross, color = color.red, linewidth = 3)

我相信你可以从这里接受。

所以。你有什么问题?那代码没有按预期工作。我需要在两个移动平均线交叉点之间的最高点和最低点绘制线。问题是在两个十字架之间的每根蜡烛的高度上都画出了线。两次交叉之间应该只有一个点(最高点)和下两次交叉之间的一个点(最低点)。就像一个之字形指示器。谢谢巴里斯的回答。函数确实会导致指示器出现问题。我测试了您编写的代码并试图使其正常工作,但没有给出正确的答案。下面代码的唯一问题是指示器需要将na分配给所有非最高值的值<代码>/@version=4研究(title=“MA Cross”,overlay=true,max\u bars\u back=3000)MA1=sma(close,20)MA2=sma(close,100)最高(src,len)=>i=1至len的最大值,如果src[i]>max max:=src[i]max o=0.0 o:=最高(high,barssince(Cross(MA1,MA2)))绘图(系列=o,title=“最高值”,color=color.green,linewidth=3)
Hi@thetradder,编辑您的问题并将这段代码放在那里,或者提出新问题。从注释中读取代码片段是很困难的。如果你认为你现在的问题与原来的问题无关,我建议你问一个新问题。通常我们这里有“每篇文章一个问题”的规定。谢谢巴里斯。我会用我能想到的最好的代码编辑我的帖子。这实际上非常接近预期的结果。我能在@Baris Yakut的新帖子中问同样的问题吗?
if (MA1 > MA2)
    HighestCross := Highest(high, cntA1LessThanA2)

else
    HighestCross := na

plot(HighestCross, color = color.red, linewidth = 3)