HBB's Blog

Ordinary road, record every bit

Beancount复式记账实践经验分享

最近1年实践了利用Beancount来替代之前的MoneyWiz进行记账和收支分析,就一些经验做相关的分享。

常规的不做赘述了,只记录一些投资和汇率相关的。

换汇相关

主要有两种记录语法,提供汇率和让Beancount计算汇率。

通过”@”符号提供汇率来平衡交易

2024-08-10 * "Transfer to account in Canada"
Assets:MyBank:Checking -400.00 USD @ 1.09 CAD
Assets:FR:SocGen:Checking 436.01 CAD

通过”@@”符号提供总花费,让Beancount自动计算

2024-08-10 * "Transfer to account in Canada"
Assets:MyBank:Checking -400.00 USD @@ 436.01 CAD
Assets:FR:SocGen:Checking 436.01 CAD

投资相关

定义投资标的

2024-08-13 commodity US_BABA
name: "阿里巴巴"

更新价格

2024-08-14 price US_BABA 100 USD 

买入某个证券, 理解为由现金转化为了一份证券资产,同时被券商收了一笔手续费。

2024-08-13 * "BABA建仓" ""
Assets:US:长桥证券:BABA 23200 US_BABA { 83.340 USD }
Expenses:Invest:券商佣金:长桥证券 10.00 USD
Assets:US:长桥证券:现金

卖出证券资产

单比买入后卖出

2024-08-14 * "BABA清仓" ""
Assets:US:长桥证券:BABA -23200 US_BABA { 83.340 USD } @ { 100.00 USD }
Expenses:Invest:券商佣金:长桥证券 10.00 USD
Assets:US:长桥证券:现金 2319990.00 USD ; 23200*100-10(数量*卖出金额-手续费)
Income:US:长桥证券 ; -386512 实际收益,可省略让Beancount自己计算

多笔不同价位买入后多次卖出

这里分两种情况

一次清仓卖出

省略资产的购买价格,Beancount会自动计算持仓成本后卖出。

2024-08-14 * "BABA清仓" ""
Assets:US:长桥证券:BABA -23200 US_BABA { } @ { 100.00 USD }
Expenses:Invest:券商佣金:长桥证券 10.00 USD
Assets:US:长桥证券:现金 2319990.00 USD ; 23200*100-10(数量*卖出金额-手续费)
Income:US:长桥证券 ; -386512 实际收益,可省略让Beancount自己计算

有时候遇到多笔金额一样的买入记录,使用这种方式可能会报错,这时候可以手动指定卖出的成本,参考下面。

减仓部分卖出

需要自己进行分割, 假设之前份3次次购买了BABA

  • 84.00USD买了100股
  • 82.20USD买了300股
  • 88.20USD买了500股

100USD价位一次卖出400股,需要拆分成两笔

  • 100卖出84买的100股
  • 100卖出82.2买的300股

当然你也可以卖出88.2买的400股,如果你的券商有先进先出或者其他规则,可以灵活调整。

2024-08-14 * "BABA减仓" ""
Assets:US:长桥证券:BABA -100 US_BABA { 84.00 USD } @ { 100.00 USD }
Assets:US:长桥证券:BABA -300 US_BABA { 82.20 USD } @ { 100.00 USD }
Expenses:Invest:券商佣金:长桥证券 10.00 USD
Assets:US:长桥证券:现金 39990.00 USD ;
Income:US:长桥证券 ; 实际收益,省略让Beancount自己计算

Beancount 的 Booking 模式

Beancount模式是严格Booking模式,也就是当交易有不明确的匹配时,会发出错误。

除此之外还有两种模式提供给Beancount让其自行处理。

FIFO 和 LIFO Booking 模式

“FIFO(先进先出)”模式自动选择最早买入的批次,直至达到所要求的减量寸头。

“LIFO(后进先出)”模式则相反,它先选择最晚买入的批次,直至达到所要求的减量寸头。

通过下面的参数可以设置采用的Booking模式

option "booking_method" "FIFO"

然后在分批卖出时就不需要分开设置,beancount会自动判断了。

港股通

港股通记录的时候就比较麻烦了,用人民币购买港股资产,最后在券商呈现的是RMB资产。

目前没找到很好的处理方式,我的办法是把他视为HKD资产进行记录的。

2024-12-20 * "阿里巴巴-W建仓" "港股通"
Assets:CN:Invest:XX证券:阿里巴巴-W 400 HK_09988 { 80.606 HKD }
Assets:CN:Invest:XX证券:现金 -30306.32 CNY @@ 32242.4 HKD

@@ 将人民币转化为等值的港币

工具和插件