You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script实现仅绘制折线最近N个月数据 隐藏前期零值线段

问题描述

构建信号线时需要仅在图表最近12个月的有限时间段内展示线段,该时间段之前不显示任何内容。
现有测试代码仅对变量n做递增计算并绘制,运行后12个月时间段之前的部分会显示长段数值为0的水平线,仅最近12个月线段正常递增。已知plot指令的show_last参数依赖固定K线数量,无法适配日线、周线、月线等多时间框架下12个月对应的K线数差异,需要实现前期零值线段隐藏、仅显示指定时间段内递增线段的效果。

原有测试代码如下:

//@version=5
indicator('My script')

var months_to_process = 12

var start = 0
var n = 0

date = time >= timestamp(year(timenow), month(timenow) - months_to_process, 0, 0, 0, 0)
if (not date[1] and date)
    start := 1

if (start == 1)
    n := n + 1
    // signal line processing code goes here

plot (n, color=#000000, linewidth=2)
实现方案

核心逻辑利用Pine Scriptplot函数的原生特性:当传入的序列值为na(空值)时,对应K线位置不会绘制任何线段,自动实现分段显示效果,适配全时间框架,不需要手动计算展示区间对应的K线数量。

原逻辑缺陷

  • 变量n初始值为0,12个月展示窗口外n始终为0,因此会绘制出连续零值水平线
  • show_last参数依赖固定K线根数,不同时间周期下12个月对应的K线总数差异极大,无法通用适配

修正后代码

//@version=5
indicator('My script')

// 配置需要展示的最近月数
months_to_process = 12
// 计算展示窗口起始时间戳,Pine原生支持自动处理跨年月份偏移
show_window_start = timestamp(year(timenow), month(timenow) - months_to_process, dayofmonth(timenow), 0, 0, 0)

var n = 0
// 仅在展示窗口内执行递增/信号线计算逻辑
if time >= show_window_start
    n += 1
    // 其余信号线计算逻辑可写在此处
// 窗口外时段输出空值,不绘制线段
plot_n = time >= show_window_start ? n : na

plot(plot_n, color=color.black, linewidth=2)

逻辑说明

  • 时间判断基于K线原生time时间戳,和图表周期无关,日线、周线、月线、分钟线等任意周期下都能准确定位最近12个月的区间
  • 窗口外的输出值设为na,plot函数遇到空值不会绘制对应线段,从根源上避免零值水平线问题
  • 移除冗余的start标记变量,直接通过时间戳判断区间边界,减少边界判断出错概率
  • 调整展示时长仅需修改months_to_process参数,无需改动其余逻辑

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:54:18