如何在价格跌破支撑线时删除已失效的旧枢轴支撑线?
解决方案:自动删除已跌破的枢轴十字星支撑线
修改后的完整代码
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © kunthu //@version=5 indicator("SR", "SR", true) pivotBars = input.int(5) var float pivotBarOpen = 0. var float pivotBarHigh = 0. var float pivotBarLow = 0. var float pivotBarClose = 0. pivotHighValue = ta.pivothigh(pivotBars,pivotBars) pivotLowValue = ta.pivotlow(pivotBars,pivotBars) pivotHighTrue = na(pivotHighValue) ? false : true pivotLowTrue = na(pivotLowValue) ? false : true doji = (high-low)/5 > math.abs(open-close) barcolor(doji ? color.white : na, title = "Doji Bars", editable = false) // 用数组存储所有支撑线,替代单个变量 var array<line> supportLines = array.new_line() // 遍历数组,检查每条支撑线是否被跌破,跌破则删除并移除 if barstate.isconfirmed // 倒序遍历避免数组索引混乱 for i = array.size(supportLines) - 1 downto 0 currentLine = array.get(supportLines, i) linePrice = line.get_y1(currentLine) // 当最低价跌破支撑线时判定失效 if low < linePrice line.delete(currentLine) array.remove(supportLines, i) dojiSupportCondition = pivotLowTrue and doji[pivotBars] and not ta.crossunder(low, ta.valuewhen(pivotLowTrue, low[pivotBars], 1)) if dojiSupportCondition pivotBarOpen := open[pivotBars] pivotBarHigh := high[pivotBars] pivotBarLow := low[pivotBars] pivotBarClose := close[pivotBars] // 创建新支撑线并添加到数组 newSupportLine = line.new(bar_index - pivotBars, pivotLowValue, last_bar_index, pivotLowValue, xloc.bar_index, color = color.green) array.push(supportLines, newSupportLine)
关键改动说明
- 数组存储支撑线:原代码用单个变量存储支撑线,无法跟踪多条线且会覆盖旧线。改用
array<line>类型数组,可以保存所有已创建的有效支撑线。 - 跌破检查机制:在每根确认的K线中倒序遍历数组,检查当前K线最低价是否跌破支撑线价格。若跌破则删除该线并从数组中移除,倒序遍历是为了避免删除元素后数组索引错乱。
- 新增支撑线入数组:创建新支撑线时将其加入数组,确保后续能被纳入跌破检查范围。
内容的提问来源于stack exchange,提问作者Kunthu Dhadda
相关产品推荐
相关产品推荐

