无法将 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]