我试图从数组传递动态值到pine脚本中的最低和最高内置函数。下面是代码
int[] pArray = array.new_int(0)
数组由int元素填充。下面是有效的代码:
fromInd = array.min(pArray)
lowest = ta.lowest(MACDHist,array.get(pArray,0))
Debug = label.new(bar_index+1, close, 'pArray: ' + str.tostring(pArray) + str.tostring(fromInd))
上面代码在图表上的输出是
pArray: [2, 15, 40]2
2是最后打印到数组外部的第0个数组索引值。然而,当我将标签更改为输出"最低"值时(如下所示),图表中没有打印任何内容,但所有内容都可以正常编译,没有错误或警告.
Debug = label.new(bar_index+1, close, 'pArray: ' + str.tostring(pArray) + str.tostring(lowest))
array的输出。get(id, index)'是系列int,因为pArray初始化为int。我还对数组进行了类型转换。通过将(id, index)'参数用'int()'括起来,但是对于最后一行代码没有任何作用,除非是硬编码。
的助教。最低(来源,长度)'接受长度的系列int参数,也可以接受动态长度,如tradingview https://www.tradingview.com/blog/en/pine-functions-support-dynamic-length-arguments-20554/
我在这里做错了什么?提前谢谢。
我尝试了下面第一个用户发布的解决方案的变体,代码
//@version=5
indicator("Dynamic INT array length", overlay = false, max_bars_back = 5000)
[a, b, hist] = ta.macd(close, 26, 12, 9)
int[] lengths = array.new_int()
int[] nlengths = array.new_int()
for i = 0 to 10
if hist[i] > 0
array.unshift(lengths, i)
else
array.unshift(nlengths,i)
lowest = ta.lowest(hist, array.get(lengths,0))
plot(lowest)
plot(hist, color = color.red)
debug = label.new(x = bar_index, y = 0, style = label.style_label_left, text = str.tostring(lowest) + " " + str.tostring(lengths) + " " + str.tostring(array.get(lengths,0)))
label.delete(debug[1])
和我得到一个错误时,使用'ta。最低(hist, array.min(length))'
Invalid value of the 'length' argument (0.0) in the "lowest" function. It must be > 0.
我尝试了条件列表的所有变化[I]>在for循环中为0,但没有打印任何东西,它也有同样的错误。让我知道,如果有一个简单的解决办法。谢谢。
它应该是工作的,在猜测,通常我会说必须有一些东西是如何填充数组,但它似乎不是这里给定数组输出的情况。这是不太可能的,但有可能你发现了一个错误,或者甚至可能是一个编译器没有发现的异常。
//@version=5
indicator("Dynamic INT array length", overlay = false, max_bars_back = 5000)
int[] lengths = array.new_int()
for i = 0 to 10
array.unshift(lengths, int(math.random(30, 50)))
[a, b, hist] = ta.macd(close, 26, 12, 9)
lowest = ta.lowest(hist, array.min(lengths))
plot(lowest)
plot(hist, color = color.red)
debug = label.new(x = bar_index, y = 0, style = label.style_label_left, text = str.tostring(lowest) + " " + str.tostring(lengths) + " " + str.tostring(array.min(lengths)))
label.delete(debug[1])
后续回答:
实际上有两件事你需要注意。如果考虑hist
是
你必须决定如何处理这些特定的情况,但以下是你如何解释它。例如,当数组只有一个值为0时,使用长度为5,并使用na
值填充数组以避免空数组问题。
//@version=5
indicator("Dynamic INT array length", overlay = false, max_bars_back = 5000)
[a, b, hist] = ta.macd(close, 26, 12, 9)
int[] lengths = array.new_int()
int[] nlengths = array.new_int()
for i = 0 to 10
if hist[i] > 0
array.unshift(lengths, i)
array.unshift(nlengths, na)
else
array.unshift(nlengths,i)
array.unshift(lengths, na)
int len = na
if array.get(lengths, 0) > 0
len := array.get(lengths, 0)
else
len := 5
lowest = ta.lowest(hist, len)
plot(lowest)
plot(hist, color = color.red)
debug = label.new(x = bar_index, y = 0, style = label.style_label_left, text = str.tostring(lowest) + " " + str.tostring(lengths) + " " + str.tostring(array.get(lengths,0)))
label.delete(debug[1])