7. La API de Binance y la seguridad de tus claves
Nivel 3: Datos de Mercado y APIs
Además de ccxt, Binance ofrece su propia librería oficial de Python, python-binance, con acceso más directo a funciones específicas de ese exchange en concreto — útil cuando ccxt no cubre algo particular de Binance que necesitas.
Para usarla, hacen falta cuatro pasos. Primero, crear una cuenta en Binance. Segundo, generar una clave de API desde el panel de gestión de API de tu cuenta — esa clave (y su secreto asociado) es, en la práctica, una contraseña que le da a tu código permiso para operar en tu nombre. Tercero, instalar la librería:
pip install python-binanceY cuarto — el paso que más se salta la gente, y el que más caro sale cuando algo falla — proteger esas claves correctamente. La forma correcta NO es escribirlas directamente dentro del código, ni subirlas a un repositorio de GitHub, ni compartirlas por ningún canal que no sea estrictamente privado. Si una clave de API con permisos de trading se filtra, cualquiera que la encuentre puede operar con tu cuenta real.
La práctica estándar es guardarlas como variables de entorno del sistema operativo, fuera del propio código fuente:
# en la terminal, antes de ejecutar tu script (Windows):
# set BINANCE_API_KEY=tu_clave_aqui
# set BINANCE_API_SECRET=tu_secreto_aqui
# en macOS o Linux:
# export BINANCE_API_KEY="tu_clave_aqui"
# export BINANCE_API_SECRET="tu_secreto_aqui"
import os
from binance.client import Client
api_key = os.environ.get("BINANCE_API_KEY")
api_secret = os.environ.get("BINANCE_API_SECRET")
cliente = Client(api_key, api_secret, tld="us")Con esto, el código lee las claves del entorno en el momento de ejecutarse, pero el código en sí — el archivo que podrías compartir, subir a un repositorio o enseñar en un curso — nunca contiene ninguna clave real. Es exactamente la misma lógica que no deberías romper nunca en ningún proyecto real: el código se comparte, los secretos no.
Con el cliente ya conectado, consultar información de mercado es directo:
profundidad = cliente.get_order_book(symbol="BNBBTC") # libro de ordenes
precios = cliente.get_all_tickers() # precio actual de todos los pares
velas = cliente.get_historical_klines("BNBBTC", Client.KLINE_INTERVAL_1MINUTE, "1 day ago UTC")Estas tres llamadas son de solo lectura: no arriesgan capital, así que son un buen punto de partida para familiarizarte con la API antes de tocar cualquier función que coloque órdenes reales.