求助:在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
相关产品推荐
相关产品推荐

