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

如何在Plotly图表中高亮美国东部时间常规交易时段?

在Plotly图表中高亮常规交易时段

实现步骤与代码

假设你的DataFrame(名为df)包含1分钟间隔的datetime列,按以下操作实现:

  1. 统一时区:确保时间列转换为美国东部时间(EST),避免时区错位
  2. 生成交易时段区间:提取所有唯一交易日,生成每个交易日9:30-16:00的时间区间
  3. 添加高亮背景:用Plotly的add_vrect()批量添加常规交易时段的高亮区域
import plotly.express as px
import pandas as pd
from pytz import timezone

# 转换时间列为EST时区(如果原始数据是UTC,先转UTC再转EST)
df['datetime'] = pd.to_datetime(df['datetime']).dt.tz_localize('UTC').dt.tz_convert('America/New_York')

# 获取所有唯一交易日,生成每个交易日的常规交易时段
unique_dates = df['datetime'].dt.date.unique()
trading_intervals = [
    (pd.Timestamp(f"{date} 09:30:00", tz='America/New_York'),
     pd.Timestamp(f"{date} 16:00:00", tz='America/New_York'))
    for date in unique_dates
]

# 创建基础折线图(替换your_value_column为你的数值列名)
fig = px.line(df, x='datetime', y='your_value_column')

# 批量添加常规交易时段高亮
for start, end in trading_intervals:
    fig.add_vrect(
        x0=start, x1=end,
        fillcolor="rgba(0, 200, 0, 0.1)",
        line_width=0,
    )

# 可选:添加盘前/盘后时段的区分高亮
pre_market_intervals = [
    (pd.Timestamp(f"{date} 04:00:00", tz='America/New_York'),
     pd.Timestamp(f"{date} 09:30:00", tz='America/New_York'))
    for date in unique_dates
]

post_market_intervals = [
    (pd.Timestamp(f"{date} 16:00:00", tz='America/New_York'),
     pd.Timestamp(f"{date} 20:00:00", tz='America/New_York'))
    for date in unique_dates
]

for start, end in pre_market_intervals:
    fig.add_vrect(x0=start, x1=end, fillcolor="rgba(255,255,0,0.05)", line_width=0)

for start, end in post_market_intervals:
    fig.add_vrect(x0=start, x1=end, fillcolor="rgba(255,165,0,0.05)", line_width=0)

fig.show()

注意事项

  • 时区是核心:如果原始时间列不带时区,必须先本地化再转换,否则高亮时段会偏移
  • 颜色选择:用半透明的rgba值,既突出时段又不遮挡数据
  • 批量处理:通过循环遍历所有交易日,避免手动逐个添加时段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:50:26