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
相关产品推荐
相关产品推荐

