Built · 90-Day Backtest · Bybit Futures

TRADING ENGINE

A scanner + LLM decision layer on Bybit futures, shipped across four levels — grid proof-of-concept, quantitative scanner, Claude-gated decision layer, and a reflection loop that feeds closed-trade learnings back into the next call. Built to answer one question on a 90-day backtest: can an LLM add real edge as a veto layer on top of a quantitative scanner?

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

Evolution

Four levels, 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
MOMENTUM · SHORT
SCORE74/100
RSI71.2 (overbought)
MACDbearish cross
Volume+180% avg
Funding-0.008%
Claude · reasoning

The Decision Layer

The LLM gate didn't find trades — it approved or rejected setups the scanner had already qualified. The system prompt was unapologetic about the default: go, not caution.

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 60-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

Key Decisions

  • The Thesis

    Can an LLM add edge as a veto layer on top of a quantitative scanner? In the 90-day backtest the answer was yes — when the scanner did the heavy lifting and the LLM only rejected on specific, concrete reasons. Within that window, default "go" outperformed default "cautious."

  • Claude as gate, not oracle

    The LLM didn't find trades. It approved or rejected setups the scanner had already qualified. Cheaper, faster, and the failure mode was "missed trade" instead of "bad trade."

  • 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

    Same pattern as the Second Brain vault. Each closed trade produced one learning, one reflection, both structured for retrieval. Not just logs — context the LLM re-read on the next decision.