If there’s one investment approach that dominates the FIRE community, it’s the three-fund portfolio: US stocks, international stocks, and bonds. Simple, diversified, low-cost.
Let me show you how I track mine in Beancount.
The Three-Fund Philosophy
The idea: instead of picking individual stocks or timing the market, own the entire market through low-cost index funds.
A typical allocation:
- 60% US Total Stock Market (VTI, VTSAX, FSKAX)
- 20% International Stocks (VXUS, VTIAX, FTIHX)
- 20% US Bonds (BND, VBTLX, FXNAX)
Why this works:
- Diversified across thousands of companies
- Low expense ratios (0.03-0.05%)
- Tax-efficient in taxable accounts
- Requires minimal maintenance
My Beancount Setup
Here’s how I structure my investment accounts:
; Define the commodities
2020-01-01 commodity VTI
name: "Vanguard Total Stock Market ETF"
asset-class: "US Equity"
2020-01-01 commodity VXUS
name: "Vanguard Total International Stock ETF"
asset-class: "International Equity"
2020-01-01 commodity BND
name: "Vanguard Total Bond Market ETF"
asset-class: "Fixed Income"
; Account structure
2020-01-01 open Assets:Investments:Brokerage:VTI
2020-01-01 open Assets:Investments:Brokerage:VXUS
2020-01-01 open Assets:Investments:Brokerage:BND
2020-01-01 open Assets:Investments:401k:VTI
2020-01-01 open Assets:Investments:401k:VXUS
2020-01-01 open Assets:Investments:IRA:BND
Tracking Allocation
The key query—am I at my target allocation?
SELECT
root(account, 3) as asset_class,
sum(cost(position)) as cost_basis,
sum(value(position)) as market_value
WHERE account ~ "Assets:Investments"
GROUP BY root(account, 3)
I also use commodity metadata to categorize:
SELECT
meta("asset-class") as class,
sum(value(position)) as total
WHERE account ~ "Assets:Investments"
GROUP BY meta("asset-class")
My Current Allocation
Being transparent:
- US Stocks: 62% (target: 60%)
- International: 18% (target: 20%)
- Bonds: 20% (target: 20%)
Slightly overweight US after 2025’s strong performance. I rebalance when any category drifts more than 5% from target.
Price Updates
For accurate market values, you need current prices. I use bean-price with Yahoo Finance:
bean-price --no-cache finances.beancount >> prices.beancount
My prices.beancount file looks like:
2026-02-12 price VTI 295.42 USD
2026-02-12 price VXUS 62.18 USD
2026-02-12 price BND 72.35 USD
Asset Location Strategy
Not all accounts are equal. I place assets strategically:
- Taxable brokerage: Tax-efficient funds (VTI, VXUS) with low turnover
- 401k: Anything (often international funds for foreign tax credit optimization)
- IRA: Bonds and REITs (less tax-efficient)
This maximizes after-tax returns without changing my overall allocation.
Questions
- What’s your target allocation?
- How often do you rebalance?
- Any tips for automating price fetching in Beancount?