You need to enable JavaScript to run this app. Pine Script自定义函数多if-else分支如何返回?如何实现可切换类型的MA函数?
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script自定义函数多if-else分支如何返回?如何实现可切换类型的MA函数?

自定义移动平均函数修正方案

核心问题原因

  • Pine Script语法要求自定义函数的所有执行路径必须有明确返回值,原有代码仅覆盖了SMA、EMA两种类型的返回逻辑,没有兜底返回分支,当ma_type取值不匹配时会因为无返回值触发报错
  • 代码中的...是无效语法,不能作为占位符在正式代码中使用
  • 可选优化建议:将MA类型作为入参传入函数,避免依赖全局变量,函数复用性更高

可运行修正代码

版本1:保留原有全局变量调用逻辑

//@version=5
indicator("自定义MA示例", overlay=true)
ma_type = input.string("EMA", title="MA类型", options=["SMA", "EMA", "WMA", "SMMA"])
length = input.int(20, title="计算周期", minval=1)

ma(source, length) =>
    s = ta.sma(source, length)
    e = ta.ema(source, length)
    w = ta.wma(source, length)
    smma = ta.rma(source, length)
    switch ma_type
        "SMA" => s
        "EMA" => e
        "WMA" => w
        "SMMA" => smma
        => s // 兜底逻辑:未匹配到类型时默认返回SMA,保证必有返回值

// 调用示例
plot(ma(close, length), title="自定义MA线", color=color.new(color.blue, 0))

版本2:高复用性写法(推荐)

将MA类型作为参数传入函数,支持在同一脚本内同时计算多种不同类型的移动平均

//@version=5
indicator("自定义MA示例", overlay=true)
ma_type = input.string("EMA", title="MA类型", options=["SMA", "EMA", "WMA", "SMMA"])
length = input.int(20, title="计算周期", minval=1)

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "WMA" => ta.wma(source, length)
        "SMMA" => ta.rma(source, length)
        => ta.sma(source, length) // 兜底逻辑

// 调用示例
plot(ma(close, length, ma_type), title="自定义MA线", color=color.new(color.blue, 0))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:42:04