如何在最后一个最高点和最后一个最低点之间绘制一条线?

How can I plot a line between last highest high and last lowest low?

有以下不明之处请大侠赐教?

我想在最后一个最高点和最后一个最低点之间画一条线,我使用 valuewhen 来获取它的值,但出于某种我不知道的原因,它给了我之前的值,这意味着队伍总是迟到蜡烛。

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

upper = highest(high, 20)
lower = lowest(low, 20)

plot(upper)
plot(lower)

val_u = valuewhen(upper > upper[1], upper, 0)
val_l = valuewhen(lower < lower[1], lower, 0)

plot(val_u, color = color.red)
plot(val_l, color = color.red)
barss_u = barssince(upper > upper[1])
barss_l = barssince(lower < lower[1])

l = line.new(bar_index[barss_u], val_u, bar_index[barss_l], val_l, width = 1, color = color.orange, style=line.style_dashed)
line.delete(l[1])

看起来是这样的,红线是值,蓝线是high/low水平,橙色线应该是最后一个更低的低点和最后一个更高的高点之间的连接线,但出于我的原因不知道,valuewhen不是实时更新的。

这就是 valuewhen 的工作原理,它不考虑当前柱线。试试 highestbarslowestbars 代替:

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

barss_u = highestbars(20) * -1
barss_l = lowestbars(20) * -1

val_u = high[barss_u]
val_l = low[barss_l]

l = line.new(bar_index[barss_u], val_u, bar_index[barss_l], val_l, width = 1, color = color.orange, style=line.style_dashed)
line.delete(l[1])

更新

您可以使用以下代码修复 valuewhen 的延迟:

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

upper = highest(high, 20)
lower = lowest(low, 20)

plot(upper)
plot(lower)

x_val_u = valuewhen(upper > upper[1], upper, 0)
x_val_l = valuewhen(lower < lower[1], lower, 0)

val_u = high >= upper ? high : x_val_u
val_l = low <= lower ? low : x_val_l

plot(val_u, color = color.red)
plot(val_l, color = color.red)
barss_u = barssince(upper > upper[1])
barss_l = barssince(lower < lower[1])

l = line.new(bar_index[barss_u], val_u, bar_index[barss_l], val_l, width = 1, color = color.orange, style=line.style_dashed)
line.delete(l[1])

绿线显示了这个新版本的工作原理: