提问人:Роман Костюк 提问时间:4/17/2023 最后编辑:G.LebretРоман Костюк 更新时间:4/17/2023 访问量:70
关闭上方蜡烛后如何实施线条移除
How to implement line removal after closing the candle above it
问:
我寻求帮助。 我写了一个指标,但我被卡住了 - 我找不到解决方案。
因此 - 历史上有一些信号,自动从中绘制一条水平线 - 创建一个数组。 我相应地调整了显示的行数。
因此,其延续上显示的线与蜡烛相交 - 也就是说,蜡烛收盘价高于该线。
我需要移除蜡烛穿过的线条,好吧,或者改变颜色......
因此,当出现新信号时,会出现新线......
移除或颜色变化严格发生在关闭线上方的蜡烛后.
我尝试了很多选项 - 但没有一个可以正常工作......
我附上了一个我无法超越的代码......
谢谢。。。
//@version=5
indicator("NHNHNHNH", overlay = true)
Kol_Linii = input(2, "Количество линий")
Signal = open[3] < close[3] and open[2] < close[2] and open[1] < close[1] and close < open and high[1] > high and high[1] > close[1] and high > open)
X_for_LINIA = ta.valuewhen(Signal, bar_index, 0)
Y_for_LINIA = ta.valuewhen(Signal, high, 0)
var b = array.new_float()
array.push(b, Y_for_LINIA)
peresechenie = ta.crossover(close, Y_for_LINIA)
var p = array.new_bool()
array.push(p, peresechenie)
if Signal
LINIA = line.new(X_for_LINIA, Y_for_LINIA,X_for_LINIA+1,Y_for_LINIA, extend = extend.right, color = color.fuchsia, width = 1)
var a = array.new_line()
array.push(a, LINIA)
var line_price = array.new_float()
array.push(line_price, line.get_price(LINIA, bar_index))
if array.size(a) > Kol_Linii
ln = array.shift(a)
line.delete(ln) `
答:
0赞
G.Lebret
4/17/2023
#1
您应该使用数组来存储行。
然后,在每次关闭时,遍历此数组中的所有行。
如果线的 Y 值低于实际收盘价(= 蜡烛收盘价高于该线),则删除该线并删除相应的数组行。
我测试了这个代码,它运行良好:
//@version=5
indicator("NHNHNHNH", overlay = true)
Kol_Linii = input(2, "Количество линий")
Signal = open[3] < close[3] and open[2] < close[2] and open[1] < close[1] and close < open and high[1] > high and high[1] > close[1] and high > open
X_for_LINIA = ta.valuewhen(Signal, bar_index, 0)
Y_for_LINIA = ta.valuewhen(Signal, high, 0)
var b = array.new_float()
array.push(b, Y_for_LINIA)
peresechenie = ta.crossover(close, Y_for_LINIA)
var p = array.new_bool()
array.push(p, peresechenie)
var ArrayLine = array.new_line()
if Signal
LINIA = line.new(X_for_LINIA, Y_for_LINIA,X_for_LINIA+1,Y_for_LINIA, extend = extend.right, color = color.fuchsia, width = 1)
array.push(ArrayLine, LINIA)
label.new(bar_index, close, str.tostring(array.size(ArrayLine))+" : " + str.tostring(line.get_y1(LINIA)), color= color.white, yloc=yloc.abovebar)
if array.size(ArrayLine) > 0
NumberOfLine = array.size(ArrayLine)
Complete = false
Index = NumberOfLine - 1
while not(Complete)
Line = array.get(ArrayLine, Index)
if line.get_y1(Line) < close
line.delete(Line)
array.remove(ArrayLine, Index)
Index := Index - 1
if Index < 0
Complete := true
我放置了一个带有 ArrayLine 数组大小和 Y 行值的标签用于测试目的,您可以将其删除:
评论
0赞
Роман Костюк
4/17/2023
这太棒了!!这就是它所需要的......我衷心感谢你......我理解了你描述的动作算法,但由于我的知识很少,Pine Script无法实现......谢谢。。。真诚地。。。太棒了... :)
评论