DEV Community

Riley Quinn
Riley Quinn

Posted on

Building a Simple Crypto Trading Bot in Python & Node.js


Cryptocurrency trading has grown exponentially over the past decade. With thousands of coins and tokens in the market, manually keeping track of prices and executing trades is exhausting, and risky. This is where crypto trading bots come into play. A trading bot automates the process of buying and selling cryptocurrencies based on predefined strategies, enabling faster decisions and more efficient trading.

In this post, we’ll guide you step by step to build a simple crypto trading bot using Python and Node.js. We’ll cover market data fetching, strategy implementation, trade execution, and best practices for safety.

Why Build a Crypto Trading Bot?

Before diving into code, it’s essential to understand why bots are useful:

Speed and Efficiency: Bots can react to market changes in milliseconds, faster than any human.

24/7 Trading: Unlike humans, bots don’t need sleep. They can trade around the clock.

Reduce Emotional Trading: Bots strictly follow your strategy, avoiding panic or FOMO-driven decisions.

Backtesting Opportunities: Bots allow you to test strategies on historical data before risking real money.

⚠️ Disclaimer: Trading bots can be profitable but also risky. Never trade with money you can’t afford to lose. This guide is educational and not financial advice.

Step 1: Choose Your Trading Strategy

A bot is only as good as its strategy. For simplicity, we’ll use a basic moving average crossover strategy:

Simple Moving Average (SMA): Calculates the average price over a set period.

Crossover Logic:

Buy Signal: Short-term SMA crosses above long-term SMA.

Sell Signal: Short-term SMA crosses below long-term SMA.

This strategy is popular among beginners because it’s straightforward and teaches the mechanics of algorithmic trading.

Step 2: Setting Up the Environment

Python Setup

Create a virtual environment

python3 -m venv bot-env
source bot-env/bin/activate

Install required libraries

pip install ccxt pandas numpy

ccxt: Connects to multiple exchanges (Binance, Coinbase, Kraken, etc.)

pandas: For data manipulation

numpy: For numerical calculations

Node.js Setup

Initialize Node.js project

mkdir crypto-bot && cd crypto-bot
npm init -y

Install dependencies

npm install ccxt technicalindicators axios

ccxt: Unified exchange API

technicalindicators: SMA, EMA, RSI calculations

axios: For HTTP requests

Step 3: Connect to a Crypto Exchange

We’ll use Binance as an example since it’s developer-friendly and widely used.

Python Example:
import ccxt

exchange = ccxt.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_SECRET_KEY',
'enableRateLimit': True,
})

balance = exchange.fetch_balance()
print(balance['total'])

Node.js Example:
const ccxt = require('ccxt');

const exchange = new ccxt.binance({
apiKey: 'YOUR_API_KEY',
secret: 'YOUR_SECRET_KEY',
});

async function getBalance() {
const balance = await exchange.fetchBalance();
console.log(balance.total);
}

getBalance();

💡 Tip: Always use environment variables or secure vaults to store API keys instead of hardcoding them.

Step 4: Fetch Market Data

To implement the SMA strategy, we need historical price data.

Python Example:
import pandas as pd
import numpy as np

symbol = 'BTC/USDT'
timeframe = '1h'

ohlcv = exchange.fetch_ohlcv(symbol, timeframe)
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['SMA_short'] = df['close'].rolling(window=5).mean()
df['SMA_long'] = df['close'].rolling(window=20).mean()

print(df.tail())

Node.js Example:
const { SMA } = require('technicalindicators');

async function getMarketData() {
const ohlcv = await exchange.fetchOHLCV('BTC/USDT', '1h');
const closePrices = ohlcv.map(candle => candle[4]); // closing price

const smaShort = SMA.calculate({ period: 5, values: closePrices });
const smaLong = SMA.calculate({ period: 20, values: closePrices });

console.log('Short SMA:', smaShort.slice(-5));
console.log('Long SMA:', smaLong.slice(-5));
Enter fullscreen mode Exit fullscreen mode

}

getMarketData();

Step 5: Implement the Trading Logic

With SMA values calculated, we can define buy and sell signals.

Python Example:
def check_signal(df):
if df['SMA_short'].iloc[-1] > df['SMA_long'].iloc[-1] and df['SMA_short'].iloc[-2] <= df['SMA_long'].iloc[-2]:
return 'BUY'
elif df['SMA_short'].iloc[-1] < df['SMA_long'].iloc[-1] and df['SMA_short'].iloc[-2] >= df['SMA_long'].iloc[-2]:
return 'SELL'
else:
return 'HOLD'

signal = check_signal(df)
print("Current Signal:", signal)

Node.js Example:
function checkSignal(smaShort, smaLong) {
const len = smaShort.length;
if (smaShort[len - 1] > smaLong[len - 1] && smaShort[len - 2] <= smaLong[len - 2]) {
return 'BUY';
} else if (smaShort[len - 1] < smaLong[len - 1] && smaShort[len - 2] >= smaLong[len - 2]) {
return 'SELL';
} else {
return 'HOLD';
}
}

Step 6: Execute Trades

To execute trades automatically:

Python Example:
def execute_trade(signal, symbol, amount):
if signal == 'BUY':
order = exchange.create_market_buy_order(symbol, amount)
print("Bought:", order)
elif signal == 'SELL':
order = exchange.create_market_sell_order(symbol, amount)
print("Sold:", order)

execute_trade(signal, 'BTC/USDT', 0.001)

Node.js Example:
async function executeTrade(signal, symbol, amount) {
if (signal === 'BUY') {
const order = await exchange.createMarketBuyOrder(symbol, amount);
console.log('Bought:', order);
} else if (signal === 'SELL') {
const order = await exchange.createMarketSellOrder(symbol, amount);
console.log('Sold:', order);
}
}

executeTrade('BUY', 'BTC/USDT', 0.001);

⚠️ Caution: Start with paper trading or small amounts to avoid losses. Many exchanges offer testnets for simulation.

Step 7: Automate the Bot

To run the bot continuously:

Python Example:
import time

while True:
ohlcv = exchange.fetch_ohlcv('BTC/USDT', '1h')
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['SMA_short'] = df['close'].rolling(window=5).mean()
df['SMA_long'] = df['close'].rolling(window=20).mean()

signal = check_signal(df)
execute_trade(signal, 'BTC/USDT', 0.001)

time.sleep(3600)  # Wait for the next hour
Enter fullscreen mode Exit fullscreen mode

Node.js Example:
setInterval(async () => {
const ohlcv = await exchange.fetchOHLCV('BTC/USDT', '1h');
const closePrices = ohlcv.map(candle => candle[4]);
const smaShort = SMA.calculate({ period: 5, values: closePrices });
const smaLong = SMA.calculate({ period: 20, values: closePrices });

const signal = checkSignal(smaShort, smaLong);
await executeTrade(signal, 'BTC/USDT', 0.001);
Enter fullscreen mode Exit fullscreen mode

}, 3600 * 1000); // every hour

Step 8: Best Practices

Start with Paper Trading: Most exchanges offer testnet environments.

Rate Limits: Respect API limits to avoid bans.

Error Handling: Handle network issues, order failures, and exceptions.

Logging: Maintain logs of signals, executed trades, and errors.

Security: Keep API keys safe and use IP restrictions if available.

Step 9: Advanced Ideas for Your Bot

Once you are comfortable, you can expand your bot:

Add Multiple Indicators: RSI, MACD, Bollinger Bands for better signals.

Portfolio Management: Track multiple coins and rebalance automatically.

Machine Learning: Predict price movements with ML models.

Cross-Exchange Arbitrage: Exploit price differences between exchanges.

Conclusion

Building a crypto trading bot is a fantastic way to learn programming, understand trading concepts, and explore automated finance. In this tutorial, we covered:

Setting up Python/Node.js environments

Fetching market data with ccxt

Implementing a simple SMA crossover strategy

Executing trades programmatically

Automating the bot for continuous trading

Remember: start small, test often, and gradually optimize your strategy. With time and practice, your bot can evolve into a powerful trading tool.

🚀 Next Step: Try adding logging and notifications (email, Slack, or Telegram) to monitor your bot in real time.

If you want to take your crypto automation to the next level, explore ready-made solutions, custom bot development, and advanced trading tools at Cryptiecraft

They offer developer-friendly services to help you build, deploy, and scale your crypto trading bots safely and efficiently.

Top comments (0)