Integrando el API del Exchange Binance con PHP

Saludos a todos, espero se encuentren muy bien. Desde hace unos años he estado incursionando el mundo de las criptomonedas, conociendo, estudiando y probando diferentes tecnológicas relacionadas a la Blockchain y específicamente lo que tiene que ver con las FinTech, no pasó mucho tiempo cuando me dispuse a buscar mayores niveles de automatización de los Exchange de Criptomonedas y es así como termine integrando el API del Exchange Binance con PHP.

integrando-API-Binance-juan-cisneros

Realmente lo que esta ocurriendo en el sector financiero mundial en este momento es impresionante, una verdadera revolución económica y social en todos los niveles. Iniciando por la tecnología Blockchain, Bitcoin, las plataformas de pago descentralizadas, los Smart Contract o contratos inteligentes son apenas aristas de un gran ecosistema de las criptomonedas a nivel mundial que hoy día ya nadie puede ignorar.

¿Qué es un Exchange?

Los Exchange de criptomonedas​, también conocidos como plataformas o mercados de intercambio, son plataformas digitales que permiten intercambiar monedas digitales por dinero fiat y/u otras criptomonedas o mercancías.

Son plataformas centralizadas que ofrecen mecanismos que faciliten la compra y venta de persona a persona mediante sistemas de anuncios, puntuación y depósito de garantía (como es el caso de portales como LocalBitcoins y LocalEthereum) o incluso acudir a un esquema de compra y venta de empresa a persona.

Binance es un Exchange global de criptomonedas que proporciona una plataforma para el comercio de más de 100 criptomonedas. Desde principios de 2018, Binance es considerado el mayor intercambio de criptomonedas en el mundo en términos de volumen de operaciones.

Automatización del API del Exchange Binance con PHP

En estos momentos estoy trabajando en un proyecto con un equipo de traders de criptomonedas, los cuales son unos genios en el área, han ideado un algoritmo para «alertar» sobre las compras y ventas en el mercado de las criptomonedas y vez de tener caídas abruptas de las inversiones, «planear» o «surfear la caída» de forma controlada o como dicen también «caer con estilo». Esto se logra a través del análisis de datos en tiempo real tomando ciertos indicadores directo del Exchange Binance y de esta manera he ido Integrando el API del Exchange Binance con PHP para ofrecer a los traders mejores herramientas para hacerlos mas productivos.

integrando-API-Binance-juan-cisneros
Binance API

He usado una implementación genial del API de Binance para PHP , el cual es una versión bastante completa del Public Rest API de Binance . Como ustedes saben cada lenguaje de programación ha ido desarrollando sus propias implementaciones del API de Binance usando las bondades que ofrece cada lenguaje de programación, por ejemplo Python, Javascript, Java, Ruby entre otros.

La librería del API de Binance para PHP se auto define como:

Un proyecto diseñado para ayudarte a crear tus propios proyectos que interactúan con la API de Binance. Puede transmitir datos de gráficos de velas, profundidad del mercado o usar otras funciones avanzadas, como establecer paradas de pérdidas y órdenes de iceberg. Este proyecto busca tener una cobertura completa de API incluyendo WebSockets.

API de Binance PHP

Por lo general las implementaciones de los API que había hecho, buscaban consultar o validar alguna información en una plataforma de interés, por ejemplo autenticar usuarios con Google, publicar alguna información en Twitter o subir vídeos automáticamente a Youtube, para el caso de API de Binance hay que ser cuidadoso con la seguridad del Exchange, ya que estamos hablando de dinero, mucho o poco, pero al final del camino son los fondos de inversión de traders de criptomonedas que lo último que queremos es que estén en riesgo.

La seguridad de un Exchange hoy día está muy por encima de la seguridad de la banca en línea convencional.

Configurando el API del Exchange Binance con PHP

Lo primero que necesitamos para usar el API de Binance, es autorizarlo en el panel principal del Exchange de Binance, donde habilitaremos su uso creando nombre de la aplicación.

API Binance Settting

Luego de creada la aplicación podremos obtener el API PUBLIC KEY Y EL API PRIVATE KEY, las cuales son necesarias para poder conectarnos con el Exchange, estos datos son muy importantes y debes conservarlos con la mayor privacidad y protección, porque son las llaves de conexión de nuestra aplicación con Binance.

Creada el API de la aplicación que tendrá acceso a Binance, podemos colocar algunos parámetros adicionales de seguridad, por ejemplo:

  • Si el API es de solo lectura.
  • SI el API tiene permisos para hacer trading.
  • Si el API permitirá hacer retiros de fondos de la cuenta (riesgoso).
  • Si el API podrá ser acceso desde cualquier IP o si por el contrario solo permitiremos el acceso desde uno o varios servidores de confianza.

Usando el API del Exchange Binance con PHP

Crearemos un archivo PHP sencillo en el cual incluyo la librería PHP Binance API, de esta manera tengo disponible todos los métodos que soporta el API desde la v1 hasta la v3 de Binance, en el cual puedo realizar las siguientes accesiones:

  • Test connectivity – GET /api/v1/ping
  • Check server time – GET /api/v1/time
  • Exchange information – GET /api/v1/exchangeInfo
  • Order book – GET /api/v1/depth
  • Recent trades list – GET /api/v1/trades
  • Old trade lookup (MARKET_DATA) – GET /api/v1/historicalTrades
  • Kline/Candlestick data – GET /api/v1/klines
  • Current average price – GET /api/v3/avgPrice
  • New order (TRADE) – POST /api/v3/order (HMAC SHA256)
  • Query order (USER_DATA) – GET /api/v3/order (HMAC SHA256)
  • Cancel order (TRADE) – DELETE /api/v3/order (HMAC SHA256)
  • Current open orders (USER_DATA) – GET /api/v3/openOrders (HMAC SHA256)
  • All orders (USER_DATA) – GET /api/v3/allOrders (HMAC SHA256)
  • Account information (USER_DATA) -GET /api/v3/account (HMAC SHA256)

Hay muchos más métodos disponibles, prácticamente puedes manejar completamente el Exchange de Binance a través de su API, digamos que estos son los métodos que más he usado durante el desarrollo. A continuación les dejo un ejemplo de su implementación.

<?php
include_once('binance-api/vendor/autoload.php');
// Constructor
$api = new Binance\API($public_key,$secret_key);
$exchangeInfo = $api->exchangeInfo();
print_r($exchangeInfo);

?>

El método exchangeInfo() retorna las reglas y monedas disponibles al día de hoy por el Exchange, esto es muy útil a la hora de poder configurar las operaciones que se pueden hacer en el Exchange, por ejemplo el monto mínimo de operación, la cantidad de decimales que se debe usar para cada moneda, entre otros.

Si deseas crear una orden de compra dentro de Exchange de Binance puedes usar el método buy()

<?php
include_once('binance-api/vendor/autoload.php');
// Constructor
$api = new Binance\API($public_key,$secret_key);

$quantity = 1;
$price = 0.0005;
$exchangeInfo = $api->exchangeInfo();

$minNotional = $price *  $quantity; //price * quantity 

 if ( $quantity >= floatval($exchangeinfo["minQty"] ) ){  echo "<br> Validacion 1: Cumple minQty $quantity >= ".floatval($exchangeinfo["minQty"]); } else { echo "<br> Validacion 1: No Cumple minQty $quantity >= ".floatval($exchangeinfo["minQty"]); }

if ( $quantity <= floatval($exchangeinfo["maxQty"] ) ){  echo "<br> Validacion 2: Cumple maxQty $quantity <= ".floatval($exchangeinfo["maxQty"]); } else { echo "<br> Validacion 2: No Cumple maxQty $quantity <= ".floatval($exchangeinfo["maxQty"]);}

if ( $minNotional >= floatval($exchangeinfo["minNotional"] ) ){  echo "<br> Validacion 3: Cumple minNotional $minNotional >= ".floatval($exchangeinfo["minNotional"]); } else { echo "<br> Validacion 3: No Cumple minNotional $minNotional >= ".floatval($exchangeinfo["minNotional"]);}



$order = $api->buy("BNBBTC", $quantity, $price);
print_r($order);

?>

Puedes revisar el estatus de la orden con el método orderStatus()

<?php
include_once('binance-api/vendor/autoload.php');
// Constructor
$api = new Binance\API($public_key,$secret_key);

$orderid = "7610385";
$orderstatus = $api->orderStatus("BNBBTC", $orderid);
print_r($orderstatus);

?>

Si deseamos ver una lista de las ordenes históricas creadas usamos el método history()

<?php
include_once('binance-api/vendor/autoload.php');
// Constructor
$api = new Binance\API($public_key,$secret_key);

$history = $api->history("BNBBTC");
print_r($history);

?>

Existen muchas ideas que pueden desarrollarse con este API, solo es cuestión que juegues un poco con el y podrás llevar la automatización de tus tareas en el Exchange de Binance de una forma más inteligente y segura.

No dudes en escribir si estás integrando el API del Exchange Binance con PHP.

Deja un comentario