使用 pine 脚本中的函数循环数组推送

Posted

技术标签:

【中文标题】使用 pine 脚本中的函数循环数组推送【英文标题】:Loop an array push with a function in pine script 【发布时间】:2022-01-15 17:32:04 【问题描述】:

我正在使用 pine 脚本,在 while 循环内部或外部执行数组推送时得到不同的结果。

假设我有一个返回两个值之和的简单函数:

myFunction(myValue1, myValue2) => 
    myValue3 = myValue1 + myValue2

还有一个存储函数结果的数组:

myArray = array.new_float(0)

如果我像这样应用多个数组推送:

array.push(myArray, myFunction(1, 0))
array.push(myArray, myFunction(1, 1))
array.push(myArray, myFunction(1, 2))
array.push(myArray, myFunction(1, 3))
array.push(myArray, myFunction(1, 4))

myArray 正确存储以下值:

myArray = [1, 2, 3, 4, 5]

然后我尝试了同样的方法,但将数组推送到了一个 while 循环中:

myInc = 0
while myInc <= 4
    array.push(myArray, myFunction(1, myInc))
    myInc += 1

并且它没有在数组中存储相同的值:

myArray = [1, 1, 1, 1, 1]

如何在 while 循环中正确实现数组推送?

【问题讨论】:

【参考方案1】:
//@version=5
indicator(title="TEST", overlay=true)

myFunction(myValue1, myValue2) => myValue3 = myValue1 + myValue2

myArray = array.new_float(0)

// array.push(myArray, myFunction(1, 0))
// array.push(myArray, myFunction(1, 1))
// array.push(myArray, myFunction(1, 2))
// array.push(myArray, myFunction(1, 3))
// array.push(myArray, myFunction(1, 4))

var int myInc = 0

myInc := 0
while myInc <= 4
    array.push(myArray, myFunction(1, myInc)) 
    myInc += 1

if barstate.islast
    label.new(bar_index, high, array.join(myArray, ',') )

【讨论】:

谢谢!先声明“myInc”,然后将“:=”声明为 0 解决了这个问题。

以上是关于使用 pine 脚本中的函数循环数组推送的主要内容,如果未能解决你的问题,请参考以下文章

在 pine 脚本中使用循环时更改元组值

使用循环计算数组中新推送的数据

如何在循环中推送对象数组中的值?

Linux13 shell函数数组及awkawk中的数组

从 api 推送数组数据会导致无限循环

“此处文档”的 EOF 中的 Bash 脚本数组循环