请求修改Pine Script指标:破线后延迟5根K线删除画线
Pine Script v5 修改方案
以下是满足需求的完整修改代码,实现了形态识别画线、破线改样式、延迟5根K线删除的逻辑:
//@version=5 indicator("NHNHNHNH", overlay = true) Kol_Linii = input(2, "Количество линий") // 原信号条件保留 Signal = open[3] < close[3] and open[2] < close[2] and open[1] < close[1] and close < open and high[1] > high and high[1] > close[1] and high > open // 新增平行数组跟踪线条状态 var ArrayLine = array.new_line() var isLineBroken = array.new_bool() // 标记线条是否已被跌破 var breakBarIndex = array.new_int() // 记录跌破时的K线索引 if Signal // 创建新线条并初始化状态 LINIA = line.new(bar_index, high, bar_index + 1, high, extend = extend.right, color = color.fuchsia, width = 1) array.push(ArrayLine, LINIA) array.push(isLineBroken, false) array.push(breakBarIndex, na) // 保留原标签逻辑 label.new(bar_index, close, str.tostring(array.size(ArrayLine))+" : " + str.tostring(high), color= color.white, yloc=yloc.abovebar) // 遍历处理每条线条的状态 if array.size(ArrayLine) > 0 Complete = false Index = array.size(ArrayLine) - 1 while not(Complete) Line = array.get(ArrayLine, Index) lineY = line.get_y1(Line) broken = array.get(isLineBroken, Index) breakBar = array.get(breakBarIndex, Index) // 首次跌破:修改线条样式并记录破线位置 if not broken and close < lineY line.set_color(Line, color.orange) line.set_style(Line, line.style_dashed) array.set(isLineBroken, Index, true) array.set(breakBarIndex, Index, bar_index) // 破线后第5根K线收盘:删除线条 elif broken and bar_index >= breakBar + 4 line.delete(Line) array.remove(ArrayLine, Index) array.remove(isLineBroken, Index) array.remove(breakBarIndex, Index) Index := Index - 1 if Index < 0 Complete := true
关键逻辑说明
- 状态跟踪:通过
isLineBroken和breakBarIndex两个平行数组,为每条线条单独记录是否破线、破线时的K线位置,解决了单线条状态无法区分的问题 - 破线触发:仅当线条未标记过破线且收盘价跌破时,才修改样式(避免重复触发)
- 延迟删除:破线K线为第1根,第5根K线对应索引为
breakBar + 4(例如破线在bar 100,第5根是bar 104),当当前K线达到该索引时执行删除 - 遍历安全:从数组末尾往前遍历,避免删除元素后导致的索引错位问题
内容的提问来源于stack exchange,提问作者Роман Костюк
相关产品推荐
相关产品推荐

