如何绘制 highest 定义的带有 barssince 的柱数的结果

How to plot the result from highest defining the number of bars with barssince

尝试使用 barssince(cross(ema50,ema200)) 绘制当前柱与 ema(50)ema(200) 的最后一个交叉点之间的最高柱的值。函数 highest() 想要一个 integer 而 Barssince 给出一个 series integer。所有变体都得到错误提示,即 pine connot compile with error:

line 4: Cannot call `highest` with arguments (series[integer]); available overloads: highest(series, integer) => series; highest(integer) => series Script.

//@version=3
study("My Script")
o = 0
o := highest(barssince(cross(sma(close,50),sma(close,200))))
plot(o, color = yellow)

ema 交叉只是一个例子。 highest() 函数计算的柱数 barssince 是我的目标。

如何将 barssince 的结果转换为 highest() 接受的整数? 或者有不同的解决方案吗?

该参考资料相当混乱,但在稍微尝试了一下您的函数后,我设法让它工作了:

highest() 函数有两个重载: - highest(length),这个需要一个 integer 和 return 一个系列 - highest(source, length),这个需要一个 series 和一个 integer 函数引用中有一个提示,说 One arg version: x is a length. Algorithm uses high as a source series.

检查 barssince() 的参考,我发现它需要一个 bool(逻辑条件)和 return 一系列 integer

现在很明显 highest(barssince(true)) 不是正确的语法,因为 barssince() 将 return 变成 series 而不是 integer,而 highest() 期望和整数或一系列 and and integer.

通过四处寻找和在线搜索,我得出一个结论,即在 pine 脚本中不可能同时有一个不是 series 的变量 integer。 这让我相信 highest() 函数不能动态使用。

this migration guide

的帮助下,我能够使用 if 语句模仿行为

这是适合我的脚本版本,它在高点 max() 处绘制一条线,如果有新的 MA 交叉则重置。

//@version=3
study("High since SMA Cross")

fast_sma = sma(close,10)
slow_sma = sma(close,20)

high_since_cross = 0.0
resistance = if(cross(fast_sma, slow_sma))
    high
else
    max(nz(high_since_cross[1]), high)
plot(resistance, color=yellow)

自己实现最高的功能:

//@version=3
study("My Script", max_bars_back=5000)

highest_pine(src, len) =>
    max = src[0]
    for i = 1 to len
        if src[i] > max
            max := src[i]
    max

o = 0.0
o := highest_pine(close, barssince(cross(sma(close,50),sma(close,200))))
plot(o, color = green)