🚀 QTradeX Core — Build, Backtest & Optimize AI-Powered Crypto Trading Bots
📸 See screenshots.md for more visuals
📚 Read the docs at qtradex.litepresence.com/docs
🤖 Explore community bots at QTradeX AI Agents DeepWiki
💬 Join our Telegram Group for discussion & support
TL;DR
QTradeX is a lightning-fast Python framework for designing, backtesting, and deploying algorithmic trading bots, built for crypto markets with support for 100+ exchanges, AI-driven optimization, and blazing-fast vectorized execution.
Like what we're doing? Give us a ⭐!
Why QTradeX?
Whether you're exploring a simple EMA crossover or engineering a strategy with 20+ indicators and genetic optimization, QTradeX gives you:
- Modular, non-locked architecture - want to use QTradeX's data fetching with a custom backtest engine? Go for it!
- Tulip + CCXT Integration
- Custom Bot Classes
- Fast, Disk-Cached Market Data
- Ultra Fast Backtests (even on a Raspberry Pi!)
🔍 Features at a Glance
- Bot Development: Extend
BaseBotto craft custom strategies - Backtesting: Easy-to-navigate CLI & live-coding based testing platform (Just select
Autobacktest) - Optimization: Use QPSO, LSGA, or others to fine-tune parameters
- Indicators: Wrapped Tulip indicators for blazing performance
- Data Sources: Pull candles from 100+ CEXs/DEXs with CCXT
- Performance Metrics: Evaluate bots with ROI, Sortino, Win Rate, and dozens more
- Speed: 200+ backtests per second for 3 years of daily candles on a Ryzen 5600x
Project Structure
qtradex/
├── core/ # Bot logic and backtesting
├── indicators/ # Technical indicators
├── optimizers/ # QPSO, LSGA, other optimizers, and common utilities
├── plot/ # Trade/metric visualization
├── private/ # Execution & paper wallets
├── public/ # Data feeds and utils
└── common/ # JSON RPC, BitShares nodes, and data caching
Quickstart
Install
pip install qtradex
Or, if you want the latest updates:
git clone https://github.com/squidKid-deluxe/QTradeX-Algo-Trading-SDK.git QTradeX
cd QTradeX
pip install -e .
Example Bot: EMA Crossover
import qtradex as qx
import numpy as np
class EMACrossBot(qx.BaseBot):
def __init__(self):
# Notes:
# - If you make the tune values integers, the optimizers
# will quantize them to the nearest integer.
# - By putting `_period` at the end of a tune value,
# QTradeX core will assume they are periods in days and will scale them
# to different candle sizes if the data given isn't daily
self.tune = {
"fast_ema_period": 10.0,
"slow_ema_period": 50.0
}
self.clamps = {
"fast_ema_period": [5, 10, 50, 1],
"slow_ema_period": [20, 50, 100, 1],
}
def indicators(self, data):
return {
"fast_ema": qx.ti.ema(data["close"], self.tune["fast_ema"]),
"slow_ema": qx.ti.ema(data["close"], self.tune["slow_ema"]),
}
def strategy(self, tick_info, indicators):
fast = indicators["fast_ema"]
slow = indicators["slow_ema"]
if fast > slow:
return qx.Buy()
elif fast < slow:
return qx.Sell()
return qx.Thresholds(buying=fast * 0.8, selling=fast * 1.2)
def plot(self, *args):
qx.plot(
self.info,
*args,
(
# key name label color axis idx axis name
("fast_ema", "EMA 1", "white", 0, "EMA Cross"),
("slow_ema", "EMA 2", "cyan", 0, "EMA Cross"),
)
)
# Load data and run
data = qx.Data(
exchange="kucoin",
asset="BTC",
currency="USDT",
begin="2020-01-01",
end="2023-01-01"
)
bot = EMACrossBot()
qx.dispatch(bot, data)
See more bots in QTradeX AI Agents
On-chain DEX data
Backtest against on-chain DEX pools with DexPaprika (36 chains, no API key). Set exchange="dexpaprika" and pass the pool as network/address:
data = qx.Data(
exchange="dexpaprika",
asset="WETH",
currency="USDC",
pool="ethereum/0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
begin="2026-01-01",
end="2026-07-01",
)
Find pool addresses via https://api.dexpaprika.com/networks/{network}/pools/search.
Usage Guide
| Step | What to Do |
|---|---|
| 1️⃣ | Build a bot with custom logic by subclassing BaseBot |
| 2️⃣ | Backtest using qx.dispatch + historical data |
| 3️⃣ | Optimize with any algorithm you like (optimized tunes stored per-bot in tunes/) |
| 4️⃣ | Deploy live |
Roadmap
- More indicators (non-Tulip sources)
- GPU Acceleration for indicators
- Improved multi-core support for optimization
- Windows/Mac support
- TradFi Connectors: Stocks, Forex, and Comex support
Want to help out? Check out the Issues list for forseeable improvements and bugs.
Resources
📜 License
WTFPL — Do what you want. Just be awesome about it 😎
⭐ Star History
✨ Ready to start? Clone the repo, run your first bot, and tune away. Once tuned - LET THE EXECUTIONS BEGIN!
Metadata
Release files for QTradeX 1.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| qtradex-1.8.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.5+ x86-64, Linux glibc 2.17+ x86-64 | Details |
| qtradex-1.8.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.5+ x86-64, Linux glibc 2.17+ x86-64 | Details |
| qtradex-1.8.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.17+ x86-64, Linux glibc 2.5+ x86-64 | Details |
| qtradex-1.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.9 | CPython 3.9 | Linux glibc 2.5+ x86-64, Linux glibc 2.17+ x86-64 | Details |
Total release size: 6.4 MB
Release files / qtradex-1.8.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | qtradex-1.8.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
f51f2b3ab998382bd4f26b9432b15e5dd31caf96ff0e74a407974e3bd02ff647
|
|
BLAKE2b-256 checksum How to use checksums |
fb86d060b4b8a5313516ee70d34f839393b49e850bce192e895403cae14f4ffd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / qtradex-1.8.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | qtradex-1.8.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
41e0119fd8a265e73ca077f30f38025f7d20f43923afd3796d55d95a51d91809
|
|
BLAKE2b-256 checksum How to use checksums |
6d998b357d07a3dc907a0a2b16342c933c04eaebf82fa4bc6adc48c9d0f46154
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / qtradex-1.8.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | qtradex-1.8.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
b2eb3e9012d202c43530c3e7c1fe1043ac2e856817b559410c86faf2b6d9a659
|
|
BLAKE2b-256 checksum How to use checksums |
734beeeb1d6544f77247c391dc42279fb1e847b78da5241ad572df3e203e0376
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / qtradex-1.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | qtradex-1.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
f244cd8a93d5c0c735baa6acac8b26f25c81c2fca5f405615100b7442da5521c
|
|
BLAKE2b-256 checksum How to use checksums |
0bbffc45c7e139ee3bba416186518b62ae3ee6b6750b296fbb65cae753726598
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency log