如何在第20根站上SMA200的K线绘制买入标签(PineScript求助)
修正后的PineScript代码及说明
原代码的核心问题是plotshape的触发条件错误——它会在所有收盘价高于SMA200的K线上绘制标记,而非仅在连续第20根满足条件的K线处触发。
以下是修正后的代码:
//@version=5 indicator("20th Candlestick Above SMA200", overlay=true) MA_long = ta.sma(close, 200) var barsAboveMA = 0 // 维护连续高于SMA200的K线计数 if close > MA_long barsAboveMA := barsAboveMA + 1 else barsAboveMA := 0 // 仅在连续第20根满足条件时绘制买入标签 plotshape(barsAboveMA == 20 ? low : na, style=shape.labelup, color=color.green, text="买入", location=location.bottom, size=size.normal)
关键修改点:
- 调整
plotshape触发条件为barsAboveMA == 20,确保仅在连续第20根收盘价高于SMA200时绘制标签。 - 将
shape.cross替换为shape.labelup并添加text="买入",直接显示符合需求的「买入」标签,比交叉标记更直观。
如果需要避免在连续高于的后续K线(如第21、22根)重复触发,可以额外增加前一根计数的判断:
// 仅在从19根跳转到20根时触发,避免连续绘制 plotshape(barsAboveMA == 20 and barsAboveMA[1] == 19 ? low : na, style=shape.labelup, color=color.green, text="买入", location=location.bottom, size=size.normal)
内容的提问来源于stack exchange,提问作者Liang Wee
相关产品推荐
相关产品推荐

