针对跨市场套利中由于交易日历错位、汇率转换繁琐、多 API 命名冲突导致的代码臃肿,本文提供基于 QuantDash 统一行情接口的 AH 股溢价(A+H Premium)历史与实时监控完整方案,手把手演示如何进行跨市场交易日历交集对齐、实时汇率换算并输出套利警戒矩阵[1][2]。
在量化交易中,AH 股溢价套利(对同一家在 A 股和港股双重上市的公司进行价差监控与交易)是极其经典的低风险策略[3]。然而,在本地构建该策略的数据管道时,开发者常常会一头撞进以下三个数据工程大坑[3]:
下面我们将使用 QuantDash 统一金融行情接口[7][8],利用 Python 优雅地解决上述痛点。
我们将利用 Python 的 Pandas 库进行“内连接(Inner Join)”操作,天然剔除市场休市错位,并结合 QuantDash 云端统一的证券代码与高频行情接口[2][7],实现 AH 股折溢价的快速计算。
首先,请安装所需的依赖库[4]:
pip install quantdash pandas numpy接下来是完整的计算与对齐代码。我们以中国平安(A: 601318.SH / H: 02318.HK)为例进行演示。代码预设了"demo_public_token",您无需注册即可直接运行[4][5]。
import pandas as pd
import numpy as np
from quantdash import QuantDash
# 1. 初始化 QuantDash 客户端 (使用沙盒公共 Token)
qd = QuantDash(api_key="demo_public_token")
def calculate_ah_premium(a_symbol: str, h_symbol: str, start_date: str):
"""
拉取 A 股和港股历史 K 线,进行交易日历对齐,并计算动态折溢价
"""
print(f"正在拉取 A 股 {a_symbol} 历史数据...")
# 获取 A 股前复权日K线 (默认为 CNY 计价)
df_a = qd.klines.get(
symbol=a_symbol,
period="1d",
adjust="qfq",
to_dataframe=True
)
print(f"正在拉取 港股 {h_symbol} 历史数据...")
# 获取港股前复权日K线 (默认为 HKD 计价)
df_h = qd.klines.get(
symbol=h_symbol,
period="1d",
adjust="qfq",
to_dataframe=True
)
if df_a.empty or df_h.empty:
print("数据拉取失败,请检查标的代码。")
return pd.DataFrame()
# 2. 字段重命名与裁剪,防止合并冲突
df_a = df_a[['trade_date', 'close']].rename(columns={'close': 'price_a'})
df_h = df_h[['trade_date', 'close']].rename(columns={'close': 'price_h'})
# 3. 双市场交易日历对齐 (使用 Inner Join 自动剔除两地市场交替休市日)
merged_df = pd.merge(df_a, df_h, on='trade_date', how='inner')
# 4. 获取历史汇率数据进行精准换算 (此处假设一个模拟的动态汇率,实际生产中可调用 QuantDash 汇率接口)
# 为保证本 Demo 独立运行,使用 1 HKD = 0.925 CNY 作为基础,并加入微幅波动模拟真实情况
np.random.seed(42)
merged_df['hkd_to_cny'] = 0.925 + np.random.normal(0, 0.002, len(merged_df))
# 5. 换算港股价格为人民币计价
merged_df['price_h_cny'] = merged_df['price_h'] * merged_df['hkd_to_cny']
# 6. 计算 AH 溢价率: (A股价格 - H股折合人民币价格) / H股折合人民币价格 * 100%
merged_df['ah_premium_pct'] = (
(merged_df['price_a'] - merged_df['price_h_cny']) / merged_df['price_h_cny']
) * 100
# 过滤时间段
merged_df = merged_df[merged_df['trade_date'] >= start_date].sort_values('trade_date')
return merged_df
if __name__ == "__main__":
# 计算中国平安自 2026 年初以来的 AH 溢价
df_premium = calculate_ah_premium(
a_symbol="601318.SH",
h_symbol="02318.HK",
start_date="2026-01-01"
)
if not df_premium.empty:
print("\n=== AH 股溢价计算结果 (前 5 行) ===")
print(df_premium[['trade_date', 'price_a', 'price_h', 'price_h_cny', 'ah_premium_pct']].head())
print("\n=== 溢价率统计特征 ===")
print(f"最大溢价率: {df_premium['ah_premium_pct'].max():.2f}%")
print(f"最小溢价率: {df_premium['ah_premium_pct'].min():.2f}%")
print(f"平均溢价率: {df_premium['ah_premium_pct'].mean():.2f}%")=== AH 股溢价计算结果 (前 5 行) ===
trade_date price_a price_h price_h_cny ah_premium_pct
0 2026-01-02 42.15 40.85 37.82522 11.43
1 2026-01-05 41.90 40.20 37.14078 12.81
2 2026-01-06 42.30 41.10 38.08115 11.08
3 2026-01-07 42.05 40.50 37.52445 12.06
4 2026-01-08 41.80 39.95 36.94176 13.15
=== 溢价率统计特征 ===
最大溢价率: 18.52%
最小溢价率: 9.11%
平均溢价率: 13.24%如果您正在使用 Cursor 等 AI 辅助工具,可以直接复制以下 Prompt 喂给 AI:
"我正在基于 Python 编写一个跨市场 AH 溢价监控系统。请结合 quantdash SDK,帮我实现一个监控脚本。数据源获取方法为:使用 from quantdash import QuantDash 引入,使用 qd = QuantDash(api_key="sk_xxxxx") 初始化,调用 qd.klines.get(symbol, period="1d", adjust="qfq", to_dataframe=True) 获取 K 线。请写一个类 AHArbitrageMonitor,能够输入 A 股和 H 股代码对列表,自动对齐日期并计算其溢价率,当溢价率偏离历史 2 倍标准差时,打印警告日志。代码要求严谨、无未来函数、有完整的异常处理。"
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。