Crypto Bots

Copy Trading Bots: How They Work and How to Build One in 2026

Copy trading bots automatically mirror the trades of successful traders on exchanges like Binance, Bybit, and dYdX. Learn how they work and how to build your own copy trading system.

A
AI Agents Hubยท2026-03-19ยท4 min readยท785 words

Builder of AI agents, crypto trading bots, and open-source automation tools. Sharing practical guides on how to build, deploy, and profit from AI and DeFi technology.

What Is Copy Trading?

Copy trading automatically replicates the trades of a "signal provider" โ€” a trader with a proven track record โ€” in your own account. When the signal provider buys BTC, your bot buys BTC proportionally. When they sell, you sell.

Centralized exchanges like Binance, Bybit, and OKX offer native copy trading features. But building your own gives you more control: custom position sizing, multiple signal providers, advanced filtering, and no platform fees.

How Copy Trading Works Under the Hood

Signal Provider Account
    โ†“ Trade executed
Exchange API โ†’ Webhook/WebSocket notification
    โ†“ Parsed
Your Bot โ†’ Position size calculation โ†’ Execute on your account

The key challenge is latency. If the signal provider buys at $65,000 and your copy executes at $65,050, you're already at a disadvantage. The best copy trading systems are within 100-500ms of the original trade.

Method 1: Exchange-Level Copy Trading APIs

Binance and Bybit have APIs specifically for copy trading:

// Bybit Copy Trading API example
const bybitClient = new RestClientV5({
  key: process.env.BYBIT_API_KEY!,
  secret: process.env.BYBIT_SECRET!,
})

// Get signal provider's recent trades
async function getProviderTrades(providerId: string) {
  const response = await bybitClient.getCopyTradingOrders({
    copyTradeId: providerId,
    limit: 20,
  })
  return response.result.list
}

// Mirror a specific trade
async function mirrorTrade(trade: CopyTrade, scaleFactor: number) {
  const orderSize = trade.qty * scaleFactor  // e.g., 0.1 = 10% of provider size
  
  return bybitClient.submitOrder({
    category: 'linear',
    symbol: trade.symbol,
    side: trade.side,
    orderType: 'Market',
    qty: orderSize.toString(),
  })
}

Method 2: On-Chain Wallet Copying

For DeFi, you can copy any wallet โ€” not just registered signal providers. Monitor a successful trader's wallet and replicate their DEX trades.

import { ethers } from 'ethers'

const WHALE_WALLET = '0x...' // The trader you want to copy

provider.on('block', async (blockNumber) => {
  const block = await provider.getBlock(blockNumber, true)
  if (!block?.transactions) return
  
  for (const tx of block.transactions) {
    if (typeof tx === 'string') continue
    
    // Check if whale made a Uniswap swap
    if (tx.from.toLowerCase() === WHALE_WALLET.toLowerCase() && 
        isUniswapTrade(tx)) {
      
      const decodedTrade = decodeUniswapTx(tx)
      console.log(`Whale traded: ${decodedTrade.tokenIn} โ†’ ${decodedTrade.tokenOut}`)
      
      // Execute copy trade with scaled position
      await executeCopyTrade(decodedTrade, COPY_SCALE_FACTOR)
    }
  }
})

Building a Multi-Provider Copy System

Following multiple signal providers diversifies your risk:

interface SignalProvider {
  id: string
  name: string
  exchange: 'binance' | 'bybit' | 'onchain'
  walletOrId: string
  maxAllocation: number  // USD to allocate to this provider
  scaleFactor: number    // Position size as % of provider's position
  filters: TradeFilter
}

interface TradeFilter {
  minConfidence?: number
  maxPositionSize?: number
  allowedSymbols?: string[]
  excludeSymbols?: string[]
}

class CopyTradingEngine {
  private providers: SignalProvider[]
  private totalExposure = new Map<string, number>()
  
  async processTrade(provider: SignalProvider, trade: Trade) {
    // Apply filters
    if (!this.passesFilters(trade, provider.filters)) {
      console.log(`Trade filtered out: ${trade.symbol}`)
      return
    }
    
    // Check total exposure to this asset
    const currentExposure = this.totalExposure.get(trade.symbol) || 0
    if (currentExposure + trade.value > MAX_SINGLE_ASSET_EXPOSURE) {
      console.log(`Max exposure reached for ${trade.symbol}`)
      return
    }
    
    // Execute with risk-adjusted sizing
    const adjustedSize = Math.min(
      trade.size * provider.scaleFactor,
      provider.maxAllocation / trade.price
    )
    
    await this.executeOrder(trade.symbol, trade.side, adjustedSize)
    this.totalExposure.set(trade.symbol, currentExposure + adjustedSize * trade.price)
  }
}

Evaluating Signal Providers

Not all profitable traders are good to copy. Look for:

interface ProviderMetrics {
  winRate: number           // % of profitable trades
  profitFactor: number      // Gross profit / Gross loss (>1.5 is good)
  maxDrawdown: number       // Largest peak-to-trough drop
  avgHoldingTime: number    // In hours โ€” shorter = higher latency requirements
  sharpRatio: number        // Risk-adjusted returns
  consistency: number       // Month-over-month return consistency
  sampleSize: number        // Number of trades (need >100 for statistical validity)
}

function scoreProvider(metrics: ProviderMetrics): number {
  let score = 0
  
  if (metrics.winRate > 0.55) score += 20
  if (metrics.profitFactor > 1.5) score += 20
  if (metrics.maxDrawdown < 0.15) score += 20  // < 15% max drawdown
  if (metrics.sharpeRatio > 1.0) score += 20
  if (metrics.sampleSize > 200) score += 20
  
  return score  // Max 100
}

Red Flags to Avoid

  • Short track record (< 3 months): Could be lucky, not skilled
  • Very high win rate (>80%): Often means cutting profits short, letting losses run
  • Concentrated positions: If one trade is 50% of their portfolio, that's not a strategy โ€” it's a gamble
  • Sudden strategy change: A good provider who starts taking extreme risks is a warning sign
  • Suspiciously consistent returns: Could indicate wash trading or data manipulation

Platform Recommendations

For beginners, use Bybit's LeaderBoard or Binance Copy Trading โ€” they handle the infrastructure and show verified track records. Build your own system once you understand what to look for in a good signal provider.

The advantage of building your own: you can combine signals from multiple providers, add your own risk filters, and copy wallets on any blockchain โ€” not just registered traders on one exchange.

Related Articles