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

TradingView Pine Script v5 HAMI Pivot H/L指标Sma报错修复求助

问题根因

Pine Script v5 要求所有自定义计算函数必须在每根K线计算时被稳定调用,不能放在条件分支/三元运算符的分支里出现「部分K线调用、部分K线不调用」的情况。你遇到的报错来自Variance函数内的三元判断:当参数p=1时,分支直接返回0,不会执行内部的Sma函数调用,破坏了执行一致性,触发编译器校验报错。

修复方法

把Sma函数的调用从三元运算符的分支中提取出来,保证无论p取何值,Sma都会在每根K线执行,再根据条件返回对应计算结果即可,原有计算逻辑完全不变。

修复后完整代码
//@version=5
indicator('HAMI Pivot H/L ', overlay=true, max_bars_back=5000)

//Basic
length = input.int(30, group='Basic Settings', tooltip='Pivot length. Use higher values for having lines connected to more significant pivots')
lookback = input.int(3, minval=1, group='Basic Settings', tooltip='Number of lines connecting a pivot high/low to display')
Slope = input.float(1., minval=-1, maxval=1, step=0.1, group='Basic Settings', tooltip='Allows to multiply the linear regression slope by a number within -1 and 1')

//Style
ph_col = input.color(#2157f3, 'Pivot High Lines Color', group='Line Colors')
pl_col = input.color(#ff1100, 'Pivot Low Lines Color', group='Line Colors')

//──────────────────────────────────────────────────────────────────────────────
Sma(src, p) =>
    a = ta.cum(src)
    (a - a[math.max(p, 0)]) / math.max(p, 0)
Variance(src, p) =>
    // 提前提取Sma调用,保证每根K线都执行
    sma_src_sq = Sma(src * src, p)
    sma_src = Sma(src, p)
    p == 1 ? 0 : sma_src_sq - math.pow(sma_src, 2)
Covariance(x, y, p) =>
    Sma(x * y, p) - Sma(x, p) * Sma(y, p)
//──────────────────────────────────────────────────────────────────────────────
n = bar_index
ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)
//──────────────────────────────────────────────────────────────────────────────
varip ph_array = array.new_float(0)
varip pl_array = array.new_float(0)
varip ph_n_array = array.new_int(0)
varip pl_n_array = array.new_int(0)
if ph
    array.insert(ph_array, 0, ph)
    array.insert(ph_n_array, 0, n)
if pl
    array.insert(pl_array, 0, pl)
    array.insert(pl_n_array, 0, n)
//──────────────────────────────────────────────────────────────────────────────
val_ph = ta.valuewhen(ph, n - length, lookback - 1)
val_pl = ta.valuewhen(pl, n - length, lookback - 1)
val = math.min(val_ph, val_pl)
k = n - val > 0 ? n - val : 2
slope = Covariance(close, n, k) / Variance(n, k) * Slope
var line ph_l = na
var line pl_l = na
if barstate.islast
    for i = 0 to lookback - 1 by 1
        ph_y2 = array.get(ph_array, i)
        ph_x1 = array.get(ph_n_array, i) - length
        pl_y2 = array.get(pl_array, i)
        pl_x1 = array.get(pl_n_array, i) - length
        ph_l := line.new(ph_x1, ph_y2, ph_x1 + 1, ph_y2 + slope, extend=extend.right, color=ph_col)
        pl_l := line.new(pl_x1, pl_y2, pl_x1 + 1, pl_y2 + slope, extend=extend.right, color=pl_col)

注:原代码末尾多余的孤立pl_l语句无实际作用,已删除,不影响指标逻辑。

内容的提问来源于stack exchange,提问作者Rashid Alsuwaidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:57:15