Pine Script使用变量i时出现语法错误,赋值等号引发异常
Pine Script数组赋值语法错误解决方案
错误原因
你直接用percentage_changes[i] = ...的方式给数组元素赋值,这不符合Pine Script的语法规则——Pine Script不支持通过下标直接赋值数组元素,必须使用内置的数组操作函数。
修复步骤
确保数组已正确初始化
先声明并初始化数组变量,用var关键字确保数组仅在脚本启动时初始化一次:var array<float> percentage_changes = array.new_float()替换赋值方式
将原赋值语句替换为array.set()函数,该函数专门用于修改数组指定索引的元素:array.set(percentage_changes, i, ((open_price_at_end_date - open_price_after_start_date) / open_price_after_start_date) * 100)如果是要新增元素而非修改已有元素,改用
array.push()直接在数组末尾添加值:array.push(percentage_changes, ((open_price_at_end_date - open_price_after_start_date) / open_price_after_start_date) * 100)索引合法性检查
使用array.set()时,必须确保索引i的范围在0到array.size(percentage_changes)-1之间,避免数组越界报错。
完整示例(同日期历史数据对比)
以计算每年同一天的开盘价涨跌幅为例:
//@version=5 indicator("同日期历史涨跌幅对比", overlay=false) // 初始化存储历史开盘价和涨跌幅的数组 var array<float> history_opens = array.new_float() var array<float> change_percentages = array.new_float() // 获取当前K线的月日标识(用于匹配历史同日期) current_month_day = month * 100 + day // 收集历史同日期的开盘价并计算涨跌幅 if month * 100 + day == current_month_day array.push(history_opens, open) // 跳过第一个数据点(无对比基准) if array.size(history_opens) > 1 prev_open = array.get(history_opens, array.size(history_opens)-2) change = ((open - prev_open) / prev_open) * 100 array.push(change_percentages, change) // 在图表上标注涨跌幅 label.new(bar_index, high, str.tostring(change, "%.2f%"), color=change>0?color.green:color.red)
内容的提问来源于stack exchange,提问作者Gaurav Singh Yadav
相关产品推荐
相关产品推荐

