Pine Script如何基于前根OHLC4 HMA蜡烛影线高低点绘制止损
Pine Script v5 HMA蜡烛匹配止损位实现方案
需求说明
- 已完成Pine Script v5策略内的HMA(赫尔移动平均线)蜡烛图绘制
- 需要实现匹配HMA蜡烛数值的止损位:
- 多头止损参考前一根HMA K线的影线最低价
- 空头止损参考前一根HMA K线的影线最高价
- 止损位计算支持按品种最小变动价位(ticks)调整偏移
- 原有逻辑仅能匹配普通K线、Heikin Ashi平均K线数值,无法和绘制的HMA蜡烛对齐
原有代码问题
原有止损逻辑的核心错误是错误使用request.security函数:
request.security第一个参数要求传入交易品种ticker对象,原有代码传入了计算后的HMA序列,且取值为原始K线的高低点,并非提前计算好的HMA蜡烛高低点,因此数值完全无法匹配。
实际上代码中已经提前计算出了每根HMA蜡烛的开高低收四个值(o/h/l/c),直接取前序bar的对应值即可得到匹配的止损位,不需要调用跨周期/跨品种函数。
修正后完整代码
//@version=5 strategy("Hull Candles", overlay=true, margin_long=100, margin_short=100) len = input.int(10, title= "Hull Length") stop_offset_ticks = input.int(0, title="止损偏移Ticks数", minval=0, tooltip="止损位距离前一根HMA影线的最小变动价位偏移") // 计算HMA蜡烛OHLC值 hma_open = ta.hma(open, len) hma_close = ta.hma(close, len) hma_high = ta.hma(high, len) hma_low = ta.hma(low, len) ohlcFour = ta.hma(ohlc4, len) // 绘制HMA蜡烛 colorBody = ohlcFour > ohlcFour[1] ? color.white : #6F00FF plotcandle(hma_open, hma_high, hma_low, hma_close, color=colorBody, title= "Hull Candles") // 计算匹配HMA数值的止损位 longstoploss = hma_low[1] - stop_offset_ticks * syminfo.mintick shortstoploss = hma_high[1] + stop_offset_ticks * syminfo.mintick longstop = str.tostring(longstoploss, format.mintick) shortstop = str.tostring(shortstoploss, format.mintick) // 绘制止损标签 Longstoplabel = label.new(x=bar_index, y=na, text = longstop, yloc = yloc.belowbar, textcolor=color.white, color=#000000, size = size.normal, style = label.style_none) Shortstoplabel = label.new(x=bar_index, y=na, text = shortstop, yloc = yloc.abovebar, textcolor= #6F00FF, color=#000000, size = size.normal, style = label.style_none) label.delete(Longstoplabel[1]) label.delete(Shortstoplabel[1])
修正点说明
- 删除了原有代码中未使用的无效ticker定义、错误的
request.security止损计算逻辑 - 直接使用提前计算的HMA蜡烛高低点序列取前一根值,保证止损位和绘制的HMA蜡烛数值完全对齐
- 新增ticks偏移参数,支持按品种最小变动价位调整止损和影线的距离,避免极端价格影线打止损
- 价格字符串格式化使用
format.mintick,自动匹配品种小数位显示规范,不会出现多余小数
内容的提问来源于stack exchange,提问作者Paul Cas
相关产品推荐
相关产品推荐

