You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script中for循环与数组的语法错误修复请求

修复Pine Script v4的EMA计算语法错误

错误原因分析

  1. 输入类型与默认值不匹配:input.integer仅支持单个整数输入,不能直接传入多个周期值,且defval使用string()函数的方式完全错误,这是触发语法错误的核心原因。
  2. 数组赋值方式错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:18:23