Beancount × 港股通投资记录指南

前言

本文介绍如何使用 Beancount(一个复式记账工具)来准确记录港股通投资交易。Beancount 采用纯文本记账方式,能够精确跟踪多币种投资的成本、收益和汇率变化。

如果您还不熟悉 Beancount 的基本语法,建议先阅读官方文档或相关入门教程。

港股通人民币到港币汇率规则

港股通是内地投资者投资香港股票市场的重要渠道。由于港股以港币计价,而内地投资者使用人民币,因此涉及汇率转换机制。

港股通汇率机制涉及两个关键概念:

参考汇率(每日公布)

  • 由中国结算公司在交易日早上公布
  • 用于日间交易的资金冻结计算
  • 投资者下单时,系统按此汇率冻结相应的人民币资金

结算汇率

  • 由中国结算公司在交易日结束后公布
  • 用于实际交收的资金结算
  • 这是最终影响投资者实际成本和收益的汇率

两市的每日汇率可在以下网站查询:

两者在汇率上会有一些很小的差异,需要注意。

Beancount 记录港股通投资

在 Beancount 中记录港股通投资,关键是正确处理货币转换和成本跟踪。下面详细说明买入和卖出的记录方法。

港股通买入

港股通买入的核心逻辑是:人民币 → 港币 → 港股资产

投资者买入港股时,证券公司可利用参考汇率卖出价计算投资者需要预冻结的人民币资金;

日终清算时,投资者的港股买入交易,按卖出结算汇兑比率计算出实际需要支付的人民币

交易流程:

  1. 支付人民币(按卖出结算汇兑比率)
  2. 获得等值港币
  3. 用港币购买港股
  4. 支付相关手续费

示例:买入 400 股阿里巴巴-W,股价 80.606 港币

2024-12-20 * "阿里巴巴-W建仓" "港股通"
Assets:HK:Invest:XX证券:阿里巴巴-W 400 HK_09988 { 80.606 HKD }
Assets:CN:Invest:XX证券:现金 -30306.32 CNY @@ 32242.4 HKD ; 人民币转港币(按卖出结算汇兑比率)
Assets:CN:Invest:XX证券:现金 32242.4 HKD ; 入账港币
Assets:CN:Invest:XX证券:现金 -32242.4 HKD ; 用港币买入港股
Expenses:Invest:券商佣金 1.00 CNY ; 券商佣金等手续费
Assets:CN:Invest:XX证券:现金 -1.00 CNY ; 扣除手续费

说明:

  • 400 HK_09988 { 80.606 HKD }:买入 400 股,每股成本 80.606 港币
  • 30306.32 CNY @@ 32242.4 HKD:30306.32 人民币兑换成 32242.4 港币
  • 总港币成本:400 × 80.606 = 32242.4 HKD
  • 30306.32 CNY 建议直接取券商账单上的支出人民币金额,避免手动计算,注意不含手续费。

港股通卖出

卖出相对复杂一些,需要处理:港股资产 → 港币 → 人民币,并计算盈亏。

投资者卖出港股时,证券公司可利用参考汇率买入价计算投资者预计得到的人民币资金。

投资者的港股卖出交易,按买入结算汇兑比率计算出实际可以得到的人民币。

交易流程:

  1. 卖出港股获得港币
  2. 港币转换为人民币(按买入结算汇兑比率)
  3. 计算投资收益/亏损
  4. 扣除相关手续费

当有多笔不同成本的买入需要一起卖出时,需要手动计算总成本。

简单场景:单一成本卖出

示例:以 100 港币/股的价格卖出全部 400 股阿里巴巴-W

假设卖出后实际收到人民币 35000 元(扣除手续费前),那么收益为:
35000 - 30306.32 = 4693.68 元

2024-12-25 * "阿里巴巴-W清仓" "港股通"
Assets:HK:Invest:XX证券:阿里巴巴-W -400 HK_09988 { 80.606 HKD } @ 100.00 HKD

; 港股通资产的成本:32242.4HKD(买入时的成本:400 * 80.606
Assets:CN:Invest:XX证券:现金 32242.4 HKD
; 将成本HKD转为人民币(通过总收入减去收益计算出成本)
Assets:CN:Invest:XX证券:现金 -32242.4 HKD @@ 30306.32 CNY
; 入账人民币成本
Assets:CN:Invest:XX证券:现金 30306.32 CNY

; 收益计算部分
Assets:CN:Invest:XX证券:现金 4693.68 CNY ; 入账实际收益
Income:CN:Invest:收益 -4693.68 CNY ; 记录港股通收益

; 佣金手续费部分
Expenses:Invest:券商佣金 32.00 CNY ; 券商佣金等手续费
Assets:CN:Invest:XX证券:现金 -32.00 CNY ; 扣除手续费

说明:

  • 卖出价格:100.00 HKD/股
  • 总卖出金额:400 × 100 = 40000 HKD
  • 成本:32242.4 HKD,对应人民币成本 30306.32 元,建议人民币成本通过券商账单(实收人民币-收益)计算得出
  • 收益:4693.68 元

复杂场景:多笔成本卖出

当有多笔不同成本的买入需要一起卖出时,需要手动计算总成本。

示例:两笔不同成本的买入

第一笔买入(12 月 10 日):

2024-12-10 * "阿里巴巴-W建仓" "港股通"
Assets:HK:Invest:XX证券:阿里巴巴-W 200 HK_09988 { 80.606 HKD }
Assets:CN:Invest:XX证券:现金 -15153.16 CNY @@ 16121.2 HKD
Assets:CN:Invest:XX证券:现金 16121.2 HKD
Assets:CN:Invest:XX证券:现金 -16121.2 HKD
Expenses:Invest:券商佣金 1.00 CNY
Assets:CN:Invest:XX证券:现金 -1.00 CNY

第二笔买入(12 月 15 日):

2024-12-15 * "阿里巴巴-W加仓" "港股通"
Assets:HK:Invest:XX证券:阿里巴巴-W 200 HK_09988 { 82.000 HKD }
Assets:CN:Invest:XX证券:现金 -15400.00 CNY @@ 16400.0 HKD
Assets:CN:Invest:XX证券:现金 16400.0 HKD
Assets:CN:Invest:XX证券:现金 -16400.0 HKD
Expenses:Invest:券商佣金 1.00 CNY
Assets:CN:Invest:XX证券:现金 -1.00 CNY

计算总成本:

  • 第一笔成本:200 × 80.606 = 16121.2 HKD
  • 第二笔成本:200 × 82.000 = 16400.0 HKD
  • 总 HKD 成本:16121.2 + 16400.0 = 32521.2 HKD
  • 总人民币成本:15153.16 + 15400.00 = 30553.16 CNY。此处建议通过卖出账单(实收人民币-收益)进行计算会比较方便。

卖出记录:假设以 95 港币/股卖出全部 400 股

2024-12-20 * "阿里巴巴-W部分清仓" "港股通"
Assets:HK:Invest:XX证券:阿里巴巴-W -200 HK_09988 { 80.606 HKD } @ 95.00 HKD
Assets:HK:Invest:XX证券:阿里巴巴-W -200 HK_09988 { 82.000 HKD } @ 95.00 HKD

; 港股通资产的成本:32521.2HKD(200 * 80.606 + 200 * 82.000
Assets:CN:Invest:XX证券:现金 32521.2 HKD
; 将成本转为人民币
Assets:CN:Invest:XX证券:现金 -32521.2 HKD @@ 30553.16 CNY
Assets:CN:Invest:XX证券:现金 30553.16 CNY

; 收益计算(假设实际收到32000元人民币)
Assets:CN:Invest:XX证券:现金 1446.84 CNY ; 实际收益:32000 - 30553.16
Income:CN:Invest:收益 -1446.84 CNY ; 记录收益

; 佣金手续费部分
Expenses:Invest:券商佣金 1.00 CNY ; 券商佣金
Assets:CN:Invest:XX证券:现金 -1.00 CNY ; 扣除手续费

使用 implicit_prices 插件简化

开启 beancount.plugins.implicit_prices 插件后,可以用简化写法:

Assets:HK:Invest:XX证券:阿里巴巴-W  -400 HK_09988 {  } @ 95.00 HKD

插件会自动根据买入的成本价格按数量根据先入先出的原则进行拆分。

自动化工具

为了简化港股通操作的记录,我开发了一款自动化工具,可以帮助生成上述的 Beancount 交易记录。

工具地址: Beancount 港股通账单生成器

通过 Fava 统一转化为人民币资产

Fava 是 Beancount 的 Web 界面,支持自动货币转换功能,可以将所有资产统一显示为人民币。

在资产负债表中启用货币转换:Fava Converted to X

Snipaste_2025-05-01_21-31-55.jpg

价格数据配置

为了确保转换准确性,需要在 Beancount 账本中维护 HKD 和 CNY 的汇率关系:

2025-07-15 price HKD 0.91325 CNY

2025-07-14 price HKD 0.9135 CNY

汇率就是港股通买入结算汇兑比率,在沪港通和深港通的交易所网站上可以查询到。

注意事项:

  • 有些券商在汇率计算中会四舍五入至四位小数
  • 可以根据券商的实际结算价格灵活调整
  • 建议定期更新价格数据以保持准确性

自动化汇率转换脚本

为了简化日常维护工作,可以通过 Python 脚本自动化处理汇率转换。

解决方案

  1. 更新港币价格:定期获取交易所公布的兑汇比率
  2. 更新价格文件:自动更新 Beancount 价格文件

脚本参考

具体实现可以参考:将深港通的港元证券资产价格转化为最新交易日的人民币资产价格

脚本功能:

  • 自动获取最新兑汇比率
  • 生成标准的 Beancount price 指令
  • 方便资产对账和收益统计

使用建议

  • 建议每周运行脚本更新价格
  • 定期核对券商账单,确保汇率和价格的准确性
  • 可以结合定时任务自动化执行

结语

通过本文介绍的方法,您可以:

  1. 准确记录:精确跟踪港股通投资的成本、收益和汇率变化
  2. 统一管理:在 Fava 中以人民币统一查看所有资产
  3. 自动化处理:使用脚本自动更新价格数据,减少手工维护工作

要点总结

  • 港股通涉及双币种,重点是处理好汇率转换
  • 卖出时要准确计算成本,特别是多笔买入的情况
  • 定期更新价格数据,确保资产统计的准确性
  • 利用自动化工具提高记账效率

希望这份指南能帮助您更好地管理港股通投资记录。祝您投资顺利!

相关工具