Skip to content

Live trading

When to use: promoting a validated strategy from testnet to real capital.

Safety rules (non-negotiable)

From workspace CLAUDE.md — these are not guidelines, they are gates:

  1. Never trade production without testnet validation first. The paper-trading simulator was removed at gordon-exchange 3.0.0. Binance testnet is the only forward-test gate.
  2. SL is mandatory. No trade without a stop loss attached. The executor enforces this; any intent without a configured SL distance is rejected at the invariant pipeline.
  3. Walk-forward or nothing. No random train/test splits on time series. Every strategy deployed to live must have a walk-forward ablation result on record.
  4. Ablation everything. Every overlay tested in isolation before inclusion. An untested overlay is an untested regime.
  5. Never commit secrets. Production Binance keys are manual only, managed via Ansible vault.

Progression

StageAccount allocationDurationGate
Testnet soak— (fake money)72 hours minimum30+ trades, no halts, fill tolerance ok — see testnet-validation
Micro live$5001 month minimumAll pre-live checklist items cleared
Full live$2,000–$5,000OngoingMicro-live stage passed without incident

Never skip stages. Moving from testnet directly to full allocation bypasses the micro-live anomaly-detection window.

Pre-live checklist

Complete every item before starting micro live. Record completion date and outcome.

[ ] Testnet soak passed (72h, 30+ trades, fill tolerance, no halts, no quarantine)
[ ] Walk-forward ablation result on record for every active strategy
[ ] SL configured — GORDON_EXECUTOR_SL_REQUIRED=true in production env
[ ] Daily notional caps set (DP-01): GORDON_EXECUTOR_MAX_NOTIONAL_USD_PROD reviewed for account size
[ ] Operator tokens issued via Ansible vault and injected into gordon-manager
[ ] Emergency flatten tested on testnet: POST /risk/emergency-flatten returns 200, positions close
[ ] Breaker thresholds tuned for account size:
    - DrawdownBreaker: peak-to-trough threshold set
    - ConnectivityBreaker: freshness window reviewed
    - VpinBreaker: threshold validated against historical VPIN data
    - MacroBreaker: FRED API key configured
    - CorrelationBreaker: correlation density threshold set
[ ] gordon-risk halt-latch tested: trip a breaker, verify halt, POST /risk/resume clears
[ ] gordon-executor GORDON_EXECUTOR_TESTNET=false and production keys injected
[ ] Prometheus alert rules deployed for every active metric family (DP-04 compliance)
[ ] Grafana dashboards reviewed — no stale panels
[ ] Loki log ingestion confirmed — at least one log line per service in last 5 minutes
[ ] make e2e passes at HEAD
[ ] Backup pipeline confirmed: restic snapshots of trading.* reaching srv-core (hourly)
[ ] Restore drill completed within last 90 days — see schema-restore

Starting micro live

  1. Confirm all checklist items are cleared.

  2. Start the v7 stack on srv-apps via Ansible:

    bash
    ansible-playbook -i homelab/inventory/hosts.yml \
      homelab/playbooks/deploy-gordon-v7.yml --ask-vault-pass
  3. Verify the migration one-shot completed successfully:

    bash
    ssh srv-apps 'docker compose logs gordon-migrate --tail 20'

    Expected: gordon-migrate exited with code 0.

  4. Confirm every service is healthy:

    bash
    curl -fsS http://srv-apps:8081/healthz
    curl -fsS http://srv-apps:8082/healthz
    curl -fsS http://srv-apps:8083/healthz
    curl -fsS http://srv-apps:8084/readyz
    curl -fsS http://srv-apps:8085/readyz

    Expected: all 200.

  5. Place the first bot via gordon-console at http://srv-apps:3000. Configure with micro-live parameters:

    • Account allocation: $500
    • Risk per trade: 1% ($5 max loss per trade)
    • SL distance: configured per strategy
  6. Monitor the first 24 hours actively. Check Grafana dashboards every few hours.

Position sizing

Quantity = (Account × Risk%) / |Entry - StopLoss|

Leverage is a margin tool, not a risk multiplier. Cross margin, max available. Risk per trade is controlled by SL distance, not by leverage. With a $500 micro allocation at 1% risk, maximum loss per trade is $5.

Monitoring during live operation

Active monitoring is required during live trading. See monitoring for the full runbook. Minimum watch list:

  • DrawdownBreaker state — check breaker_state in Grafana.
  • Open positions — gordon-console positions panel or SELECT * FROM trading.positions WHERE status='open'.
  • Fill events — confirm fills are landing within expected latency window.
  • Equity curve — verify trading.equity_points is being written on each fill.

Promoting to full live

After 1 month at micro-live without incident:

  1. Review micro-live equity curve: CAGR, max drawdown, Sharpe estimate from live data.
  2. Compare live metrics to testnet soak and backtest results. Material divergence is a stop signal — investigate before scaling.
  3. Update account allocation env vars and redeploy via Ansible.
  4. File a promotion note in plan/ referencing the micro-live metrics.

Gordon — keep compounding without blowing up