基于AH溢价量化策略的学习实践笔记

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股收益都还可以。

不过目前这套有明显的问题:

  1. 不确定是其他运气导致的还是AH策略本很导致的。进而实际策略模糊,进一步导致
    • 操作信心不足
    • 无效纠结很多,浪费时间
    • 不便于总结、学习和优化
  2. 当前我找AH溢价高/低的股,是用中信证券手机APP一个个股慢慢翻,也浪费时间

近期在看了 量化投资邢不行啊 的 AH溢价策略抖音 后,感觉可以自己学着尝试下拉数据和分析。

现在有AI辅助,学习量化分析还挺容易的。

这里主要记录下学习笔记。且这次仅针对于AH溢价进行分析。

1. 理解量化交易

量量化交易是用 数据驱动+数学模型+计算机程序 进行金融市场交易的策略总称。

在高频交易领域没有普通人能比得上计算机和专业量化团队。

  • 不过高频领域比拼的设备、算法都不是目前我所适合的,甚至光是资金门槛也够不到,就直接不考虑了,哈哈。

综合考虑能力、精力、手续费等各方面。只利用 数据驱动+数学模型 来选股,最后低频人肉下单交易,更合适我这种普通人。且这种也算量化交易(相对于乱总结,凭感觉,情绪交易)

而 数据驱动+数学模型 相对门槛就低了很多,容易落地,只需要:

  • 拿数据(小额付费可以用 Tushare 等数据库。更便宜的方式是淘宝买历史数据,但及时性和便捷性弱一些)
  • python处理数据、建立策略、回测、执行策略(很多代码都可以靠AI搞定)

所以量化交易也没那么复杂。

2. AH溢价策略相关代码实现

我需要代码能帮我实现:

  1. 回测纯跟策略在历史上的实际收益表现,且和至少纳指、沪深300、恒生指数等进行对比
  2. 调整策略的一些细节参数,对比回测结果,以对策略的稳定性有进一步了解
  3. 可以未来方便地靠代码帮我确定下一步买哪些股票。不用再在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) 这些文件中依次中实现,具体包含

  1. get_1_A_stock_list.ipynb
    • 拉取 A 股上市公司 List,包含 A 股股票代码,公司名
  2. get_2_HK_stock_list.ipynb
    • 拉取 H 股上市公司 List,包含 H 股股票代码,公司名
  3. get_3_AH_stock_list.ipynb
    • 据 公司名 匹配公司,且仅保留同时在 A 股 H 股的股票(inner join),因为这个策略只关心 AH股。得到 AH 股 List 。
  4. get_4_AH_stock_daily_k.ipynb
    • 根据 AH 股 List 挨个拉取其历史日K信息(暂主要用到收盘价),和复权因子
  5. get_5_AH_A_stock_daily_k.ipynb
    • 拉取 AH 股各公司的历史每日的 A 股市值(我想看看只挑大公司对策略表现的影响)
  6. get_6_common_index.ipynb
    • 拉取 沪深300、恒生、纳指 的历史日K信息
  7. get_7_USDCNH.ipynb
    • 拉取美元兑人民币历史汇率的日K信息
  8. get_8_USDHKD.ipynb
    • 拉取美元兑港币历史汇率的日K信息

大部分拉数据和处理都很简单,只有前复权有一点坑需要注意:

  • 在进行前复权时,复权因子不能直接乘当日股价,得到的复权股价会有问题,这由于复权因子没有对当前归一
  • 想了想,也有道理,如果归一则意味着公司发生 分红/送股 等操作后需要修改历史的复权因子,修改过多,且不利于增量更新。
  • 所以在实际进行前复权时,需要乘以复权因子后额外进行归一处理,即除以该股票最后天的复权因子。

这样以后就拿到AH股的历史AH溢价数据了。

2.3 单股溢价可视化

代码详见 :show_AH_premium.ipynb

将AH个股的历史A股价格、H股价格、AH溢价率绘制出来,协助分析,在选股时应该可以作为参考

招商银行历史AH溢价
中国人寿历史AH溢价
中金公司历史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年开始回测

观察:

  • 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
  • 等等

发表评论