Mostrando entradas con la etiqueta ethereum. Mostrar todas las entradas
Mostrando entradas con la etiqueta ethereum. Mostrar todas las entradas

domingo, 30 de enero de 2022

Creando un WebSocket en la API de Binance con Python - Día 2

En esta segundo articulo del blog, vamos a crear un WebSocket que conecte con la API de Binance. 

Seguramente tú ya lo sabes, pero en el momento de realizar este ejercicio no tenia claro lo que era un WebSocket, así que si tú ya lo sabes, puedes saltarte este apartado. 

Qué es un WebSocket? 

Un WebSockets es una sesión de comunicación interactiva entre el navegador del usuario y un servidor. Usando esta sesión con la API de Binance, puedo enviar mensajes a un servidor y  recibir respuestas controladas por eventos.

Antes de empezar

Antes de empezar a jugar con el código, recuerda que tienes que importar las librerias de Binance, cargar las claves de la API e iniciar el Cliente. 

# Importar librerias
import binance 
from binance.client import Client

# Cargar claves de variables de OS y crear objeto Cliente
import os
api_key = os.environ.get('binance_api')
api_secret = os.environ.get('binance_secret')
client = Client(api_key, api_secret)
# si quieres usar la API de TESTNET en vez de la del entorno real
client.API_URL = 'https://testnet.binance.vision/api'

En la última línea se usa para acceder a la API de Testnet de Binance en vez de la del entorno real.


Crear un WebSocket para obtener el último precio


El websocket de Binance permite que solo con enviar un comando se cree un canal que reciba el último precio de un token.

Primero vamos a necesitar importar la clase ThreadedSocketManager y la función sleep del modulo de time . 

from time import sleep from binance import ThreadedWebsocketManager
El siguiente paso es crear un diccionario que alojara los datos del último precio e indicará si existe algun problema con el websocket. 
btc_price = {'error':False}
def btc_trade_history(msg):
    ''' define how to process incoming WebSocket messages '''
    if msg['e'] != 'error':
	print(msg['c'])
	btc_price['last'] = msg['c']
	btc_price['bid'] = msg['b']
	btc_price['last'] = msg['a']
	btc_price['error'] = False
    else:
        btc_price['error'] = True

Estamos almacenando algunos elementos en el diccionario para poder acceder a los datos fuera de la funcion btc_trade_history y esta es la manera en que accederermos a los datos del websocket. 

El último paso es crear una función que le indique al socket que hacer cuando reciba la información, para este primer ejemplo tan solo imprimeros el último precio de Bitcoin en pantalla. 

bsm = ThreadedWebsocketManager()
bsm.start()
bsm.start_symbol_ticker_socket(callback=btc_trade_history, symbol='BTCUSDT')

Estamos llamando a la función start_symbol_ticker que tiene una salida similar a la función get_symbol_ticker que vimos en la entrada anterior , pero esta vez recibiremos un flujo de datos del último precio del ticker que hemos escogido (BTCUSDT).



Para parar el canal tienes que usar la función stop().

bsm.stop()

Si quieres escoger otro ticker tan solo tienes que cambiar el parametro symbol . Por ejemplo, si quieres ver el precio de Ethereum en Dolares $ :

bsm.start_symbol_ticker_socket(callback=btc_trade_history, symbol='ETHUSDT')



El WebSocket puede proporcionar multiples datos, si quieres ver el detalle de las opciones y parametros disponibles puedes verlos usando el comando help() o bien consultar la documentación. 

help(ThreadedWebsocketManager)




Y si has seguido leyendo hasta aquí, muchas gracias!


Links:

http://acodigo.blogspot.com/2021/01/python-binance-api.html

https://algotrading101.com/learn/binance-python-api-guide/

https://python-binance.readthedocs.io/en/latest/websockets.html




jueves, 23 de diciembre de 2021

Probando la API de Binance con Python - Día 1

 

Hace mucho tiempo que no escribo en este blog porque despues de lanzar la APP para iPhone y analizar el feedback decidí aparcarlo para dedicar los esfuerzos a otros proyectos.

Ahora que el mundo de las cryptomonedas está en boca de todo el mundo he decidido retomar los proyectos relacionados con las herramientas para trading. El primer paso que he querido dar es el de probar la conexión a la API de un trader, es este caso el de Binance que permite crear una cuenta de prueba para poder "jugar". 

Para empezar, contestaremos a la pregunta de ¿Qué es la API de Binance? 




Una API (Application Programming Interfaces) es una interfaz que permite la comunicación con el servicio a través de un lenguaje de progración. Para este caso Binance tiene una API RESTfil que usa peticiones HTTP a través de Python para enviar y recibir datos. Además tambien tiene un socket web que permite el streaming de datos como el precio o el estatus de la cuenta. 

En esta entrada configuraré un framework para conectar a la API usando la libraria python-binance en un sistema Windows. En una próxima entrada, haré lo mismo para un sistema Mac. 

Preparar el Framework

Para preparar el entorno de trabajo que permita conectarnos a la API de Binance necesitaremos tres cosas: 

  • el cliente de Python
  • el modulo de gestión de paquetes PIP 
  • y la libraria Python-Binance

Para instalar el cliente Python en Windows 10 es tan fácil como buscarlo en la Microsoft Store e instalarlo.



Para obtener PIP, el primer paso es descarcargar el script que lo va a instalar: 

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

Una vez descargado, ejecutamos el script desde Python.

python get-pip.py

Y una vez se complete la instalación, solo queda comprobar que esta correctamente instalado.


El último punto es instalar el 

pip install python-binance

Con estos tres componentes ya tenemos el framework necesario para conectar a la API, el siguiente punto es realizar la conexión y para ello, necesitamos unas claves para autenticarnos. 

Obtener claves de Testnet

Antes de empezar a hacer trading en un entorno real Binance da la opción de testear el codigo en una Testnet: 

https://testnet.binance.vision/



Desde aquí podremos autenticar usando la cuenta de GitHub:




Una vez dentro, veremos disponible la opción de generar unas nuevas claves HMAC_SHA256 para conectar a la API. Tambien es posible registrar unas claves RSA, pero es algo que veremos en otra ocasión. 


Una vez cliquemos en el enlace para generar las claves HMAC SHA256, tan solo tenemos que introducir una descripción que tan solo nos valdrá para identificar las claves en la web:


Nos mostrará las claves y las guardaremos a buen recaudo para poder usarlas en nuestros scripts para autenticar con la API. 

Securizar las claves de la API

Os recomiendo guardar las claves como variables de entorno, de esta manera aunque guardes el código en de tu script en un repositorio Git público o lo compartas con alguien, no corres el riesgo de revelar las claves. Para hacerlo puedes usar estos comandos: 

set binance_api=aqui_tu_clave_api
set binance_secret=aqui_tu_secreto_api

Y puedes probar a importar las variable a Python usando el comando import os de la siguiente manera :


"Hello World!"

Ahora que tenemos el framework preparado y las claves generadas como primera prueba vamos a hacer algunas consultas a la API. 

El primer paso es iniciar un cliente: 

import os # para importar las variables de entorno donde estan las claves
from binance.client import Client # para importar la clase Client

Como en la prueba anterior, cargamos las claves que tenemos en las variables de entorno.

# importar claves
api_key = os.environ.get('binance_api')
api_secret = os.environ.get('binance_secret')

El siguiente paso es crear una objeto de la clase Client usando las claves de la API


client = Client(api_key, api_secret)

Y el último paso es cambiar manualmente la URL para conectar al entorno de Testnet: 
client.API_URL = 'https://testnet.binance.vision/api'
Llegados a este punto podemos empezar a lanzar consultas a la API. 

Lo primero que podemos probar es obtener los balances e información de la cuenta de test: 
# obtener todos los balances e informacion de la cuenta: print(client.get_account())

La siguiente prueba puede ser el balance de una crypto en concreto, para este ejemplo Bitcoin:
print(client.get_asset_balance(asset='BTC'))

Y la última prueba es la de obtener el precio de un token en concreto, por ejemplo Ethereum
# obtener el precio de la API de la Testnet btc_price = client.get_symbol_ticker(symbol="ETHUSDT") # imprimir el resultado print(btc_price)


Y hasta aquí la primera toma de contacto con la API de Binance, el framework para conectarse a la API real es el mismo, la única diferencia es que las claves hay que solicitarlas en la cuenta de Binance que tengamos abierta. Pero eso lo veremos en futuras antreadas. 

Gracias por llegar hasta aquí!


Links

https://algotrading101.com/learn/binance-python-api-guide/

https://phoenixnap.com/kb/install-pip-windows


Instalar Cristal Azul en Raspberry 3

Después de rebuscar por Internet he encontrado varios tutoriales con instrucciones para instalar Kodi con Cristal Azul en una Raspberry Pi 3...