【问题标题】:History referencing in Pine Script arraysPine Script 数组中的历史引用
【发布时间】:2020-11-02 01:22:03
【问题描述】:

我一直在尝试使用最近在 PineScript 4 中引入的数组功能,但它似乎要么我不知道它的局限性,要么可能实现仍然存在错误。 以下非常简单的脚本说明了我面临的问题:

//@version=4

study("TEST")

// A is basically the same as bar_index+1, and it is plotted as expected
A=0
A:=nz(A[1])+1

// the same thing implemented using arrays nevertheless doesn't work as expected
B=array.new_float(1,0)
array.set(B,0,nz(array.get(B,0)[1])+1)

plot(A,color=color.red)
plot(array.get(B,0),color=color.yellow)

据我了解,AB 数组的第一个元素必须生成相同的图形。 然而 B 的情节只是在所有柱上给出 1。 问题肯定与历史引用运算符 [] 的使用有关。 有人知道如何克服这种问题吗?

注意:我已经使这个脚本尽可能简单,以便解决问题的本质。我正在处理的脚本要复杂得多,它以各种方式在 for 循环中使用数组,包括刚刚说明的那种(即历史引用 op),因此使用简单变量代替数组根本不会不适合我。

【问题讨论】:

    标签: arrays pine-script


    【解决方案1】:
    1. 不能使用 Pine 的 [ ] 历史引用运算符直接引用数组 id 或元素的过去实例 (https://www.tradingview.com/pine-script-docs/en/v4/essential/Arrays.html?highlight=array#history-referencing)
    2. 您的示例的固定版本:
    //@version=4
    
    study("TEST")
    
    // A is basically the same as bar_index+1, and it is plotted as expected
    A=0
    A:=nz(A[1])+1
    
    // the same thing implemented using arrays nevertheless doesn't work as expected
    var B=array.new_float(1,0)
    array.set(B,0,nz(array.get(B,0))+1)
    
    plot(A,color=color.red)
    plot(array.get(B,0),color=color.yellow)
    

    【讨论】:

    • 感谢您的意见,Andrey,但您修复脚本的方式忽略了数组元素中历史引用问题的全部要点。你是对的,数组 id 或元素的过去实例不能直接使用 Pine 的 [ ] 历史引用运算符来引用。文档中的示例清楚地解释了这一点:不能写像array.get(a[1], 0) 这样的东西。尽管如此,使用array.get(a, 0)[1] 是非常好的(请参阅您所指的同一章中的示例)。因此我仍然认为数组中的历史引用实现存在问题。
    • 再一次,我的测试脚本的目的不是找到一种方法,通过摆脱历史引用运算符来使 A 和 B 的第一个元素相同,而是为了说明历史引用问题关于数组,因为我确实需要在我的真实脚本中访问数组元素的历史记录。
    • 我认为即使表达式array.get (a, 0) [1] 编译成功,运算符[1] 在运行时也不适用于任何东西。
    • 你是对的,它没有。我认为这是一个错误。否则他们为什么会首先在自己的文档中给出这种结构。我会不时地运行这段代码。我已经在 tradeview 网站上提交了几个与此类似的与数组相关的错误,并且最终得到了修复。
    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    相关资源
    最近更新 更多