如何消除Pine Script中plot()阶梯图的月度过渡竖直线?
解决Pine Script月度水平线切换时的竖线问题
要解决月度切换时plot自动生成的竖线,核心是让每条水平线仅在当前月份的K线上显示对应值,非当月K线直接返回na,这样线条会自然断开,不会出现跨月的连接竖线。下面是具体实现步骤:
1. 准确判断当前K线是否属于当月
首先定义变量跟踪当前月份,确保只在当月的K线上返回水平线数值:
// 跟踪当前月份,每月初更新 var int current_month = ta.month if ta.month != ta.month[1] current_month := ta.month // 判断当前K线是否属于当月 is_current_month = ta.month == current_month
2. 为每条水平线绑定月度数值(以15条为例)
假设你已经有获取每月15个水平线数值的逻辑(比如从数组、计算或输入获取),这里用示例数值演示:
// 示例:每月生成15个随机水平线数值(替换成你的实际数值逻辑) var float monthly_levels[15] = array.new_float(15) if ta.month != ta.month[1] for i = 0 to 14 array.set(monthly_levels, i, close * (1 + (i - 7) * 0.01)) // 示例计算 // 为每条线赋值:当月返回对应数值,非当月返回na level_1 = is_current_month ? array.get(monthly_levels, 0) : na level_2 = is_current_month ? array.get(monthly_levels, 1) : na // ... 重复到level_15 level_15 = is_current_month ? array.get(monthly_levels, 14) : na
3. 绘制线条(无跨月竖线)
直接用plot()绘制每条线,因为非当月返回na,线条会在月度切换处断开,不会出现竖线:
plot(level_1, color=color.new(color.blue, 0), title="Level 1") plot(level_2, color=color.new(color.red, 0), title="Level 2") // ... 重复绘制到level_15 plot(level_15, color=color.new(color.green, 0), title="Level 15")
补充:关于“判断每月最后一天”的实现
如果你需要单独处理月末逻辑,可用以下代码判断当月最后一根K线:
// 获取下一个月初的K线索引 next_month_start = ta.valuewhen(ta.month != ta.month[1], bar_index, 0) // 当前K线是当月最后一根(除了最后一根实时K线) is_last_day_of_month = bar_index == next_month_start - 1 or (barstate.islast and ta.month != ta.month[1])
不过对于当前问题,这个判断不是必需的,直接用is_current_month控制数值返回na更简洁有效。
为什么你的思路没生效?
- 第一种思路只在月初/月末单根K线返回
na,其余K线仍会连接上月/下月数值,所以还是会出现竖线;必须让**整个非当月的K线都返回na**才能完全断开。 - 第二种思路“重置plot函数”在Pine Script里不可行,plot是全局持续跟踪的,无法单独重置,只能通过返回
na实现线条断开。
内容的提问来源于stack exchange,提问作者YWCA Hello
相关产品推荐
相关产品推荐

