[英]How to find the closest value in pinescript array?
在 pine 脚本中,我有一个称为级别的数组。 在那里,我添加了几个值并将其整理出来。 现在我想从该数组中找到最接近当前价格的值。 我怎么做?
levels = array.new_float(size = 3, initial_value = na)
// push all value into array
array.push(levels, valOne)
array.push(levels, valTwo)
array.push(levels, valThree)
.......
// sort the array
array.sort(levels, order.ascending)
// get s r value
supportForLong = array.min(levels) // I want to find the closest value in level and not min
resistanceForLong = array.max(levels)
plot(supportForLong, color = black)
plot(resistanceForLong, color = black)
// clear all element for next iteration
array.clear()
目前没有数组函数来实现这一点,但我们可以构建一个自定义函数来做到这一点。 它返回数组中值第一次出现的索引,从数组的开头开始:
arrayFind(_id, _val) =>
int _return = na
for _i = 0 to array.size(_id) - 1
if array.get(_id, _i) == _val
_return := _i
break
_return
你可以像这样使用它:
plot(arrayFind(levels, close))
不太确定我在那里想的是什么,但是:
array.indexof()
和array.lastindexof()
。 所以你可以使用内置的array.indexof(levels, close)
而不是arrayFind(levels, close)
。你的问题的正确答案是:
arrayIndexOfClosest(_id, _val) =>
size = array.size(_id)
int _return = na
if size != 0
delta = abs(array.get(_id, 0) - _val)
_return := 0
for _i = 1 to size - 1
thisDelta = abs(array.get(_id, _i) - _val)
if thisDelta < delta
delta := thisDelta
_return := _i
_return
这将返回数组中值的最接近匹配的索引。
这是另一个复制和排序数组的函数,因此不使用循环(假设_id
尚未排序):
array_closest(_id, _v) =>
float _closest = na
sorted = array.copy(_id)
array.sort(sorted)
i = array.indexof(sorted, _v)
if i == 0
_closest := array.get(sorted, 1)
else if i == array.size(sorted) - 1
_closest := array.get(sorted, i - 1)
else
a = array.get(sorted, i - 1)
b = array.get(sorted, i + 1)
_closest := math.abs(a - _v) > math.abs(b - _v) ? b : a
_closest
我们如何在 pine 脚本中找到与给定数字最接近的完美正方形...例如,假设给定数字是 5342 .. 最接近的完美正方形将是 73,因为 73*73=5329
请帮忙
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.