0. 说明
0.1 概要
完整代码和工程: https://github.com/Raytto/Quant_strategy_ahp
策略核心
- 每个周期开始,把资金分成2n份
- n份平均买n支AH溢价最高的H股
- n份平均买n支AH溢价最高的A股
- 期末重新用相同策略调整仓位。
0.1 出发点
个人玩股票经验不算太长,且非主业,仅偶尔了解下,当看新闻和娱乐。
之前10-3年以投纳斯达克指数基金为主,近几年才开始投A股,近一年才开始投H股。
在A股和H股的选股中,个人确实比较在意AH溢价。且由于金融双学位出身,总有信念:这溢价是不正常的。
且以AH溢价为重点考虑,再结合市盈率+找熟悉的公司 等综合但模糊的思路进行过一些选股:
- 22年内重仓A股中国银行(当时银行股市盈率普遍很低,中国银行市盈率才3,且在一票AH银行股中,中国银行当时的AH溢价30%左右,相比很多其他股也比较低)
- 今年(25年)开始投H股,出发点也是因为好些看好的股AH溢价很高。
- 进而重点买了H股中国人寿(当时AH溢价180%,非常高。且市盈率3,很符合我的偏好)
- 次买H股中金公司(AH溢价120%样子)
- 同时前段时间在A股买宁德时代和招商银行(AH溢价低,甚至负)
整体上可见个人偏好是红利、长期、保守、稳健的。哈哈哈,不折腾。
综合下来其实收益还行,基本和长期投的纳指ETF的收益率持平。虽然远不够暴富,但至少好于沪深300。
- 特别是曾经的中国银行A股,本来买的时候看重波动小,吃红利,当存钱,结果运气好一路涨,后来在市盈率7样子卖掉了。
- 近期的中国人寿H股收益都还可以。
不过目前这套有明显的问题:
- 不确定是其他运气导致的还是AH策略本很导致的。进而实际策略模糊,进一步导致
- 操作信心不足
- 无效纠结很多,浪费时间
- 不便于总结、学习和优化
- 当前我找AH溢价高/低的股,是用中信证券手机APP一个个股慢慢翻,也浪费时间
近期在看了 量化投资邢不行啊 的 AH溢价策略抖音 后,感觉可以自己学着尝试下拉数据和分析。
现在有AI辅助,学习量化分析还挺容易的。
这里主要记录下学习笔记。且这次仅针对于AH溢价进行分析。
1. 理解量化交易
量量化交易是用 数据驱动+数学模型+计算机程序 进行金融市场交易的策略总称。
在高频交易领域没有普通人能比得上计算机和专业量化团队。
- 不过高频领域比拼的设备、算法都不是目前我所适合的,甚至光是资金门槛也够不到,就直接不考虑了,哈哈。
综合考虑能力、精力、手续费等各方面。只利用 数据驱动+数学模型 来选股,最后低频人肉下单交易,更合适我这种普通人。且这种也算量化交易(相对于乱总结,凭感觉,情绪交易)
而 数据驱动+数学模型 相对门槛就低了很多,容易落地,只需要:
- 拿数据(小额付费可以用 Tushare 等数据库。更便宜的方式是淘宝买历史数据,但及时性和便捷性弱一些)
- python处理数据、建立策略、回测、执行策略(很多代码都可以靠AI搞定)
所以量化交易也没那么复杂。
2. AH溢价策略相关代码实现
我需要代码能帮我实现:
- 回测纯跟策略在历史上的实际收益表现,且和至少纳指、沪深300、恒生指数等进行对比
- 调整策略的一些细节参数,对比回测结果,以对策略的稳定性有进一步了解
- 可以未来方便地靠代码帮我确定下一步买哪些股票。不用再在APP慢慢翻AH溢价
目标明确后就可以开搞。
整体不算复杂,完整工程和代码见 Github: https://github.com/Raytto/Quant_strategy_ahp
以下是一步步的实现学习笔记。
2.1 数据源
首先问GPT找一个适合自己的量化研究数据库。或者去淘宝买历史数据。
个人暂使用 Tushare 数据库: https://tushare.pro/


网站操作还是很方便的,且可以容易拿到示例代码。
不过免费用户有些数据拿不到或者API访问频次受限,这种情况下则需要充值。
如果要注册或者充值的话可以用我的分享链接:https://tushare.pro/register?reg=827698
- 好像注册会给我加点积分,但充值好像不会分奖励 : (

稍微修改下代码,就可以在本地工程里成功拉到数据并且保存为csv文件了
2.2 数据处理
由于 AH 溢价率 Tushare 好像并没有给出。所以需要自己写代码计算,计算代码详见工程中文件
但计算需要基于原始数据和预处理,这些在 get_X_* (X in 1-8) 这些文件中依次中实现,具体包含
- get_1_A_stock_list.ipynb
- 拉取 A 股上市公司 List,包含 A 股股票代码,公司名
- get_2_HK_stock_list.ipynb
- 拉取 H 股上市公司 List,包含 H 股股票代码,公司名
- get_3_AH_stock_list.ipynb 根
- 据 公司名 匹配公司,且仅保留同时在 A 股 H 股的股票(inner join),因为这个策略只关心 AH股。得到 AH 股 List 。
- get_4_AH_stock_daily_k.ipynb
- 根据 AH 股 List 挨个拉取其历史日K信息(暂主要用到收盘价),和复权因子
- get_5_AH_A_stock_daily_k.ipynb
- 拉取 AH 股各公司的历史每日的 A 股市值(我想看看只挑大公司对策略表现的影响)
- get_6_common_index.ipynb
- 拉取 沪深300、恒生、纳指 的历史日K信息
- get_7_USDCNH.ipynb
- 拉取美元兑人民币历史汇率的日K信息
- get_8_USDHKD.ipynb
- 拉取美元兑港币历史汇率的日K信息
大部分拉数据和处理都很简单,只有前复权有一点坑需要注意:
- 在进行前复权时,复权因子不能直接乘当日股价,得到的复权股价会有问题,这由于复权因子没有对当前归一
- 想了想,也有道理,如果归一则意味着公司发生 分红/送股 等操作后需要修改历史的复权因子,修改过多,且不利于增量更新。
- 所以在实际进行前复权时,需要乘以复权因子后额外进行归一处理,即除以该股票最后天的复权因子。

这样以后就拿到AH股的历史AH溢价数据了。
2.3 单股溢价可视化
代码详见 :show_AH_premium.ipynb
将AH个股的历史A股价格、H股价格、AH溢价率绘制出来,协助分析,在选股时应该可以作为参考



2.3 AH溢价策略和回测实现
策略核心:
- 每个周期开始,把资金分成2n份,n份平均买n支AH溢价最高的H股,n份平均买n支AH溢价最高的A股,期末重新用相同策略调整仓位。
可以让AI写代码,但要把想要的逻辑尽量描述清楚:
我有如图的数据表ah_k,其中:
* trade_date : 日期
* p_a_adj : 股票对应日期的A股的复权前复权价格
* p_hk_adj : 股票对应日期的H股的复权前复权价格
* hk2cn : 当日的港币兑人民币汇率(1港币可以换多少人民币)
* AH_premium_adj : A股相对于H股当日的溢价
我希望构建一个基于AH溢价的选股策略:
* 首先帮我写一个策略函数:
* 其参数是日期、split_n 份
* 输出是两个 list ,一个list是AH溢价最高的n支股票名字,一个是AH溢价最低的n支股票名字
* 以及一个交易策略回测函数:
* 待定参数是策略周期:X个月
* 每个周期一开始把手上的钱均分成10份
* 仅在市值位于mv_quantile分位数以上的股票中选股
* split_n份 资金平均购买那split_n支AH溢价最高的股票的H股
* 另外 split_n 份平均购买AH溢价最低的股票的A股
* 每个周期结束后进入下一个周期,用同样策略重新配置仓位
* 需要考虑资金量和交易成本
* H股交易双向都按0.05%计算,每次交易至少5港元
* A股交易双向都按0.01%计算,且每次交易至少5元
* 初始资金默认用100万
* 几个值都用变量来配置
* 分别绘制出策略周期X为1个月、2个月、3个月、6个月情况下的策略收益曲线,默认从2018年开始模拟,并加入恒生指数和沪深300指数作为对比
然后可以让 ChatGPT 来写策略和回测代码,基本没啥大问题,略微修改下就可用了。
实现过程中,我的策略也增强过几次
这版是目前参数最灵活的,支持
- start_dt_str : 设置回测开始日期
- initial_capital : 初始资金量(模型内会和交易费有关,并影响最后收益率)
- split_n : 每次买AH溢价两头的各自的多少支股票
- mv_quantile : 选股的市值分位数
- rate_A : A股双向费率
- rate_H : H股双向费率
- min_fee_A : A股最低费用
- min_fee_H : H股最低费用
2.4 AH溢价策略回测分析
2.4.1 基本策略
- 每次买AH溢价最高的5个H股,5个AH溢价最低的A股
- 资金按 100 万算
- 不考虑市值
- 不考虑费率



观察:
- 2018、2020、2022三个开始年份回测表现都还不错,和纳指持平或超越纳指,且都远超沪深300和恒生指数。
- 1,2,3,6个月的轮动差异没有明显优劣势(各有千秋)。
2.4.2 考虑费率
如果把交易费率加上:

观察:
- 整体影响不大,1个月的短周期轮动周期策略会受影响明显一点,最后的收益率(380%)和无费率(400%)少了20%。
- 所以还是不能小看交易费用,即使如此低频交易(1个月已经比很多策略低频很多了),时间拉长收益差异也不少。
自我总结:
- 普通人在没明确统计验证需要高频的情况下,就不要高频。
- 不操作不一定 少赚和多亏,但高频一定多亏手续费。
- 结合个人经验:
- 几次因为情绪在大跌的时候卖,虽然有时确实会继续跌,但也经常卖了就涨。
- 整体上并没因为这种情绪性止损操作少亏,甚至可能少赚了不少。
- 简而言之,无脑的操作不如不操作。
2.4.3 选股数量改两头各3
修改为每次买AH溢价最高的3个H股,3个AH溢价最低的A股(从5改到3),2018年开始:

修改为每次买AH溢价最高的3个H股,3个AH溢价最低的A股(从5改到3),2020年开始:

修改为每次买AH溢价最高的3个H股,3个AH溢价最低的A股(从5改到3),2020年开始:

观察:
- 整体比各选5支的表现差了不少(虽然依旧好于沪深300和恒生)
2.4.4 选股数量改两头各10
修改为每次买AH溢价最高的10个H股,10个AH溢价最低的A股(从5改到10),2018年开始:

修改为每次买AH溢价最高的10个H股,10个AH溢价最低的A股(从5改到10),2020年开始:

观察:
- 整体也比两头各5支的设置表现差了不少
2.4.5 只选市值前50%的公司
根据每日港股市值,只在市值前50%的公司里选溢价最高和最低的各5支,从2018年开始:

观察:
- 和基本策略相比差了非常多,虽然仍比沪深300好,但主要还是沪深300太差了。
2.4.6 只选市值前50%的公司且仅2支

观察:
- 也相对变很一般,没有修改前的表现好,虽然仍旧好于沪深300和恒生。
3. AH溢价策略总结分析

3.1 个人对此策略评估
历史回测表现还不错
- 平均年化收益大约 6%-25%
- 和纳指差不多,且基本高于沪深300
- 且几种情况下最大回撤25%,也不算大
- 很难靠这个策略暴富,但低风险赚过大盘还是有希望
回测表现对参数修改比较敏感,有一些过拟合风险
- 目前选5个AH溢价最高和5个AH溢价最低,然后3-6个月轮动一次的策略表现最好
- 但没有明确理由当5改成3或者10会更差,或者加一下市值条件的微调版策略更差,所以对其其稳定性存疑
- 不过,由于修改后虽没有表现很好,但差的情况下平均年化收益也可以在6%以上,所以策略还是有参考价值
操作层面很有优势
- 低门槛:低资金要求,如果没港股,A股单侧玩也不错(见量化投资邢不行啊 的 AH溢价策略抖音 )
- 易操作:可代码搞,也可以自己APP找,反正AH股就108个(刚好水浒)
- 低成本:精准的AH溢价套利应该是做空贵的,买入便宜的。但会有借贷成本。而AH溢价波动周期长,不适合我去这样精准套利。
- 低精力占用:几个月调一次仓位,平时该干啥干啥
有理论支持,对我吸引力大于基于K线技术分析的各种策略
- AH长期高溢价至少金融学角度长期而言是不理性或者不正常的,没理由一直超高溢价
- 考虑流动性、红利税等等,0-30%的溢价就差不多了。
主观基本面支持(就很个人主观了)
- 人民币要和美元竞争和国际化,长期而言得让资金更自由,意味着A和H自由度会更高,价差应越来越小。
- 大陆投资者会随经验和学习越来越理性,越来越回归股票的现金流折现价值,而非赌博炒作价值。而从现金流价值来计算,A和H差异不大。就算税和交易和持有等成本影响,外加流动性溢价,AH溢价也应在0-30%内。进而价差也应该会越来越小。
- 不过也都是长周期的基本面。
3.2 应用思考
可作为长周期的选股策略,和其他策略结合着用在选股时进行加权。
本身策略也可以进一步优化完善
- 目前策略没考虑仓位控制(一直满仓)
- 没考虑AH股以外的资产组合策略(如配合现金、纳指、黄金、债券),没进行凯利公式相关优化。
- 也还没考虑 Sharpe Ratio
- 等等