A swing-trading bot for US stocks that runs on your own computer, drives your own broker account, and is operated entirely from a browser panel.
30 days free · lifetime licence USD 30
English · 简体中文
The whole thing is a web panel — dashboard, history, signal desk. This is a paper account.
Warning
Trading can lose you real money. This program guarantees nothing. Paper-trade it for weeks before you even consider real money, and never deploy more than you can afford to lose.
It runs itself. Scan, score, order, manage, stop, target, close, log — the whole chain, with no button to press. During US market hours it works one list of stocks on a loop:
flowchart LR
A["📋 watchlist"] --> B["🎯 score<br/>0–100"]
B --> C["🧱 gates<br/>regime · earnings · gap<br/>spread · news · risk"]
C --> D["📝 limit order"]
D --> E["🔁 manage<br/>stop · target · max hold"]
E --> F["📊 close + log"]
Your machine, your broker account, through the official OpenD gateway. Nothing is sent anywhere else. Paper trading is the default, and switching to real money takes a trade password, no open positions and a second confirmation.
You never touch a terminal: open the panel, press ▶ Start, and read Telegram — it pushes every fill, stop and status change.
The parameters improve themselves. The tuner reads your real fills, asks the AI what to change, backtests each idea, and keeps only what beats your current settings across two windows without deepening drawdown. By default every surviving change waits for your tick; switch on auto-apply and anything that passed validation and sits inside bounds you set goes live immediately — with a Telegram notification, and a watcher that rolls it back if live results degrade.
The AI reads news and annotates; it does not pull the trigger. That is not timidity — it is what keeps live results comparable with the backtest, and a system that improvises makes its own backtest meaningless.
Good for: running a rule-based strategy without sitting at the screen, and being able to see exactly why every order happened. Not: a signal service, a money printer, or anything to point at money you need.
- Multi-strategy scoring — trend and momentum-breakout score every name 0–100; only the strong ones become candidates (mean-reversion and pattern strategies ship switched off until a backtest says otherwise).
- Gates before orders — market regime, earnings dates, overnight gaps, bid-ask spread, a blacklist for repeat losers, drawdown halts and per-trade risk caps. Fail one, the name is dropped.
- AI as context, not as the trigger — DeepSeek reads real-time news for each candidate (Tavily/Finnhub + a local FinBERT score). It annotates and can flag, but by default it never overrides the rules, so live trading stays comparable with the backtest.
- Risk you set once — budget cap, risk per trade, position count and size limits, daily-drawdown stop. The AI cannot raise any of them.
- Gap sentinel — a stop order can't protect you overnight. Before the open it checks earnings and hard bad news on what you hold, and liquidates at the open if needed.
- Honest backtesting — one engine (
backtest_v4) simulates the account step by step the way live runs, so the numbers mean something. The tuner reads your real fills, asks the AI what to change, backtests each idea, and keeps only what beats your current settings without deepening drawdown. It runs when you press the button; every surviving change is a row you tick or cross before anything is written. Switch it to weekly and it runs itself, with the survivors waiting in the approval queue instead. - Everything is logged — every order, every gate that fired, every parameter change with who changed it and why.
| Tab | What's there |
|---|---|
| Dashboard | Budget, P&L, cash and open risk; a live US-sector heatmap; trade record; activity log; open positions with their stop→target range |
| History | Equity curve, monthly P&L, and every closed trade with its exit reason and R multiple |
| Signal | A watch desk that scans your list every 5 minutes for breakouts, volume spikes, VWAP flips and RSI extremes, and pushes them to Telegram |
| ⚙ Settings | Paper/live switch, API keys, theme, EN/中文, panel access |
| Parameters | Every strategy parameter with a plain-language description, which ones take effect on the next scan, and which need a restart — plus the tuning switch (manual / weekly) and the button that runs a tuning pass now |
Set a panel password in Settings and flip on LAN access, and the same panel opens on your phone over WiFi (or Tailscale).
30 days free, with nothing held back. The trial is the whole program — every strategy, every panel, live orders included. When it ends the software keeps running exactly as before, and the one thing that stops is placing orders: it still scans, scores, forecasts and backtests, so an expired trial tells you what it would have done.
A lifetime licence is USD 30, paid once. No subscription, no renewal, no per-trade cut.
To buy one, open Settings → Licence and send me the machine id shown there over WhatsApp — @ethan45 — and I will send a key back. Paste it into the same panel and the copy is licensed permanently. The key is issued for that one computer, so the id is the only thing I need.
Both platforms need the same three things: a moomoo/Futu account with paper
trading enabled, the OpenD gateway installed and logged in (the bot talks to
it on 127.0.0.1:11111 — there is no way around that step), and a
DeepSeek key for the AI parts.
Tavily (news) and a
Telegram bot are optional but recommended.
Download the source archive from Releases — the same archive on both platforms — and unzip it somewhere you can find again. Everything the bot writes stays in that folder.
cd MooTrader-2.7.0
uv venv --python 3.11 && uv pip install -r requirements.lock
cp .env.example .env # fill in your keys — every line is documentedThen double-click macos-start-web.command. It launches OpenD if it is not
already up, waits for the gateway, starts the panel and opens your browser. The
window closes itself; the panel keeps running. Double-click macos-stop-web.command
to stop everything.
cd MooTrader-2.7.0
py -3.11 -m venv .venv
.venv\Scripts\pip install -r requirements.lock
copy .env.example .envOpen .env in Notepad and fill in your keys. Start OpenD yourself and finish
the login — unlike the Mac launcher, windows-start-web.bat does not open it for you,
because OpenD keeps its own login session and cannot be signed into unattended.
Then double-click windows-start-web.bat. It checks that OpenD is listening, starts
the panel hidden, and opens your browser. Closing the window leaves the panel
running; double-click windows-stop-web.bat to stop everything.
Windows support is new and has not been through a full live session yet. If something does not work, tell me — the trial exists partly so you can find out before paying.
The panel opens at http://127.0.0.1:8770. Press ▶ Start to run the trading
loop. It starts in paper mode; switching to real money needs your trade
password, no open positions, and a second confirmation.
Three processes that don't depend on each other, talking through files in data/:
| OpenD | The broker's official gateway. Quotes and orders both go through it |
| Scheduler | The part that actually trades. Started by ▶ in the panel, keeps running if you close the browser |
| Web panel | Flask. Reads state, writes config, handles approvals — it never places an order itself |
Credentials live in .env; strategy parameters live in config/parameters.json and are edited in the panel — one file, one source of truth, with every change appended to config/parameters_history.jsonl.
Stack: Python 3.11 · APScheduler · moomoo-api · pandas + pandas-ta · Optuna · SQLite · Flask · python-telegram-bot · SwiftUI (the optional app).
A personal research project, not financial advice. Backtests don't predict the future, a regime change can break any strategy, and the author is not liable for any loss you take using this.
Proprietary © 2026 Ethan Tan — all rights reserved. Versions up to v2.6.1 were released under MIT; that grant stands for those versions only.

