Algorithmic Trading Suite

Three trading systems: crypto, US stocks, and sports analytics. They all share one philosophy. Risk controls come first, everything proves itself on paper before it touches real money, and I own the whole stack.

Python 3.11ccxtalpaca-py FlaskReactscikit-learn SQLiteYAML config

Why I built this

Retail trading tools force a choice: opaque cloud platforms you don't control, or fragile scripts with no safety rails. I wanted systems that could trade on their own but could never blow past my risk limits. And I wanted to be able to audit every line myself.

Design principle: every engine in the suite can be halted instantly with a kill switch, refuses trades that violate position limits or daily loss caps, and runs entirely on local hardware. No cloud dependencies, no web-facing services.

System 1: Crypto Trader

An exchange-agnostic crypto trading bot built on ccxt, supporting Binance, Coinbase, Kraken, and other major exchanges through a unified gateway. It runs trend following, mean reversion, and ML signal strategies side by side against real-time and historical market data.

Risk Manager

Position limits, daily loss caps, trade-frequency throttles, and an instant kill switch sit between every strategy and the order executor.

Exchange Gateway

A ccxt wrapper handling market data, order execution, balance checks, and rate limiting. I can swap exchanges without touching strategy code.

Secrets Vault

API keys encrypted at rest via keyring/.env, never logged, with a documented security ruleset covering supply-chain auditing.

React Dashboard

Private portfolio dashboard tracking holdings, P&L, and strategy performance across exchanges.

CRYPTO TRADER · SYSTEM FLOW Config YAML · strategies, pairs, limits Secrets Vault encrypted API keys · never logged Risk Manager position limits · loss caps · kill switch pre-trade gate Exchange Gateway · ccxt unified API market data · order execution · balances · rate limiting market data validated orders Strategy Engine trend following · mean reversion · ML signals Paper Trading Mode every strategy validates at zero risk fills & positions Portfolio Tracker holdings · P&L · performance React Dashboard private operator console Structured Logging every decision, order & rejection

System 2: Stock Trader

An equities trading bot built on the official Alpaca SDK (alpaca-py), supporting both paper and live accounts. It knows market hours, only trades during the regular session, and retries with backoff when the API hiccups. The strategy layer retrains its ML models on a schedule and writes itself a report every time it does.

System 3: Sports Analytics Bot

A Flask-based analytics engine for daily fantasy sports projections. The backend splits into focused modules: a data fetcher, an analyzer, a probability calibration layer, and a bankroll manager that applies disciplined staking math to every pick. One command (python3 run.py) installs everything, starts the API, and opens the dashboard.

PrizePicks Bot dashboard: bet slips with EV, confidence, and Kelly sizing
The dashboard: slips ranked by expected value, with per-leg confidence and Kelly stake sizing (demo data)

Try the live demo

The actual dashboard, running in your browser on bundled demo data. No backend required.

Launch Demo →

Decisions that mattered

  • Paper trading built in from day one. Every strategy must prove itself against live data with zero capital at risk before promotion to real funds.
  • Risk management as a separate layer, not a strategy concern. Strategies propose; the risk manager disposes. A buggy strategy can't bypass position limits.
  • Modular by contract. New strategies and new exchanges plug in without touching core code. The gateway and strategy interfaces are stable boundaries.
  • Everything observable. Structured logging of every decision, order, and rejection. When a trade happens (or doesn't), the logs say exactly why.
  • ML with a paper trail. Model retraining runs on a schedule and reports on itself, and I had the ML pipeline independently audited.

Outcome: three engines with a shared risk-management DNA, validated in paper mode, running unattended on local hardware with structured logs, automated reporting, and instant manual override.