No frameworks
Native HTTP server, hand-drawn SVG, zero frontend dependencies. The dashboard page weighs 30 KB.
Project 01 · fintech / quantitativein production · forward test since 2026-09-08
A quant trading bot that learned not to use AI.
24/7 paper-trading system on Binance that runs five mean-reversion strategies side by side, with a home-built backtest engine that discarded more than 240 variants, the LLM version included, before letting the winner run. Node.js with no frameworks, Docker on this very Raspberry Pi, real-time dashboard over Server-Sent Events.
Fig. 1 · Equity curve · $60 start · May 2025 to September 2026
The shaded area is the 111-day out-of-sample window: candles no optimisation process ever saw.
Fig. 2 · The problem
I wanted a bot that traded crypto with little capital ($60) and no babysitting. The first version used a local Qwen as a filter and Claude as the final decider. It cost $3 to $8 a day in API calls and its win rate landed at 47 %. With 0.1 % fees per trade, that is losing money slowly.
Fig. 3 · What the data taught me
The most valuable conclusion was counter-intuitive: at retail costs no indicator strategy has net edge on 5-minute candles, and the AI added nothing a three-condition rule did not do better and for free.
Fig. 4 · Results · 471 days · $60 · 40 % per position · 2×
| Strategy | Trades | Win rate | Profit factor | Return | Max DD | OOS · WR / PF / DD |
|---|---|---|---|---|---|---|
| FK19 · Long-only (main) | 301 | 69 % | 1.89 | +49 % | 8.0 % | 76 % · 2.49 · 2.6 % |
| FK17 · Strict long-only | 193 | 73 % | 2.19 | +45 % | 5.7 % | 86 % · 3.56 · 2.6 % |
| FK24 · Long + Short | 429 | 68 % | 1.43 | +47 % | 11.3 % | 74 % · 2.04 · 5.6 % |
| FK3 · L+S with BTC filter | 360 | 68 % | 1.45 | +42 % | 11.0 % | 73 % · 1.94 · 5.5 % |
| Previous LLM version (control) | 1055 | 65 % | 0.96 | −7 % | 21.0 % | 59 % · 0.62 · 19.2 % |
Fig. 5 · Technical decisions worth telling
Native HTTP server, hand-drawn SVG, zero frontend dependencies. The dashboard page weighs 30 KB.
The simulator and the bot share the same strategy definition. What was tested is literally what runs.
Switching from market to limit orders cut the cost per trade from 0.1 % to 0.07 %. That turned a marginal edge into a deployable one.
Strict in-sample / out-of-sample split, walk-forward with pair selection using only the past, parameter-neighbourhood robustness and slippage sensitivity.
One JSON per strategy with capital-integrity validation on boot, hourly backups and automatic container restart.
The code that would place real orders. 60 to 100 forward-test trades per strategy are still missing. That decision gets made with data, not enthusiasm.