🔌 APIs & EXCHANGES: Conecta tu Bot al Mundo Real

Binance API, Alpaca API y CCXT — conecta, autentica y opera en exchanges reales

⚡ NIVEL 2 — Módulo Avanzado
🏦 Piénsalo así: Una API de exchange es como el cajero automático del banco. Tú (el bot) presentas tu tarjeta (API Key), ingresas tu PIN (API Secret), y el cajero ejecuta tus instrucciones (órdenes de compra/venta). La diferencia: el cajero bancario tiene rate limits (no puedes retirar millones en un segundo), necesitas permisos específicos (no toda key puede retirar fondos), y toda la comunicación va encriptada (HMAC-SHA256).

📚 Fuentes: Binance API Docs (2024) — api.binance.com/api/v3/ · Alpaca Markets API Docs (2024) · Hilpisch, Y. (2020) — "Python for Algorithmic Trading". O'Reilly.
🟡 Binance (ccxt)
🟦 Alpaca (Acciones)
⚡ WebSocket (Streaming)
🔐 Seguridad API

Conexión & Autenticación

import ccxt

# Inicializar exchange (paper trading: sandbox=True)
exchange = ccxt.binance({
  'apiKey': 'TU_API_KEY',
  'secret': 'TU_SECRET_KEY',
  'sandbox': True, # ← SIEMPRE testnet primero
  'enableRateLimit': True,
})

# Verificar conexión
balance = exchange.fetch_balance()
btc = balance['BTC']['free']
print(f"BTC disponible: {btc}")
▶ Haz clic en Ejecutar para ver el resultado simulado...

Órdenes de Compra/Venta

# Orden de mercado (ejecuta al precio actual)
order = exchange.create_order(
  symbol='BTC/USDT',
  type='market',
  side='buy',
  amount=0.001 # 0.001 BTC ≈ $45
)

# Orden límite (precio específico)
limit_order = exchange.create_order(
  symbol='BTC/USDT',
  type='limit',
  side='buy',
  amount=0.001,
  price=42000 # Solo ejecuta si BTC llega a $42k
)
print(f"Order ID: {order['id']}")
▶ Haz clic en Ejecutar para ver el resultado simulado...

Alpaca — Acciones EE.UU.

import alpaca_trade_api as tradeapi

# Conectar a Alpaca Paper Trading
api = tradeapi.REST(
  'TU_API_KEY',
  'TU_SECRET_KEY',
  base_url='https://paper-api.alpaca.markets'
)

# Balance de la cuenta
account = api.get_account()
print(f"Capital: ${account.portfolio_value}")
print(f"Cash: ${account.cash}")

# Comprar 1 acción de AAPL
order = api.submit_order(
  symbol='AAPL',
  qty=1,
  side='buy',
  type='market',
  time_in_force='gtc'
)
▶ Haz clic en Ejecutar para ver el resultado simulado...

Datos Históricos Alpaca

from alpaca_trade_api.rest import TimeFrame

# Obtener datos OHLCV de los últimos 30 días
bars = api.get_bars(
  'AAPL',
  TimeFrame.Day,
  start="2024-01-01",
  end="2024-12-31",
  limit=252
).df

print(bars[['open','high','low','close','volume']].tail(5))
▶ Haz clic en Ejecutar para ver el resultado simulado...

WebSocket — Datos en Tiempo Real

import websocket, json

# Binance WebSocket para precio en tiempo real
def on_message(ws, message):
  data = json.loads(message)
  price = float(data['p'])
  qty = float(data['q'])
  side = 'BUY' if data['m'] else 'SELL'
  print(f"{side} {qty:.4f} BTC @ ${price:,.2f}")

def on_open(ws):
  print("✅ Conectado al stream de Binance")

socket = "wss://stream.binance.com:9443/ws/btcusdt@trade"
ws = websocket.WebSocketApp(
  socket, on_message=on_message, on_open=on_open
)
ws.run_forever()
▶ Haz clic en Ejecutar para ver el stream simulado...

Manejo Seguro de Keys

# ❌ NUNCA hagas esto (expone las keys en el código)
api_key = "ABCDEF123456"

# ✅ Usa variables de entorno
import os
from dotenv import load_dotenv

load_dotenv() # Lee .env del directorio raíz
api_key = os.environ['BINANCE_API_KEY']
secret = os.environ['BINANCE_SECRET']

# Archivo .env (NUNCA en git, agregar a .gitignore)
# BINANCE_API_KEY=tu_clave_aqui
# BINANCE_SECRET=tu_secreto_aqui
🔴 Reglas de Oro para API Keys:
✅ Usa permisos mínimos (solo "trading", sin "withdrawal")
✅ Whitelist de IPs en el exchange siempre que sea posible
✅ Nunca uses testnet keys en producción y viceversa
✅ Rota las keys cada 90 días
❌ NUNCA subas .env o keys a GitHub
❌ NUNCA compartas keys por Slack/Discord

Endpoints REST más usados

GET/api/v3/ticker/price
Precio actual de cualquier par
GET/api/v3/klines
Datos OHLCV históricos
POST/api/v3/order
Crear nueva orden
DEL/api/v3/order
Cancelar orden pendiente
GET/api/v3/account
Balance y permisos de cuenta
GET/api/v3/openOrders
Órdenes abiertas activas

⚡ Mini-Quiz: APIs (3 preguntas)

🔌 Explora las pestañas para aprender sobre Binance, Alpaca, WebSockets y seguridad de API Keys. Ejecuta los ejemplos de código para ver outputs simulados.