Pine Script中for循环与数组的语法错误修复请求
修复Pine Script v4的EMA计算语法错误
错误原因分析
- 输入类型与默认值不匹配:
input.integer仅支持单个整数输入,不能直接传入多个周期值,且defval使用string()函数的方式完全错误,这是触发语法错误的核心原因。 - 数组赋值方式错误:Pine Script v4中不支持通过
数组名[下标] = 值的方式直接赋值,必须使用array.set()函数操作数组元素。
修复后的代码
要实现多周期EMA计算,我们改用字符串输入接收多个周期值,再分割为整数数组;同时修正数组赋值逻辑:
//@version=4 study("Solfeggio Waves Dashboard", overlay=false) // 输入多个EMA周期(用逗号分隔) ema_periods_str = input(title="EMA Periods", type=input.string, defval="9,21,50,100,200") // 将字符串分割为整数数组 ema_periods = array.new_integer() periods_list = str.split(ema_periods_str, ",") for period_str in periods_list period = tonumber(period_str) if period != na array.push(ema_periods, period) // 计算并存储EMA值 ema_values = array.new_float(size = array.size(ema_periods)) for i = 0 to array.size(ema_periods) - 1 current_period = array.get(ema_periods, i) array.set(ema_values, i, ema(close, current_period)) // 示例:打印第一个EMA值用于测试 if barstate.islast label.new(bar_index, high, str.tostring(array.get(ema_values, 0)))
关键修复点说明
- 将
input.integer改为input.string,允许用户输入逗号分隔的多个周期值,再通过str.split()分割后转为整数数组。 - 使用
array.set(ema_values, i, ...)替代ema_values[i] = ...完成数组元素赋值。 - 添加类型校验,确保转换后的周期值有效(非空)。
内容的提问来源于stack exchange,提问作者Matias Ignacio
相关产品推荐
相关产品推荐

