TradingView Pine Script V5无绘图问题求助:V1转V5加多时间框架
问题排查与修复方案
核心问题分析
- 自定义函数无返回值:
Quotient函数仅完成内部计算,但未返回结果,导致调用后返回na,后续依赖此函数的redline、aqualine等变量均为无效值,无法正常绘图。 - 循环变量未更新:
HP、Filt、Pk用var声明初始为na,但代码仅计算了临时变量HP_temp、Filt_temp、Pk_temp,未将临时值赋值给原变量,导致后续计算持续使用na,所有指标值最终无效。 - 状态变量错误使用
var:priceup、redup等需要逐K线更新的状态变量,被错误用var声明,仅初始化一次,无法随行情变化。 - 冗余无效代码:单独的
HP_temp行无实际作用,属于冗余代码。
修复后的完整代码
//@version=5 indicator("GG EhlersEOT V5", shorttitle="GG Ehlers V5", overlay=false, timeframe="", timeframe_gaps=true) period = input(20, "Period") q1 = input(0.8, "Q1") q2 = input(0.4, "Q2") src = input(close, "Source") var float HP = na var float Filt = na var float Pk = na Quotient(LPPeriod, K) => pi = 3.1415926 angle = 0.707 * 2 * pi / 100 alpha1 = (math.cos(angle) + math.sin(angle) - 1) / math.cos(angle) a1 = math.exp(-1.414 * pi / LPPeriod) b1 = 2 * a1 * math.cos(1.414 * pi / LPPeriod) c2 = b1 c3 = -a1 * a1 c1 = 1 - c2 - c3 // 完成滤波计算并更新全局变量 HP_temp = math.pow((1 - alpha1 / 2), 2) * (close - 2 * close[1] + close[2]) + 2 * (1 - alpha1) * HP[1] - math.pow((1 - alpha1), 2) * HP[2] Filt_temp = c1 * (HP_temp + HP_temp[1]) / 2 + c2 * Filt[1] + c3 * Filt[2] Pk_temp = math.abs(Filt_temp) > 0.991 * Pk[1] ? math.abs(Filt_temp) : 0.991 * Pk[1] q_val = (Filt_temp + K) / (K * Filt_temp + 1) HP := HP_temp Filt := Filt_temp Pk := Pk_temp q_val // 返回计算后的q值 // 计算指标线数值 redline = Quotient(period, q1) + 2 aqualine = Quotient(period, q2) + 2 avgline = redline - aqualine eotslope = redline - redline[1] // 逐K线更新状态判断 priceup = src > src[1] pricedown = src < src[1] redup = redline > redline[1] reddown = redline < redline[1] c = priceup and reddown ? color.red : pricedown and redup ? color.blue : color.black // 绘制指标 plot(avgline, color=color.yellow) plot(eotslope, color=c) plot(redline, color=color.red) plot(aqualine, color=color.aqua) hline(0)
关键修复说明
- 给
Quotient函数添加返回值,并将临时计算结果赋值给全局变量HP、Filt、Pk,保证循环计算的连续性。 - 移除
priceup、redup等状态变量的var声明,让它们随每根K线动态更新。 - 删除冗余的无效代码行,将计算逻辑整合到函数内部,确保变量更新逻辑正确。
内容的提问来源于stack exchange,提问作者Ying
相关产品推荐
相关产品推荐

