Built · 90-Day Backtest · Bybit Futures

TRADING ENGINE

A scanner with a Claude veto on Bybit futures, built up over four levels from a grid proof-of-concept to a reflection loop. The question: can an LLM add edge on top of the scanner? I ran a 90-day backtest to find out.

60%
Win Rate
25 trades · backtest
+20.5%
Return
90-day backtest
1.83
Profit Factor
wins vs. losses
01

Evolution

Four levels, each shipped end-to-end: Grid PoC, Scanner, LLM Gate, Reflection Loop.

02

Scanner

Three setup detectors, running on 4h candles. Score 70+ gets escalated.

Live Scanner

Every 4 hours the scanner walks the Top-20 futures market. Setups crossing score 70 get handed to the LLM gate.

scanning · 20 coins · 4h
rescans in 4s
SymbolRSIVolumeScore
TAO
76
3.2x
76
BTC
62
1.4x
72
ETH
71
2.8x
69
1000PEPE
70
2.1x
67
SOL
59
1.1x
53
DOGE
44
0.9x
43
Python
Bybit API
Claude
SQLite
NumPy
Telegram
03

LLM Gate

Claude approves or rejects — with specific reasons, not generic caution.

LLM Gate

Claude sees the setup, the market context, and recent trade history — and returns a go / no_go with reasoning.

ETH/USDT
MEAN_REVERSION · SHORT
SCORE74/100
RSI71.2 (overbought)
MACDbearish cross
Volume+180% avg
Funding+0.008%
Claude · reasoning

The Decision Layer

The gate never looked for trades — it approved or rejected setups the scanner had already qualified. The system prompt set the default to go rather than caution, and said so plainly.

llm_gate.py
You are an aggressive crypto trading analyst. Your job:
find reasons to TAKE trades, not avoid them.

The default answer should be "go" unless you find a
SPECIFIC reason to reject.

Decision framework:
- Score 80+: say "go" unless news directly contradicts
- Score 70-79: say "go" if sentiment is neutral or supportive
- Only say "no_go" for SPECIFIC reasons: breaking news,
  extreme crowding (funding > 0.05%), or a clear catalyst
  against direction.
Backtest · 90 Days
+0.0%

Return · backtest

0.00

Profit Factor

0.0%

Max Drawdown

0%

Win Rate

04

Reflection

Every closed trade became an atomic note, and the bot re-read its own reflections on the next call.

Reflection Loop

A trade closes. Claude writes a post-mortem. The learning becomes an atomic note — same shape as the Second Brain vault.

ETH/USDT
short · closed via take_profit
+$9.44
Entry 3412.4 → Exit 3384.1 · Hold 19h · Leverage 3x

What I Settled On

  • The thesis held, with conditions

    Over the 90-day backtest the LLM did add edge — but only when the scanner did the heavy lifting and a default of "go" beat "cautious."

  • Claude judges, it doesn't hunt

    It only judged setups the scanner already qualified, never hunted for its own. The worst case was a missed trade, not a bad one.

  • Bybit over Binance

    Lower fees on perpetuals and a futures-first API kept the execution layer simple. Taker fee 0.055% was cheap enough that short holds stayed profitable.

  • Post-mortems as atomic notes

    Each closed trade produced one learning and one reflection, structured for retrieval. The LLM re-read them on the next decision, so they worked as context, not logs.