An execution and safety platform
Freqtrade does the trading. A second service, Conductor, keeps the ledger, enforces the capital rules and owns every halt, the kill switch and the alerts.
Open source · Apache-2.0 · negative results published
Guarded Trader lets an LLM research crypto strategies but never place an order. Every strategy it tested lost money at real fees, so its gates kept every one of them away from real money.
Freqtrade does the trading. A second service, Conductor, keeps the ledger, enforces the capital rules and owns every halt, the kill switch and the alerts.
Backtests run in a sandbox with no network: walk-forward validation, a random-entry null, Deflated Sharpe, and a registry that counts every trial, including the failures.
23 architecture decisions, a risk register, runbooks written to be followed at 2 am, drill results from the real server, and every research result.
Built around a one-time $100 principal that is never topped up, run by one operator in Canada. Not a signal service, not a product, not managed money.
The LLM proposes and reviews strategy code. Only the deterministic engine talks to the exchange's order endpoints, and no LLM output has a path there.
Freqtrade's own protections, plus Conductor's checks of daily loss, drawdown, loss streaks, deployed capital and correlated positions. Either one can stop trading.
A halt stays until a person clears it, with a confirmation code that expires in 60 s. Freqtrade always boots paused and starts only if no halt is active.
Exchange keys may query and trade, never withdraw or move funds. That is tested from the server, not assumed, and a venue whose key couldn't be proven unable to withdraw was rejected.
Each safety mechanism was exercised on the real server, in dry-run, on 2026-10-05.
| Drill | What was proven | Result |
|---|---|---|
| Kill switch via Telegram | New entries blocked within about 10 s; resumed only after a confirmed /resume | Pass |
| Nuclear flatten via Telegram | Orders cancelled, positions closed, bot stopped | Pass |
| Restart under a halt | Never ran while a halt was active; started on its own only with no halt | Pass |
| Heartbeat silence | An outage raised an alert by Telegram and e-mail | Pass |
| Backup and restore | The nightly off-site backup restored to a working ledger | Pass |
| Full server rebuild | Rebuilt from nothing in about 85 minutes, same address, ledger and halts restored | Pass |
The records are the operator's summaries, not verbatim output, and include the findings each drill raised. Drill results.
Every registered strategy, 2022-01-01 → 2026-10-01, starting with $100, at the fee a small Kraken account actually pays (0.80 % taker + 0.10 % slippage per side). The parameters were committed before the first run, and nothing was tuned afterwards.
| Strategy | Net profit | Max drawdown | Beats random-entry null? | Gate 1 |
|---|---|---|---|---|
| Baseline4h EMA cross, ATR stop | −$65.47 | 83.7 % | No | Fail |
| C05 EMA flip, 4h | −$61.48 | 83.2 % | No | Fail |
| C01 weekly time-series momentum | −$88.63 | 91.8 % | No | Fail |
| C04 C01 + volatility sizing | −$29.84 | 38.0 % | No | Fail |
| BTC buy-and-hold no fees, for comparison | +$75.00 | 67.0 % | — | — |
Before fees, Baseline4h, C05 and C04 were profitable. Fees took all of it and more. At a cheaper venue's 0.20 % fee, C05 beat its random-entry null but still failed Gate 1, and it lost money again at twice that fee.
No real money has been traded, and live trading is paused. The gates were never lowered to let a strategy through. That is the result the project was built to be able to report.
Full report · 0.20 % fee study · Status and revisit triggers
Needs Docker with Compose v2 and GNU Make. No exchange key and no money: Freqtrade paper-trades against public market data.
git clone https://github.com/aplicy-com/guarded-trader.git
cd guarded-trader
cp .env.example .env
# Fill in only FREQTRADE__API_SERVER__USERNAME, __PASSWORD and
# __JWT_SECRET_KEY (any local values). Leave TRADING_MODE=dry_run
# and every exchange key empty.
make up # Freqtrade + Conductor, bound to 127.0.0.1 only
make logs # expect "Dry run is enabled"
The dashboard is at http://127.0.0.1:8000. Stop with make down.
Going live is deliberately hard and gated; see the
README.
This is a research and engineering project. It has no proven trading edge, and its own published results show strategies losing money. Don't trade real money because of anything here. Crypto trading can lose all the money you put in.