Most trading bots do arithmetic. This one reads the chart, remembers its trades, and has to defend every call.
Semantic Signal renders a 1920×1080 candlestick chart for a multimodal model, keeps a 768-dimensional semantic memory of closed-trade experiences, and applies deterministic risk checks before an order can be sent.
- trading
- simulated capital (paper)
- live executor
- exchange testnet only — no real funds
- test suite
- 2,265 tests · 2,247 passing · 17 skipped · 1 failing (live-dashboard test)
- providers
- Google AI, DeepSeek, OpenRouter, local — switchable
What this project combines
Open-source trading projects solve different parts of the problem. Freqtrade focuses on mature execution and backtesting; TradingAgents explores multi-agent market research; Vibe-Trading combines vision and agent workflows. This project combines chart vision, local trade memory and deterministic risk limits in one experimental, local-first research loop.
This is not a claim that no other bot has any individual feature, nor a claim of superior returns. Read the linked source code and the risk disclaimer before using any trading software.
An image, not just indicator floats
A Plotly candlestick chart at 1920×1080 with SMA, RSI, CMF and OBV goes to the multimodal model alongside the numeric stack. Wick geometry, volume spikes and wedges are read off the picture — but every number the model cites is checked against the computed values.
768D memory of closed-trade experiences
Closed-trade experiences are embedded with BAAI/bge-base-en-v1.5 into ChromaDB. Before each decision the bot retrieves the three most similar past setups, each tagged with aSurprise Ratio so a lucky win does not become a rule.
Deterministic risk limits constrain the model
The model proposes a trade, but symbol restrictions, position caps and stop/target validation remain deterministic checks. Position sizing is capped and uses documented fallback profiles rather than treating model confidence as a guarantee.
Reasoning and execution are separate processes
The engine emits one atomic JSON decision; a second service does CCXT order placement, leverage and exchange-side stops, and writes a verdict journal the engine reads back. The bot confirms what happened to its own order instead of assuming it.
Built in a Wrocław apartment after warehouse shifts
In December 2025 I was working 8-hour warehouse shifts in Poland and testing "AI trading bot" templates in the evenings. Nine months later the project has 2,265 automated tests, layered agent documentation (a root AGENTS.md plus one per package), and a live executor running against an exchange testnet — not a cent of real money, by design.
Read the full development history →From the blog
How the bot reads charts
Market history, 79 Numba indicator functions, a 1920×1080 chart image — and a model prompted to defend its call.
Vector memory
How 768D embeddings turn closed trades into lessons the bot retrieves before every decision.
Paper → live: the executor
Why reasoning and order placement are separate services, and what is still missing before real capital.
Where every number on this page comes from
Nothing here is a screenshot from a course. All of it lives ingithub.com/qrak/LLM_trader:
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,265 python -m pytest tests -q -> 2,247 passed, 17 skipped⚠️ Risk disclaimer: Semantic Signal is an experimental, open-source software project — not financial advice, not a money machine. It trades simulated capital by default, it has lost money on paper during development, and trading cryptocurrencies carries substantial risk of loss. Read the full disclaimer.