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

Pine Script中sum函数仅返回浮点型且cum统计值作为sum长度参数触发类型错误的解决求助

解决你遇到的两个Pine Script问题

嘿,这两个问题我之前写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:14:07