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
相关产品推荐
相关产品推荐

