如何用两种颜色简化Pine Script中21元素颜色数组定义?
Pine Script 双色数组简化定义方案(解决越界错误)
问题根源
出现数组越界的核心原因是数组初始化长度与后续操作不匹配:要么创建数组时未指定21元素的长度,要么使用array.fill时范围参数超出了数组实际长度。
可行实现方案
直接通过「先创建指定长度的默认数组,再修改首个元素」的方式,既能简化代码,又能避免越界:
//@version=5 indicator("多工具筛选器(简化数组版)", overlay=true) // 定义所需的两种颜色 highlight_cell = color.new(color.blue, 0) default_cell = color.new(color.gray, 20) highlight_text = color.new(color.white, 0) default_text = color.new(color.black, 0) // 初始化21元素的cell_color数组,默认填充通用颜色 cell_color = array.new_color(21, default_cell) // 修改首个元素为高亮色(数组索引从0开始) array.set(cell_color, 0, highlight_cell) // 同理处理text_color数组 text_color = array.new_color(21, default_text) array.set(text_color, 0, highlight_text) // (以下为你的多工具筛选器业务逻辑,可直接复用上述数组) // ... 你的原有筛选器代码 ...
关键逻辑说明
array.new_color(21, default_cell):直接创建包含21个元素的数组,所有元素默认设为通用颜色,避免后续填充时的长度问题。array.set(arr, 0, highlight_color):通过索引0修改首个元素,符合Pine Script数组从0开始计数的规则,不会触发越界。
替代方案(手动填充,适合理解逻辑)
如果不想用默认初始化,也可以先添加首个元素,再批量填充剩余20个:
cell_color = array.new_color() array.push(cell_color, highlight_cell) // 填充20个通用颜色 for i = 0 to 19 array.push(cell_color, default_cell)
这种方式也能得到21元素的数组,但效率略低于第一种方案,适合新手理解数组构建过程。
内容的提问来源于stack exchange,提问作者Zclaws77
相关产品推荐
相关产品推荐

