技术问询:如何正确获取HL蜡烛形成时的移动平均值?
解决HL蜡烛对应移动平均值的获取与显示问题
原代码的核心问题是:HL标记通过offset=-Period定位到了当前K线往前6根的K线,但标签获取的SMA值却对应当前K线,导致两者不匹配。以下是修正方案:
修正后的代码
//@version=5 indicator("My script", overlay = true) Period = 6 smalength = 20 // 确认右侧6根K线后的低点信号 float pivotLow = ta.pivotlow(6, 6) // 对比前后低点,筛选出Higher Low prev_low = ta.valuewhen(pivotLow, low[Period], 1) curr_low = ta.valuewhen(pivotLow, low[Period], 0) higherlow = na(pivotLow) ? na : (prev_low < curr_low) ? pivotLow : na // 绘制HL标记,offset=-Period定位到实际低点所在K线 plotshape(higherlow, title='HL', style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 50), text='HL', textcolor=color.new(color.green, 50), offset=-Period) // 计算并绘制SMA sma_val = ta.sma(close, smalength) plot(sma_val) // 触发HL时,创建标签显示对应K线的SMA值 if (not na(higherlow)) // 获取HL所在K线的SMA值:当前K线往前Period根的SMA hl_sma = sma_val[Period] // 将标签放在HL标记下方,用ATR控制偏移避免重叠 label.new(x=bar_index - Period, y=low[Period] - ta.atr(10)*0.2, color=color.orange, textcolor=color.blue, text=str.tostring(hl_sma, "#.##"), style=label.style_label_up)
关键修改说明
- 匹配SMA与HL的K线位置:用
sma_val[Period]直接获取HL标记对应K线的SMA值,解决原代码中位置错位的问题。 - 优化标签位置:将标签放在HL标记的下方,使用ATR动态调整偏移量,避免和K线或标记重叠,显示更清晰。
- 简化逻辑:去掉冗余的
ta.valuewhen调用,直接在HL触发时计算对应值,代码更易读。 - 格式化数值:将SMA值格式化为两位小数,提升显示美观度。
内容的提问来源于stack exchange,提问作者Dolla Chandra Babu
相关产品推荐
相关产品推荐

