Pine Script技术问询:如何在降序表格中显示MA变量名而非数值
按MA数值降序显示变量名的Pine Script修改方案
原代码仅存储了MA的数值,排序后无法对应回原变量名,需要通过关联存储名称与数值的方式解决。以下是修改后的完整代码:
//@version=5 indicator("MA Rank Display", overlay=true) // 示例:定义ma1到ma9的移动平均线(可替换为你自己的MA计算逻辑) ma1 = ta.sma(close, 5) ma2 = ta.sma(close, 10) ma3 = ta.sma(close, 20) ma4 = ta.sma(close, 30) ma5 = ta.sma(close, 50) ma6 = ta.sma(close, 60) ma7 = ta.sma(close, 100) ma8 = ta.sma(close, 150) ma9 = ta.sma(close, 200) // 定义结构体,关联MA名称和对应数值 struct MAData name string value float // 创建结构体数组,填充MA数据 maArray = array.new<MAData>() array.push(maArray, MAData("ma1", ma1[1])) array.push(maArray, MAData("ma2", ma2[1])) array.push(maArray, MAData("ma3", ma3[1])) array.push(maArray, MAData("ma4", ma4[1])) array.push(maArray, MAData("ma5", ma5[1])) array.push(maArray, MAData("ma6", ma6[1])) array.push(maArray, MAData("ma7", ma7[1])) array.push(maArray, MAData("ma8", ma8[1])) array.push(maArray, MAData("ma9", ma9[1])) // 按MA数值降序排序数组 array.sort(maArray, (a, b) => b.value - a.value) // 创建表格并填充排序后的MA名称 var table maDisplay = table.new(position.top_right, 1, 10) table.cell(maDisplay, 0, 0, "MA Rank (Desc)") for i = 0 to array.size(maArray) - 1 maItem = array.get(maArray, i) table.cell(maDisplay, 0, i + 1, maItem.name)
关键修改说明:
- 结构体定义:用
MAData结构体同时存储MA的变量名和数值,确保排序后两者的对应关系不丢失 - 数组填充:将每个MA的名称字符串(如"ma1")和延迟一期的数值(
ma1[1])存入数组 - 自定义排序:通过
array.sort的比较函数,按MA数值从大到小排序 - 表格渲染:遍历排序后的数组,提取每个元素的
name字段显示,替换原有的数值输出
内容的提问来源于stack exchange,提问作者Babu Ramasamy
相关产品推荐
相关产品推荐

