投影最新价格并检查先前价格与它相交的位置

Project latest price back and check where previous price intersects it

使用 Trading View 的 Pine Script - 我如何获取最新的高价(从最新的柱)并绘制一条恒定的水平线以检查历史高点何时高于这个最新的高点?

以下代码投射了最新的高点,但我正在努力寻找一种方法来测试之前的高点位于这条线之上的位置。是否有办法使最后一个值成为适当的常数并将其投射回去,或者是否有其他替代方法?

//@version=4
study("My Script", overlay=true)

var line _lpLine = line.new(0, 0, 0, 0, extend=extend.left, style=line.style_dashed, color=color.yellow)

_lastTradedPrice = high
line.set_xy1(_lpLine, bar_index-1, _lastTradedPrice)
line.set_xy2(_lpLine, bar_index, _lastTradedPrice)

test = high > _lpLine ? 1 : 0

plot(test, color=color.green)

使用运算符for不好,但在这种情况下是必须的

//@version=4
study("Help (My Script)", overlay=true)

lb = input(100, 'look back', minval=1)

var line  _lpLine = line.new(0, 0, 0, 0, extend=extend.left, style=line.style_dashed, color=color.yellow)
var label  lbl    = label.new(na, na, style=label.style_xcross, color=color.red, size=size.tiny)
var        index  = lb
var        flag   = false

_lastTradedPrice = high
line.set_xy1(_lpLine, bar_index-1, _lastTradedPrice)
line.set_xy2(_lpLine, bar_index, _lastTradedPrice)

// test = high > _lpLine ? 1 : 0

// plot(test, color=color.green)

for i=1 to lb
    if high[0] < high[i]
        index := i
        flag  := true
        break

if flag
    label.set_x(lbl, bar_index - index)
    label.set_y(lbl, high)
    flag := false
    index := lb
else
    label.set_x(lbl, na)
    label.set_y(lbl, na)
    index := lb

添加了第二个版本的程序,标记最后一个收盘线以上的所有值并找到其中的最大值。

//@version=4
study("Help (My Script) v2", overlay=true, max_labels_count=100)

lb = input(100, 'look back', minval=1)

var line  _lpLine = line.new(0, 0, 0, 0, extend=extend.left, style=line.style_dashed, color=color.yellow, width=2)
label  lbl    = label.new(na, na, style=label.style_xcross, color=color.red, size=size.tiny)
var        capture = float(na)

_lastTradedPrice = high
line.set_xy1(_lpLine, bar_index-1, _lastTradedPrice)
line.set_xy2(_lpLine, bar_index, _lastTradedPrice)

for i = 1 to lb
    if not na(lbl[i])
        label.delete(lbl[i])

capture := 0
for i=1 to lb
    if high[0] < high[i]
        lbl := label.new(bar_index - i, high[i], style=label.style_xcross, color=color.red, size=size.auto)
    if capture < high[i]
        capture := high[i]

plot(capture, color=color.blue, style=plot.style_cross, linewidth=3, show_last=1)

根据 AnyDozer 的方法尝试了以下方法,用十字标记高 > 最后高的所有值,但这只标记前 3 个左右,而不是全部。这里会出什么问题?此外,我试图在变量“捕获”中捕获所有这些高值并仅绘制它们。 “捕获”的所有其他值应该只是 na。

//@version=4
study("Help (My Script)", overlay=true, max_labels_count=500)

lb = input(10)

var line  _lpLine = line.new(0, 0, 0, 0, extend=extend.left, style=line.style_dashed, color=color.yellow)
lbl    = label.new(na, na, style=label.style_xcross, color=color.red, size=size.tiny)
var        index  = lb
var        flag   = false
capture = float(na)

_lastTradedPrice = high
line.set_xy1(_lpLine, bar_index-1, _lastTradedPrice)
line.set_xy2(_lpLine, bar_index, _lastTradedPrice)

for k=0 to lb
    for i=0 to lb
        if high[0] < high[i]
            index := i
            flag  := true
            label.set_x(lbl, bar_index - index)
            label.set_y(lbl, high[i])
            capture := high[i]
            break
            
plot(capture)