Pine Script中sum函数仅返回浮点型且cum统计值作为sum长度参数触发类型错误的解决求助
嘿,这两个问题我之前写Pine Script时也踩过坑,给你一步步拆解解决:
问题1:sum函数返回浮点型,需要整数结果
Pine Script的sum()函数默认返回series[float]类型,哪怕你累加的都是整数数值。要得到整数结果,只需在sum的结果外层包裹int()函数(前提是sum的计算结果本身是整数),示例如下:
// 示例:累加整数后转成整数类型 intSum = int(sum(1, 10)) plot(intSum) // 会显示10,类型为series[integer]
如果你的sum结果可能带小数(比如累加的是浮点数),可以先用round()取整再转int,或者直接用round()得到整数型的浮点数,再根据需求转换。
问题2:sum的length参数类型不匹配错误
你遇到的错误核心是:num是series[float]类型,但sum()的length参数要求是series[integer]。
为什么会这样?
cum(a ? 1 : 0)返回的是series[float]类型——哪怕每次累加的是整数1,cum()函数的返回类型本身就是浮点型,所以plot出来会显示128.0000(带小数后缀),本质还是浮点序列。
解决方法
你需要把num明确转换成series[integer]类型,同时注意sum()的length不能小于1(否则会触发新的错误),具体写法如下:
// 先将cum的结果转成整数类型 num = int(cum(a ? 1 : 0)) // 调用sum时,确保length是整数,同时处理num为0的情况(避免length无效) total = na(num <= 0 ? na : sum(a ? gross : na, num))
如果之前你用int()转换后还是报错,大概率是没处理num为0的场景——当num为0时,sum的length参数是0,这在Pine Script里是不允许的,所以要加条件判断,当num<=0时返回na,否则再调用sum。
另外,如果你用的是Pine Script v4版本,sum()的length参数要求是常量整数(不能是动态的series),这时候可以换一种思路:用cum()替代sum实现累加统计,比如:
// v4版本下替代sum的写法:只在a为true时累加gross total = cum(a ? gross : 0)
这样就能避开length参数的类型限制,同时实现你要的统计效果。
内容的提问来源于stack exchange,提问作者hammm

