Skip to main content

Tutorial 7: Multi-fund treasury allocation

This tutorial sets up mts1b-treasury to allocate firm capital across multiple funds — equities, crypto, sports — and rebalance weekly.

Time: ~30 min. Prerequisites: mts1b-treasury installed (profile: foundational-12 + treasury or full).

Step 1 — Inventory existing funds

mts mts1b-treasury fund list
# fund_id broker target_nav current_nav pct_firm
# paper-momentum paper $100,000 $112,400 50%
# paper-crypto-revol paper $50,000 $48,200 22%
# paper-sports-dfs paper $25,000 $24,800 11%
# paper-options paper $40,000 $38,750 17%
#
# Firm NAV: $224,150

Step 2 — Set treasury allocator rules

mts mts1b-treasury allocator config \
--method risk_parity \
--min-per-fund-usd 25000 \
--max-per-fund-pct 0.50 \
--max-sleeve-correlation 0.7 \
--preserve-capital-dnt true \
--rebal-cadence weekly

Methods available:

MethodUse
equalequal NAV per fund
risk_parityequal contribution to firm vol
kellyKelly fraction across fund return distributions
manualstatic, from target_nav field

risk_parity is the default — funds with higher realized vol get less allocation; lower vol gets more.

Step 3 — Compute a rebalance plan

mts mts1b-treasury allocator plan --dry-run
Treasury rebalance plan
=======================
Firm NAV: $224,150
Method: risk_parity
Constraints: min=$25k, max=50%, max-corr=0.7

fund current target delta reason
paper-momentum $112,400 $89,660 -$22,740 vol_pct=0.18, contribution=43%
paper-crypto-revol $48,200 $58,279 +$10,079 vol_pct=0.32, contribution=12%
paper-sports-dfs $24,800 $33,623 +$8,823 vol_pct=0.09, contribution=15%
paper-options $38,750 $42,588 +$3,838 vol_pct=0.22, contribution=30%

Total delta: $0 (zero-sum redistribution)
ETA to execute: 1-2 business days (ACH transfers)

Note: the allocator outputs deltas; it doesn't move money automatically.

Step 4 — Co-sign and execute

mts mts1b-treasury allocator execute --confirm REBALANCE

Multi-factor confirmation required (operator must type REBALANCE). On approval:

  1. Each fund-to-fund transfer is split into route legs (broker A → bank → broker B).
  2. A TransferRequest is created for each leg, published to mts.v1.treasury.transfers.requested.
  3. mts1b-treasury does NOT make real bank movements. Instead it produces a list of "operator actions" — manual instructions for the human operator (e.g., "log into IBKR, withdraw $22,740 to Chase, then log into Coinbase, deposit $10,000").
  4. The operator co-signs each completion via Web UI with 2FA.

For paper-to-paper (internal-only) "transfers", the system does an instant on-ledger move with no external action needed.

Step 5 — Track P/L attribution

mts mts1b-treasury attribution --fund-id paper-momentum --window mtd
Fund: paper-momentum
Window: month-to-date

Component Return Contribution
Strategy momentum +1.8% +1.2%
Strategy carry -0.3% -0.1%
Cash drag 0.0% -0.0%
Treasury rebalance +0.0% +0.1% (received allocation)
Fees + slippage - -0.2%
─────────────────────────────────────────
TOTAL +1.0%

Step 6 — Schedule weekly rebalance

mts1b.config
treasury:
allocator:
method: risk_parity
schedule: "0 14 * * 1" # Mon 10am ET
notify: telegram
require_cosign: true # never auto-execute

mts1b-treasury will publish the rebalance plan every Monday morning + post to Telegram + wait for operator co-sign.

Step 7 — Daily NAV report

reports:
daily_nav:
cron: "0 18 * * 1-5" # 6pm ET, weekdays
funds: [paper-momentum, paper-crypto-revol, paper-sports-dfs, paper-options]
distribute: [telegram, email]

Each evening you get a single email/Telegram with:

  • Per-fund NAV, P/L, exposure
  • Firm-level rollup
  • Drawdown alerts if any
  • Drift alerts if any strategy IC drifted

Step 8 — Multi-currency (if applicable)

If you trade FX or international equities, the base currency matters:

mts mts1b-treasury fund create \
--fund-id eu-equities \
--nav 50000 \
--base-currency EUR \
--broker ibkr_eu

P/L attribution separates asset return from currency return so you understand WHY the EUR fund moved.

Step 9 — Tax lots

For taxable accounts (live, not paper):

mts mts1b-treasury tax-lots show --fund-id live-momentum --year 2026
Lot ID Symbol Open Date Close Date Qty Open Price Close Price Realized P/L
TL-001 AAPL 2026-01-15 2026-03-22 100 $185.30 $192.40 +$710.00 (short-term)
TL-002 AAPL 2026-01-15 open 50 $185.30 - (open)
TL-003 MSFT 2026-02-01 2026-04-15 200 $410.00 $425.50 +$3100.00 (short-term)
...

Realized YTD: $14,235 short-term, $0 long-term

Step 10 — Settlement report (end of year)

mts1b-report settlement --fund-id live-momentum --year 2026 --output ts-2026.pdf

Exports a PDF + CSV in formats accepted by TurboTax / FreeTaxUSA / GainsKeeper.

See also