TradingView Pine Script中ta.rma动态length类型错误求助
解决Pine Script v5中ta.rma动态length的类型不匹配问题
问题根源
ta.rma()的length参数要求是simple int(脚本启动时就能确定的静态整数),但用if语句根据syminfo.ticker赋值后,length会被识别为series int(随K线变化的序列值),两种类型不兼容,所以触发报错。
解决方案
根据需求场景,分两种处理方式:
场景1:length仅基于标的ticker(脚本加载时确定,后续不变)
用var关键字定义length,确保它只在脚本初始化时赋值一次,保持为simple int类型:
//@version=5 indicator("静态动态RMA示例", overlay=false) // 仅在脚本加载时赋值一次,length保持为simple int var int length = syminfo.ticker == "SPY" ? 10 : 20 // 正常调用ta.rma rma_result = ta.rma(high - low, length) plot(rma_result, color=color.new(color.blue, 0))
var关键字的作用是让变量只在第一根K线时初始化,后续不再更新,完美适配ta.rma对参数类型的要求。
场景2:length需要随行情动态变化(比如根据价格条件调整)
原生ta.rma不支持动态length,这时候可以自定义一个支持序列型length的RMA计算函数:
//@version=5 indicator("动态RMA自定义实现", overlay=false) // 自定义支持series int类型length的RMA函数 f_dynamic_rma(src, length) => alpha = 1 / length var float rma_val = na // 初始化或迭代更新RMA值 rma_val := na(rma_val) ? src : alpha * src + (1 - alpha) * rma_val rma_val // 这里可以写任意动态赋值逻辑,比如根据标的ticker length = syminfo.ticker == "SPY" ? 10 : 20 // 调用自定义函数 rma_result = f_dynamic_rma(high - low, length) plot(rma_result, color=color.new(color.red, 0))
自定义函数通过逐K线计算alpha并更新RMA值,兼容动态变化的length参数。
内容的提问来源于stack exchange,提问作者Rob H
相关产品推荐
相关产品推荐

