首页 > 解决方案 > 无法将 series[integer] 传递给常见的 Pinescript 命令

问题描述

//@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”(系列 [浮点]、系列 [整数]);可用重载: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))
```

标签: pine-script

解决方案


这是你如何去做的一个例子。您需要预先评估 EMA,然后选择您想要的:

//@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)

在此处输入图像描述


推荐阅读