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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 01:06:18