尝试使用ema(50)
在当前柱与ema(200)
和barssince(cross(ema50,ema200))
的最后一个十字之间绘制最高柱的值。函数highest()
需要一个integer
,Barssince提供一个series integer
。所有变种都会得到pine不会编译并带有错误的错误:
第4行:无法使用参数(系列[整数])调用“最高”; 可用的重载:highest(series,integer)=> series; 最高(整数)=>系列脚本。
//@version=3
study("My Script")
o = 0
o := highest(barssince(cross(sma(close,50),sma(close,200))))
plot(o, color = yellow)
ema交叉仅仅是一个例子。我的目标是highest()
函数,其计算的条形数为barssince
。
如何将barsince结果形式转换为highest()
接受的整数?
还是有其他解决方案?
答案 0 :(得分:0)
该引用非常混乱,但是在使用了一些功能之后,我设法使其起作用:
highest()
函数有两个重载:
-highest(length)
,此人接受一个integer
并返回一个序列
-highest(source, length)
,此人需要一个series
和一个integer
函数参考中有一个提示,说One arg version: x is a length. Algorithm uses high as a source series.
检查barssince()
的引用,我发现它采用了bool
(逻辑条件)并返回了一系列integer
。
现在很明显highest(barssince(true))
是不正确的语法,因为barssince()
将返回series
而不是integer
,而highest()
将返回整数或一系列 and 和整数
通过四处浏览和在线搜索,我得出了一个结论,即不可能在pine脚本中同时拥有一个integer
变量series
。
这使我相信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)
答案 1 :(得分:0)
自行实现最高功能:
//@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)