Pine Script中for循环运行异常 平均持仓量指标绘图结果不符合预期
问题原因分析
- 持久化变量未清零:你用
var声明的totaloi是全局持久化变量,只会在指标第一次加载时初始化一次,后续每根K线执行for循环时,都会沿用上一根K线计算完的totaloi值持续累加,不会重置为0,自然会出现数值持续递增的问题。 - 累加逻辑重复:你在循环内先把单年持仓量加到
totaloi,又把累计后的totaloi加到总和y里,相当于做了重复累计,最终结果不是各年度持仓量的和,而是累计值的和,完全偏离平均持仓的计算目标。 - 循环计数与分母不匹配:你的循环范围是
i=0 to lookback*52 step 52,最终会取到lookback+1个样本点(包含当前最新的持仓值),但你最后除以的是lookback,平均值计算分母错误。 - 存在冗余变量:代码中声明的
xx、z两个变量完全没有被使用,属于无效代码。
修复后代码
openint = security("QUANDL:CFTC/"+code+"|0", "D", close) float sum_oi = 0.0 // 循环取过去lookback年的同期持仓量累加 for i = 1 to lookback sum_oi := sum_oi + nz(openint[i*52]) // 计算平均值 avg_oi = sum_oi / lookback plot(avg_oi, title="平均持仓量")
补充说明
如果需要把当前年度的持仓量也纳入平均值计算,把循环起始值改为0,同时把分母改为
lookback+1即可。
内容的提问来源于stack exchange,提问作者Ben C-H
相关产品推荐
相关产品推荐

