You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script创建整数数组及EMA函数参数报错问题排查

Pine Script 相关问题解答

1. 如何在Pine Script中创建简单整数数组?

在Pine Script中创建整数数组主要通过array.from()函数实现,直接传入整数或整数变量即可:

  • 创建固定值的整数数组:
    // 创建包含固定整数的数组
    intArray = array.from(1, 3, 5, 7, 9)
    
  • 用输入变量创建整数数组:
    a = input.int(10)
    b = input.int(20)
    intArray = array.from(a, b)
    

如果需要创建空的整数数组,可使用array.new_int(),后续通过array.push()添加元素:

// 创建空整数数组
emptyIntArray = array.new_int()
// 向数组添加元素
array.push(emptyIntArray, 5)

2. EMA调用报错的原因及解决方法

报错原因

你遇到的Cannot call 'ema' with 'length'=series[integer]. The argument should be of type: integer错误,核心是参数类型不匹配:

  • input()函数返回的是series[integer]类型(即使设置了固定默认值,它本质仍是随K线周期变化的序列值);
  • 存入数组后,array.get()取出的结果还是series[integer];
  • 而ema()函数的length参数要求的是编译时确定的常量整数(int类型,非序列值),因此触发类型错误。

解决方法

根据不同需求,有三种可行方案:

方案一:直接使用输入变量作为EMA长度

如果仅调用单个EMA,跳过数组存储,直接传入输入变量即可:

// Define EMA lengths
length1 = input(9)
length2 = input(21)
length3 = input(34)
length4 = input(55)
length5 = input(89)

// 直接用输入变量作为length参数
plot(ema(close, length2))

方案二:使用常量数组存储长度(适合固定不调整的场景)

若不需要用户调整EMA长度,可将数组定义为const常量数组,此时array.get()返回的是常量整数,符合ema()的参数要求:

// 定义常量整数数组,长度固定不可动态调整
const int[] emaLengths = array.from(9, 21, 34, 55, 89)

plot(ema(close, array.get(emaLengths, 1)))

方案三:批量绘制EMA(支持用户调整输入)

若需要批量处理多个EMA且允许用户调整长度,可通过单独输入结合循环实现:

// 单独定义每个EMA的输入长度
len9 = input(9, title="EMA 9")
len21 = input(21, title="EMA 21")
len34 = input(34, title="EMA 34")
len55 = input(55, title="EMA 55")
len89 = input(89, title="EMA 89")

// 循环绘制所有EMA
emaList = [ema(close, len9), ema(close, len21), ema(close, len34), ema(close, len55), ema(close, len89)]
colorList = [color.red, color.blue, color.green, color.orange, color.purple]

for i = 0 to 4
    plot(emaList[i], color=colorList[i], title="EMA " + str.tostring([9,21,34,55,89][i]))

内容的提问来源于stack exchange,提问作者Moss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:13:10