无法将 series[integer] 传递给常见的 Pinescript 命令
Can't pass series[integer] into common Pinescript commands
//@version=4
study("My Script", overlay=true)
source = input(close)
fastema = ema(source, 9)
aaaa= 3
slot5 = iff((fastema > fastema[1]), aaaa + 3, aaaa + 3)
slot6 = iff((fastema < fastema[1]), aaaa + 4, slot5)
slot7 = iff((fastema > fastema[1]), aaaa + 4, slot6)
slot8 = iff((fastema < fastema[1]), aaaa + 7, slot7)
newema = ema(source, slot8)
第 14 行:无法使用参数调用 'ema' (series[float], series[integer]);可用的重载:ema(series[float], integer) => series[float]
所以基本上我一直在玩弄响应 if 和 else 命令的动态移动平均线,我猜它传递的是整数序列而不是整数。我只是在 pine 函数上才开始注意到它,这些函数只允许系列浮点数、整数格式,这是许多常见的格式,即普通 ema 和普通 ema 是这种策略的理想选择。我真的很想能够将不断变化的条件长度传递给 ema。
这是一个来自堆栈交换的例子,虽然它有点不相关,但它确实编译了所以我认为它暗示了正在发生的事情
```
//@version=4
study("sample", max_bars_back = 200, overlay=true)
var dep=1
if close>open
dep:=dep+1
dep := min(dep, 200) // we needs some limit or must be some condition when
dep := 0
pine_sma(x, y) =>
sum = 0.0
for i = 0 to y - 1
sum := sum + x[i]
sum / y
plot(dep)
plot(pine_sma(close, dep))
```
这是您可以如何着手的示例。您需要预先评估 EMA,然后 select 您想要的:
//@version=4
study("", "", true)
source = input(close)
fastema = ema(source, 9)
aaaa= 3
len1 = aaaa + 10
len2 = aaaa + 50
len3 = aaaa + 100
ma1 = ema(source, len1)
ma2 = ema(source, len2)
ma3 = ema(source, len3)
cond1 = rising(close, 5)
cond2 = rising(close, 10)
cond3 = rising(close, 15)
newema = cond3 ? ma3 : cond2 ? ma2 : cond1 ? ma1 : fastema
plot(fastema, "fastema", color.aqua, 2, transp = 70)
plot(ma1, "ma1", color.aqua, 2, transp = 70)
plot(ma2, "ma2", color.aqua, 2, transp = 70)
plot(ma3, "ma3", color.aqua, 2, transp = 70)
plot(newema, "newema", color.fuchsia, 2)
Sum(src,p) => a = cum(src), a - a[p]
Sma(src,p) => a = cum(src), (a - a[p])/p
方差 ( src , p ) => p == 1 ? 0 : Sma ( src * src , p ) - 拒绝 ( Sma ( src , p ) 2 )
Stdev(src,p) => p == 1 ? 0 : sqrt(Sma(src*src,p) - pow(Sma(src,p),2))
协方差(x,y,p) => Sma(x*y,p) - Sma(x,p)*Sma(y,p)
相关性(x,y,p) => 协方差(x,y,p)/(标准差(x,p)*标准差(y,p))
pchange(x) => x - x[1]
pnchange2(x,y) => x - x[y]
//@version=4
study("My Script", overlay=true)
source = input(close)
fastema = ema(source, 9)
aaaa= 3
slot5 = iff((fastema > fastema[1]), aaaa + 3, aaaa + 3)
slot6 = iff((fastema < fastema[1]), aaaa + 4, slot5)
slot7 = iff((fastema > fastema[1]), aaaa + 4, slot6)
slot8 = iff((fastema < fastema[1]), aaaa + 7, slot7)
newema = ema(source, slot8)
第 14 行:无法使用参数调用 'ema' (series[float], series[integer]);可用的重载:ema(series[float], integer) => series[float]
所以基本上我一直在玩弄响应 if 和 else 命令的动态移动平均线,我猜它传递的是整数序列而不是整数。我只是在 pine 函数上才开始注意到它,这些函数只允许系列浮点数、整数格式,这是许多常见的格式,即普通 ema 和普通 ema 是这种策略的理想选择。我真的很想能够将不断变化的条件长度传递给 ema。
这是一个来自堆栈交换的例子,虽然它有点不相关,但它确实编译了所以我认为它暗示了正在发生的事情
```
//@version=4
study("sample", max_bars_back = 200, overlay=true)
var dep=1
if close>open
dep:=dep+1
dep := min(dep, 200) // we needs some limit or must be some condition when
dep := 0
pine_sma(x, y) =>
sum = 0.0
for i = 0 to y - 1
sum := sum + x[i]
sum / y
plot(dep)
plot(pine_sma(close, dep))
```
这是您可以如何着手的示例。您需要预先评估 EMA,然后 select 您想要的:
//@version=4
study("", "", true)
source = input(close)
fastema = ema(source, 9)
aaaa= 3
len1 = aaaa + 10
len2 = aaaa + 50
len3 = aaaa + 100
ma1 = ema(source, len1)
ma2 = ema(source, len2)
ma3 = ema(source, len3)
cond1 = rising(close, 5)
cond2 = rising(close, 10)
cond3 = rising(close, 15)
newema = cond3 ? ma3 : cond2 ? ma2 : cond1 ? ma1 : fastema
plot(fastema, "fastema", color.aqua, 2, transp = 70)
plot(ma1, "ma1", color.aqua, 2, transp = 70)
plot(ma2, "ma2", color.aqua, 2, transp = 70)
plot(ma3, "ma3", color.aqua, 2, transp = 70)
plot(newema, "newema", color.fuchsia, 2)
Sum(src,p) => a = cum(src), a - a[p]
Sma(src,p) => a = cum(src), (a - a[p])/p
方差 ( src , p ) => p == 1 ? 0 : Sma ( src * src , p ) - 拒绝 ( Sma ( src , p ) 2 )
Stdev(src,p) => p == 1 ? 0 : sqrt(Sma(src*src,p) - pow(Sma(src,p),2))
协方差(x,y,p) => Sma(x*y,p) - Sma(x,p)*Sma(y,p)
相关性(x,y,p) => 协方差(x,y,p)/(标准差(x,p)*标准差(y,p))
pchange(x) => x - x[1]
pnchange2(x,y) => x - x[y]