Project notes In progress

Paper Trader

Five rule-based trader personas each run a paper portfolio on the S&P 500 using free end-of-day prices. They rebalance on their own logic, build a track record with real risk metrics, and once a week a local LLM grades each one's decisions. An honest answer to “what would this strategy have done?”

Python FastAPI Supabase Ollama
build
90%

01 What it does

Paper Trader runs five paper portfolios side by side, one per trader persona, each starting with the same $100k and trading the S&P 500 on end-of-day prices. You watch them compete on a live leaderboard, inspect any persona's holdings and trades, and read a weekly AI verdict on how each one is really doing — no real money involved.

  • Five archetypes — momentum, mean-reversion, low-volatility, equal-weight, and buy & hold.
  • Real risk metrics — return, Sharpe, volatility, max drawdown and beta, per persona.
  • A weekly grade — a local LLM judges each persona's process and risk, not just its return.

02 How it works

The data and compute live off Vercel. A scheduled worker on a VPS pulls free EOD prices for the whole index (Yahoo via yfinance, Stooq as a fallback), runs every persona's strategy, and writes trades, holdings and NAV into Supabase Postgres. The website only ever reads that database.

  • Daily ingest — refresh the S&P 500 universe and upsert end-of-day prices.
  • Strategy engine — deterministic, price-based personas; reproducible, no AI in the trade loop.
  • Weekly review — a local Ollama model grades each persona on separate hardware.
  • Read API — a small FastAPI function on Vercel serves the dashboard from Supabase.

03 Design decisions

Free data, on purpose. End-of-day prices are plenty for a paper book and cost nothing. The price feed sits behind a pluggable provider interface, so when one source gets rate-limited or bot-walled the next one takes over.

Deterministic strategies, AI as the judge. The personas trade on pure, price-based rules — so results are reproducible and the daily path is free. The LLM never picks trades; it reviews them once a week, which is where its judgement actually adds value.

Heavy work off the serverless box. Ingesting 500 tickers and running an LLM doesn't belong in a 10-second function. Those jobs run on a VPS; Vercel stays a thin, fast read layer.

04 Status & what's next

In progress, ~90% there. Ingest, the five personas, risk metrics, the dashboard and the weekly AI review are all working. The remaining work is operational polish. Planned:

  1. More personas — add factor blends and a sector-rotation strategy.
  2. Drawdown alerts — flag when a persona breaches a risk threshold.
  3. Fundamentals — fold in valuation signals once a free source is in place.

The live dashboard is up — open it here. Code and progress live on GitHub.