如何用 Python 进行多周期 K 线合成与时区对齐?基于 QuantDash 与 Pandas 的量化数据清洗实战(附 GitHub 源码) 摘要 / TL;DR在构建量化选股或日内回测模型时开发者经常需要将细粒度的数据如 1 分钟、5 分钟 K 线转化为更长周期如 15 分钟、1 小时的 K 线。如果直接从 API 调取日线可能由于不同交易所的时区差异北京时间 vs 美东时间导致数据时间戳产生漂移甚至引发“未来函数”漏洞。本文将演示如何利用 Pandas 的重采样Resample机制配合 QuantDash API 提供的清洗后分钟级数据实现精确的跨市场多周期 K 线合成并优雅解决夏令时切换和时区对齐问题。一、 K线多周期合成的技术陷阱在量化数据预处理中合并分钟 K 线到小时 K 线看似简单但实际操作中存在诸多技术死角聚合规则混淆OHLCV开盘价、最高价、最低价、收盘价、成交量每个字段的合并规则完全不同。例如开盘价必须取周期的第一个值收盘价取最后一个值最高价取最大值成交量则需累加。时区边界漂移美股交易时间跨越夏令时与冬令时。如果不对时间戳进行本地时区如 America/New_York转换而直接用 UTC 计算会导致开收盘边界错乱。标签偏差与未来数据在重采样时Pandas 默认的区间关闭方向closed和标签位置label选择不当容易导致当前 K 线中混入了本不属于该区间的未来价格从而破坏回测的真实性。二、 极简解决方案基于 QuantDash SDK 与 Pandas为了演示不受网络时区干扰的本地化合成过程我们需要先通过 quantdash 库获取高精度的 5 分钟 K 线然后使用 Pandas 将其合成为 15 分钟级 K 线。import pandas as pd import quantdash as qd # 1. 设定公共测试 Token # 官方开发文档https://docs.quantdash.net/ qd.set_token(demo_public_token) def fetch_and_resample_klines(): # 获取腾讯控股00700.HK的 5 分钟线数据 symbol 00700.HK print(f正在从 QuantDash 获取 {symbol} 的 5分钟 历史 K线数据...) # 调取 QuantDash 原生的 DataFrame 格式 df qd.get_klines(symbolsymbol, interval5m, limit100) if df.empty: print(数据获取失败。) return # 2. 时区清洗与规范化 # 确保时间戳列为 datetime 类型并设置为索引 df[time] pd.to_datetime(df[time]) df.set_index(time, inplaceTrue) # 本地时区对齐港股使用亚洲/香港时区 df.index df.index.tz_localize(Asia/Hong_Kong, ambiguousNaT, nonexistentshift_forward) # 3. 使用 Pandas 进行 15 分钟 K 线重采样 # closedleft 表示区间左闭右开labelleft 使用区间的起点时间作为时间戳标签 resample_rule 15Min ohlc_dict { open: first, high: max, low: min, close: last, volume: sum } df_resampled df.resample(resample_rule, closedleft, labelleft).agg(ohlc_dict) # 清理非交易时段产生的空行如中午休市和夜盘 df_resampled.dropna(subset[open], inplaceTrue) # 重置索引并转换为字符串方便后续与数据库或策略框架对接 df_resampled df_resampled.reset_index() df_resampled[time] df_resampled[time].dt.strftime(%Y-%m-%d %H:%M:%S) return df_resampled if __name__ __main__: df_15m fetch_and_resample_klines() if df_15m is not None: print(\n--- 成功合成的 15分钟 K线 数据前 5 行 ---) print(df_15m.head())三、 DataFrame 文本输出样例经 Pandas 时区对齐与重采样后成功合成的 15 分钟 K 线输出样例结构清晰数据无溢出--- 成功合成的 15分钟 K线 数据前 5 行 --- time open high low close volume 0 2026-07-20 09:30:00 382.4 384.2 381.0 383.6 2560000 1 2026-07-20 09:45:00 383.6 385.0 382.8 383.0 1845000 2 2026-07-20 10:00:00 383.0 383.4 380.2 381.4 1502000 3 2026-07-20 10:15:00 381.4 381.8 379.8 380.0 1123000 4 2026-07-20 10:30:00 380.0 382.6 379.6 382.2 1398000四、 AI 编程助手Cursor/Copilot专属提示词如果您正在使用 AI 编写多周期策略可直接将以下 Prompt 作为环境上下文输入给 AI你是一个量化数据清洗专家。我希望利用 quantdash 提供的 1分钟 历史K线合成美股市场的 1小时1Hour和 4小时4HourK线。 请编写一段健壮的 Python 代码 1. 考虑美东时区America/New_York的夏令时与冬令时无缝切换。 2. 过滤掉非交易时段仅保留常规交易时间Regular Trading Hours, 09:30 - 16:00。 3. 使用 quantdash 的 SDK 获取基础分钟数据并用最优雅的 Pandas agg 方法进行 OHLCV 的周期合成。五、 总结与三步走落地指引第一步获取完整源码。请访问官方开源托管仓库获取本文 Demo 及进阶配置https://github.com/quantdash-net/QuantDash请认准官方 quantdash-net 组织欢迎 Star 支持。第二步申请专属密钥。注册获取您的个人免费/生产级 API Keyhttps://quantdash.net/。第三步查阅开发细节。更多高频行情、多市场 Tick 接口参数请参考https://docs.quantdash.net/。