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

Pine Script报错:string类型与string[]类型不兼容如何解决?

问题解决:Pine Script v5类型不兼容错误

错误原因

你遇到的Declared type string is not compatible with assigned type string[]错误,核心原因是错误使用了数组元素访问语法:在Pine Script v5中,自定义数组不能用pairs[i]这种下标方式访问元素,必须使用array.get()函数。直接用下标访问会被编译器误判为将整个数组(string[]类型)赋值给了声明为string类型的pair变量,触发类型不兼容。

同时代码里还有几个逻辑问题:循环内用var声明变量会导致值只初始化一次,无法迭代更新;强度数组未清空会持续累加旧值,导致平均计算错误。

修正后的完整代码

//@version=5
indicator("Currency Strength Indicator", shorttitle="CSI", overlay=false)

// 定义要对比的货币对
var string currencyPairs = input("EURUSD,GBPUSD,AUDUSD,USDJPY", "Currency Pairs")

// 将输入字符串分割为货币对数组
var string[] pairs = str.split(currencyPairs, ",")

// 初始化存储货币强度的数组
var float[] strengths = array.new_float(0)

// 计算每个货币对的强度前,先清空旧数据
array.clear(strengths)

// 遍历每个货币对计算强度
for i = 0 to array.size(pairs) - 1
    // 使用array.get()获取数组元素
    string pair = array.get(pairs, i)
    // 获取货币对日K收盘价(移除var,确保每次迭代更新)
    float pairClose = request.security(pair, "D", close)
    // 计算单货币对强度(避免除以0的情况)
    float currencyStrength = na(pairClose[1]) ? 1 : pairClose / pairClose[1]
    array.push(strengths, currencyStrength)

// 计算平均货币强度(移除var,确保每次更新)
float averageStrength = array.size(strengths) > 0 ? array.avg(strengths) : 1

// 绘制强度线
plot(averageStrength, "Currency Strength", color=color.blue, linewidth=2)

关键修改点说明

  • 数组元素访问:用array.get(pairs, i)替代pairs[i],符合Pine Script v5的数组操作规范。
  • 移除循环内的var关键字:var会让变量仅初始化一次,循环中需要每次迭代获取新的货币对数据,因此必须移除。
  • 清空强度数组:每次计算前用array.clear(strengths)清空旧数据,避免数组无限膨胀导致计算偏差。
  • 添加防除以0判断:当pairClose[1]为空(比如新上市品种)时,默认强度设为1,避免运行时错误。
  • 平均强度的安全判断:当数组为空时默认返回1,防止无数据时出现计算错误。

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:53:25