当支撑位或阻力位被突破时,如何将其值设为NaN?
Pine Script 突破后隐藏支撑/阻力位的实现方案
核心问题分析
原代码里的fixnan会把所有NaN的 pivot 值替换为前一个有效值,导致突破后旧的支撑阻力位仍持续显示。直接移除fixnan只是保留了初始NaN,但没实现突破后将旧值设为NaN的关键逻辑,所以达不到预期效果。
修改后的完整代码
toggleBreaks = input(true, title='显示突破后隐藏') leftBars = input(15, title='左侧K线数') rightBars = input(15, title='右侧K线数') volumeThresh = input(20, title='成交量阈值') // 获取原始pivot值(保留NaN,不使用fixnan) highPivot = ta.pivothigh(leftBars, rightBars)[1] lowPivot = ta.pivotlow(leftBars, rightBars)[1] // 用变量跟踪当前有效的支撑/阻力位值 var float r1Value = na var float s1Value = na // 更新阻力位并判断向上突破 if not na(highPivot) r1Value := highPivot if toggleBreaks and not na(r1Value) and ta.close > r1Value r1Value := na // 更新支撑位并判断向下突破 if not na(lowPivot) s1Value := lowPivot if toggleBreaks and not na(s1Value) and ta.close < s1Value s1Value := na // 绘制支撑阻力位 plot(r1Value, color=change(r1Value) ? na : #FF0000, linewidth=3, offset=-(rightBars+1), title="阻力位") plot(s1Value, color=change(s1Value) ? na : #233dee, linewidth=3, offset=-(rightBars+1), title="支撑位")
关键逻辑说明
- 移除
fixnan:让未形成pivot的位置保持NaN,避免无效值填充导致的旧线残留 - 变量持续跟踪:用
var声明的变量会保留当前有效的支撑阻力位值,直到被突破触发重置 - 突破判断:当收盘价向上突破阻力位、向下跌破支撑位时,将对应变量设为NaN,实现线条隐藏
- 开关控制:通过
toggleBreaks参数可以随时开启/关闭突破隐藏功能
内容的提问来源于stack exchange,提问作者Parabolic1
相关产品推荐
相关产品推荐

