Pine Script合并DMI等指标时SmoothedTrueRange重复声明错误求助
Pine Script变量重名报错修复方案
这个报错的核心原因是同一作用域下变量重复声明:你原有脚本里的旧DMI模块已经定义过SmoothedTrueRange变量,新引入的开源平滑DMI代码中存在同名的变量声明,触发了Pine Script的语法校验规则。
修复可任选以下一种方案:
- 直接删除旧DMI模块的完整代码。如果是全量替换原有DMI逻辑,大概率是旧DMI代码没有清理干净,残留了
SmoothedTrueRange的声明行,找到所有旧DMI相关的计算代码删除,仅保留新的平滑DMI代码即可解决。 - 重命名冲突变量。如果需要同时保留新旧两个DMI模块做效果对比,任选其中一个模块的
SmoothedTrueRange变量改名,比如把新模块的变量改为SmoothedTrueRange_Smooth,同时同步修改该模块下所有引用这个变量的代码行即可。 - 封装独立作用域。把其中一个DMI模块的代码封装为自定义函数,函数内部的变量属于局部作用域,不会和全局变量产生冲突,参考封装示例:
// 封装平滑DMI为自定义函数,避免变量冲突 f_smoothDMI(length) => SmoothedTrueRange = ta.sma(ta.tr, length) // 剩余平滑DMI的计算逻辑写在函数内部 [diPlus, diMinus, adx] // 最后返回你需要用到的DMI指标值
如果修复后还有其他DMI相关变量(比如SmoothedPlusDirectionalMovement、SmoothedMinusDirectionalMovement)报同类错误,用同样的逻辑处理即可。
内容的提问来源于stack exchange,提问作者Krishnendu Bhattacharyya
相关产品推荐
相关产品推荐

