繁体   English   中英

如何在 pinescript 数组中找到最接近的值?

[英]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()

版本 1

目前没有数组函数来实现这一点,但我们可以构建一个自定义函数来做到这一点。 它返回数组中值第一次出现的索引,从数组的开头开始:

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))

版本 2

不太确定我在那里想的是什么,但是:

  1. 我的答案在功能上不正确,因为它不符合您的要求。 如果该确切值在数组中,它只会找到一个值,而您要求的是数组中最接近值的索引。
  2. 现有的数组函数已经允许我们找到数组中某个值第一次或最后一次出现的索引: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM