如何在PineScript中使用for循环处理元组以简化代码?
PineScript 用for循环简化重复代码的方案
一、简化request.security_lower_tf的重复调用
PineScript不支持动态生成变量名(比如你设想的net_opt(i)写法),我们可以用数组来存储循环结果,替代单独的net_opt1/net_opt2/net_opt3变量。
修改后的完整代码:
// 原splitVolume函数保持不变 splitVolume(priceLevel) => net = 0. if close == Price(priceLevel) net += volume [net] // 初始化数组存储结果,长度对应循环次数 var float[] net_opts = array.new_float(3) // 用for循环批量调用security并填充数组 for i = 1 to 3 [current_net] = request.security_lower_tf(syminfo.tickerid, lowerTimeframe, splitVolume(i)) array.set(net_opts, i-1, current_net) // 数组索引从0开始,i-1对应正确位置 // 如需单独访问某一项,通过数组索引获取 net_opt1 = array.get(net_opts, 0) net_opt2 = array.get(net_opts, 1) net_opt3 = array.get(net_opts, 2)
二、简化table.cell的重复调用
基于上面的数组,直接在for循环中遍历生成表格单元格:
// 假设panel、inputTableLength、color1已提前定义 for i = 1 to 3 current_net = array.get(net_opts, i-1) cell_content = str.tostring(volumeOutput(current_net, inputTableLength), format.volume) table.cell(panel, 1, i, cell_content, bgcolor = color1)
关键说明
- PineScript数组索引从0开始,所以循环变量
i(1-3)需要减1才能匹配数组的正确位置。 - 后续如果要扩展更多priceLevel(比如到5),只需修改循环的
to值和数组初始化长度,无需重复编写冗余代码。
内容的提问来源于stack exchange,提问作者RedFrog
相关产品推荐
相关产品推荐

