← Docs

🪙 Crypto

A complete reference for how the bot trades crypto and what your broker supports. If you're brand new to digital assets, this page builds up the mental model from zero — what a pair is, why crypto is structurally different from stocks, and where the rough edges hide.

01What's different about crypto

Crypto is not a stock. The differences look small on paper but matter enormously in practice:

  • 24/7 markets. No open, no close, no weekend break. Liquidations happen at 3am Sunday; funding rates flip on holidays.
  • No central authority. No SEC backstop, no SIPC insurance, no “the exchange will fix it” if a fork or hack goes sideways.
  • Fork risk. A coin can split into two coins overnight (BTC/BCH, ETH/ETC). Your broker may or may not credit you with the new asset.
  • Wider spreads + thinner books than major equities, especially outside business hours.
  • Realized vol is 3–5× SPY. The same regime label (“Weak-Bear”) implies a totally different drawdown distribution than for stocks.

Crypto trades 24/7 — including weekends and holidays. Paper-trade first. Use small position sizes.

02Spot vs. perpetuals

There are two main flavors of crypto trade:

  • Spot — you actually own the coin. Buy BTC, BTC sits in your account. No expiry, no leverage, no funding.
  • Perpetuals (“perps”) — futures that never expire. Settled in cash, leveraged up to 100× on offshore venues. They use a funding rate (Section 5) to keep the perp price tethered to spot.

This bot trades spot only. Both Alpaca and IBKR (via Paxos) are spot venues — no perps, no margin, no shorting. If you want perps you need a third-party exchange and a different bot; that's outside scope.

03Broker support and setup

Same Signal/Order/Fill contract whether routed through Alpaca or IBKR — the pipeline is broker-agnostic. The setup differs:

AspectAlpacaIBKR (Paxos)
RoutingInternal bookPaxos via SMART → PAXOS
Quote currenciesUSD, USDT, USDCUSD only
Bracket orders✓ supported✗ downgraded to LIMIT/MARKET
Min order$1 notional~$10 (varies)
Trading hours24/724/7
SetupDefault-onManual Paxos enrollment required

Alpaca is the easy default. For IBKR you must explicitly enable cryptocurrency trading in IB Client Portal → Settings → Trading Permissions, then flip broker.ibkr.crypto_paxos_enrolled: true. Until that flag is true, the IBKR adapter auto-disables crypto signals — forgetting the step results in a no-op, not a mid-tick rejection.

04Symbol conventions

Different APIs format the same pair differently. The bot normalizes via broker.asset_utils.to_canonical_crypto_symbol:

  • BTC/USD — canonical form (slash separator).
  • BTCUSD — slash-less form returned by some REST endpoints.
  • BTC-USD — IBKR variant.
  • TradingView webhooks come in either format.

You'll see one canonical symbol per pair regardless of source. BTC/USDT and BTC/USD are the same coin but different fiat rails — never mix them in a single position-tracker key.

05The default 10-pair universe

Default crypto universe (chosen for liquidity, broker coverage on both Alpaca and IBKR, and regime trainability):

  • BTC/USD, ETH/USD — the two majors. Best liquidity.
  • SOL/USD, AVAX/USD — large-cap L1s.
  • MATIC/USD, LINK/USD — L2/oracle infrastructure.
  • UNI/USD, AAVE/USD — DeFi blue chips.
  • DOGE/USD, LTC/USD — long-tail liquid.

Custom universe: type any supported symbol in the wizard's step-3 textarea. Mixed stock + crypto lists are fine.

06Funding rates explained (perps only)

Perpetual futures don't expire — instead they pay or charge a small funding rate every 8 hours that tugs the perp price toward spot. Typical rates: ±0.01% per 8h (~±10% annualized).

  • Positive funding — longs pay shorts. Signals euphoria; too many people are long the perp.
  • Negative funding — shorts pay longs. Signals panic; too many people are short.

The bot doesn't trade perps but it can read funding as a signal source via the B7 evaluation gate (signals.evaluation.crypto_funding) to dampen leverage in extreme conditions.

07Perp basis and spot basis

Basis = (futures_price − spot_price) / spot_price. It's a market-stress thermometer.

  • Healthy — ±0.1%. Boring, normal.
  • Spikes > +0.5% — euphoria; perp is bid up versus spot.
  • Dives < −0.5% — panic / liquidation cascade.

Spot basis is the same idea on calendar futures (CME BTC futures vs. spot BTC). Useful as a regime sanity check; if spot and basis disagree about which way stress is running, dial back size.

08Stablecoin de-peg risk

USDT and USDC are supposed to be worth exactly $1. Most days they are. Occasionally they aren't — USDC briefly fell to $0.87 during the Silicon Valley Bank weekend in March 2023; UST spiraled to zero in May 2022.

If you trade BTC/USDT instead of BTC/USD, you're running two bets at once: BTC and the stablecoin staying pegged. Default to USD pairs unless you specifically need a stablecoin venue. IBKR (Paxos) sidesteps this — USD only, no stablecoin pairs.

09Crypto-specific risk caps

Crypto sits in its own portfolio sleeve with hard caps that compensate for the higher volatility:

  • portfolio.target_mix.crypto — default 0.20 (20% of equity targeted at crypto).
  • risk.max_crypto_exposure — hard sleeve cap, always ≥ target. Breach blocks new orders until positions roll off.
  • risk.max_single_position — default 0.05 per pair, so you can't get blown up by one alt.

The HMM regime model is the same one used for stocks (4-state Top-Bull / Weak-Bull / Weak-Bear / Top-Bear). There's no separate crypto model — the bot compensates for crypto's 3–5× higher vol via vol- rank scaling in the position-sizer, so the bot won't let crypto eat your whole portfolio.

10Why crypto bots stay warm (Fly cost)

Stock-only bots scale-to-zero between bars to save Fly compute — when SPY is closed there's no work to do. Crypto bots stay warm 24/7 because the next bar is always less than a minute away; cold-starting on every tick would cost more than staying up.

Cost difference is small (~$2–5/mo per bot). Mixed stock + crypto bots stay warm by default. When the stock market is closed (5pm ET → 9:30am ET), the bot auto-switches to crypto-only mode if the connected broker has crypto enabled; otherwise it exits cleanly with a “no eligible asset class until reopen” message.

Not supported: margin/leverage on crypto, perpetual contracts, off-exchange / DEX trading, staking or yield, and tax tracking. The audit DB logs every fill but doesn't produce a tax form — use CoinTracker or Koinly on the exported CSV.