对列表或数组中的值进行排序并在表格中显示前 5 个值

问题描述 投票:0回答:1

enter image description here

我需要 pine 脚本上的代码,将一些值从最大到最小排序,然后在表中显示例如前 5 个值以及相关的 var_names。

我举了一个我需要的 jpeg 的简单示例。

sorting pine-script
1个回答
0
投票

您可以使用自定义函数对数组进行排序。

声明自定义对象类型(例如 https://it.wikipedia.org/wiki/Bubble_sort):

type typeTest
    string name
    float level

创建排序功能

bubbleSort(arr) =>
n = array.size(arr) -1 
for i = 0 to n - 1
    for j = 0 to n-i-1
        if array.get(arr , j).level > array.get(arr , j+1).level
            temp = array.get(arr,j)
            array.set(arr , j , array.get(arr , j + 1))
            array.set(arr , j + 1 , temp)
            

arr

这是一个例子:

    array.push(arrayTest, typeTest.new("test1", 1.51))
    array.push(arrayTest, typeTest.new("test2", 2.55))
    array.push(arrayTest, typeTest.new("test3", -6.13))
    array.push(arrayTest, typeTest.new("test4", 9.22))
    array.push(arrayTest, typeTest.new("test5", -3.98))
    
    arrayTestSorted = bubbleSort(arrayTest)

如果要改变排序顺序,可以修改if语句中的比较运算符。使用 < to sort the elements in descending order.

代替 >

这是完整的代码:

//@version=5
indicator("Il mio script")
type typeTest
    string name
    float level

var arrayTest = array.new<typeTest>()


bubbleSort(arr) =>
    n = array.size(arr) -1 
    for i = 0 to n - 1
        for j = 0 to n-i-1
            if array.get(arr , j).level > array.get(arr , j+1).level
                temp = array.get(arr,j)
                array.set(arr , j , array.get(arr , j + 1))
                array.set(arr , j + 1 , temp)
                

    arr

array.push(arrayTest, typeTest.new("test1", 1.51))
array.push(arrayTest, typeTest.new("test2", 2.55))
array.push(arrayTest, typeTest.new("test3", -6.13))
array.push(arrayTest, typeTest.new("test4", 9.22))
array.push(arrayTest, typeTest.new("test5", -3.98))

arrayTestSorted = bubbleSort(arrayTest)

//just for plotting somethin
plot(close)
© www.soinside.com 2019 - 2024. All rights reserved.