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

