Pine 脚本如何在自声明函数中的许多 if-else 语句中 return?

Pine script How to return in many if-else statement in self declared function?

我想要的是定义一个自定义移动平均函数,可以在不同的MA类型中选择一种MA类型。

我试过:


ma_type = 'EMA'
ma(source, length) =>
    s = sma(source, length)
    e = ema(source, length)
    if ma_type == 'EMA'
        e
    if ma_type == 'SMA'
        s
    ...

但是,这是行不通的!

我没看懂? 谁能纠正我?非常感谢。

您可以将类型作为自定义函数的参数

f_ma(_source, _length, _type) =>
    _s = sma(_source, _length)
    _e = ema(_source, _length)
    float _ma = na
    if _type == "EMA"
        _ma := _e
    else if _type == "SMA"
        _ma := _s
    _ma


ma = f_ma(close, 20, "EMA")
plot(ma)

也可以像这样缩短为三元运算:

f_ma(_source, _length, _type) =>
    _ma = _type == "EMA" ? ema(_source, _length) : _type == "SMA" ? sma(_source, _length) : na
    _ma

阐明它发生的原因:每个 if-block returns 一些值,以及函数 returns 在它内部返回的最后一个值。在你的情况下,你的第一个 if-block returns e 的值,你的第二个 if-block returns na 因为条件这不是真的。因此,作为一个整体的函数 returns 最后一个值在它内部返回,即 na.

使用else if是一种解决方法,给变量赋值并返回变量是另一种方法。有关更多示例,除了上面已经发布的示例之外,您还可以查看内置指标 MA Ribbon 和 Average True Range 的源代码。