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 的源代码。
我想要的是定义一个自定义移动平均函数,可以在不同的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 的源代码。