如何用barsince从最高的条形数量绘制结果

时间:2019-04-23 09:35:39

标签: trading pine-script tradingview-api

尝试使用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()接受的整数? 还是有其他解决方案?

2 个答案:

答案 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)