🎯 学习目标

  • 理解金融数据时间戳的格式与标准
  • 掌握时区转换与处理的关键方法
  • 能够正确处理跨市场交易时区差异
  • 避免时区错误导致的交易与回测偏差
时间与时区

时间戳与时区处理

时间戳与时区处理是量化交易系统开发中的关键环节。 全球不同交易所使用不同的时区,错误的时间处理会导致策略失效和交易风险。 本节将详细介绍如何正确处理金融数据的时间戳与时区问题。

时间戳格式标准

Unix时间戳

从1970年1月1日UTC时间00:00:00开始的秒数或毫秒数:

  • 秒级时间戳:1609459200(2021-01-01 00:00:00 UTC)
  • 毫秒级时间戳:1609459200000(2021-01-01 00:00:00 UTC)
  • 纳秒级时间戳:1609459200000000000(2021-01-01 00:00:00 UTC)

ISO 8601格式

国际标准时间表示格式,人类可读性强:

  • 2021-01-01T00:00:00Z
  • 2021-01-01T08:00:00+08:00
  • 20210101T000000Z

🌍 全球主要市场时区

市场 时区 UTC偏移 交易时段
中国A股 CST(北京) UTC+8 09:30-11:30, 13:00-15:00
美股(NYSE) EST/EDT UTC-5/-4 09:30-16:00
伦敦(LSE) GMT/BST UTC+0/+1 08:00-16:30
东京(TSE) JST UTC+9 09:00-15:00
加密货币 全球7×24 UTC 无间断

🔧 Python时间处理

使用pytz处理时区

import pytz
from datetime import datetime

# 创建时区对象
cst = pytz.timezone('Asia/Shanghai')
est = pytz.timezone('US/Eastern')

# 本地时间转为UTC
local_time = cst.localize(datetime(2024, 1, 1, 9, 30))
utc_time = local_time.astimezone(pytz.UTC)

# 时区转换
us_time = utc_time.astimezone(est)

使用pandas处理时间序列

import pandas as pd

# 创建带时区的时间序列
dates = pd.date_range('2024-01-01', periods=5, tz='Asia/Shanghai')

# 时区转换
dates_utc = dates.tz_convert('UTC')

# 去除时区信息
dates_naive = dates.tz_localize(None)
⚠️
常见陷阱

1. 混淆naive datetime(无时区)和aware datetime(有时区)
2. 忽略夏令时调整
3. 跨时区交易时段计算错误
4. 回测数据与实盘数据时间对齐问题

📝 本节小结

  • • 掌握了Unix时间戳和ISO 8601格式标准
  • • 理解了全球主要市场的时区差异
  • • 学会了Python中时区转换的处理方法
  • • 了解了时间处理中的常见陷阱与解决方案