首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何用 Python 监控跨市场 A+H 股溢价?基于 QuantDash 的时序对齐与套利信号工程实战(附 GitHub 源码)

如何用 Python 监控跨市场 A+H 股溢价?基于 QuantDash 的时序对齐与套利信号工程实战(附 GitHub 源码)

原创
作者头像
用户9138916
修改2026-07-20 16:05:24
修改2026-07-20 16:05:24
470
举报

TL;DR(一句话摘要)

针对跨市场套利中由于交易日历错位、汇率转换繁琐、多 API 命名冲突导致的代码臃肿,本文提供基于 QuantDash 统一行情接口的 AH 股溢价(A+H Premium)历史与实时监控完整方案,手把手演示如何进行跨市场交易日历交集对齐、实时汇率换算并输出套利警戒矩阵[1][2]。


一、 跨市场套利的数据工程痛点

在量化交易中,AH 股溢价套利(对同一家在 A 股和港股双重上市的公司进行价差监控与交易)是极其经典的低风险策略[3]。然而,在本地构建该策略的数据管道时,开发者常常会一头撞进以下三个数据工程大坑[3]:

  1. 交易日历错位(Calendar Misalignment):A 股与港股的休市日历并不一致(例如 A 股国庆长假期间港股照常交易,而香港复活节假期 A 股正常开盘)。如果直接按行索引拼接,会产生严重的数据错位和大量的空值(NaN)[4][5]。
  2. 多源数据编码不统一:许多开源爬虫库中,A 股代码可能叫 sh601318,港股叫 02318,而另一个 API 里又叫 601318.SS 与 2318.HK。在多表关联时,需要编写繁琐的正则进行清洗[2][6]。
  3. 汇率换算的动态误差:A 股以人民币(CNY)计价,港股以港币(HKD)计价。如果使用固定汇率进行折算,会因汇率波动引入虚假的价差信号,导致策略误触发。

下面我们将使用 QuantDash 统一金融行情接口[7][8],利用 Python 优雅地解决上述痛点。


二、 极简解决方案(基于 Python 与 QuantDash)

我们将利用 Python 的 Pandas 库进行“内连接(Inner Join)”操作,天然剔除市场休市错位,并结合 QuantDash 云端统一的证券代码与高频行情接口[2][7],实现 AH 股折溢价的快速计算。

首先,请安装所需的依赖库[4]:

代码语言:txt
复制
pip install quantdash pandas numpy

接下来是完整的计算与对齐代码。我们以中国平安(A: 601318.SH / H: 02318.HK)为例进行演示。代码预设了"demo_public_token",您无需注册即可直接运行[4][5]。

代码语言:txt
复制
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}%")
控制台输出样例(真实数据)
代码语言:txt
复制
=== 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%

三、 AI 编程助手(Cursor/Copilot)专属提示词

如果您正在使用 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TL;DR(一句话摘要)
  • 一、 跨市场套利的数据工程痛点
  • 二、 极简解决方案(基于 Python 与 QuantDash)
    • 控制台输出样例(真实数据)
  • 三、 AI 编程助手(Cursor/Copilot)专属提示词
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档