Cómo construyo: lecciones de la creación de mi propio robot de comercio de criptomonedas

Cuando escuché por primera vez sobre las criptomonedas, pensé que era una buena idea, pero no pondría mi dinero en ella. Luego entré en un concurso de negociación de acciones y gané algunos. No revisé la billetera durante seis meses porque ni siquiera sabía cómo usarla.

Pero cuando lo hice, valía cinco cifras en dólares estadounidenses. Entonces, abrí una cuenta de Coinbase y probé cobrar algo. ¡Funcionó! Era real. El error de la criptomoneda me mordió, pero el comercio manual era demasiado lento. Quería encontrar un robot comercial para intercambiar por mí.

Faltaban bots de comercio de criptomonedas de código abierto

Esto fue a fines de 2017, cuando Bitcoin acababa de alcanzar los 20k por primera vez. Había investigado un poco y sabía algunas características que quería.

  • Quería hacer pruebas retrospectivas para poder probar una estrategia comercial con precios históricos de criptomonedas.
  • Quería que usara la biblioteca ccxt porque cubría la mayoría de los intercambios. Si un bot no usó esto, es probable que el desarrollador haya pasado mucho tiempo escribiendo esta funcionalidad en lugar de otras características necesarias. También quería probar el arbitraje, y cuantos más intercambios pudiera conectar, más arbitraje podría hacer.
  • Quería que estuviera en un lenguaje de programación que conociera.

Había algunas otras cosas que estaba buscando, pero después de revisar los repositorios de Github durante horas, me conformé con la lista anterior.

Bifurqué el mejor bot de comercio de criptomonedas que pude encontrar

Un robot comercial suele ser una aplicación completa, no una biblioteca que pueda agregar a un proyecto. Sabía que terminaría bifurcando y modificando un proyecto en algún momento. El proyecto de Github que encajaba a la perfección en ese momento era Titán . Verificó todas las marcas en mi lista, además de que usaba hilos en Python , así que vi que probablemente podría dividir partes de la aplicación para hacerlo más rápido y manejar una carga mayor.

Relacionado: ¿Su aplicación necesita un modelo de predicción o un modelo de inferencia?

El mes siguiente pasó borroso

El mercado de las criptomonedas iba fuerte y quería que esto funcionara. Entonces, trabajé en él con cada minuto libre que tenía y mi lista de funciones para agregar a mi bifurcación, que llamé KryptoBot , creció. Se veía algo como esto:

  • Configuración más simple para poder implementar en múltiples servidores
  • SQL Alchemy para poder usar modelos y fuentes de datos intercambiables
  • Capacidad de arbitraje
  • Modelos de catalizador Engima (mi segunda opción para horquilla)
  • Integración de bot (pensé que podría tener un bot de Telegram para darme señales y podría responder con un intercambio)
  • Agregue ( TA-lib al proyecto para que pueda tener acceso a casi todos los indicadores conocidos por el hombre
  • Distribuya la aplicación de alguna manera

Hice todo esto en un mes mientras trabajaba a tiempo completo. Una de las primeras cosas que hice fue agregar Jupyter al proyecto para poder probar cosas rápidamente e imprimir gráficos de mis estrategias .

Aprendí cómo funcionaban los subprocesos en Python por primera vez, a pesar de que había escrito código en el lenguaje durante aproximadamente una década. También dividí la aplicación en trabajadores que usaban Docker y Celery .

Lo llevé un poco demasiado lejos al final cuando hice que la aplicación iniciara más de 100 back-tests al mismo tiempo con parámetros ligeramente diferentes y luego traté de comparar los resultados para encontrar la mejor estrategia. De alguna manera conocí a mi pareja y perdí la pista de los hilos.

Pero todo lo demás salió bien, aparte de eso. Me sorprendió. Tenía una aplicación que funcionaba, aunque algo irritable. Hizo todo lo que había puesto en mis listas de requisitos y estaba probando algunas estrategias que parecían prometedoras. Incluso hice algunos intercambios en vivo usándolo.

Y gané un millón de dólares …

No. Al final, me di cuenta de que el problema que tenía con mi lanzador de back-test era algo que quería resolver. Necesitaba que funcionara usando algoritmos genéticos para encontrar la mejor estrategia, y necesitaba usar un lenguaje más rápido donde los hilos fueran más fáciles de manejar, como Golang.

Relacionado: El idioma más actual necesita más ingenieros.

Pero definitivamente valió la pena. Lo haría de nuevo, incluso si terminara aquí. Todavía no he empezado con la versión de Golang, pero ahora sé lo que tengo que hacer. Y fue la primera vez que escribí mi propio paquete de Python, usé subprocesos de Python o usé Celery.

Algún día puede que vuelva a hacerlo. Actualmente parece un buen momento para hacerlo. Pero primero, podría volver a mirar a mi alrededor, ver lo que hay, bifurcar otro proyecto que se parezca a lo que quiero y aprender algunas cosas más.

Subscríbete y recibe nuevas noticias

devnow

Autor desde: August 12, 2020

Deje su comentario

EN ES