Tradingview Pine Script第15行')'语法错误排查求助
问题说明
在TradingView平台运行Pine Script v5编写的多时间框架赫尔移动平均线(HMA MTF)指标时,平台提示第15行存在语法错误:Line 15: Syntax error at input ')',已尝试所有已知代码排查方法仍未定位问题。
注:原发帖时因Stack Overflow提示「你的发帖内容大部分为代码,请补充更多细节」无法提交,重复添加的多段提示文字可直接忽略。
错误原因定位
代码共存在4处问题,其中第一处直接触发第15行语法报错:
- 第15行HMA计算公式末尾多写1个右括号,括号数量不匹配,直接触发语法错误
- HMA计算函数内判断涨跌方向时,引用了不存在的变量
_HMA,会触发运行时错误 request.security函数返回值解构时,涨跌状态变量名前多加了下划线,和后续颜色赋值逻辑中调用的变量名不匹配,会触发未定义变量错误- 代码中调用了
f_res_to_string()函数实现时间框架文本转换,但全篇未定义该函数,会触发函数不存在的运行时错误
修复方案
针对上述问题逐一修正即可:
- 删除第15行公式末尾多余的右括号,保证括号匹配
- 将涨跌判断语句中不存在的
_HMA替换为实际计算得到的_xHMA变量 - 去掉
request.security返回值中涨跌状态变量名前多余的下划线,和后续调用的变量名保持一致 - 补充缺失的
f_res_to_string()时间框架文本转换函数定义
修复后的完整可运行代码如下:
//@version=5 indicator(title='Hull MA Multi-Time Frame', shorttitle='HMA MTF', overlay=false) PDS = input.int(7, title = "Periods (PDS)", minval=2) SRC = input(close, title='Source') HMA1_res = input.timeframe('15', title = "HMA1") HMA2_res = input.timeframe('30', title = "HMA2") HMA3_res = input.timeframe('60', title = "HMA3") HMA4_res = input.timeframe('240', title = "HMA4") // 补充缺失的时间框架转字符串函数 f_res_to_string(_res) => _res == "" ? "当前周期" : _res f_HMA(_PDS, _SRC) => // 删除多余的右括号 _xHMA = ta.wma(2 * ta.wma(_SRC, _PDS / 2) - ta.wma(_SRC, _PDS), math.round(math.sqrt(_PDS))) // 修正错误的变量名引用 _xHMA_is_up = _xHMA >= _xHMA[1] [_xHMA, _xHMA_is_up] // 去掉解构变量名前多余的下划线 [xHMA1, xHMA1_is_up] = request.security(syminfo.tickerid, HMA1_res, f_HMA(PDS, SRC)) HMA1_color = xHMA1_is_up ? color.green : color.red HMA1_text = f_res_to_string(HMA1_res) + "=" + str.tostring(xHMA1, "#.00") plot(xHMA1, color = HMA1_color, linewidth=1) var label HMA1_label = label.new(x = na, y = na, color = #00000000, size = size.normal, style = label.style_label_left) label.set_xy(HMA1_label, x = bar_index, y = xHMA1) label.set_textcolor(HMA1_label, HMA1_color) label.set_text(HMA1_label, HMA1_text) [xHMA2, xHMA2_is_up] = request.security(syminfo.tickerid, HMA2_res, f_HMA(PDS, SRC)) HMA2_color = xHMA2_is_up ? color.green : color.red HMA2_text = f_res_to_string(HMA2_res) + "=" + str.tostring(xHMA2, "#.00") plot(xHMA2, color = HMA2_color, linewidth=1) var label HMA2_label = label.new(x = na, y = na, color = #00000000, size = size.normal, style = label.style_label_left) label.set_xy(HMA2_label, x = bar_index, y = xHMA2) label.set_textcolor(HMA2_label, HMA2_color) label.set_text(HMA2_label, HMA2_text) [xHMA3, xHMA3_is_up] = request.security(syminfo.tickerid, HMA3_res, f_HMA(PDS, SRC)) HMA3_color = xHMA3_is_up ? color.green : color.red HMA3_text = f_res_to_string(HMA3_res) + "=" + str.tostring(xHMA3, "#.00") plot(xHMA3, color = HMA3_color, linewidth=1) var label HMA3_label = label.new(x = na, y = na, color = #00000000, size = size.normal, style = label.style_label_left) label.set_xy(HMA3_label, x = bar_index, y = xHMA3) label.set_textcolor(HMA3_label, HMA3_color) label.set_text(HMA3_label, HMA3_text) [xHMA4, xHMA4_is_up] = request.security(syminfo.tickerid, HMA4_res, f_HMA(PDS, SRC)) HMA4_color = xHMA4_is_up ? color.green : color.red HMA4_text = f_res_to_string(HMA4_res) + "=" + str.tostring(xHMA4, "#.00") plot(xHMA4, color = HMA4_color, linewidth=1) var label HMA4_label = label.new(x = na, y = na, color = #00000000, size = size.normal, style = label.style_label_left) label.set_xy(HMA4_label, x = bar_index, y = xHMA4) label.set_textcolor(HMA4_label, HMA4_color) label.set_text(HMA4_label, HMA4_text)
验证说明
- 修正后第15行的语法报错会直接消除,代码可正常编译运行
- 原有多周期HMA计算、涨跌颜色区分、线端数值标签展示的逻辑完全保留,未做功能改动
- 补充的时间框架转换函数兼容默认周期选择,选择当前图表周期时标签会显示「当前周期」,可读性更好
内容的提问来源于stack exchange,提问作者Hersh Stern
相关产品推荐
相关产品推荐

