I. Introduction: Why I Built My Own Bot
Crypto automation sounds exciting: a bot that trades while you sleep, catches profitable trends, and never gets tired. But when I started exploring the space, most bots I found were either overhyped, under-documented, or flat-out broken.
So I decided to build my own bot from scratch—one that works in real time, with full control from the command line, supports backtesting, paper trading, and can deploy to a $5 VPS.
This post covers my journey from zero to real-time execution bot. If you’re a Python dev or a trader curious about bot building, this one’s for you.
II. Planning the Bot: Goals and Features
Before writing a single line of code, I outlined the core requirements:
- Real-time strategy execution using Binance API
- CLI-based interface for strategy selection and control
- Strategy modularity (plug-in based system)
- Support for backtesting and paper/live modes
- Logging of trades and errors
- Lightweight for VPS deployment
III. Tech Stack
- Python 3.10+
- Binance API (
python-binance
) - TA-Lib / pandas-ta for technical indicators
- pandas / NumPy for data processing
- SQLite for trade logs (optional)
- argparse or Typer for CLI
IV. Architecture Overview
crypto_bot/ ├── strategies/ │ ├── rsi_strategy.py │ ├── macd_strategy.py ├── core/ │ ├── trader.py │ ├── logger.py ├── config/ │ └── settings.json ├── cli.py ├── bot.py └── logs/
- Strategies: Each strategy is a Python class
- Trader: Manages data fetching and trade execution
- Logger: Handles both file and optional DB logging
- CLI: Entry point to control bot behavior
V. Real-Time Trading Loop
Here’s a simplified example of how the main bot loop works:
while True: df = fetch_ohlcv(symbol, interval) signal = strategy.evaluate(df) if signal == "BUY": trader.buy(symbol, quantity) elif signal == "SELL": trader.sell(symbol, quantity) sleep(next_candle_time())
Key points:
fetch_ohlcv()
pulls the latest OHLCV data- Strategy evaluates the last N candles
- Orders are placed if a valid signal is returned
VI. Modular Strategy Example (RSI)
class RSIStrategy: def __init__(self, period=14, overbought=70, oversold=30): self.period = period self.overbought = overbought self.oversold = oversold def evaluate(self, df): df['rsi'] = ta.rsi(df['close'], length=self.period) if df['rsi'].iloc[-1] < self.oversold: return "BUY" elif df['rsi'].iloc[-1] > self.overbought: return "SELL" return "HOLD"
You can add more strategies by following this simple class pattern.
VII. CLI Control (argparse or Typer)
import argparse parser = argparse.ArgumentParser() parser.add_argument('--symbol', type=str, required=True) parser.add_argument('--strategy', type=str, required=True) parser.add_argument('--mode', choices=['paper', 'live'], default='paper') args = parser.parse_args() bot = TradingBot(symbol=args.symbol, strategy=args.strategy, mode=args.mode) bot.run()
This allows you to run the bot with:
python cli.py --symbol BTCUSDT --strategy rsi --mode paper
VIII. Backtesting and Paper Trading
The bot supports:
- Historical simulation from CSV or Binance fetch
- Paper trading logs trades without execution
- Seamless switch to live once tested
Example paper trade log:
[2025-04-23 14:22:01] BUY BTCUSDT at 62410.5 [RSI: 29.7]
IX. Logging and Trade History
All trades and errors are logged. You can choose between:
- Simple log file per session
- SQLite database logging for analytics and visualization
Sample log output:
[INFO] RSI crossed below 30. Triggering BUY signal. [EXECUTE] Simulated BUY 0.01 BTC at 61,420.20
X. Deployment to VPS (Lightweight)
I deployed this bot on a $5/month DigitalOcean droplet:
- Install Python + pip + virtualenv
- Clone repo and install requirements
- Use
screen
ortmux
to run persistently - Monitor logs via
tail -f logs/session.log
That’s it—bot runs 24/7 with minimal resource usage.
XI. Lessons Learned
- Always test with paper mode first
- Real-time systems need real-time error handling
- Modular design makes everything easier
- Logging saves hours of debugging
- Don’t over-optimize your strategy—simplicity wins
XII. Build It Yourself
Want the full guide with 250+ pages of hands-on instruction?
📘 Download the Full PDF Guide
💻 Get the Complete Python Bot Repository
XIII. Final Thoughts
This bot was more than a side project—it’s now part of my toolkit for long-term trading automation. If you’re a dev looking to break into crypto bots, I highly recommend building your own.
Let me know if you try it or want help modifying the code!