Pine Script报错求助:sum函数长度参数无效问题修复
Pine Script MACD直方图低点后求和报错解决办法
报错根源:
sum()函数要求长度参数必须大于0,你遇到的问题是变量b在部分K线周期下返回了0甚至负数——大概率是还没出现你定义的MACD直方图低点信号时,b的计算逻辑输出了非正数值,直接塞给sum()就触发了报错。核心修复步骤:
- 给
b加下限校验,确保传入sum()的参数始终>0,比如用math.max(b, 1)替代直接用b; - 先判断是否已经出现过目标低点信号,没出现时返回
na或0,跳过求和计算。
- 给
代码修复示例(假设你用20周期内最低点作为低点信号,替换成你的判断逻辑即可):
// 基础MACD计算 [macdLine, signalLine, histogram] = ta.macd(close, 12, 26, 9) // 定义低点信号(这里是20周期内的直方图最低点) lowSignal = histogram == ta.lowest(histogram, 20) // 记录低点出现的K线位置 lowBarPos = ta.valuewhen(lowSignal, bar_index, 0) // 计算当前K线到低点的周期数 b = bar_index - lowBarPos // 修复:确保长度有效,未出现低点时返回na validSumLength = b > 0 ? b : na // 仅在有效长度下计算求和 sumAfterLow = na(validSumLength) ? na : sum(histogram, validSumLength)更简洁的替代方案:
用ta.barssince()函数替代手动计算b,这个函数会返回距离上次低点信号的周期数,未出现信号时自动返回na,天然避免非正数值问题:barsSinceLow = ta.barssince(lowSignal) // +1是因为barssince返回的是间隔数,求和长度要包含当前K线 sumAfterLow = na(barsSinceLow) ? na : sum(histogram, barsSinceLow + 1)
内容的提问来源于stack exchange,提问作者patrick bouchard
相关产品推荐
相关产品推荐

