关闭上方蜡烛后如何实施线条移除

How to implement line removal after closing the candle above it

提问人:Роман Костюк 提问时间:4/17/2023 最后编辑:G.LebretРоман Костюк 更新时间:4/17/2023 访问量:70

问:

我寻求帮助。 我写了一个指标,但我被卡住了 - 我找不到解决方案。

因此 - 历史上有一些信号,自动从中绘制一条水平线 - 创建一个数组。 我相应地调整了显示的行数。

因此,其延续上显示的线与蜡烛相交 - 也就是说,蜡烛收盘价高于该线。

我需要移除蜡烛穿过的线条,好吧,或者改变颜色......

因此,当出现新信号时,会出现新线......

移除或颜色变化严格发生在关闭线上方的蜡烛后.

我尝试了很多选项 - 但没有一个可以正常工作......

我附上了一个我无法超越的代码......

谢谢。。。

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

enter image description here

松脚本 线 后效

评论


答:

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 行值的标签用于测试目的,您可以将其删除:enter image description here

评论

0赞 Роман Костюк 4/17/2023
这太棒了!!这就是它所需要的......我衷心感谢你......我理解了你描述的动作算法,但由于我的知识很少,Pine Script无法实现......谢谢。。。真诚地。。。太棒了... :)