¡ ARBITRAJE & GRID TRADING: Dinero en el Spread

Dos estrategias que no necesitan predecir la dirección ” solo aprovechar la ineficiencia del mercado

Semanas 7-8: Estrategias Algorítmicas
Arbitraje triangular Cross-exchange arb Grid bot config ROI vs Buy&Hold
💱 Piénsalo así: El arbitraje es como comprar arroz más barato en el mercado municipal y revenderlo al supermercado ” mismo producto, diferente precio en dos lugares. El Grid Trading es como ser el mercado mismo: pones órdenes de compra cada $100 más abajo y órdenes de venta cada $100 más arriba. Cuando el precio sube y baja dentro del rango, cobras el spread en cada movimiento. Ambas estrategias generan retornos sin necesitar saber si el mercado sube o baja.
📚 Fuentes: Kissell, R. (2013) ” "The Science of Algorithmic Trading and Portfolio Management". Elsevier. / Chan, E. (2017) ” "Machine Trading". Wiley.
¡ Arbitraje
📊 Grid Trading

Scanner de Arbitraje

0.1%

Precios por Exchange

Cálculo de Ganancia

Escanea para ver oportunidades

Python ” Arbitraje con CCXT

import ccxt.async_support as ccxt
import asyncio

async def scan_arbitrage(symbol='BTC/USDT'):
  exchanges = {
    'binance': ccxt.binance({'enableRateLimit': True}),
    'kraken' : ccxt.kraken({'enableRateLimit': True}),
    'coinbase': ccxt.coinbase({'enableRateLimit': True}),
  }
  # Fetch all orderbooks concurrently
  tickers = await asyncio.gather(*[
    ex.fetch_ticker(symbol) for ex in exchanges.values()
  ])
  prices = {name: t['last'] for name,t in zip(exchanges, tickers)}

  best_buy = min(prices, key=prices.get)
  best_sell = max(prices, key=prices.get)
  spread_pct = (prices[best_sell] - prices[best_buy]) / prices[best_buy] * 100

  total_fee = 0.1 * 2 # buy + sell fee
  net_profit_pct = spread_pct - total_fee

  if net_profit_pct > 0.05: # mínimo viable
    execute_arbitrage(best_buy, best_sell, symbol, capital)

  return {'spread': spread_pct, 'net': net_profit_pct}

Configuración del Grid

$40000
10%
10
$10000
0.1%

Estadísticas del Grid

Espaciado nivel
$ por nivel
Ganancia/trade
Trades/día (est.)
ROI diario (est.)
ROI mensual (est.)

Visualización del Grid

Python ” Grid Bot

class GridBot:
  def __init__(self, symbol, center, range_pct, levels, capital, fee=0.001):
    self.symbol = symbol
    self.capital = capital
    self.fee   = fee
    step = center * range_pct / levels
    self.buy_levels = [center - step * i for i in range(1, levels+1)]
    self.sell_levels = [center + step * i for i in range(1, levels+1)]
    self.capital_per_level = capital / levels

  def on_tick(self, price):
    for lvl in self.buy_levels:
      if price <= lvl and lvl not in self.open_buys:
        qty = self.capital_per_level / (lvl * (1 + self.fee))
        self.place_order('BUY', qty, lvl)
    for lvl in self.sell_levels:
      if price >= lvl and lvl not in self.open_sells:
        self.place_order('SELL', self.holdings.get(lvl, 0), lvl)
¡ Explora el Arbitraje para ver spreads entre exchanges en tiempo real, o el Grid Trading para configurar un bot que opera rangos laterales.