问题描述
解决方案
在聚宽(JoinQuant)平台中,获取 AH 股价格对比及溢价率数据,最直接且高效的方法是查询 finance.STK_AH_PRICE_COMP(AH股价格达标对比表)数据库表。
该表提供了 A 股和 H 股的收盘价、经汇率调整后的 H 股人民币价格以及 A/H 股溢价率等关键数据。
以下是具体的获取方法和代码示例:
核心步骤
- 导入库:需要导入
jqdata。 - 构建查询:使用
query()函数选择finance.STK_AH_PRICE_COMP表。 - 过滤条件:可以通过
.filter()筛选特定的日期、A 股代码或 H 股代码。 - 执行查询:使用
finance.run_query()获取 DataFrame 格式的数据。
代码示例
以下代码展示了如何获取特定股票(如平安银行)或全市场 AH 股在指定日期的对比数据。
# -*- coding: utf-8 -*-
from jqdata import *
def get_ah_premium_data(date=None, stock_code=None):
"""
获取AH股价格对比及溢价率数据
:param date: 查询日期,格式 'YYYY-MM-DD',默认为前一个交易日
:param stock_code: A股代码,例如 '000001.XSHE'。如果为None,则查询当日所有AH股
:return: pandas.DataFrame
"""
# 如果未指定日期,获取最近一个交易日
if date is None:
# 注意:在研究环境中可以使用 datetime.date.today(),回测中应使用 context.previous_date
# 这里为了通用性,演示获取最近有数据的一天(通常是前一天)
date = datetime.date.today() - datetime.timedelta(days=1)
# 构建查询语句
q = query(finance.STK_AH_PRICE_COMP).filter(
finance.STK_AH_PRICE_COMP.day == date
)
# 如果指定了股票代码,增加筛选条件
if stock_code:
q = q.filter(finance.STK_AH_PRICE_COMP.a_code == stock_code)
# 执行查询
df = finance.run_query(q)
return df
# 示例 1: 获取平安银行 (000001.XSHE) 在 2023-01-05 的 AH 股对比数据
# 注意:平安银行实际上没有H股,查询结果可能为空,这里仅作代码演示。
# 更有代表性的例子是招商银行 (600036.XSHG)
df_specific = get_ah_premium_data(date='2023-01-05', stock_code='600036.XSHG')
print("单只股票查询结果:")
print(df_specific)
# 示例 2: 获取 2023-01-05 全市场所有 AH 股的数据,并按溢价率排序
df_all = get_ah_premium_data(date='2023-01-05')
if not df_all.empty:
# 按溢价率降序排列
df_all_sorted = df_all.sort_values(by='a_h_premium_ratio', ascending=False)
print("\n全市场溢价率最高的5只股票:")
# 选取展示的字段:日期, A股代码, H股代码, A股价格, H股人民币价, 溢价率
print(df_all_sorted[['day', 'a_code', 'h_code', 'a_price', 'h_price_is_adj', 'a_h_premium_ratio']].head())
数据字段说明
查询结果 DataFrame 中主要包含以下字段,用于分析溢价率:
| 字段名 | 类型 | 含义 | 备注 |
|---|---|---|---|
| day | date | 交易日期 | 数据对应的日期 |
| a_code | varchar | A股代码 | 例如 600036.XSHG |
| h_code | varchar | H股代码 | 例如 03968.HK |
| a_price | float | A股收盘价 | 单位:人民币 |
| h_price | float | H股收盘价 | 单位:港币 |
| h_price_is_adj | float | H股经汇率调整价格 | H股收盘价 * 当日汇率(单位:人民币),分析溢价率时建议使用此字段 |
| a_h_premium_ratio | float | A/H 股溢价率 | 计算公式通常为:$\frac{\text{A股价格}}{\text{H股人民币价格}} - 1$ 或 $\frac{\text{A股价格} - \text{H股人民币价格}}{\text{H股人民币价格}} \times 100%$ (具体数值需参考数据返回值的量级,通常聚宽返回的是百分比的小数形式,如 1.2 表示溢价 20% 或直接是比值,请以实测数据为准) |
注意事项
- 数据更新时间:该表数据通常在交易日收盘后更新,建议在盘后或第二天进行查询。
- 汇率影响:
h_price_is_adj字段已经考虑了港币兑人民币的汇率,直接使用该字段与 A 股价格对比即可,无需自行处理汇率。 - 停牌处理:如果 A 股或 H 股在某日停牌,可能会影响溢价率的计算逻辑或导致数据缺失,分析时需注意清洗数据。
Q&A
Q: 为什么查询不到当天的 AH 股溢价数据?
A: finance.STK_AH_PRICE_COMP 表的数据通常在收盘后经过结算和处理才会更新。如果在盘中实时运行策略,建议使用前一个交易日的数据,或者分别获取 A 股和 H 股的实时行情(get_current_data 或 get_price)并结合实时汇率自行计算。
Q: 如何手动计算 AH 股溢价率?
A: 溢价率 = (A股收盘价 / (H股收盘价 * 港币兑人民币汇率)) - 1。如果结果大于 0,表示 A 股相对于 H 股存在溢价;如果小于 0,则表示折价。
Q: 这个数据表包含所有 A 股吗?
A: 不包含。该表仅包含同时在 A 股(上海或深圳)和 H 股(香港)上市的公司(即“A+H”股)。纯 A 股或纯 H 股公司不在该表中。