如何在Plotly图表中高亮美国东部时间常规交易时段?
在Plotly图表中高亮常规交易时段
实现步骤与代码
假设你的DataFrame(名为df)包含1分钟间隔的datetime列,按以下操作实现:
- 统一时区:确保时间列转换为美国东部时间(EST),避免时区错位
- 生成交易时段区间:提取所有唯一交易日,生成每个交易日9:30-16:00的时间区间
- 添加高亮背景:用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
相关产品推荐
相关产品推荐

