Pine Script指标优化需求:仅在新高/新低形成时显示箭头
Pine Script 指标优化:仅在特定条件下显示突破计数标签
需求说明
原指标在任意突破时都会显示计数标签,需要优化为:
- 仅在看涨突破后形成新低,且
bosLow确实被更新为更低值时,显示看跌突破计数标签 - 仅在看跌突破后形成新高,且
bosHigh确实被更新为更高值时,显示看涨突破计数标签
修改后的完整代码
//@version=5 indicator(title='y.z test ind', shorttitle='y.z test ind', overlay=true) // 结构高低点变量 var float bosHigh = na var float bosLow = na // 初始化高低点 if na(bosHigh) bosHigh := high if na(bosLow) bosLow := low // 突破状态与计数变量 var bool bearishBreak = false var bool bullishBreak = false var int bearishBreakCount = 0 var int bullishBreakCount = 0 // 新高/新低标记变量 var bool newLowFormed = false var bool newHighFormed = false // 绘制突破计数标签的函数 f_plotBreakCount(_breakCount, _price, _isBullish) => label.new(x=bar_index, y=_price, text=str.tostring(_breakCount), style=label.style_label_down, color=_isBullish ? color.red : color.green, yloc=_isBullish ? yloc.abovebar : yloc.belowbar, textcolor=color.white) // 看跌突破(收盘价突破bosHigh)逻辑 if close > bosHigh // 记录突破前的bosLow基准值,用于后续判断是否真的更新了低点 float prevBosLow = bosLow bosHigh := high bosLow := low bearishBreak := true bullishBreak := false bullishBreakCount := 0 bearishBreakCount += 1 newLowFormed := false int i = 1 bool waveFound = true while waveFound and i < 2000 if close[i] < open[i] if close[i] < low[i+1] waveFound := false newLowFormed := true // 更新bosLow为历史更低点 if low[i] < bosLow bosLow := low[i] i += 1 // 仅当形成新低且bosLow确实比突破前更低时,才显示标签 if newLowFormed and bosLow < prevBosLow f_plotBreakCount(bearishBreakCount, bosLow, false) // 看涨突破(收盘价突破bosLow)逻辑 if close < bosLow // 记录突破前的bosHigh基准值,用于后续判断是否真的更新了高点 float prevBosHigh = bosHigh bosLow := low bosHigh := high bearishBreak := false bullishBreak := true bearishBreakCount := 0 bullishBreakCount += 1 newHighFormed := false int i = 1 bool waveFound = true while waveFound and i < 2000 if close[i] > open[i] if close[i] > high[i+1] waveFound := false newHighFormed := true // 更新bosHigh为历史更高点 if high[i] > bosHigh bosHigh := high[i] i += 1 // 仅当形成新高且bosHigh确实比突破前更高时,才显示标签 if newHighFormed and bosHigh > prevBosHigh f_plotBreakCount(bullishBreakCount, bosHigh, true) // 绘制结构高低线 plot(title='BosHigh', series=bosHigh, color=color.rgb(234, 25, 14), linewidth=1, offset=0, style=plot.style_stepline) plot(title='BosLow', series=bosLow, color=color.rgb(234, 25, 14), linewidth=1, offset=0, style=plot.style_stepline)
关键改动说明
- 增加基准值对比:在突破发生时,先记录当前的
bosLow/bosHigh作为基准值(prevBosLow/prevBosHigh),后续通过对比基准值和更新后的高低点,确认是否真的形成了更低的低点或更高的高点。 - 严格显示条件:将标签显示的条件从单纯的
newLowFormed/newHighFormed,改为newLowFormed and bosLow < prevBosLow和newHighFormed and bosHigh > prevBosHigh,确保只有高低点确实更新时才显示标签。 - 逻辑保持一致性:保留原有的新高/新低识别逻辑,仅在最终显示环节增加高低点更新的验证,不破坏核心结构判断逻辑。
内容的提问来源于stack exchange,提问作者Yury Zinkevich
相关产品推荐
相关产品推荐

