An LLM trading agent that reads candlestick charts and learns from its own closed trades.
Every four hours it renders a 1920×1080 chart, sends it to a multimodal model with 79 indicators, the news context and its trade memory, and runs the answer through deterministic risk checks before booking a paper trade.
- trading
- simulated capital (paper)
- executor
- exchange testnet, no real funds
- tests
- 2,544, ~162 s, ruff and pyright clean
- providers
- DeepSeek, Google, OpenRouter, LM Studio
Chart images, not only indicator values
A 1920×1080 Plotly candlestick chart with SMA, RSI, CMF and OBV goes to the model with the numeric stack. It reads wick geometry and volume from the picture, and every number it cites is checked against the computed value.
Memory of closed trades
Closed trades are embedded with BAAI/bge-base-en-v1.5 into ChromaDB. Before each decision the bot retrieves the three most similar past setups, each carrying a surprise ratio so a lucky win does not become a rule.
Deterministic limits around the model
The model proposes a trade; symbol restrictions, position caps and stop/target validation stay deterministic. Sizing is capped and uses fixed fallback profiles.
Reasoning and execution are separate processes
The engine emits one JSON decision; a second service places CCXT orders and writes a verdict journal the engine reads back, so the bot confirms what happened to its order instead of assuming it.
Development history
Built in the evenings after warehouse shifts in Wrocław. The repository holds 2,544 tests, an AGENTS.md per package, and an executor that runs against an exchange testnet.
Read the full history →Articles
Sources
Every number on this page comes from a file in the repository:
chart image 1920x1080 src/analyzer/pattern_engine/chart_generator.py
market data, 50 lvls config/config.ini · src/analyzer/data_fetcher.py
trade memory 768D src/trading/vector_memory.py (BAAI/bge-base-en-v1.5)
risk limits, pre-entry src/trading/position_management.py
agent docs, 9 files AGENTS.md + one per package (src/trading, src/analyzer, ...)
tests 2,544 python -m pytest tests -q -> all passing, 0 skippedRisk disclaimer: experimental software, not financial advice. It trades simulated capital by default and has lost money on paper during development.Full disclaimer.