Pine Script v5中IF语句问题:条件满足时无法正常绘制指标
Pine Script v5 中IF语句导致指标无法绘制的问题分析与修复
你的代码存在几个语法和逻辑错误,导致指标无法正常运行,具体问题和修复方案如下:
问题点说明
- 关键字大小写错误:Pine Script是大小写敏感语言,条件判断关键字必须是小写的
if,而不是大写的If,这会直接触发语法错误。 - 布尔值与字符串错误比较:
show_threeEma是input.bool类型的布尔变量,你在条件里写了show_threeEma == "Show"——布尔值(true/false)不能和字符串进行比较,应该直接使用变量本身。 - 逻辑条件歧义:原条件的运算符组合没有明确分组,虽然
and优先级高于or,但缺乏括号会导致逻辑判断的可读性和准确性下降。 - 代码块包裹缺失:
if条件要控制plot语句的执行,需要将plot放在if的代码块中(用大括号{}包裹),否则语法会出错。
修正后的代码
标准修复版本
showMA = input.string(group="GENERAL SETTINGS", title="Moving Averages:", defval="EMA", options=["EMA", "VWAP", "Both", "None"]) show_threeEma = input.bool(group="EMA - Exponensial Moving Average", title="233-EMA", defval=true, inline="ema") threeEma = 233 ema_space = 4 // Dash Spacing threeEmaLength = ta.ema(close, threeEma) //233-EMA // 修正后的条件判断,明确分组逻辑并修复语法问题 if (showMA == "EMA" and show_threeEma) or (showMA == "Both" and show_threeEma) plot(bar_index % ema_space != 0 ? threeEmaLength : na, style=plot.style_linebr, linewidth=2, color=color.new(color.silver, 25), editable=false, title="233-EMA")
简化逻辑版本(更简洁清晰)
由于两个分支都依赖show_threeEma为true,可以提取公共条件简化代码:
showMA = input.string(group="GENERAL SETTINGS", title="Moving Averages:", defval="EMA", options=["EMA", "VWAP", "Both", "None"]) show_threeEma = input.bool(group="EMA - Exponensial Moving Average", title="233-EMA", defval=true, inline="ema") threeEma = 233 ema_space = 4 // Dash Spacing threeEmaLength = ta.ema(close, threeEma) //233-EMA // 简化后的条件判断 if show_threeEma and (showMA == "EMA" or showMA == "Both") plot(bar_index % ema_space != 0 ? threeEmaLength : na, style=plot.style_linebr, linewidth=2, color=color.new(color.silver, 25), editable=false, title="233-EMA")
内容的提问来源于stack exchange,提问作者Shade
相关产品推荐
相关产品推荐

