在 pine 脚本中使用循环时保存以前的柱值
Save previous bar values when using a loop in pine script
在 pine 脚本中,我调用了一个函数,该函数将前一个柱值与一个增量相加:
myFunction(myVar1) =>
var int myVar2 = 0
myVar2 := myVar1 + nz(myVar2[1],1)
使用调用函数的循环添加增量值,结果存储在数组中:
myArray = array.new_int(0)
var int myVar1 = 1
myVar1 := 1
while myVar1 <= 3
array.push(myArray, myFunction(myVar1))
myVar1 += 1
第一个柱状图的结果符合预期。由于没有前一个柱,前一个值被替换为 1 nz(myVar2[1],1)
plot(myArray.get(myArray, 0))
plot(myArray.get(myArray, 1))
plot(myArray.get(myArray, 2))
Result: [2, 3, 4]
但是在第二个栏:
Result: [5, 6, 7]
My expected result: [3, 5, 7]
因为它首先为 第一根柱线 运行循环,然后在 第二根柱线 中再次运行循环,它用于 myVar2[1] 最后一个值 4 在 运行 第一个柱 中的最后一个循环时保存.
使用循环时如何正确存储之前的bar值,从而达到预期的效果:
First bar: [2, 3, 4]
Second bar: [3, 5, 7]
Third bar: [4, 7, 10]
对的回答:您可以将当前数组保存在另一个数组中。这样,您始终可以访问前一个柱的数组值。
//@version=5
indicator("My Script", overlay=false)
var int myVar1 = na
var int[] myArray = array.new_int(3) // Current array
var int[] prevArray = array.new_int(3) // Previous array
myFunction(myVar1) =>
var int myVar2 = 0
myVar2 := myVar1 + nz(myVar2[1],1)
myVar1 := 1
prevArray := array.copy(myArray) // Save current array
array.clear(myArray) // Clear current array
while myVar1 <= 3
array.push(myArray, myFunction(myVar1))
myVar1 += 1
// Show previous array
plot(array.get(prevArray, 0), 'prevArray[0]')
plot(array.get(prevArray, 1), 'prevArray[1]')
plot(array.get(prevArray, 2), 'prevArray[2]')
// Show current array
plot(array.get(myArray, 0), 'myArray[0]')
plot(array.get(myArray, 1), 'myArray[1]')
plot(array.get(myArray, 2), 'myArray[2]')
在 pine 脚本中,我调用了一个函数,该函数将前一个柱值与一个增量相加:
myFunction(myVar1) =>
var int myVar2 = 0
myVar2 := myVar1 + nz(myVar2[1],1)
使用调用函数的循环添加增量值,结果存储在数组中:
myArray = array.new_int(0)
var int myVar1 = 1
myVar1 := 1
while myVar1 <= 3
array.push(myArray, myFunction(myVar1))
myVar1 += 1
第一个柱状图的结果符合预期。由于没有前一个柱,前一个值被替换为 1 nz(myVar2[1],1)
plot(myArray.get(myArray, 0))
plot(myArray.get(myArray, 1))
plot(myArray.get(myArray, 2))
Result: [2, 3, 4]
但是在第二个栏:
Result: [5, 6, 7]
My expected result: [3, 5, 7]
因为它首先为 第一根柱线 运行循环,然后在 第二根柱线 中再次运行循环,它用于 myVar2[1] 最后一个值 4 在 运行 第一个柱 中的最后一个循环时保存.
使用循环时如何正确存储之前的bar值,从而达到预期的效果:
First bar: [2, 3, 4]
Second bar: [3, 5, 7]
Third bar: [4, 7, 10]
对
//@version=5
indicator("My Script", overlay=false)
var int myVar1 = na
var int[] myArray = array.new_int(3) // Current array
var int[] prevArray = array.new_int(3) // Previous array
myFunction(myVar1) =>
var int myVar2 = 0
myVar2 := myVar1 + nz(myVar2[1],1)
myVar1 := 1
prevArray := array.copy(myArray) // Save current array
array.clear(myArray) // Clear current array
while myVar1 <= 3
array.push(myArray, myFunction(myVar1))
myVar1 += 1
// Show previous array
plot(array.get(prevArray, 0), 'prevArray[0]')
plot(array.get(prevArray, 1), 'prevArray[1]')
plot(array.get(prevArray, 2), 'prevArray[2]')
// Show current array
plot(array.get(myArray, 0), 'myArray[0]')
plot(array.get(myArray, 1), 'myArray[1]')
plot(array.get(myArray, 2), 'myArray[2]')