![](/img/trans.png)
[英]How to get the highest high and the lowest low of specific timeframe in pinescript
[英]Get Highest high and lowest low in every last Moving Average Cross like ZigZag
我正在尝试编写一个指标来绘制每个移动平均线交叉点之间的最高点和最低点。 就像锯齿形调整浪指标。
例如,如果快速 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)
我不是 100% 肯定,但是,问题似乎与barssince()
返回series[integer]
的事实有关,当你在for
条件中使用它时,它会导致问题。
因此,您需要实现自己的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)
在屏幕截图下方的指标中,我绘制了barssince()
的计数器(红色)和返回值(绿色),以显示计数器按预期工作。
plot(series=barssince(MA1<MA2), title="barssince", color=color.green, linewidth=3)
plot(series=cntA1LessThanA2, title="cntA1LessThanA2", color=color.red, linewidth=3)
请注意, if MA >= M1
,您的指标将没有有效输出if MA >= M1
因为在这种情况下您将na
分配给HighestCross
。 但我想你已经知道了。
if (MA1 > MA2)
HighestCross := Highest(high, cntA1LessThanA2)
else
HighestCross := na
plot(HighestCross, color = color.red, linewidth = 3)
我相信你可以从这里拿走它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.