如何编写脚本实现SMA50高于SMA200时仅绘制MACD买入信号及报错修复
Pine Script错误排查与修复方案
错误原因
Pine Script v4对代码缩进有严格要求:if 条件对应的代码块必须缩进4个空格或1个制表符,你当前代码中两个if判断后的所有代码行都没有做缩进处理,不符合语法规范,因此触发了输入不匹配的报错。
另外还有更符合Pine Script开发习惯的优化方案:不需要将变量定义和绘图函数放在if块中,直接在信号判断条件里叠加SMA50和SMA200的大小限制即可,逻辑更简洁,也能从根源上避免缩进错误。
修复后的完整代码
//@version=4 study("Testing MACD Strategy", overlay=true) fastLength = input(12) slowlength = input(26) MACDLength = input(9) MACD = ema(close, fastLength) - ema(close, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD // SMA参数设置 len50 = input(50, minval=1, title="SMA 50") len200 = input(200, minval=1, title="SMA 200") src50 = input(close, title="SMA 50 Source") src200 = input(close, title="SMA 200 Source") sma50 = sma(src50, len50) sma200 = sma(src200, len200) plot(sma50, color=color.blue, linewidth=3, title="SMA 50") plot(sma200, color=color.red, linewidth=4, title="SMA 200") // 合并条件判断信号,无需嵌套if MACD_buy = crossover(delta, 0) and sma50 > sma200 plotshape(MACD_buy, title='MACD BUY', style=shape.triangleup, text='B', location=location.belowbar, color=#00BCD4, textcolor=color.gray, size=size.tiny) MACD_sell = crossunder(delta, 0) and sma50 < sma200 plotshape(MACD_sell, title='MACD SELL', style=shape.triangledown, text='S', location=location.abovebar, color=#E040FB, textcolor=color.gray, size=size.tiny)
如果你要保留原有if块的写法,只需要给if后的代码统一加缩进即可,示例如下:
if sma50 > sma200 MACD_buy = crossover(delta, 0) plotshape(MACD_buy, title='MACD BUY', style=shape.triangleup, text='B', location=location.belowbar, color=#00BCD4, textcolor=color.gray, size=size.tiny) if sma50 < sma200 MACD_sell = crossunder(delta, 0) plotshape(MACD_sell, title='MACD SELL', style=shape.triangledown, text='S', location=location.abovebar, color=#E040FB, textcolor=color.gray, size=size.tiny)
内容的提问来源于stack exchange,提问作者Alpha
相关产品推荐
相关产品推荐

