代码之家  ›  专栏  ›  技术社区  ›  LightCC

在Pine脚本中,如何运行具有当前条数长度的内置指示器(如atr)?

  •  0
  • LightCC  · 技术社区  · 4 年前

    我使用的是Pine脚本v4。

    ema(close, 200) ,它不会显示任何内容(将计算 na NaN )前199小节。

    我想通过使用较少条数的计算填充初始数据来填补这一空白。例如 atr(14)

    但是,使用以下代码:

    var atr14 = atr(14)
    if bar_index < 14
        atr14 := atr(bar_index)
    

    我得到以下错误:

    无法调用'length'=series[integer]的'atr'。参数的类型应为:integer

    bar_index[0] 仅获取最后一个条目)。我还尝试创建一个仅为int的变量,并仅为其分配最后一个bar_索引,但这也不起作用。Pine仍然认为它是一个系列,而不是一个普通的int:

    var atr14 = atr(14)
    if bar_index < 14
        var int current_index = bar_index[0]
        atr14 := atr(current_index)
    

    以上给出了相同的错误。

    bar_index 变量,因为这是一个系列?

    0 回复  |  直到 4 年前
        1
  •  0
  •   LightCC    4 年前

    本质上,这意味着您认为是单个值的任何值,例如序列的索引,也将返回一种类型的序列。即

    int a = 0
    if bar_index > 0
        a := a[1] + 1
    b = a[0]
    

    a , a[0] , a[1] b 将全部为series[int]类型,即使 a[0] a[1]

    最终结果是,需要整数的函数必须给定一个编译时已知的静态/常量值或用户设置窗口中的用户输入,但不能是由pine动态计算的值。

    这意味着atr功能 给出一个经过计算的参数,如 bar_index[0]

        2
  •  0
  •   rumpypumpydumpy    4 年前
    float ATR = na
    cumTR = cum(tr)
    atr14 = atr(14)
    
    if bar_index > 13
        ATR := atr14
    else
        ATR := cumTR / bar_index
    

    给出了简单的ATR。或者,可以通过自定义函数从具有特定alpha的初始条进行计算:

    f_rma(_src,_len)=>
        float _ma = na
        _alpha = 1 / _len
        _ma := _alpha * _src + (1 - _alpha) * nz(_ma[1], _src)
        _ma
    
    ATR = f_rma(tr, 14)