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

如何在Pine Script中检查未来时段是否为有效常规交易时段?

在Pine Script中预判休市时段并检查未来K线交易有效性

问题概述

我需要使用box.new()在未来绘制箱体(例如从最后一根K线起3小时开始,延伸10个周期),但部分市场(如外汇)存在休市时段(例:周五16:00至周日16:00),TradingView图表会自动跳过这些时段,未来K线占位符直接从周五16:00跳转到周日16:00。

目前已能通过session.ismarket()检查当前K线是否处于交易时段,但无法直接检查未来K线。理想方案是有类似session.ismarket(timestamp)的方法验证自定义时间戳的有效性,同时需要解决一个已知bug:在休市时段绘制箱体时,仅左边缘会错误显示在后续的有效K线占位符上(如绘制周六08:00-18:00的箱体,实际左边缘会出现在周日16:00的K线位置),因此需要判断未来时间是否为有效交易时段,来调整箱体位置或取消绘制。

解决方案

方法1:通过时间戳映射验证有效交易时段

Pine Script没有直接的session.ismarket(timestamp)函数,但可以通过生成未来时间戳,反向匹配图表的time序列来判断该时段是否有效:

  • 先计算目标未来时间戳:基于当前最后一根K线的time,加上对应周期的时长(单位为毫秒,公式:timeframe.multiplier * 60000,再乘以要跳转的周期数)。
  • 检查该时间戳是否存在于time序列中——TradingView的time序列仅包含有效交易时段的K线时间,不存在则说明处于休市。

示例代码:

//@version=5
indicator("未来交易时段验证", overlay=true)

// 定义要跳转的未来周期数
futureStartPeriods = 3
boxLengthPeriods = 10

// 计算箱体起始的未来时间戳
futureStartTime = time + futureStartPeriods * timeframe.multiplier * 60000

// 验证该时间戳是否属于有效交易时段
isValidSession = ta.barssince(time == futureStartTime) != na

// 仅在有效时段绘制箱体
if isValidSession
    box.new(
        left=bar_index + futureStartPeriods,
        top=high,
        right=bar_index + futureStartPeriods + boxLengthPeriods,
        bottom=low,
        color=color.new(color.blue, 80)
    )

方法2:手动编写市场休市规则校验

如果明确目标市场的休市规则,可以直接通过时间戳的星期、小时信息判断是否处于休市:

  • 用dayofweek()、hour()函数提取时间戳对应的日期和小时信息。
  • 编写条件判断逻辑,针对特定市场的休市时段进行过滤。

示例代码(针对外汇周五16:00-周日16:00休市):

//@version=5
indicator("手动校验休市时段", overlay=true)

// 判断时间戳是否处于外汇休市时段
isInOffHours(ts) =>
    dow = dayofweek(ts)
    hr = hour(ts)
    (dow == dayofweek.friday and hr >= 16) or 
    dow == dayofweek.saturday or 
    (dow == dayofweek.sunday and hr < 16)

// 计算箱体起始的未来时间戳
futureStartTime = time + 3 * timeframe.multiplier * 60000
// 验证是否为有效交易时段
isValid = not isInOffHours(futureStartTime)

// 仅在有效时段绘制箱体
if isValid
    box.new(
        left=bar_index + 3,
        top=high,
        right=bar_index + 13,
        bottom=low,
        color=color.new(color.red, 80)
    )

方法3:跨周期数据验证

通过request.security()请求更高时间框架的K线数据,间接判断未来时段是否存在有效交易K线:

  • 例如当前为1小时周期,请求4小时周期的未来K线时间,若对应时段无数据,则说明处于休市。

关键注意事项

  • 方法1的可靠性完全依赖TradingView的time序列,该序列自动跳过休市时段,因此不存在的时间戳必然对应休市。
  • 方法2需要针对不同市场编写定制化规则,通用性较弱,但灵活性更高。
  • 通过isValid条件控制box.new()的执行,可以避免休市时段箱体仅显示左边缘的bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:37:08