损失厌恶与前景理论
亏损 100 元的痛苦 ≈ 赚 225 元的快乐
前景理论的核心
Kahneman 和 Tversky 在 1979 年提出前景理论,核心发现是:人对损失比对收益更敏感。具体来说,损失带来的痛苦是同等收益带来的快乐的 2-2.5 倍。
这个系数叫 λ(lambda),Kahneman 的实验测出来 λ ≈ 2.25。也就是说,亏 100 元的痛苦,大约等于赚 225 元的快乐。
这就解释了为什么投资者总是"扛单不割,赚了急跑"——因为亏损的痛苦太大了,大脑会本能地回避它(不卖就不算亏),而盈利的快乐相对较小,大脑想赶紧锁定(落袋为安)。
前景理论的三个关键结论
- 参照点依赖 — 价值是相对于参照点定义的,不是绝对值。你的参照点通常是"买入价",所以浮亏感觉比浮盈强烈
- 边际递减 — 从 0 赚到 100 的快乐,大于从 1000 赚到 1100。赚得越多,每多赚一块的快乐越小
- 损失厌恶 — 损失的痛苦是同等收益快乐的 2.25 倍。这是最核心的发现
用 Python 建模
前景理论的感知价值函数可以用 Python 建模,我把它实现在 FinBuddy 里做心理分析:
# 前景理论 — 感知价值函数
# Kahneman & Tversky (1979)
LOSS_AVERSION_LAMBDA = 2.25 # 损失厌恶系数
ALPHA = 0.88 # 收益凹度
BETA = 0.88 # 损失凸度
def perceived_value(gain: float) -> float:
"""计算感知价值(非实际金钱价值)
Args:
gain: 正数=收益,负数=亏损
Returns:
感知价值:收益为正,亏损为负(且绝对值更大)
"""
if gain >= 0:
return gain ** ALPHA
else:
return -LOSS_AVERSION_LAMBDA * (-gain) ** BETA
# 验证:亏100的痛苦 vs 赚225的快乐
pain = perceived_value(-100) # ≈ -225
joy = perceived_value(225) # ≈ 225
# |pain| ≈ joy → 亏100的痛苦≈赚225的快乐
这个模型揭示了几个重要事实:
- 收益曲线是凹的(边际递减)— 从赚 0 到赚 100 的快乐,大于从赚 1000 到赚 1100
- 损失曲线是凸的 — 从亏 0 到亏 100 的痛苦,大于从亏 1000 到亏 1100
- 损失比收益陡峭得多 — λ=2.25 让损失侧的斜率是收益侧的 2.25 倍
对投资的影响
损失厌恶直接导致两种常见错误:
- 处置效应 — 赚了急着卖,亏了死扛。因为卖掉亏损 = 承认损失 = 巨大痛苦,而卖掉盈利 = 锁定快乐 = 相对较小的快乐。
- 风险寻求 — 在亏损状态下反而更愿意冒险。"已经亏了,不如赌一把"——因为确定性的小损失比不确定性的大损失更痛苦。
我的实盘心理记录
2025 年 10 月,我持有一只消费股,成本 22 元。三季报出来后,营收同比下降 8%,我判断基本面在恶化,理性上应该止损。当时股价 19.5 元,浮亏约 11%。
但我没卖。我的内心独白是这样的:
- "11% 不算多,等等就回来了"(损失厌恶:不想承认亏损)
- "万一卖了就涨呢?"(风险寻求:宁愿赌也不愿确定亏损)
- "巴菲特不是长期持有吗?"(合理化:用名言给自己找借口)
结果两个月后跌到 16 元,浮亏 27% 才割。如果一开始就止损,只亏 11%。
损失厌恶的恶性循环
亏损 → 不想承认 → 继续持有 → 亏损加大 → 更不想承认 → 继续持有……这就是损失厌恶的恶性循环。打破循环的唯一方法:提前设止损,到了就执行。不给"扛一扛"的机会。
我的应对方法
我的应对方法很简单但有效:买入前设止损,到了就执行。不给自己"扛一扛"的机会,因为我知道自己的大脑会骗我继续持有。
具体做法:
- 机械止损 — 买入前设好 -15% 止损线,到了自动提醒。FinBuddy帮我盯着,到了止损位手机弹通知。
- 不看浮亏 — 我把交易软件的"持仓盈亏"关了。只看公司基本面有没有变化,不看浮盈浮亏数字。
- 换一个参照点 — 损失厌恶的根源是参照点(买入价)。如果我把参照点从"买入价"换成"公司内在价值",那股价下跌反而是买入机会——前提是基本面没变。更多实盘心理记录见投资日志。
# FinBuddy 止损提醒 — 对抗损失厌恶
class StopLossMonitor:
"""自动监控止损线,到了就提醒"""
async def check(self, portfolio: Portfolio) -> list[Alert]:
alerts = []
for position in portfolio.positions:
loss_pct = (position.current_price - position.cost) / position.cost
if loss_pct <= position.stop_loss_pct:
alerts.append(Alert(
symbol=position.symbol,
message=f"{position.symbol} 已触达止损线 "
f"{position.stop_loss_pct:.0%},"
f"当前亏损 {loss_pct:.1%}。"
f"建议执行止损,不要扛单。",
))
return alerts
这些方法不完美,但比"靠意志力"靠谱。损失厌恶是大脑的硬件设定,你改不了它,只能用规则绕过它。