![](/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.