Saludos a todos, espero se encuentren bien. Estas fechas han sido una montaña rusa por el tema COVID 19, en lo profesional proyectos suspendidos por la pandemia y nuevos clientes que han llegado por la pandemia, 2 caras de la misma moneda. Yo estoy aprovechando para estudiar y retomar proyectos pendientes, les comparto mis últimos avances integrando el API de Binance y Kucoin con CCXT en Python.
En este caso vamos a usar CCXT, una librería muy buena que facilita la comunicación con varios exchange de criptomonedas, aquí la definición de su sitio web.
CCXT es una librería tanto para JavaScript / Python / PHP diseñada para el comercio electrónico de criptomonedas con soporte para muchos mercados de intercambio (exchange) de Bitcoin / Ether / Altcoin a través de sus API.
Algunas de las características de CCXT destacan:
- Soporte para más de 130 exchange de criptomonedas.
- Soporte para API públicas y privadas.
- Datos normalizados opcionales para análisis de intercambio cruzado y arbitraje.
- API unificada lista para usar extremadamente fácil de integrar
- Soporta los lenguajes de programación Node 7.6+, Python 2 y 3, PHP 5.4+
Instalando la librería CCXT en Python
Lo primero que haremos será instalar librería CCXT para Python 3, usaremos el gestor de paquetes PIP con la siguiente instrucción.
pip3 install ccxt
Al tener instalado este paquete ya podemos empezar a hacer consultas a través del API público de los diferentes exchange, los que estoy usando será Binance y Kucoin, 2 exchange que me parecen bastantes buenos y con los cuales estoy haciendo pruebas para otro proyecto de criptomonedas.
En este punto no requerimos estar registrados en el exchange Binance o Kucoin, tampoco solicitar las API KEY de los exchange para conectarnos, tan solo con esta instrucción podemos empezar a tener comunicación con los exchange.
Integrando el API de Binance y Kucoin con CCXT en Python
A continuación puedes ver la lista de los exchange soportados por CCXT, puedes usar esta sentencia
import ccxt print(ccxt.exchanges)
Puedes consultar la lista de las ordenes de compra (bid) y venta (ask) de Binance usamos esta sentencia
binance = ccxt.binance() orderbook = binance.fetch_order_book('BTC/USDT') print(orderbook)
Para ver la lista de las ordenes de compra (bid) y venta (ask) de Kucoin usamos esta sentencia
kucoin = ccxt.kucoin() orderbook = kucoin.fetch_order_book('BTC/USDT') print(orderbook)
Como se darán cuenta la implementación es igual para ambos exchange, esto ayuda mucho si se quiere usar para proyectos de comunicación entre exchange, como por ejemplo Arbitraje de Criptomonedas
Si queremos por ejemplo autenticarnos con las credenciales API KEY de los exchange, para poder acceder a mas funciones del exchange, como por ejemplo hacer trading o retiros, puedes usar esta sentencia.
exchange_name = 'binance' exchange_class = getattr(ccxt, exchange_name) ccxt_ex = exchange_class({ "apiKey": "", "secret": "", "password": "" }) book = ccxt_ex.fetch_order_book('BTC/USDT')
Para saber por ejemplo el saldo o balance de nuestra cuenta en Binance o Kucoin, debemos estar autenticados usando el método anterior ya que son datos privados. Puedes usar esta sentencia para conocer tu balance.
balance = ccxt_ex.fetch_balance()
Al momento de crear una orden, podemos primero calcular el fee de la transacción, para eso usaremos esta sentencia
ccxt_ex.calculate_fee(symbol, type, side, amount_exchange, price)
Y por ultimo para colocar una orden de tipo MARKET en el exchange podemos usar esta sentencia
params = { 'test': True, # test if it's valid, but don't actually place it } type = 'market' # or 'limit' side = 'buy' # or 'sell' symbol = "USDTBTC" amount_exchange = 0.0025 price = 7000 order = exchange.create_order(symbol, type, side, amount_exchange, price, params)
El parámetro params es opcional y se usa para simular la orden de compra o venta en el exchange, muy util en la fase de pruebas.
Para algunos exchange como Binance, el tema de montar una orden, se debe previamente hacer un tratamiento de los montos, por ejemplo manejar muy bien decimales de los montos de las ordenes, para ello dejo una función que uso para ese propósito.
def qty_order(qty, precio, symbol): if symbol == "USDT": total = qty else: total = qty/precio return "{:.8f}".format(total) def step_size_to_precision(ss): return ss.find('1') - 1 def format_value(val, step_size_str): precision = step_size_to_precision(step_size_str) if precision > 0: return "{:0.0{}f}".format(val, precision) return math.floor(int(val))
Estos son los algunos de los métodos más comunes para interactuar con la librería CCXT de Python, ya otras acciones mas avanzadas pueden consultar la documentación y empezar a hacer pruebas y divertirse un rato.
Si te ha gustado deja un comentario y compártelo.
Muy bueno el articulo, pero soy de PHP, no de python; me he bajado y descargado ccxt en mi servidor y cuando quiero ver un ejemplo de la carpeta PHP siempre me sale un json diciendo los exchange soportados, pero no soy capaz de determinar como pasarle los datos (como deberia hacerlo?). Ejemplo arbitrage-pairs.php el json que me responde es Usage: php -f /var/www/vhosts/localhost/httpdocs/ccxt/examples/php/arbitrage-pairs.php [92mid[0m Supported exchanges: [92macx, aofex, bcex, bequant, bibox, bigone, binance, binanceus, bit2c, bitbank, bitbay, bitcoincom, bitfinex, bitfinex2, bitflyer, bitforex, bitget, bithumb, bitkk, bitmart, bitmax, bitmex, bitpanda, bitso, bitstamp, bitstamp1, bittrex, bitvavo, bitz, bl3p, bleutrade, braziliex, btcalpha, btcbox, btcmarkets, btctradeua, btcturk, buda, bw, bybit, bytetrade, cdax, cex, chilebit, coinbase, coinbaseprime, coinbasepro, coincheck, coinegg, coinex, coinfalcon, coinfloor, coingi, coinmarketcap, coinmate, coinone, coinspot, crex24, currencycom, delta, deribit, digifinex, dsx, eterbase, exmo, exx, fcoin, fcoinjp, flowbtc, foxbit, ftx, gateio, gemini, gopax, hbtc, hitbtc, hollaex, huobijp, huobipro, ice3x, idex, independentreserve, indodax, itbit, kraken, kucoin, kuna, lakebtc, latoken, lbank, liquid, luno, lykke, mercado, mixcoins, novadax, oceanex, okcoin, okex, paymium, phemex, poloniex, probit, qtrade, rightbtc, ripio, southxchange, stex, surbitcoin, therock, tidebit, tidex, timex, upbit, vaultoro, vbtc, vcc, wavesexchange, whitebit, xbtce, xena, yobit, zaif, zb[0m
Lo bueno CCXT es que hay soporte para muchos lenguajes de programación, incluyendo PHP. Solo es cuestión de testear un poco la libreria y verás que es muy intuitivo su uso. No te voy a mentir, tienes que dedicarle para poder ver resultados, ya que no solo es la programación es el conocimiento en el tema cripto.
Muy bueno Juan, gracias. Te consulto, tienes algún bot armado para arbitrar criptos? o que tiene de sentencia es para que arme una posición con ratio de relación y desarme con otro? gracias de nuevo
Saludos Luis,tengo un bot corriendo en este momento corriendo en Python, lo uso para backtesting no está disponible para uso comercial en este momento.
*que tipo de sentencia (perdón)