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

如何在Pine Editor中绘制会话末根bar的高低点连线并延伸至下一会话末根bar

Pine Script 实现方案

核心逻辑拆解

  • 第一步:识别交易时段的收尾bar
    利用time()函数匹配指定session的时间范围,当检测到「前一根bar在session内、当前bar不在session内」的跳变时,前一根bar即为对应session的最后一根bar。
  • 第二步:固定区间高低价位
    检测到session收尾bar时,提取该bar的high、low数值暂存,作为下一段水平线段的基准y坐标。
  • 第三步:实现跨时段延伸的水平线
    以暂存的收尾bar索引为起点,将线段的终点动态绑定到下一次session跳变的位置,保证两条线刚好从上个session的最后一根bar,连续延伸至下一个session的最后一根bar,无断点。
  • 第四步:可选区间填充
    关联同一时段的两条高低线对象,用fill()函数实现围合区域的背景填充,功能独立设为可开关项,不影响核心绘图逻辑。

可直接运行的核心代码

//@version=5
indicator("Session High/Low Horizontal Range", overlay=true)

// 基础可配置参数
targetSession = input.session("0830-1600", title="目标交易时段", group="基础配置")
sessionTimezone = input.string("America/New_York", title="时段对应时区", group="基础配置")
highLineColor = input.color(color.new(color.red, 0), title="上边界线颜色", group="线条配置")
lowLineColor = input.color(color.new(color.green, 0), title="下边界线颜色", group="线条配置")
lineWidth = input.int(2, title="线条宽度", minval=1, group="线条配置")
enableRangeFill = input.bool(false, title="启用区间背景填充", group="附加功能")
fillSetting = input.color(color.new(color.blue, 90), title="填充颜色", group="附加功能")

// 持久化存储线、填充对象,避免逐bar重复创建占用内存
var line highBoundaryLine = na
var line lowBoundaryLine = na
var fill rangeFill = na

// 判断当前bar是否落在目标交易时段内
isInTargetSession = not na(time(timeframe.period, targetSession, sessionTimezone))
// 检测session边界跳变:当前bar在时段外、上一根在时段内(即上一根就是该时段最后一根bar)
sessionEndDetected = not isInTargetSession and isInTargetSession[1]

if sessionEndDetected
    // 清除上一轮的填充对象
    if not na(rangeFill)
        fill.delete(rangeFill)
    // 把旧线段的终点固定在当前检测到的session收尾bar位置
    if not na(highBoundaryLine)
        line.set_x2(highBoundaryLine, bar_index[1])
        line.set_x2(lowBoundaryLine, bar_index[1])
    // 基于刚识别的session收尾bar的高低点,创建新的水平线段,初始终点设为当前bar
    newSessionHigh = high[1]
    newSessionLow = low[1]
    startBarIndex = bar_index[1]
    highBoundaryLine := line.new(startBarIndex, newSessionHigh, bar_index, newSessionHigh, color=highLineColor, width=lineWidth)
    lowBoundaryLine := line.new(startBarIndex, newSessionLow, bar_index, newSessionLow, color=lowLineColor, width=lineWidth)
    // 如果开启填充,就关联新的两条线生成背景
    if enableRangeFill
        rangeFill := fill.new(highBoundaryLine, lowBoundaryLine, color=fillSetting)

关键注意事项

  • 时区参数必须和你定义的交易时段匹配,否则会出现session边界识别偏移,比如设置伦敦时段就对应填Europe/London,设置国内A股时段就对应填Asia/Shanghai
  • 所有持久化对象都用var声明,避免每根K线重复创建新的线对象,拖慢脚本运行速度
  • 线段的终点会在每次检测到新的session收尾bar时自动更新,刚好满足「延伸至下一个session最后一根bar」的效果,无需手动调整坐标
  • 填充功能默认关闭,完全独立,不会干扰核心的线条绘制逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 00:24:06