使用 Beancount 管理 ESPP
在过去的几年时间里,我一直在使用 Beancount 来记账,我之前也有写过一篇博客来介绍 Beancount 的基础用法。今天,打算写一篇稍微进阶的文章,来纪录使用 Beancount 管理 ESPP 的买卖。
ESPP 介绍
ESPP (Epmloyee stock purchase plan) 是指员工在购买本公司的股票时,可以以一定的折扣入手。例如,员工可以用工资的百分之十五参与该计划,以市场价九折的折扣购入公司的股票。但这样的福利也是有一定的条件的。例如,参与计划的金额要低于工资的多少百分比且总金额不能大于多少;购入股票的周期一般为一个季度或者半年;交易的价格如何确定每家公司也不一样,有取交易日的市场价的,也有取计划周期内最小值的。当员工考虑加入该计划时,这些都是很关键的因素,毕竟 ESPP 的交易本质和普通股票的交易类似,也都是存在亏损的可能的。下面是 step by step 的说明。
Beancount demo
- 建立商品,定义了一个 MSFT 的计数单元表示股票
1
2
32000-01-01 commodity MSFT
name: "Common shares of Microsoft."
quote: USD
- 建立商品,定义了一个 MSFT 的计数单元表示股票
- 创建账户
1 | 2000-01-01 open Assets:Stock:Cash CNY ;用于存放购买 ESPP 的现金账户 |
- 每月定存 ESPP 的资金
假设每月工资到账 10000 元,其中 9000 元存入银行,1000 元用于购买股票,暂时存放在股票现金账户,此时还没交易
- 每月定存 ESPP 的资金
1 | 2000-01-31 * "工资到账" |
- 季度末开始购买股票
假设每月定存了 1000 元,季度末一共 3000 元,按照 10:1 兑换成 USD 后以 10 USD 每股的价格购入了 30 股。
- 季度末开始购买股票
1 | 2000-03-31 * "Q1 购买股票" |
- 卖出股票
假设以 20 USD 每股的价格出售了 5 股,扣去成本 10 USD 每股,收益为 50 USD。
- 卖出股票
1 | 2000-04-01 * "出售股票" |
- 美元转换到账
100 USD 以 10:1 兑换成 CNY 的表述。1
2
32000-04-02 * "美元转换"
Assets:Stock:USD -100 USD @@ 1000 CNY
Assets:Bank:CBC
- 美元转换到账
其他
{ } 在 beancount 中表示 cost 价格,表示持有价格(held at cose),而 @ 表示 price 单价,@@ 表示总价。但购入股票是,{} 等于 @,cost 等于 price。但随着市场变化,price 有可能会高于 cost,此时售出收益为正;price 也有可能会低于 cost,此时售出收益为负。
在上述的示例中,有货币转换,-3000.00 CNY @@ 300 USD
表示 CNY 到 USD, -100 USD @@ 1000 CNY
表示 USD 到 CNY;也有 cost 的用法,例如 30 MSFT { 10 USD }
表示 30 份以 10 元每份持有的股票,-5 MSFT { 10 USD } @ 20 USD
,表示以 20 元每份的价格出售持有成本为 10 元每份的股票。
参考资料
- 标题: 使用 Beancount 管理 ESPP
- 作者: cyang812
- 创建于 : 2023-06-19 21:30:23
- 更新于 : 2023-06-19 21:30:23
- 链接: https://blog.cyang.tech/2023/06/19/使用 Beancount 管理 ESPP/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。