在我使用 Beancount 的过程中,让我收益最大的是让我知道了一个词 commodity ,直接翻译为通货,它不等同于金钱,也不是我们理解的钱。但是在记账的过程中使用最多的就是以货币单位,比如 CNY 人民币,USD 美元,HKD 港币来作为 commodity 记账。
Beancount 给我普及了 commodity,它可以是用于交换的任何物品或资源,比如可以是股票,可以是黄金,也可以是期权,也可以是加密货币等。这种灵活性使得 Beancount 在处理不同类型的资产时非常强大。
Commodity
每一个投资标的就是一个 commodity, 比如现金 CNY, USD, 股票 SPY, AAPL …
- 各国外汇按标准名称来:
CNY
,USD
,CNH
, …
- 美股代号按交易所代码来
AAPL
,GOOGL
- 港股代号以
HK_
开头按 4 位数字命名HK_2800
,HK_0700
- A 股(含场内基金)代号以
CN_
开头按 6 位数字命名CN_000001
,CN_510300
, …
- 场外基金(货币基金除外)以
CN_F
开头按 6 位数字命名CN_F110011
- 货币基金直接用 CNY 表示,收益需要手工更新(原因是货币基金无净值的概念)。
- CNY
记录证券交易
股票交易中的「盈亏」,或者叫资本收益或损失,简称 P/L(也有缩写成 PnL,英语里面叫做 Profit and Loss)。
cost 成本价 price 最新价
2010-08-29 * "店铺" "日常消费"
Expenses:Food:Other 199.00 CNY
Assets:DebitCard:CMB -199.00 CNY
Beancount 中可以用同样的方式记录买入股票,比如以 2000 USD 买入 10 股 Google 股票,佣金 1 美元:
2020-01-01 * "购入10股谷歌"
Assets:Broker:Cash -20001.00 USD
Assets:Broker:GOOG 10 GOOG { 2000.00 USD }
Expense:Broker:Commission 1 USD
同样可以使用断言:
2020-01-02 balance Assets:Broker:GOOG 10 GOOG
卖出股票,比如
2020-08-30 * "以2500卖出2股谷歌"
Assets:Broker:GOOG -2 GOOG { 2000.00 USD } @ 2500 USD
Assets:Broker:Cash 5000 USD
Expense:Broker:Commission 1 USD
Income:Broker:PnL
单价使用 @
符号记录,总价使 @@
记录,比如下面的例子中 @@
就表示卖出一共收益。
2020-08-30 * "以2500卖出2股谷歌"
Assets:Broker:GOOG -2 GOOG { 2000.00 USD } @@ 5000 USD
Assets:Broker:Cash 5000 USD
Income:Broker:PnL
这里 Income:Broker:PnL
就是股票盈亏账户。
通过 price 可以声明价格
比如,2021-01-01 Google 的股价上升到 3000 USD
2021-01-01 price GOOG 3000 USD
利用脚本自动填充 price 语句
待补充。