Instalación y uso de CCXT

Este artículo es una traducción al español del manual de instalación de la librería de CCXT.

Introducción

La librería CCXT se utiliza para la conexión e intercambio de criptomonedas y el procesamiento de pagos alrededor del mundo. Ofrece un acceso rápido a la información de mercado para su almacenamiento, análisis y visualización.

                Está pensada para ser utilizada por desarrolladores, analistas financieros para el desarrollo de algoritmos de intercambio.

Lista de características:

  • Soporte de una gran cantidad de intercambios de criptomonedas.
  • APIs públicas y privadas completamente implementadas.
  • Información normalizada sobre intercambios y arbitraje.
  • Una API unificada fácil de integrar.
  • Funciona en Node 7.6+, Python 2, PHP 5.4+ y navegadores web.

Intercambios de criptomonedas certificados

       logo        id nombre ver doc certificado
Binance binance Binance * API
Bitfinex bitfinex Bitfinex 1 API
Bittrex bittrex Bittrex 1.1 API
Coss.io coss COSS 1 API
Kraken kraken Kraken 0 API
KuCoin kucoin KuCoin 2 API
TheOcean theocean The Ocean 1 API
UPbit upbit Upbit 1 API

Mercados de criptomonedas soportados

La librería CCXT soporta actualmente las siguientes 134 APIs:

       logo        id nombre ver doc certificado
1BTCXE _1btcxe 1BTCXE * API
Acx acx ACX 2 API
AllCoin allcoin Allcoin 1 API
ANXPro anxpro ANXPro * API
Anybits anybits Anybits * API
BCEX bcex BCEX 1 API
Bequant bequant Bequant 2 API
Bibox bibox Bibox 1 API
BigONE bigone BigONE 2 API
Binance binance Binance * API
Binance Jersey binanceje Binance Jersey * API
Bit2c bit2c Bit2C * API
Bitbank bitbank bitbank 1 API
BitBay bitbay BitBay * API
Bitfinex bitfinex Bitfinex 1 API
Bitfinex2 bitfinex2 Bitfinex 2 API
BitFlyer bitflyer bitFlyer 1 API
BitForex bitforex Bitforex 1 API
Bithumb bithumb Bithumb * API
Bitibu bitibu Bitibu 2 API
Bitkk bitkk bitkk 1 API
Bitlish bitlish Bitlish 1 API
BitMarket bitmarket BitMarket * API
BitMEX bitmex BitMEX 1 API
Bitsane bitsane Bitsane * API
Bitso bitso Bitso 3 API
Bitstamp bitstamp Bitstamp 2 API
Bitstamp1 bitstamp1 Bitstamp 1 API
Bittrex bittrex Bittrex 1.1 API
Bit-Z bitz Bit-Z 2 API
BL3P bl3p BL3P 1 API
BleuTrade bleutrade Bleutrade 2 API
Braziliex braziliex Braziliex * API
BTC-Alpha btcalpha BTC-Alpha 1 API
BTCBox btcbox BtcBox 1 API
BTCChina btcchina BTCChina 1 API
BTCExchange btcexchange BTCExchange * API
BTC Markets btcmarkets BTC Markets * API
BTCTrade.im btctradeim BtcTrade.im * API
BTC Trade UA btctradeua BTC Trade UA * API
BTCTurk btcturk BTCTurk * API
Buda buda Buda 2 API
BX.in.th bxinth BX.in.th * API
C-CEX ccex C-CEX * API
CEX.IO cex CEX.IO * API
CHBTC chbtc CHBTC 1 API
ChileBit chilebit ChileBit 1 API
COBINHOOD cobinhood COBINHOOD 1 API
Coinbase coinbase Coinbase 2 API
Coinbase Prime coinbaseprime Coinbase Prime * API
Coinbase Pro coinbasepro Coinbase Pro * API
Coincheck coincheck coincheck * API
CoinEgg coinegg CoinEgg * API
CoinEx coinex CoinEx 1 API
CoinExchange coinexchange CoinExchange * API
CoinFalcon coinfalcon CoinFalcon 1 API
CoinFloor coinfloor coinfloor * API
Coingi coingi Coingi * API
CoinMarketCap coinmarketcap CoinMarketCap 1 API
CoinMate coinmate CoinMate * API
CoinNest coinnest coinnest * API
CoinOne coinone CoinOne 2 API
CoinSpot coinspot CoinSpot * API
CoinTiger cointiger CoinTiger 1 API
CoolCoin coolcoin CoolCoin * API
Cross coss COSS 1 API
CREX24 crex24 CREX24 2 API
Crypton crypton Crypton 1 API
Cryptopia cryptopia Cryptopia * API
Deribit deribit Deribit 1 API
DSX dsx DSX 2 API
Ethfinex ethfinex Ethfinex 1 API
EXMO exmo EXMO 1 API
EXX exx EXX * API
FCoin fcoin FCoin 2 API
FCoinJP fcoinjp FCoinJP 2 API
FlowBTC flowbtc flowBTC 1 API
FoxBit foxbit FoxBit 1 API
FYB-SE fybse FYB-SE * API
FYB-SG fybsg FYB-SG * API
Gate.io gateio Gate.io 2 API
GDAX gdax GDAX * API
Gemini gemini Gemini 1 API
GetBTC getbtc GetBTC * API
HADAX hadax HADAX 1 API
HitBTC hitbtc HitBTC 1 API
GitBTC2 hitbtc2 HitBTC 2 API
Huobi Pro huobipro Huobi Pro 1 API
Huobi Russia huobiru Huobi Russia 1 API
ICE3X ice3x ICE3X 1 API
Independent Reserve independentreserve Independent Reserve * API
INDODAX indodax INDODAX 1.8 API
ItBit itbit itBit 1 API
jubi.com jubi jubi.com 1 API
KKEX kkex KKEX 2 API
Kraken kraken Kraken 0 API
KuCoin kucoin KuCoin 2 API
Kuna kuna Kuna 2 API
LakeBTC lakebtc LakeBTC 2 API
LBank lbank LBank 1 API
Liqui liqui Liqui 3 API
Liquid liquid Liquid 2 API
LiveCoin livecoin LiveCoin * API
Luno luno luno 1 API
Lykke lykke Lykke 1 API
Mercado Bitcoin mercado Mercado Bitcoin 3 API
MixCoins mixcoins MixCoins 1 API
NegocieCoins negociecoins NegocieCoins 3 API
NovaExchange nova Novaexchange 2 API
OKCoin CNY okcoincny OKCoin CNY 1 API
OKCoin USD okcoinusd OKCoin USD 1 API
OKEX okex OKEX 1 API
Paymium paymium Paymium 1 API
Poloniex poloniex Poloniex * API
QuadrigaCX quadrigacx QuadrigaCX 2 API
RightBTC rightbtc RightBTC * API
SouthXchange southxchange SouthXchange * API
Stronghold stronghold Stronghold 1 API
SurBitcoin surbitcoin SurBitcoin 1 API
The Ocean theocean The Ocean 1 API
TheRockTrading therock TheRockTrading 1 API
TideBit tidebit TideBit 2 API
Tidex tidex Tidex 3 API
UEX uex UEX 1.0.3 API
UPbit upbit Upbit 1 API
UrduBit urdubit UrduBit 1 API
Vaultoro vaultoro Vaultoro 1 API
VBTC vbtc VBTC 1 API
VirWoX virwox VirWoX * API
xBTCe xbtce xBTCe 1 API
YoBit yobit YoBit 3 API
Zaif zaif Zaif 1 API
ZB zb ZB 1 API  

PHP

Necesita de los siguientes módulos instalados en PHP:

  • cURL
  • mbstring (Recomendado el uso de UTF-8)
  • PCRE
  • Iconv
  • Gmp (Esta es una extensión de PHP 7.2+)

Instalación

La forma más fácil de instalar la librería de CCXT es usar el administrador de paquetes:

La librería se puede implementar en un módulo todo en uno con dependencias y requerimientos mínimos:

  • js/ en JavaScript
  • python/ en Python (generado a partir de JS)
  • php/ en PHP (generado a partir de JS)

También puedes clonarlo en el directorio de tu proyecto desde:

git clone https://github.com/ccxt/ccxt.git

JavaScript

NPM

La versión de JavaScript de CCXT funciona en Node y en los navegadores. Necesita ES6 y soporte de asyc/await (Node 7.6.0+). Cuando se compile con Webpack y Babel, asegúrate de que no está excluido en la configuración del build-loder.

npm install ccxt 

var ccxt = require (‘ccxt’)

console.log (ccxt.exchanges)      //muestra todos los intercambios disponibles

Para utilizar con la etiqueta <script>

 

<script type=”text/javascipt” src=”https://unpkg.com/ccxt”></script>

console.log (ccxt.exchanges)      //muestra todos los intercambios disponibles

Python

 

pip install ccxt

import ccxt

print(ccxt.exchanges)    #muestra una lista de todos los intercambios disponibles

La librería soporta el modo asíncrono concurrente con asyncio and async/await en Python 3.5.3+

import ccxt.async_support as ccxt           #enlaza a una versión asíncrona de ccxt

PHP

Necesita de los siguientes módulos instalados en PHP:

  • cURL
  • mbstring (Recomendado el uso de UTF-8)
  • PCRE
  • Iconv
  • Gmp (Esta es una extensión de PHP 7.2+)

Include “ccxt.php”;

Var_dump (ccxtExchange::$exchanges);           //muestra la lista de todos los intercambios

Docker

Se puede instalar CCXT en un contenedor junto con todos los lenguajes y dependencias soportados. Este puede ser útil si quieres contribuir a CCXT.

Utilizando docker-compose (en el repositporio clonado de CCXT):

Docker-compose run –rm ccxt

Utilización

                La librería de CCXT consiste en una parte pública y otra parte privada. Todo el mundo puede utilizar la parte pública inmediatamente al acabar la instalación.

                Las APIs públicas dan acceso a la información de los intercambios sin necesidad de registrarse con una cuenta de usuario o teniendo una clave.

                Las APIs públicas incluyen lo siguiente:

  • Información de mercado.
  • Instrumentos/pares de trading.
  • Ratios de intercambio.
  • Libros de orden.
  • Historial de intercambio.
  • Tickers.
  • OHLC(V).
  • Otros puntos públicos.

                Si se está interesado en el intercambio por medio de claves de las APIs, se necesitará obtener esta a través del sitio web de la casa de intercambio. Normalmente esto deriva en el acceso a través de una cuenta de usuario. Algunos intercambios necesitan de identificación personal y verificación. En este caso el proceso será manual, la librería no creará cuentas ni claves para ti.

                Las APIs privadas permiten lo siguiente:

  • Administrar información personal de la cuenta.
  • Balances de cuenta.
  • Depósitos y retiradas de fiat y crypto.
  • Consultas personales.
  • Obtener el gistorial del libro mayor.
  • Transferencias entre cuentas.
  • Utilizar servicios de mercado.

                Esta librería implementa toda la parte pública y privada de REST APIs para todos los intercambios. Las implementaciones para WebSocket y FIX para Python, JavaScript y PHP están por llegar.

                La librería de CCXT soporta la notación de Camel (preferida por JavaScript) y la notación de guión bajo (preferida para Python y PHP). Todos los métodos pueden llamarse en ambas notaciones.

//ambos métodos funcionan en JavaScript/Python/PHP

exchange.methodName ()

exchange.method_name()

JavaScript

'use strict';
const ccxt = require ('ccxt');

(async function () {
    let kraken    = new ccxt.kraken ()
    let bitfinex  = new ccxt.bitfinex ({ verbose: true })
    let huobi     = new ccxt.huobi ()
    let okcoinusd = new ccxt.okcoinusd ({
        apiKey: 'YOUR_PUBLIC_API_KEY',
        secret: 'YOUR_SECRET_PRIVATE_KEY',
    })

    const exchangeId = 'binance'
        , exchangeClass = ccxt[exchangeId]
        , exchange = new exchangeClass ({
            'apiKey': 'YOUR_API_KEY',
            'secret': 'YOUR_SECRET',
            'timeout': 30000,
            'enableRateLimit': true,
        })

    console.log (kraken.id,    await kraken.loadMarkets ())
    console.log (bitfinex.id,  await bitfinex.loadMarkets  ())
    console.log (huobi.id,     await huobi.loadMarkets ())

    console.log (kraken.id,    await kraken.fetchOrderBook (kraken.symbols[0]))
    console.log (bitfinex.id,  await bitfinex.fetchTicker ('BTC/USD'))
    console.log (huobi.id,     await huobi.fetchTrades ('ETH/CNY'))

    console.log (okcoinusd.id, await okcoinusd.fetchBalance ())

    // sell 1 BTC/USD for market price, sell a bitcoin for dollars immediately
    console.log (okcoinusd.id, await okcoinusd.createMarketSellOrder ('BTC/USD', 1))

    // buy 1 BTC/USD for $2500, you pay $2500 and receive ฿1 when the order is closed
    console.log (okcoinusd.id, await okcoinusd.createLimitBuyOrder ('BTC/USD', 1, 2500.00))

    // pass/redefine custom exchange-specific order params: type, amount, price or whatever
    // use a custom order type
    bitfinex.createLimitSellOrder ('BTC/USD', 1, 10, { 'type': 'trailing-stop' })

}) ();

Python

# coding=utf-8

import ccxt

hitbtc = ccxt.hitbtc({'verbose': True})
bitmex = ccxt.bitmex()
huobi  = ccxt.huobi()
exmo   = ccxt.exmo({
    'apiKey': 'YOUR_PUBLIC_API_KEY',
    'secret': 'YOUR_SECRET_PRIVATE_KEY',
})
kraken = ccxt.kraken({
    'apiKey': 'YOUR_PUBLIC_API_KEY',
    'secret': 'YOUR_SECRET_PRIVATE_KEY',
})

exchange_id = 'binance'
exchange_class = getattr(ccxt, exchange_id)
exchange = exchange_class({
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET',
    'timeout': 30000,
    'enableRateLimit': True,
})

hitbtc_markets = hitbtc.load_markets()

print(hitbtc.id, hitbtc_markets)
print(bitmex.id, bitmex.load_markets())
print(huobi.id, huobi.load_markets())

print(hitbtc.fetch_order_book(hitbtc.symbols[0]))
print(bitmex.fetch_ticker('BTC/USD'))
print(huobi.fetch_trades('LTC/CNY'))

print(exmo.fetch_balance())

# sell one ฿ for market price and receive $ right now
print(exmo.id, exmo.create_market_sell_order('BTC/USD', 1))

# limit buy BTC/EUR, you pay €2500 and receive ฿1  when the order is closed
print(exmo.id, exmo.create_limit_buy_order('BTC/EUR', 1, 2500.00))

# pass/redefine custom exchange-specific order params: type, amount, price, flags, etc...
kraken.create_market_buy_order('BTC/USD', 1, {'trading_agreement': 'agree'})

PHP

include 'ccxt.php';

$poloniex = new ccxtpoloniex ();
$bittrex  = new ccxtbittrex  (array ('verbose' => true));
$quoinex  = new ccxtquoinex   ();
$zaif     = new ccxtzaif     (array (
    'apiKey' => 'YOUR_PUBLIC_API_KEY',
    'secret' => 'YOUR_SECRET_PRIVATE_KEY',
));
$hitbtc   = new ccxthitbtc   (array (
    'apiKey' => 'YOUR_PUBLIC_API_KEY',
    'secret' => 'YOUR_SECRET_PRIVATE_KEY',
));

$exchange_id = 'binance';
$exchange_class = "\ccxt\$exchange_id";
$exchange = new $exchange_class (array (
    'apiKey' => 'YOUR_API_KEY',
    'secret' => 'YOUR_SECRET',
    'timeout' => 30000,
    'enableRateLimit' => true,
));

$poloniex_markets = $poloniex->load_markets ();

var_dump ($poloniex_markets);
var_dump ($bittrex->load_markets ());
var_dump ($quoinex->load_markets ());

var_dump ($poloniex->fetch_order_book ($poloniex->symbols[0]));
var_dump ($bittrex->fetch_trades ('BTC/USD'));
var_dump ($quoinex->fetch_ticker ('ETH/EUR'));
var_dump ($zaif->fetch_ticker ('BTC/JPY'));

var_dump ($zaif->fetch_balance ());

// sell 1 BTC/JPY for market price, you pay ¥ and receive ฿ immediately
var_dump ($zaif->id, $zaif->create_market_sell_order ('BTC/JPY', 1));

// buy BTC/JPY, you receive ฿1 for ¥285000 when the order closes
var_dump ($zaif->id, $zaif->create_limit_buy_order ('BTC/JPY', 1, 285000));

// set a custom user-defined id to your order
$hitbtc->create_order ('BTC/USD', 'limit', 'buy', 1, 3000, array ('clientOrderId' => '123'));
Call Now ButtonLLámanos