Open source • Python 3.13 • simulated capital by default

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.

chart_vision

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.

vector_memory

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.

risk_governance

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.

executor

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

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.