Curso de programación de criptomonedas con Python - 14. Cómo crear un bot de arbitraje. Diagramas de flujo (parte 2)

in spanish •  last year

El curso ha sido detenido en este capítulo, lo siento pero no explicaré (por ahora) como hacer el bot de arbitraje. Te será fácil entenderlo si estudias los proyectos open source mencionados en el capítulo anterior. Perdona por las molestias.


En la lección anterior vimos una introducción sobre cómo enfocaremos la construcción del bot de arbitraje entre pares de criptomonedas. En este nuevo capítulo vamos a empezar a construirlo, pero primero veremos el funcionamiento general del bot por módulos a través de un diagrama. Con ello aprenderemos lo que es un flujo de ejecución.

Creamos nuestro proyecto

Para empezar vamos a crear un archivo .py en una carpeta. En esa misma carpeta vamos a introducir las envolturas bittrex.py y poloniex.py, como hicimos en proyectos anteriores.

Importamos las librerías que necesitaremos

import ast, json, datetime, time
from bittrex import bittrex
from poloniex import poloniex
from btce import btce

Establecemos nuestras API Keys y API Secret

Para que funcionen las envolturas de bittrex y poloniex debemos añadir nuestra información de cuenta, la clave y contraseña para operar desde las APIs. Ya tratamos esto en una lección anterior.

bittrex = bittrex('Tu APIKEY', 'Tu APISECRET')
poloniex = poloniex('Tu APIKEY', tu APISECRET')

Flujo de ejecución

El flujo de ejecución el camino que sigue nuestro programa a la hora de ejecutarse. Suele representarse gráficamente a través de diagramas de flujo para que sea fácil de comunicar y de leer a simple vista. Para representar el flujo de ejecución se suele seguir unas convenciones, como que las elipses representan módulos o los rectángulos procesos.

En el siguiente esquema vamos a comprender la primera parte del bot de arbitraje. Como es bastante simple, he seguido mi propio sistema de símbolos:

Los cuadrados son las funciones que vamos a crear y las elipses son listas con elementos que van a necesitar nuestras funciones. Resumo cómo funciona, pero quedará más claro a medida que vayamos construyéndolo:

El comparador es la función principal que siempre se irá ejecutando. Lo constituirán 3 bucles for anidados que irán recogiendo la información de la moneda con la que operará en ese ciclo, el precio y cantidad al que se oferta (que será nuestra función compra) y el precio y cantidad al que se demanda en la otra (la función venta).

Configuramos las listas

Vamos a meternos de lleno con el código. Primero vamos a definir las listas de exchanges y criptomonedas con las que vamos a trabajar. Nosotros trabajaremos en este bot para dos exchanges (bittrex y poloniex) y tres mercados (Ethereum, Maidsafe y Steem). Cuando entiendas cómo se construye podrás ampliar monedas y mercados a tu interés.

El código para crearlas será el siguiente:

exc = ["bittrex", "poloniex"]
mon = ['ETH', 'MAID', 'STEEM']

Definiendo las funciones de compra y venta

Nosotros compraremos en un mercado al precio en el que se oferta, es decir, al precio en el que se vende en ese mercado. El arbitraje se basa en esto: vendo y compro a los precios del mercado en diferentes casas de cambio.

Entonces definimos la función de compra y la explico abajo:

def compra(exchange, mercado):
    if exchange == "bittrex":
        precio_compra = bittrex.getorderbook('BTC-' + mercado, 'sell')[0]['Rate']
        cantidad_compra = bittrex.getorderbook('BTC-' + mercado, 'sell')[0]['Quantity']
    elif exchange == "poloniex":
        precio_compra = poloniex.returnOrderBook('BTC_' + mercado)['asks'][0][0]
        cantidad_compra = poloniex.returnOrderBook('BTC_' + mercado)['asks'][0][1]
    compra = {'precio_compra': precio_compra, 'cantidad_compra': cantidad_compra}
    return compra

La función de compra será una función con dos parámetros. Desde el módulo principal consultaremos los parámetros de las listas antes de ejecutarla.
Estableceremos condicionales para ejecutarla para las diferentes exchanges, ya que cada uno tiene una forma de obtener los datos en sus APIs. Para la exchange @bittrex el precio de compra será un dato del libro de órdenes: el precio de la primera venta, la que se vende a menor precio. También extraeremos la cantidad que se está ofertando, pues si es muy baja seguramente no nos conviene operar.Hacemos lo mismo para @poloniex.
Guardamos los datos en un diccionario llamado compra y lo devolvemos.

Hacemos lo mismo para la función de venta, pero a la inversa:

def venta(exchange, mercado):
    if exchange == "bittrex":
        precio_venta = bittrex.getorderbook('BTC-' + mercado, 'buy')[0]['Rate']
        cantidad_venta = bittrex.getorderbook('BTC-' + mercado, 'buy')[0]['Quantity']
    elif exchange == "poloniex":
        precio_venta = poloniex.returnOrderBook('BTC_' + mercado)['bids'][0][0]
        cantidad_venta = poloniex.returnOrderBook('BTC_' + mercado)['bids'][0][1]
    venta = {'precio_venta': precio_venta, 'cantidad_venta': cantidad_venta}
    return venta

Si no entiendes a qué estamos llamando con las variables, vuelve a las lecciones anteriores del curso (están todas al final del post). Si lo has seguido capítulo a capítulo no deberías tener muchos problemas comprendiendo el código.

Y ya tenemos definidos nuestros primeros módulos, los que nos proveerán la información de los mercados. No te preocupes si aún no entiendes al 100% qué estamos haciendo exactamente, en las siguientes partes iremos encajando otras piezas del rompecabezas y todo quedará mucho más claro.

Esto es todo por ahora, nos vemos en la siguiente lección, ¡hasta la próxima!


Índice del curso:

1. Presentación
2. Cómo empezar: llamadas a APIs
3. Envolturas
4. Recopilar datos uno a uno: diccionarios
5. Recopilar datos uno a uno: listas
6. Funciones. Crear un bot informador de STEEM (parte 1/2)
7. Crear un bot informador de STEEM (parte 2/2)
8. Crear un bot recopilador de grandes cantidades de datos (parte 1/5)
9. Crear un bot recopilador de grandes cantidades de datos (parte 2/5)
10. Crear un bot recopilador de grandes cantidades de datos (parte 3/5)
11. Crear un bot recopilador de grandes cantidades de datos (parte 4/5)
12. Bonus: consultar la base de datos que ha creado el bot (parte 5/5)
13. Cómo crear un bot de arbitraje (parte 1)

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!