#pine-script
Вопрос:
После нескольких часов работы с массивами и циклами в надежде, что это решит мою проблему, я совершенно не знаю, как поступить с тем, что я хочу, pine
и все же то, что я хочу, кажется, должно быть почти тривиальным, поэтому я надеюсь, что кто-то с опытом pine может помочь.
В прилагаемом коде есть два подхода, один с массивами и один без, но я не мог понять, как делать то, что я хочу, поэтому они заходят так далеко, так что, если вы думаете, что видите дублирующуюся функциональность, вы, очевидно, должны быть очищены, как только у меня появится путь вперед.
То, что я пытаюсь сделать, — это построить линию, показывающую самую высокую и самую низкую точку свечей для длины свечей, где isSideways
она остается истинной, а затем ничего не строить, когда isSideways
она ложна. Другими словами, всего две прямые горизонтальные линии в затененных областях. Как только это будет выяснено, я захочу нарисовать линии в процентах от расстояния между этими линиями, но это не должно быть проблемой, как только будут нарисованы первые две линии.
Тривиально нарисовать путь, который следует за свечами, а также провести горизонтальную линию, однако нарисовать сегмент горизонтальной линии, который вписывается в ограниченный, но переменный диапазон длины, основанный на самых высоких или самых низких значениях этого переменного числа свечей, оказывается значительно сложнее, чем я думал.
Я использую barssince()
то, что помогает мне пройти часть пути, но не весь путь.
Любая помощь будет очень признательна.
//@version=4
study("Sideways Channel Visual", max_bars_back=4999)
sidewaysBbSource = input(close, "SMA Source" , type=input.source , group="Sideways Detection")
sidewaysBbLength = input( 50 , "SMA Length" , type=input.integer , minval=1 , group="Sideways Detection")
sidewaysBbrLen = input( 21 , "Std Dev Signal Smoothing", type=input.integer , minval=1 , maxval=50, group="Sideways Detection")
sidewaysBbMult = input( 4.0, "Std Dev" , type=input.float , minval=0.001 , maxval=50, step=0.001, group="Sideways Detection")
sidewaysBbrStdThresh = input( 0.08, "Std Dev threshold" , type=input.float , step=0.01 , group="Sideways Detection")
// Sideways indicator
sidewaysBasis = sma(sidewaysBbSource, sidewaysBbLength)
sidewaysStdDev2 = sidewaysBbMult * stdev(sidewaysBbSource, sidewaysBbLength)
sidewaysUpper = sidewaysBasis sidewaysStdDev2
sidewaysLower = sidewaysBasis - sidewaysStdDev2
sidewaysBbr = (sidewaysBbSource - sidewaysLower)/(sidewaysUpper - sidewaysLower)
sidewaysStdDev = stdev(sidewaysBbr, sidewaysBbrLen)
isSideways = (sidewaysBbr > 0.0 and sidewaysBbr < 1.0) and sidewaysStdDev <= sidewaysBbrStdThresh
barsSinceNotSideways = barssince(not isSideways)
if barsSinceNotSideways == 0
barsSinceNotSideways := 1 // highest/lowest will fail on 0.
hLevel = array.new_float(1, highest(high, barsSinceNotSideways))
lLevel = array.new_float(1, lowest (low , barsSinceNotSideways))
hNextLevel() =>
_newLevel = isSideways ? array.get(hLevel, 0) : na
array.set(hLevel, 0, _newLevel)
_newLevel
lNextLevel() =>
_newLevel = isSideways ? array.get(lLevel, 0) : na
array.set(lLevel, 0, _newLevel)
_newLevel
L = lowest(high, barsSinceNotSideways)
H = highest(low, barsSinceNotSideways)
LB = lowestbars(high, barsSinceNotSideways)
HB = highestbars(low, barsSinceNotSideways)
if not isSideways
L := na
H := na
LB := na
HB := na
L
H
LB
HB
bgcolor(title="Sidways", color=isSideways ? color.rgb(236, 64, 122, 90) : color.new(color.white, 100))
plot(hNextLevel(), title="Level High", color=color.red , style=plot.style_cross, display=display.none)
plot(lNextLevel(), title="Level Low" , color=color.blue , style=plot.style_cross, display=display.none)
plot(H , "highest" , color=color.new(color.red , 0), style=plot.style_cross, display=display.none)
plot(L , "Lowest" , color=color.new(color.blue, 0), style=plot.style_cross, display=display.none)
plot(HB , "highest Bars" , color=color.new(color.red , 0), style=plot.style_cross, display=display.none)
plot(LB , "Lowest Bars" , color=color.new(color.blue, 0), style=plot.style_cross, display=display.none)
Ответ №1:
Я нашел (просто случайно, я искал что-то другое) индикатор, который делает это gapsamp;wicks
, предназначенный для всех, кто сталкивается с этой проблемой.