如何为条件的所有出现绘制从条件到当前收盘价的线

How to draw line from condition to current close for all occurences of the condition

condition = ta.barssince(ta.rsi(close, 14) > 20) == 1

var flag = false

if ta.ema(close, 50) > ta.ema(close, 200)
    flag := true

var theLine = line.new(0, 0, 0, 0)

if flag
    line.set_xy1(theLine, bar_index - ta.barssince(condition), ta.valuewhen(condition, close, 0))
    line.set_xy2(theLine, bar_index, close)

上面的代码将绘制一条从最近一次出现的收盘价到当前收盘价的线。如何为当前收盘价的每一次条件绘制一条线?

编辑:(这是我要传达的内容的视觉表示。)

这里需要多行,所以我会用数组来完成。

基本上,跟踪最后 n 次出现并相应地更新数组。然后在每个柱上更新数组中的 xy2 行。

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © vitruvius

//@version=5
indicator("My script", overlay=true, max_lines_count=500)

line_cnt = input.int(5)

var line_arr = array.new_line()

_ema = ta.ema(close, 50)
cond = ta.crossover(close, _ema)

len = array.size(line_arr)

if (cond)
    id = line.new(bar_index, close, bar_index, close, color=color.yellow)
    
    if (len < line_cnt)
        array.push(line_arr, id)
    else
        l = array.get(line_arr, 0)
        line.delete(l)
        array.shift(line_arr)
        array.push(line_arr, id)

if (len > 0)
    for i=0 to len-1
        l = array.get(line_arr, i)
        line.set_xy2(l, bar_index, close)

plotshape(cond, size=size.small)
plot(_ema, "EMA", color.white, 2)

这里我画了一条线,从条件的最后五次出现的收盘价到当前收盘价。

如果您想对所有事件都这样做,请从等式中删除 line_cnt

Vitruvius 的一个很好的回答,但是,我喜欢最近添加的 for..in 结构并想演示它,希望这也有帮助!

PS:我还删除了多余的 flag,因为它在第一次出现后变为 true图表上的均线交叉并且没有变回来。

//@version=5
indicator("Lines to the current close", overlay = true)

condition = ta.barssince(ta.rsi(close, 14) > 20) == 1
    
var line[] lines = array.new<line>()

if condition
    array.unshift(lines, line.new(bar_index, close, bar_index, close))

for line in lines
    line.set_xy2(line, bar_index, close)