如何在TradingView的Pine Script中对20个变量进行动态升序排序
Pine Script 20个变量动态升序排序实现方案
Pine Script v5内置了成熟的数组操作API,直接通过数组实现排序是性能最优、出错率最低的方案,无需自行编写排序逻辑,具体实现如下:
实现步骤
- 第一步:将20个待排序变量存入数组
首先声明和变量类型匹配的数组,将所有变量依次写入数组,示例代码如下://@version=5 indicator("20变量排序示例", overlay=false) // 此处为示例20个变量,可替换为你自己的业务变量 val1 = ta.sma(close, 5) val2 = ta.sma(close, 10) val3 = ta.sma(close, 15) val4 = ta.sma(close, 20) val5 = ta.sma(close, 25) val6 = ta.sma(close, 30) val7 = ta.sma(close, 35) val8 = ta.sma(close, 40) val9 = ta.sma(close, 45) val10 = ta.sma(close, 50) val11 = ta.sma(close, 55) val12 = ta.sma(close, 60) val13 = ta.sma(close, 65) val14 = ta.sma(close, 70) val15 = ta.sma(close, 75) val16 = ta.sma(close, 80) val17 = ta.sma(close, 85) val18 = ta.sma(close, 90) val19 = ta.sma(close, 95) val20 = ta.sma(close, 100) // 声明浮点型数组,填入所有待排序变量 sort_arr = array.new_float() array.push(sort_arr, val1) array.push(sort_arr, val2) array.push(sort_arr, val3) array.push(sort_arr, val4) array.push(sort_arr, val5) array.push(sort_arr, val6) array.push(sort_arr, val7) array.push(sort_arr, val8) array.push(sort_arr, val9) array.push(sort_arr, val10) array.push(sort_arr, val11) array.push(sort_arr, val12) array.push(sort_arr, val13) array.push(sort_arr, val14) array.push(sort_arr, val15) array.push(sort_arr, val16) array.push(sort_arr, val17) array.push(sort_arr, val18) array.push(sort_arr, val19) array.push(sort_arr, val20) - 第二步:执行升序排序
Pine Script v5的array.sort()方法默认就是升序排序,直接调用即可完成动态排序:
若后续需要改为降序,仅需补充参数// 升序排序,无需额外传参 array.sort(sort_arr)order.descending即可。 - 第三步:读取排序后的结果
数组下标从0开始计数,排序完成后可以通过下标读取任意顺位的数值:// 示例:读取排序后最小的3个值和最大的3个值 min_1st = array.get(sort_arr, 0) min_2nd = array.get(sort_arr, 1) min_3rd = array.get(sort_arr, 2) max_1st = array.get(sort_arr, 19) max_2nd = array.get(sort_arr, 18) max_3rd = array.get(sort_arr, 17) // 示例:将结果输出到TradingView数据窗口 plotchar(min_1st, "排序后第1小值", "") plotchar(min_2nd, "排序后第2小值", "") plotchar(min_3rd, "排序后第3小值", "") plotchar(max_1st, "排序后第1大值", "") plotchar(max_2nd, "排序后第2大值", "") plotchar(max_3rd, "排序后第3大值", "")
注意事项
- 若你的变量存在
na空值,排序时空值会被统一排在最后,如需提前过滤空值,可以在变量写入数组前用na()方法判断,仅将非空值存入数组 - 如果你使用的是Pine Script v4版本,没有内置
array.sort()方法,建议升级到v5版本,兼容性和功能覆盖度更高 - 每次K线更新时,数组会重新写入最新的变量值、重新执行排序,天然满足动态更新的需求
内容的提问来源于stack exchange,提问作者rohan sawant
相关产品推荐
相关产品推荐

