fire-planner/fire_planner/strategies/trinity.py
2026-05-07 17:06:19 +00:00

24 lines
831 B
Python

"""Trinity 4% Safe Withdrawal Rate.
Bengen's seminal 1994 paper + the Trinity Study (Cooley/Hubbard/Walz,
1998) — withdraw 4% of the starting balance in year 1, then keep the
real withdrawal constant for the rest of retirement. In our real-GBP
internal frame this is just "the same number every year".
"""
from __future__ import annotations
from fire_planner.strategies.base import StrategyState, WithdrawalStrategy
DEFAULT_INITIAL_RATE = 0.04
class TrinityStrategy(WithdrawalStrategy):
name = "trinity"
def __init__(self, initial_rate: float = DEFAULT_INITIAL_RATE) -> None:
self.initial_rate = initial_rate
def propose_withdrawal(self, state: StrategyState) -> float:
if state.year_idx == 0:
return state.initial_portfolio * self.initial_rate
return state.last_withdrawal