不是胆子小,是没写好
investment_risk_budget这个函数
01 需求:有一笔闲钱,想配置但怕亏损
朋友老刘,38岁,互联网中层。
夫妻年税后收入 ≈ 60w,房贷余额 80w,孩子上小学。这些年 savings_rate 不低,攒下了 50w 闲钱。
他想把这笔钱从活期(年化 0.3%)迁移到权益类资产(预期年化 8-10%),但每次打开理财 App,看到“风险提示”弹窗,他就 return None。
“万一亏了怎么办?孩子学费、家庭应急,都依赖这笔 liquidity_pool。”
他问我:investment_amount = ?
02 先做全量数据盘点:资产与负债
我让他别急着写投资逻辑,先执行一次 SELECT * FROM personal_finance。
python
# 资产端
assets = {
"current_deposit": 100_000,
"time_deposit": 400_000,
"house_self_use": 4_000_000,
"car": 150_000
}
# 负债端
liabilities = {
"mortgage_balance": 800_000,
"credit_card_due": 15_000
}
net_worth = sum(assets.values()) - sum(liabilities.values())
print(f"净资产: {net_worth}") # 3,835,000
“原来我有 383 万家底?”老刘第一次看到这个数字。
但光有 net_worth 还不够,这只是 total_assets - total_liabilities。我们需要分层架构。
03 分层架构:把资金分配到不同的“容器”
参考经典的三笔钱模型,我帮他做了如下分层:
python
class CapitalTier:
def __init__(self, name, purpose, risk_tolerance, horizon_years):
self.name = name
self.purpose = purpose
self.risk_tolerance = risk_tolerance # 0=保本, 1=可承受10%回撤...
self.horizon_years = horizon_years
# 1. 保命钱(不可亏损)
tier_safety = CapitalTier(
name="保命钱",
purpose="6个月生活费 + 应急",
risk_tolerance=0,
horizon_years=0 # 随时可取
)
amount_safety = 150_000 # 6个月开支
# 2. 保底钱(低风险,短期要用)
tier_stable = CapitalTier(
name="保底钱",
purpose="3年内大额支出(学费、换车等)",
risk_tolerance=0.1, # 最大回撤容忍1%
horizon_years=3
)
amount_stable = 200_000
# 3. 生钱的钱(可承担波动,长期投资)
tier_growth = CapitalTier(
name="生钱的钱",
purpose="长期增值",
risk_tolerance=0.8, # 可接受20%回撤
horizon_years=10
)
amount_growth = total_idle - amount_safety - amount_stable # 500k - 150k - 200k = 150k
老刘恍然大悟:“原来我能拿去投资的钱只有 15 万,不是 50 万?”
“对。如果你的投资组合最大回撤为 20%,那么 15 万的 20% 是 3 万,远小于 50 万的 20%(10 万)。风险预算是用 amount * max_drawdown 来度量的,你能承受的绝对亏损额决定了可投资金额。”
04 风险预算:用公式代替焦虑
定义风险预算函数:
python
def risk_budget(capital, max_loss_acceptable, expected_max_drawdown):
"""
capital: 总闲钱
max_loss_acceptable: 你能接受的绝对亏损上限(元)
expected_max_drawdown: 投资策略的历史最大回撤(%)
返回建议投入金额
"""
return min(capital, max_loss_acceptable / expected_max_drawdown)
# 老刘能接受的绝对亏损上限:5万元(亏了不会失眠)
max_loss = 50_000
expected_dd = 0.20 # 宽基指数最大回撤约20%
suggested = risk_budget(500_000, max_loss, expected_dd)
print(suggested) # 250_000,但还要扣除保命和保底钱后剩150k,所以取150k
最终他投入 15 万分批买入宽基指数基金。
05 运行时监控:每月 UPDATE snapshot
半年后市场下跌,该基金一度浮亏 8%。老刘没有恐慌 RELEASE,因为知道这是 tier_growth 层的正常波动。
他每月用类似下面的 SQL 追踪:
sql
CREATE TABLE monthly_snapshot (
date DATE,
tier_safety DECIMAL,
tier_stable DECIMAL,
tier_growth DECIMAL,
growth_return DECIMAL
);
-- 查看分层偏离
SELECT * FROM monthly_snapshot ORDER BY date DESC LIMIT 2;
今年行情回暖,他的 tier_growth 收益 +12%。他说:“以前觉得理财是黑盒,现在分层之后,每一层的风险都可视化了。”
06 不想手写代码?用现成工具
微信搜索「ReFi理财」小程序,里面的“家庭资产负债表”其实就是一个分层资金管理工具:
- 录入资产/负债 → 自动计算净资产
- 手动划分“保命钱”、“保底钱”、“生钱的钱” → 自动算出可投资金额
- 每月更新 → 自动对比净值变化、配置偏离
不需要写 Python,但底层逻辑和你写的 CapitalTier 一模一样。
👉 微信搜索「ReFi理财」→ 家庭资产负债表 → 开始分层
07 总结
| 分层 | 用途 | 风险容忍 | 推荐工具 |
|---|---|---|---|
| 保命钱 | 6个月生活费 | 0% | 活期/货基 |
| 保底钱 | 3年支出 | 1-2% | 定期/低风险理财 |
| 生钱的钱 | 10年以上增值 | 20%+ | 指数基金/股票 |
不敢投资,往往不是因为你胆小,而是因为没有给资金做分层架构。
把风险预算算清楚,剩下的就是执行 DCA(定期定额)和定期 rebalance。
用工程师的方式打理钱财:可分层、可量化、可复盘。
本文为真实经历改编,不构成投资建议。欢迎评论区讨论你的“资金分层策略”。