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: portfolio value and daily figures beside a chart of Charles's value against SPY with the same starting money
Home. Portfolio value, today's P&L, cash and the daily loss limit, next to Charles vs SPY with the same money — return and worst drop for any range from a week to all time.
Charles dashboard, holdings tab: how the money is split across stocks and cash, and each open position with its price, gain and trailing stop
Holdings. Where the money is, then every open position: shares, entry and current price, best gain so far, and how much room is left before its trailing stop sells it.
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
In development. It runs on paper money only and isn't in the public release yet — the screenshot is a live test book, losses included.
Kalshi dashboard: the Stocks and Kalshi switch, betting book value, cash, open bets, record, and a chart of the book's value over time
Kalshi betting book. Overview, Bets, Strategies and Arbitrage tabs, each strategy scored against the market as its bets settle.
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.