Free & open source · paper trading by default New Kalshi prediction markets →

Your own AI trading bot, running on your server.

Charles screens the market, reasons over every candidate with a large language model, and places trades on its own — around the clock, on a server you control. Watch it from a live dashboard and get every move on Telegram.

Runs on Alpaca's paper-trading account by default — simulated orders, no real money. Live trading is optional and entirely your call. Not financial advice.

What it does

A whole trading loop in one process.

Screen, reason, decide, protect, report — Charles handles every step and keeps doing it whether you're watching or not.

Builds its own watchlist

Scores a universe of liquid stocks on momentum, volume, RSI, moving averages and strength vs SPY, then picks the day's best setups — no hand-fed tickers.

Explains every decision

Each candidate goes to an LLM (via Groq) with its technicals and news. It answers BUY, SELL or HOLD with a confidence score and a written reason, all logged.

Layered risk controls

Trailing stops, an earnings blackout, a market-regime filter and a daily-loss kill switch all run automatically on every cycle.

Live dashboard

A web dashboard on your server shows positions, P&L, the equity curve, signals and the decision log — from any browser, including your phone.

Telegram alerts

Every buy, sell, stop and error is pushed to your phone, plus a regular heartbeat so you know it's alive.

Runs 24/7, restarts itself

Installed as a system service: it starts on boot, comes back after a crash, and keeps a full log you can tail any time.

Dashboard

See everything, from any device.

Screenshots from a running instance. The dashboard runs on port 8502 and works on your phone.

Charles dashboard, home tab: a briefing from Charles with what changed, then portfolio value and daily figures beside a chart of Charles's value against SPY with the same starting money
Home. Charles's briefing on what changed since you last looked, then portfolio value, today's P&L and Charles vs SPY with the same money, on a chart that squeezes out nights and weekends.
Detail card for one holding: its value and gain, buy and current price, best and worst so far, the trailing stop, and the AI's reason for buying it
Tap for details. Any holding, trade or bet opens the full story: prices, the trailing stop, and why Charles bought it. Add it to your phone's home screen and it opens like an app.
New · Kalshi

Stocks and prediction markets, one dashboard.

A Stocks | Kalshi switch at the top of the dashboard opens a second bot: a betting book on Kalshi's prediction markets. It bets when its forecast disagrees with the market's price by more than the fees, and shows every bet in plain English.

  • Weather — daily highs and lows in 24 cities, from the National Weather Service forecast
  • Sports — game winners, against sportsbook odds with the book's cut removed
  • Inflation — CPI markets, against the Cleveland Fed's nowcast
  • Long shots — fades cheap contracts, which win less often than their price says
  • Arbitrage scanner — guaranteed-payout sets, on the side
Paper money only. Included in the installer: it needs no Kalshi account or key and can't place real orders. The screenshot is a live test book, losses included.
Kalshi dashboard: the Stocks and Kalshi switch, a briefing on bets settled, placed and settling soon, the betting book's value, record, and a chart of the book over time
Kalshi betting book. A briefing on what settled and what's coming up, then the book and its chart. Tap any bet for what it wins, what it loses and why the bot took it.
How it works

From GitHub to a running bot in four steps.

About 30 minutes, most of it waiting for installs. The setup guide walks through every command.

Get the code

Charles lives on GitHub. Read it, fork it, star it — it's all yours.

Start a server

Create a small Ubuntu droplet on DigitalOcean and run the one-line installer.

Add your keys

Free Alpaca paper and Groq keys (Telegram optional) go into a .env file.

Run & watch

charles-start, then follow along on the dashboard.

How Charles trades

A disciplined swing trader.

Charles holds positions for days, enters only when several signals agree, and always has an exit plan.

Multi-signal entries

A buy needs agreement: trend above the moving averages, RSI in the momentum zone, MACD confirming, volume above average, and the stock beating the market.

Market regime first

Before any buy it reads the market's temperature — SPY trend, choppiness and volatility. In a confirmed downtrend it stops opening new positions.

Reasoned, logged decisions

The LLM sees technicals, news sentiment, the position and how long it's been held, and returns a decision with confidence. Low-confidence calls are ignored.

Exits that run themselves

ATR-based trailing stops, earnings protection, a stale-trade cutoff and a daily-loss limit that halts trading for the day.

Be realistic. In the project's own backtests the strategy has trailed simply buying and holding during strong bull markets; its clearest edge so far has been losing less in downturns. Treat it as a research project you can study and improve, not a money machine.
Make it yours

Change the bot by asking in plain English.

Install Claude Code on the same server and work on Charles in conversation: ask why it skipped a trade, tighten a stop rule, add a Telegram report, or explain a file. It reads the code and logs, makes the change, and can restart the bot for you.

How to set it up →
~/charles — claude
› Why didn't Charles buy anything today? Read logs/bot.log · Read config.py Regime was RANGING, so buys needed 65% confidence. 3 BUY signals came in at 55–62% and were filtered. › Lower that to 62% and restart. Edit config.py · Bash charles-restart ✓ Done — restarted, Alpaca & Groq OK.
Open source

Free, on GitHub, yours to run.

No account, no subscription, no license key. Clone it, run it on your own server, and change anything you like.

  • Full source — read and modify every line
  • Autonomous screener + LLM reasoning
  • Dashboard and Telegram alerts
  • Paper trading by default, live optional
  • Self-hosted: your server, your keys, your data

Charles places simulated orders on Alpaca's paper account until you deliberately connect live keys. It makes no profit guarantees in any mode, past or simulated results don't predict real ones, and nothing here is financial advice. You're responsible for how you use it.