How I Built an AI Crypto Trading Bot on Bybit (And It Actually Works)
I've been trading crypto since 2018. For the first few years I did what everyone does — stared at charts, got emotional, bought tops, sold bottoms. Classic. Around 2022 I started writing scripts to automate the boring parts. By 2024 I was running full bots. And in March 2026 I entered one of my bots — QuantumEdge — into Bybit's official AI vs Human trading competition.
This is the real story of how I built it, what works, and what nearly blew up my account.
Why I Built QuantumEdge
The honest reason: I got tired of losing money to emotions. A bot doesn't panic. It doesn't chase. It doesn't ignore its own stop-loss because "it'll come back." It executes the rules you wrote, every time, without ego.
The Bybit AI vs Human competition was the push I needed to actually finish it. Real money, public leaderboard, competing against other traders. Nothing focuses the mind like stakes.
The Tech Stack
QuantumEdge is built with Node.js and runs as a systemd service on a Linux VPS. The core components:
- Bybit Unified API — for market data, order placement, position management
- 15-minute OHLCV candles — the primary signal timeframe
- ATR (Average True Range) — for dynamic stop-loss and take-profit levels
- Multi-factor signal scoring — combining momentum, volume, and trend indicators
- SQLite — for trade logging, equity snapshots, performance tracking
- Circuit breaker — halts trading after 3 losses in 30 minutes
The Signal Logic
The bot checks each symbol on a 15-minute interval. For a trade to trigger, the signal score must exceed a threshold (currently 10/15). The score combines:
// Simplified signal scoring
function scoreSignal(candles, symbol) {
let score = 0;
// Trend alignment (EMAs)
if (ema20 > ema50) score += 3; // bullish structure
// Momentum (RSI range)
if (rsi > 45 && rsi < 65) score += 2; // sweet spot
// Volume confirmation
if (volume > avgVolume * 1.5) score += 2;
// ATR-based volatility filter
if (atr / price > 0.008) score += 2; // enough movement
// MACD crossover
if (macdCross === 'bullish') score += 3;
return score; // trade if >= 10
}
Direction is determined separately — the bot looks at recent price structure and volume distribution to decide long vs short. A minimum direction margin of 3 points is required before committing.
ATR-Based Stop Loss and Take Profit
This was the biggest improvement over my early bots. Fixed percentage stops are fine, but the market doesn't care about your 2% rule. ATR-based stops adapt to actual volatility:
// ATR stop/take-profit calculation
const atr14 = calculateATR(candles, 14);
const stopLoss = entryPrice - (atr14 * 1.8); // 1.8x ATR below entry
const takeProfit1 = entryPrice + (atr14 * 1.5); // partial exit
const takeProfit2 = entryPrice + (atr14 * 2.8); // full exit
On a volatile symbol like SOL, the stop might be 3-4% away. On a quiet session of LINK, it might be 1.2%. The bot adjusts automatically — no more getting stopped out by normal noise on a wild day.
The Circuit Breaker
This saved me from a few disasters. If the bot loses 3 trades in any 30-minute window, it halts completely for the rest of the session:
// Circuit breaker check
const recentLosses = trades.filter(t =>
t.pnl < 0 &&
t.closeTime > Date.now() - 30 * 60 * 1000
);
if (recentLosses.length >= 3) {
console.log('Circuit breaker triggered. Halting.');
process.exit(0); // systemd restarts next session
}
Without this, a bad signal model in choppy conditions can turn 3 small losses into 10. The circuit breaker means the worst case is manageable.
Symbols and Results
The competition runs on Bybit with a minimum 1,000 USDT balance, 10 trades/day minimum, and maximum 15x leverage. QuantumEdge uses 6x leverage by default.
Active symbols: XRP, DOGE, SUI, HYPE, NEAR, LINK, 1000PEPE, XAUT
Removed from the list after poor performance: AVAX, BNB — both had 0% win rate in early testing.
Current competition status: running live, competing in the AI vs Human leaderboard. Dashboard: rdai.in/QuantumEdge/
What I'd Do Differently
- Start with paper trading longer. I rushed to live too early and paid tuition.
- Symbol selection matters more than signal tuning. A great signal on the wrong symbol is worthless.
- Log everything. SQLite trade logs saved me countless hours of debugging.
- The circuit breaker is non-negotiable. Add it on day one, not after a 10-loss streak.
What's Next
I'm working on ML signal enhancement using scikit-learn to score setups based on historical pattern similarity. The goal is to filter out marginal signals that currently drag down the win rate.
The bot is open-source: github.com/rdhacker09/bybit-1v1-bot
Building your own bot? Check out my other projects at rdai.in — including LIVEGPT, my real-money live trading bot.
Explore rdai.in →⚠️ DISCLAIMER: This post is for informational and educational purposes only. Nothing here is financial advice. Always Do Your Own Research (DYOR). Crypto trading involves significant risk of loss. Not Financial Advice (NFA). The author is not responsible for any financial decisions made based on this content.