>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Python

Cómo crear un bot de trading en Python sin reinventar la rueda

Cuando un programador decide por primera vez probar el trading algorítmico, todo generalmente comienza creando su propio script. El script solicita velas a través de la API REST, calcula un par de indicadores y envía órdenes. Pasa un mes y el proyecto se convierte en una construcción engorrosa de manejo de errores de red, desincronización de sockets y soluciones improvisadas caóticas para el control de órdenes.

En lugar de escribir todo desde cero, tiene más sentido utilizar un framework ya preparado. El proyecto VeighNa (anteriormente conocido como VN.py) apareció en 2015. Tiene más de 43 mil estrellas en GitHub y el desarrollo activo continúa hasta el día de hoy.

Qué es la plataforma

VeighNa es un framework de código abierto para trading algorítmico en Python. La arquitectura interna está construida alrededor de un motor de eventos. El sistema no necesita ejecutar bucles de espera interminables: reacciona a los ticks entrantes, cambios de estado de órdenes y señales del temporizador del sistema.

El proyecto tiene un enfoque institucional. En China, es utilizado por corredores de futuros, empresas de gestión de activos y fondos de cobertura privados. Esto deja cierta huella en la base de código.

La mayoría de los conectores integrados de fábrica están adaptados para el mercado financiero chino (CTP, XTP, HTS). Sin embargo, existe un adaptador para Interactive Brokers para trabajar con bolsas internacionales. Si el exchange o plataforma de criptomonedas que necesitas no está en la lista, tendrás que escribir tu propio gateway heredando de la clase base Gateway.

Módulos para resolver tareas prácticas

La arquitectura del sistema consiste en tres partes principales: el núcleo, las aplicaciones de trading (apps) y los adaptadores de datos.

Para estrategias, se proporcionan varios motores especializados:

  • CTA Strategy maneja trading de tendencias estándar y contrarias en instrumentos individuales.
  • Spread Trading ayuda a implementar trading de pares y arbitraje espacial.
  • Option Master contiene herramientas para valoración de opciones, construcción de curvas de volatilidad y cálculo de Greeks.
  • Portfolio Strategy se enfoca en estrategias que operan con cestas de activos a la vez.

Entre los detalles agradables está la presencia de interfaces listas para usar para backtesting. Para probar una idea con datos históricos, no necesariamente necesitas abrir Jupyter Notebook. El sistema tiene una interfaz gráfica integrada basada en PyQt, donde puedes ejecutar optimización de parámetros y ver inmediatamente la curva de capital y los gráficos de drawdown.

Para almacenar el historial, se admiten bases de datos relacionales regulares como SQLite y MySQL, así como almacenes columnares especializados como QuestDB y TDengine, optimizados para entrada y salida rápida de series temporales.

Machine Learning en la versión 4.0

La cuarta generación del framework introdujo el módulo vnpy.alpha. Los desarrolladores admiten honestamente que se inspiraron en el proyecto Qlib de Microsoft.

El módulo cierra el ciclo de desarrollo para estrategias de ML:

  • Generación y procesamiento de características basado en el conjunto de expresiones de factores Alpha158.
  • Entrenamiento de modelos de predicción usando LightGBM, Lasso o perceptrón multicapa (MLP).
  • Transición rápida desde el notebook de investigación hasta la ejecución en una cuenta real o simulada.

El repositorio contiene Jupyter notebooks listos para usar con ejemplos, por lo que familiarizarse con la preparación de datos y el pipeline de entrenamiento no será difícil.

Cómo se ve el código

Iniciar una terminal de trading con el conjunto requerido de módulos se puede hacer en literalmente una docena de líneas. En el ejemplo siguiente, ensamblamos una aplicación con conexión de gateway CTP y dos módulos: ejecución de estrategia CTA y prueba histórica.

from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp

from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp


def main():
    qapp = create_qapp()

    event_engine = EventEngine()
    main_engine = MainEngine(event_engine)
    
    main_engine.add_gateway(CtpGateway)
    main_engine.add_app(CtaStrategyApp)
    main_engine.add_app(CtaBacktesterApp)

    main_window = MainWindow(main_engine, event_engine)
    main_window.showMaximized()

    qapp.exec()


if __name__ == "__main__":
    main()

Después de iniciar, se abrirá una ventana de escritorio completa con tablas de órdenes, posiciones, registros y gráficos de velas.

¿Vale la pena usarlo en producción

VeighNa es una plataforma masiva. Si solo necesitas enviar un par de órdenes al mercado spot una vez al día a través de la API REST, el framework te parecerá demasiado complicado.

Sin embargo, la herramienta definitivamente será útil si estás buscando una arquitectura probada en el tiempo para trading orientado a eventos, planeas escribir tus propios conectores, o quieres una terminal de escritorio lista para usar con gestión de riesgos y capacidades de backtesting. Lo principal es estar preparado para el hecho de que parte de la documentación y los comentarios de la comunidad están traducidos del chino a través de un traductor.

Proyectos relacionados