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

求助:在Pine Script中获取主图表时段信息并绘制收盘竖线

我来帮你一步步解决这两个问题,顺便给出Ku-Chart的实现思路和代码示例:

一、解决交易时段获取与识别问题

Pine Script没有内置函数能直接获取品种的专属交易时段(比如日经225的8:45-次日5:30),我们可以通过手动定义目标品种的时区和时段,再结合UTC时间转换来实现精准判断。

以日经225为例,它采用UTC+9时区,交易时段跨天——我们可以把本地时间转换为Pine Script默认的UTC时间来处理:

  • 本地8:45 UTC+9 = 前一天23:45 UTC
  • 次日本地5:30 UTC+9 = 当天20:30 UTC

更灵活的方式是在脚本里设置可配置的参数,用time_convert函数完成时区转换,再判断当前K线是否处于交易时段:

//@version=5
indicator("Nikkei 225 Session & Ku-Chart", overlay=true)

// 可配置的交易时段参数
session_tz = input.timezone("Asia/Tokyo", "交易时区")
session_start = input.time("0845-0000", "开始时间", timezone=session_tz)
session_end = input.time("0530-0000", "结束时间", timezone=session_tz) // 次日5:30

// 将本地时间转换为UTC时间
utc_start = time_convert(session_tz, session_start)
utc_end = time_convert(session_tz, session_end)

// 判断当前K线是否在交易时段内(处理跨天情况)
in_session = time >= utc_start and time <= utc_end or (utc_start > utc_end and (time >= utc_start or time <= utc_end))
二、在收盘时间绘制竖线

要在每日收盘时间(UTC+9的5:30,对应UTC的20:30)绘制竖线,我们可以判断当前K线的收盘时间是否匹配目标时段,然后用line.new生成线条,同时避免重复创建过多线条:

// 判断是否到达收盘时间
is_close_time = time_close == utc_end

// 绘制收盘竖线,仅在触发时更新并清除旧线条
var line close_line = na
if is_close_time
    close_line := line.new(bar_index, ta.lowest(low, 20), bar_index, ta.highest(high, 20), color=color.red, width=2, style=line.style_solid)
    line.delete(close_line[1])
三、实现每日收盘重置的Ku-Chart

Ku-Chart是累积型指标,核心逻辑是每日收盘时重置累积值,盘中持续更新。我们可以基于前面的收盘时间判断来触发重置:

// Ku-Chart 累积计算(示例用收盘价的差值累积)
var float ku_value = 0.0

// 开盘初始化,收盘重置
if is_close_time
    ku_value := 0.0
else if not in_session[1] and in_session // 捕捉开盘第一根K线
    ku_value := close

// 盘中持续更新累积值
if in_session and not is_close_time
    ku_value := ku_value + (close - close[1])

// 绘制Ku-Chart
plot(ku_value, title="Ku-Chart", color=color.blue, linewidth=2)
完整整合代码

把以上逻辑整合起来,就是一个完整的可运行脚本:

//@version=5
indicator("Nikkei 225 Session & Ku-Chart", overlay=false)

// 1. 定义交易时段参数
session_tz = input.timezone("Asia/Tokyo", "交易时区")
session_start = input.time("0845-0000", "开始时间", timezone=session_tz)
session_end = input.time("0530-0000", "结束时间", timezone=session_tz)

// 转换为UTC时间
utc_start = time_convert(session_tz, session_start)
utc_end = time_convert(session_tz, session_end)

// 判断是否在交易时段内
in_session = time >= utc_start and time <= utc_end or (utc_start > utc_end and (time >= utc_start or time <= utc_end))

// 2. 绘制收盘竖线(叠加到主图)
var line close_line = na
is_close_time = time_close == utc_end
if is_close_time
    close_line := line.new(bar_index, ta.lowest(low, 20), bar_index, ta.highest(high, 20), color=color.red, width=2, style=line.style_solid)
    line.delete(close_line[1])

// 3. Ku-Chart 计算与绘制
var float ku_value = 0.0

// 开盘初始化,收盘重置
if is_close_time
    ku_value := 0.0
else if not in_session[1] and in_session
    ku_value := close

// 盘中累积更新
if in_session and not is_close_time
    ku_value := ku_value + (close - close[1])

plot(ku_value, title="Ku-Chart", color=color.blue, linewidth=2)
bgcolor(in_session ? color.new(color.green, 90) : na, title="交易时段背景")
关键细节说明
  • 时区转换:time_convert函数是核心,解决了Pine Script默认UTC时区与品种本地时区的差异问题。
  • 跨天时段处理:因为日经225的交易时段跨天,所以in_session的判断需要额外处理utc_start > utc_end的场景。
  • 竖线优化:用var声明线条变量,避免每次触发都创建新线条,同时删除旧线条保持图表整洁。
  • Ku-Chart重置:通过is_close_time精准触发重置,开盘时初始化累积值,确保每日数据独立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:22:36