[04] The 90/10 Portfolio — Dividend Core + Growth Satellite with a Live Simulator
Source: Dev.to
Dividend Snowball Model (Core 90%)
The core holds companies with DOE (Dividend on Equity) or progressive dividend policies. DOE means dividends grow automatically as book value grows—programmatic, not discretionary.
# dividend_model.py
from dataclasses import dataclass
@dataclass
class DividendStock:
ticker: str
shares: int
annual_dividend: float # per‑share
growth_rate: float # annual dividend growth
def projected_income(self, year: int) -> float:
return self.annual_dividend * (1 + self.growth_rate) ** year * self.shares
CORE = [
DividendStock("A", 15000, 78, 0.05), # Retail — progressive
DividendStock("B", 50000, 24, 0.05), # Auto dealer — progressive
DividendStock("C", 20000, 60, 0.06), # Education — DOE 6%
DividendStock("D", 50000, 21, 0.06), # Advertising — DOE 6%
]
for y in range(11):
income = sum(s.projected_income(y) for s in CORE)
fire = "🔥" if income > 9_600_000 else ""
print(f" {2026+y} ¥{income:>10,.0f}/yr {fire}")
Output (selected years)
2026 ¥ 5,220,000/yr
2027 ¥ 5,525,200/yr
2028 ¥ 5,848,712/yr
...
2032 ¥ 7,637,548/yr
2034 ¥ 8,571,892/yr
2036 ¥ 9,620,423/yr 🔥
The snowball alone reaches FIRE around year 10. Slow, but reliable—the core doesn’t need to be exciting.
Core Characteristics
- Generates yield
- Grows 5‑6 % / year
- Covers living expenses
- Shields against downside
- Provides the “snowball” effect
Satellite (10%) – Deep‑Value Position
The satellite is a single deep‑value stock priced at PSR 0.11 with a restructuring catalyst.
Kenneth Fisher’s framework
- PSR < 0.75 → buy
- PSR < 0.30 → exceptional
A PSR of 0.11 suggests either bankruptcy or a 3‑5× upside. The strategy bets on the latter, offering an asymmetric payoff.
Satellite Characteristics
- Generates capital gains
- Binary outcome: 3‑5× upside or flat
- Accelerates FIRE timeline
- Bounded loss (≈ 14 % of portfolio)
- Acts as a “slingshot” to the core snowball
Interactive PSR Simulator (Live Tool)
The simulator is a single HTML file (no server, no dependencies). Drag the sliders to model different scenarios. It calculates:
- Target price from EPS × PER
- Fisher PSR at current and target valuations
- Impact on the total portfolio
Scenario Impact Table
| Scenario | Portfolio Impact | FIRE Timeline |
|---|---|---|
| Satellite → 0× (loss) | –14 % (¥124 M → ¥107 M) | Delayed ~1 year |
| Satellite → 3× | +28 % (¥124 M → ¥159 M) | Accelerated ~2 years |
| Satellite → 5× | +56 % (¥124 M → ¥194 M) | Essentially immediate |
The core absorbs any downside, while the satellite amplifies upside. Even without a satellite success, the core eventually reaches FIRE; a successful turnaround compresses years of compounding into a single event.
Key takeaway: Bounded loss, unbounded gain—this is the whole strategy in one line.
Next Steps
- Next week: [05] When to Pull the Trigger on FIRE — “FIRE isn’t a number. It’s a probability.”
- Series: Building Investment Systems with Python — Engineering financial independence with code.