How to actually run a spot + perp-short carry book. Part 1 covers manual trading (most of the edge, zero dependencies). Part 2 introduces automation to remove the babysitting.
notional × funding rate (positive rate → shorts receive, default 8h period)
② Annualized yield ≈ funding annualized − friction (friction = trade fees + borrow interest + switch costs)
③ Delta MUST be zero: spot value = short notional. Every 1% of directional exposure turns this into a directional gamble.
You do everything by hand: ~15 minutes per week. Yield is equivalent to automation, but you can intervene any time. This is a slow business — churning in and out just pays the exchange fees.
Suggested start: $500-1,000 (practice); at least $3,000 before anyone can care about the P&L. Check the dashboard first: only start when the 30d annualized is ≥3%. Sizing math: expected yield = annualized funding − borrow costs (if levered) − fee/switch drag. Example: $3,000 capital at 7% annualized → ≈ $210/yr ≈ $17.5/month.
Write down before trading: capital / max deployment (≤70%) / borrow or not (no — first round is always 1x unleveraged).
Dashboard → ranking: sort by "30d annualized". Pick coins with >3% annualized, top-3 ranked. In bull phases (BTC >8%) you can size up; when it goes negative (two consecutive settlements) do nothing.
Timing detail: enter 1–2 hours after a settlement for stable rates (avoid the final hour before settlement); rates peak but get volatile around macro events (CPI/FOMC) — skip unless experienced.
① Switch on unified / cross margin; ② market-buy spot 3,000 / 79,000 ≈ 0.03796 BTC; ③ open a same-quantity short in USDT perps 0.0379 BTC (round down to the exchange tick, one tick of drift is negligible); ④ check balances: both legs live, no warning.
Verify: let price move ±1% — spot and perp P&L should cancel. If margin rate flashes >90% your short notional exceeds spot: shrink the short.
Exit when any one hits: +10–20% banked (late bull); 30d annualized negative (panic — historically up to 6 consecutive days); capital needed elsewhere. How: buy back the short first, then market-sell the spot.
Re-entry: wait 1–2 weeks after the annualized recovers above 3% — avoid re-entering a downtrend. (2022 saw negative rates for ~3 months.)
After two full 1x cycles, consider 2–3x to thicken returns:
| Leverage | Structure | Borrow 3% | Borrow 5% | Daily liquidation |
|---|---|---|---|---|
| 1x | own capital | +7.4% | +7.4% | none |
| 2x | borrow 1× | +11.8% | +9.8% | -50% |
| 3x | borrow 2× | +16.2% | +12.2% | -33% |
Golden rules: at borrow ≥8% leverage is pointless; keep >30% margin buffer always; 3x is the ceiling — 5x turns arbitrage into gambling. Table from 5-year real backtest (see About).
The idea: turn "Step 4 monitoring + Step 3 execution" into code that runs 24/7 untouched. This site is one module of exactly such a system:
| Module | What it does | Automation |
|---|---|---|
| Funding monitor | Pulls public rates every 8h → 30d annualized (this site) | 100% |
| Signal engine | Open >3%, close <0%, switch only if >3% better elsewhere | 100% |
| Execution engine | Market-buy spot + market-short perps (API key: trade-only, withdrawals disabled) | 100% |
| Risk guardrails | Margin-rate alert / auto-flatten / Telegram notifications | 100% |
| Account security | Split across two exchanges, periodic withdrawals, balance alerts | semi |
| Onboarding & cash flow | Sign-up, KYC, deposits/withdrawals | 0% (human only) |
Stack (all public tools): Python + ccxt (or exchange SDK) + any VPS + SQLite for history. Same logic works for any API exchange — just remap symbols.
Debug sequence (critical): run "paper trading" (no orders, validates the yield math) for 1 month → run on a testnet (real order flow, zero dollars) for 1 month → small live capital. Never go live straight from the code editor.
Optional advanced: wire an AI guard into the risk endpoint — train on historical rate spreads to detect anomalies, and auto-pause the system for 10 minutes on extreme deviations.