?

Log in

No account? Create an account
fedora 蓝色小药丸

401(k)

和同事聊天,很容易谈到 401(k) 上去。大家都没那么多时间去看英文的说明,也不是每个人都像我一样,对一种制度的细枝末节有这么多热情去了解一下。所以偶尔我还能“权威”一把。我主要是通过这几个东西来了解 401(k) 的:
* CFA 教材是入门指导。一个人怎么做不同阶段的理财规划,可能出现的问题,书里都提到了。
* TRP 网站可以实践。如果不是来 US office 这一段时间,也没有这种机会。各种功能几乎都用到了。一年里大约要调整四五次 contribution %,很少有人会像我这么折腾。
* 专门介绍 401(k) 的网站
* 和同事聊天。通常一个人总会有些东西不了解,或者做得不对,聊几句就会发现。这是最能体现“三人行必有吾师”的地方,因为道理很明白,实践也很容易。

401(k) 还算是个简单的制度。复杂的制度就没办法大规模推行了。我想 401(k) 体现了这样的进步:金融不再是少数人做的事情。之前大家的投资是没有分开的,都是由专业的管理人员打理,绝大多数人都没有能力自己做决策,小规模的投资成本也很高。从所有参与人的角度看,“均贫富”是有益的。现在投资的门槛低了,允许小额投资,个人的能力也更强,也出现了合适的商业模式来管理账户、集合投资,就能更好满足个人的需求了。把退休金的管理交给个人,这样减轻了公司的负担,也给个人更多的选择。一个人可以自己做投资决策,也可以找专业的管理人员。

关于个人理财规划,教材里说,首先要确定有哪些关键的时间点。退休是一个非常关键的时间点,退休之前就是整个职业生涯。因此要从整个职业生涯的收入开始做。其他的时间点,就是收入支出模式突然变动的时候。如果发生了某些事情,没有预期,那么还需要重新规划。令人印象深刻的一个提法,是把工资收入视为长期的债券利息收入。现在大家都知道,不能把鸡蛋放在同一个篮子里,所以要分散投资。那么一个人的收入也不能只来自工资。个人要想办法减少自己的“债券”分配。除了我这种优柔寡断的人,大部分人都执行得很好,买个房子,不断付息,两个债券就抵消了,个人财富也转移到了房子里。另一个很好的提法,是要人当心活得太久。谁也不知道自己能活多么久,所以要么多攒些钱,要么指望福利制度。攒钱多少才够?目标就是生活方式不会有突然的变化。实际上现金的储备也应该是这个目标。

我觉得背景的东西是最重要的,所以看到这些提法印象很深。接下来说制度细节,那就是每个人、每年都可能有适用或者不适用的情况了。我最喜欢的制度细节,就是账户里可以有多少钱。可惜的是,我们通常都不会存到极限。在2012年,个人contribution的上限是$17000,我们公司的 match 是略小于工资的 7% (作为比较,网上有帖子说,通常的 match 是个人 contribution 的 50%,但是不超过工资的 6%)。如果一个人的工资是 $25w,那么 7% 就是上限 $17000,用公司提供的 "maximize match if contribution over 7%" 表格,match 比这个值稍微小一些。总的 contribution 就是略多于 $30000。对于 50 岁以上的人有税收优惠,还可以再多 $5500。极限是在某个网站上看到的:如果一个人,他可以通过小企业家给自己定 match,可以到 100% 或者上限 $50000 这个数字。而小企业家自己只能用收益 25% 或者上限 $50000 这个数字。那么这个人和小企业家自己加起来,可以达到很高的数字。网上的东西不可全信,我的复述也可能有问题。关于上限,有很多帖子。如果真的有那么多钱,找个会计师很容易——也有其他更好的避税办法。YY 的话就这么多。

有同事担心401(k)账号里的钱不是自己的。我们公司的 match 都是立即 vested,也就是不与服务年限有关。

如果劳动合同终止,401(k)账户可以 roll over 到 traditional IRA。关于这个也很有意思,2012 年 traditional IRA 的极限是 $5000,不过收入超过 $10w 就没有税收优惠了。IRA 和 Roth IRA 的额度是算在一起的。有很多帖子说可以把 traditional IRA 转成 Roth IRA,不知道什么时候才应该转?也许最有用的一点是可以取本金出来而没有惩罚性的税。

401(k) 没有手续费,也许是因为公司与 TRP 签订了账户管理的合同。从基金池里选的基金,或者通过 brokerage 账户投资,都要付手续费。brokerage 账户默认是没有开的,不清楚账户管理费怎样。TRP 要求开 brokerage 账户之前,必须开一个准备金账户。这个和国内一样。准备金账户按活期计利息。通过 IRA 可以投资 TRP 的 Target Date Fund 基金,不知道怎么样。好像每个这样的基金账户都是独立呈现的,和准备金账户并列?通过 TRP brokerage 可以买到的基金就很多,也可以选其他投资方式,这些账户怎么在 account summary 上呈现就不知道了。我们公司 401(k) 的基金池很小,每个基金都很有代表性,其中有一个货币基金是 TRP 的 private fund。

改变 contribution 最好的时机是这样几个,年底最后一次发薪之前,奖金发放之前、之后,工资调整之前,还有一个特别的日子,就是一年的收入不会再变化时,为了 max match 所作的改动。每次改动都要注意一点,就是改动并不是即时生效。另外一个比较 tricky 的事情,是改动的依据。如果依据 TRP 网站报告的值,而不是 ADP 网站报告的值,计算的结果就会有偏差,因为目前 TRP 只在月末更新 contribution 总额。如果计算出错,又在下一次工资发放时才发现,这时再次更改 contribution,就要同时估计到这两种情况。再仔细解释一下上述各个时机:每年的 401(k) 限额不同,所以年底一定要为下一年做调整,HR 会提醒。奖金发放之前,HR 也会提醒。我倾向于减少税收影响,拿到平稳的收入,而不是把奖金拿到手里,因为拿到手里的钱会被税务局砍掉一半,直到下一年退税时才会回来。奖金发放之后、工资调整、max match 这些就没有 HR 提醒了,完全取决于个人有没有想 max match。我想最佳的策略是在上半年使用较高的 contribution 百分比,让投资期限更久,下半年使用 max match 的最小百分比(也就是 7%)。比如一个人有 $5w 的收入,那么 max match 是将近 3000 元,为了达到这个 match,最小的 contribution 是 $3500。可是这个数字离上限 $17000 还有很大的距离。假定工资每月发放一次,没有奖金,在上半年x个月里使用较大的百分比p,px/12+7(12-x)/12=17000/50000,p = 7+(34-7)*12/x,x 取值1~12,可以得到这样的一组数字: (331, 169, 115, 88, 71, 61, 53, 47, 43, 39, 36, 34) 扣除超过 100% 的 contribution,如果用 88% 的话,只要四个月就可以了。当然四个月不吃不喝是不太现实。公司的 max match 表格也可以用来算这个,因为是每月发放两次, p = 7+(34-7)*24/x,x 取值1~24,结果是 (655, 331, 223, 169, 136, 115, 99, 88, 79, 71, 65, 61, 56, 53, 50, 47, 45, 43, 41, 39, 37, 36, 35, 34),只要前 7 次用 99% 就可以了。每月发放两次工资是有道理的。假定一个工资是$10w的人在把奖金全部 contribute 之后,还需要 $5000 才可以达到上限。这时最大的 match 只有 5%。公司为小于 7% 的员工提供不同的 max match 计算表格。


1 class contribution:
2    def __init__(self,limit,income,match=7):
3        self._limit=max(0,limit)
4        self._income=max(0,income)
5        self._match=max(0,match)
6        self._match = min(self._match, 100*self._limit/self._income)
7
8    def contribute(self,nm,x):
9        return self._match+(100*self._limit/self._income-self._match)*nm/x
10
11    def all_contributions(self,nm):
12        for i in range(nm):
13            yield (i+1,self.contribute(nm,i+1))
14
15    def all_contribution_values(self,nm):
16        return (j for i,j in self.all_contributions(nm))
17
18 if __name__=="__main__":
19    salary=70000
20    bonus=salary/10
21    limit=17500-bonus
22    c=contribution(limit,salary)
23    print tuple(c.all_contribution_values(24))

代码没有对输入做足够检查,在工资系统里,contribution 百分比必须是整数,工资发放次数是常数。
edit: https://github.com/bbbush/my401k
Tags:

Comments