Paper-first, long-only automation for US equities + crypto on Alpaca.
SeaTrader includes:
- Live/paper rebalance and risk-check commands
- Backtesting with per-asset controls (stocks vs crypto)
- Dashboard UI + Strategy Builder
- Safety guardrails and heartbeat monitoring
Educational/personal use only. Not financial advice.
cd tradebot
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e .Create .env from .env.example and set Alpaca keys.
Run dashboard:
./scripts/start_dashboard.shOpen: http://127.0.0.1:8008
- Step-by-step usage guide:
docs/INSTRUCTIONS.md - Autonomy policy:
docs/autonomy_policy.md - Multi-bot docs:
docs/multibot.md - Updated UI screenshots:
docs/screenshots/ - Screenshot callouts were removed for clarity; instructions are text-first.
SeaTrader includes a unified hub for Alpha..Iota bot dashboards.
Start the hub server:
python3 multibot/hub_server.pyOpen:
- Hub:
http://127.0.0.1:8099 - Individual dashboards: ports
8008..8016
From the Hub you can:
- Start/stop all dashboards
- Start/stop one bot dashboard
- Open each bot dashboard/API
- Run per-bot wipe (cancel open orders, request close-all positions, clear local bot data/logs)
Useful scripts (cross-platform preferred):
python multibot/scripts/dashboard_ctl.py start-all
python multibot/scripts/dashboard_ctl.py stop-all
python multibot/scripts/dashboard_ctl.py start <bot>
python multibot/scripts/dashboard_ctl.py stop <bot>
python multibot/scripts/sync_shared.py
python multibot/scripts/wipe_bot.py <bot>Legacy bash wrappers (Linux/macOS):
multibot/scripts/start_dashboards.sh
multibot/scripts/stop_dashboards.sh
multibot/scripts/start_one.sh <bot>
multibot/scripts/stop_one.sh <bot>
multibot/scripts/wipe_bot.sh <bot>- Long-only
- No margin/shorts
- Per-asset stop loss support
- Drawdown freeze controls
- Market-hours guard for equities (uses Alpaca clock/calendar + pre/post window checks)
- Order guardrails (
max_orders_per_run,max_single_order_notional_usd,max_total_notional_usd) - Paper-first workflow encouraged
Primary config: config/config.yaml
Key blocks:
allocationlimitsriskexecutionschedulingrebalance
risk.execute_exit_liquidations
false(default): risk-check is signal-onlytrue: risk-check submits market sell orders for exit signals
For real order placement, also ensure:
dry_run: false
tradebot rebalance --config config/config.yamltradebot rebalance --config config/config.yaml --place-orderstradebot risk-check --config config/config.yaml- Live/paper controls with per-asset settings
- Per-asset schedules (rebalance + risk-check)
- Market status panel (trading day, phase, next open/close, equity-order eligibility)
- Symbol exclusions manager (view excluded symbols with position/P&L context and remove from UI)
- Backtest runner + iteration sweeps
- Daily ledger, trade history, open positions at end
- Strategy Builder integration
Legacy/global fallback controls were removed from the dashboard.
Fallback behavior is configured per asset class only.
Backtests write artifacts to:
data/backtests/<job_id>/status.jsondata/backtests/<job_id>/result.json
Useful runtime artifacts:
data/last_rebalance.jsondata/last_risk_check.jsondata/last_placed_orders.jsondata/last_account.jsondata/state.json
Notes:
last_rebalance/last_accountincludemarket_statusandrun_idlast_placed_ordersincludesstate(submitting/ok/error) andrun_id
Heartbeat checks are defined in workspace HEARTBEAT.md and currently watch:
- New backtest completion/failure
- New risk-check liquidation/exit activity
State is tracked in:
memory/heartbeat-state.json
- Verify
risk.execute_exit_liquidations: true - Verify
dry_run: false - Check
data/last_risk_check.json -> executed_liquidations
Use IEX feed for equities (already defaulted in this project).
src/tradebot/cli.py– CLI entrypointsrc/tradebot/commands/– rebalance, risk-check, dashboard actionssrc/tradebot/backtest/– engine + jobssrc/tradebot/dashboard/– FastAPI app + frontendsrc/tradebot/strategies/– built-in and user strategiesconfig/– config and presetsdata/– runtime artifacts/cache/backtest outputs