Pine Script V1转V5:linreg函数转换遇语法错误求助
Pine Script V1转V3/V5时linreg函数的语法错误解决
报错情况
将Pine Script V1的linreg函数转换为V3(后续自动转V5)时,先后触发两个语法错误:
syntax error at input 'end of line without line continuation'
mismatched input ',' expecting ')'
V1原linreg代码
val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)
错误的参数理解与V3代码
用户错误拆分了linreg的参数逻辑,误以为:
- source参数:
source - avg(highest(high, lengthKC)), avg(lowest(low, lengthKC)) - length参数:
avg(sma(close,lengthKC)) - offset参数:
lengthKC,0
基于错误理解写出的V3代码:
val = linreg((source - avg(highest(high, lengthKC)), avg(lowest(low, lengthKC))), (avg(sma(close,lengthKC))), (lengthKC,0))
完整错误代码
study(shorttitle = "SQZMOM_LB", title="Squeeze Momentum Indicator [LazyBear]", overlay=false) length = input(20, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = input(true, title="Use TrueRange (KC)", type=bool) // Calculate BB source = close basis = sma(source, length) dev = multKC * stdev(source, length) upperBB = basis + dev lowerBB = basis - dev // Calculate KC ma = sma(source, lengthKC) range = useTrueRange ? tr : (high - low) rangema = sma(range, lengthKC) upperKC = ma + rangema * multKC lowerKC = ma - rangema * multKC sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC) sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC) noSqz = (sqzOn == false) and (sqzOff == false) val = linreg((source - avg(highest(high, lengthKC)), avg(lowest(low, lengthKC))), (avg(sma(close,lengthKC))), (lengthKC,0)) bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon)) scolor = noSqz ? blue : sqzOn ? black : gray plot(val, color=bcolor, style=histogram, linewidth=4) plot(0, color=scolor, style=cross, linewidth=2)
问题根源与修正方案
问题根源
原V1代码仅对linreg的第一个参数做了换行处理,并未拆分参数。linreg的三个合法参数应为:
- source:完整计算式
source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)), sma(close, lengthKC)) - length:
lengthKC - offset:
0
用户错误拆分第一个参数,还替换了length和offset的合法值,导致语法结构完全混乱。
修正后的V3代码
将错误的val = ...行替换为:
val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)), sma(close, lengthKC)), lengthKC, 0)
适配V5的完整代码(可选)
若要直接转为V5,需调整函数命名与输入类型:
indicator(shorttitle = "SQZMOM_LB", title="Squeeze Momentum Indicator [LazyBear]", overlay=false) length = input(20, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool) // Calculate BB source = close basis = ta.sma(source, length) dev = multKC * ta.stdev(source, length) upperBB = basis + dev lowerBB = basis - dev // Calculate KC ma = ta.sma(source, lengthKC) range = useTrueRange ? ta.tr : (high - low) rangema = ta.sma(range, lengthKC) upperKC = ma + rangema * multKC lowerKC = ma - rangema * multKC sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC) sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC) noSqz = not sqzOn and not sqzOff val = ta.linreg(source - ta.avg(ta.avg(ta.highest(high, lengthKC), ta.lowest(low, lengthKC)), ta.sma(close, lengthKC)), lengthKC, 0) bcolor = val > 0 ? (val > nz(val[1]) ? color.lime : color.green) : (val < nz(val[1]) ? color.red : color.maroon) scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray plot(val, color=bcolor, style=plot.style_histogram, linewidth=4) plot(0, color=scolor, style=plot.style_cross, linewidth=2)
内容的提问来源于stack exchange,提问作者honeybadger21
相关产品推荐
相关产品推荐

