Regístrate o inicia sesión para ver el curso gratuito.

Algoritmo de Trading directamente en Python

Buenas,

Actualmente me encuentro en el desarrollo del robot de Scalping, el primero por el que he empezado.

Llevo varios años dedicándome a la programación, sobre todo en Javascript. Digamos que es un lenguaje que te deja mucha libertad para declarar variables: no tiene tipos, una variable puede ser un String y acto seguido cambiarla a un número, a un array… Lo que quieras.
También tiene muchos métodos para trabajar sobre arrays de manera nativa.
También tiene una comunidad tremendamente grande.


Así que desde que empecé con Easylenguage, no me he sentido cómodo y hasta cierto punto me daba pereza continuar porque no tenía ganas de escribir Easylanguage (y el que me conoce sabe que me encanta programar, que no me despego del ordenador 😅).


He estado investigando y he encontrado una librería donde se puede conectar metatrader con Python para realizar la estrategia ahí:


https://www.mql5.com/es/docs/python_metatrader5


Vale que no es Javascript pero todo lo comentado antes también aplica a Python.

Suponiendo que no haya inconvenientes más allá de que tengas que programar algo más más al principio (que no tiene, por ejemplo, funciones de indicadores y hay que buscar una librería externa que los tenga).

Para mi es la clave por estos motivos:

  • Lenguaje muy cómodo por sintaxis. Lo dicho: crear variables del tipo que quieras, objetos, diccionarios, arrays de lo que quieras. Pasarle muchos parámetros de cualquier tipo, incluso objetos, a funciones.
  • Ejemplos de lo que quieras: no te quedarás atascado mucho tiempo nunca, todo lo que quieras hacer ya lo habrá hecho alguien antes.
  • Entorno de desarrollo amigable: editores como VSCode, de Microsoft, son geniales, con muchos plugins que te ayudan mucho. Además, está perfectamente inegrado con github copilot (de Microsoft también, por cierto) una IA basada en el mismo modelo que ChatGPT pero entrenada específicamente para programación. Es de pago pero te acelera muchísimo en el día a día.
  • Control de versiones: para los no programadores, es la forma que tenemos de ir guardando de manera fácil todos los cambios y versiones de los programas. Al no utilizar el entorno de Tradestation, puedes subir el código de todos tus archivos a github (repositorio de código privado) cada vez que quieras ejecutando un comando desde una terminal. Además, te dice los archivos que has cambiado, las líneas específicas pendientes de subir a github, puedes volver a versiones anteriores fácilmente… Yo con Easylanguage tenía que copiar todos los archivos uno a uno, crear un .txt por cada uno, pegar el contenido y después subirlo. Es tedioso y dejé de hacerlo.
  • Es el mismo lenguaje que utilizamos para las redes neuronales. Para cuando llegue al desarrollo de la red neuronal, ya estaré familiarizado con el lenguaje. Además que la integración con el algoritmo será automática.
  • Se ejecuta en cualquier sitio: Si tienes el código en github puedes bajártelo en cualquier PC, hacer los cambios que quieras y subirlos.
  • Y luego este último que va más allá del trading: estás aprendiendo y utilizando un lenguaje que profesionalmente te va a servir. Por muy mal que se me salga el algoritmo, habré mejorado mucho mis habilidades con Python. Easlylanguage "solo" sirve para esto.

Contras que se me ocurren y, de momento, son suposiciones:

  • Puede ser que haya retraso con respecto a tener el algoritmo directamente en MT5.
  • Puede ser que no puedas hacer uso de los optimizadores y algoritmos genéticos que tienen las plataformas como Tradestation o MT5. Si fuera así, tampoco es un drama porque o bien existen librerías en Python para ello o bien no se usa ya que nuestra optimización viene de la red neuronal que implementemos.

¿Vosotros cómo lo veis?

Para mi es clave la experiencia de desarrollo: lenguaje y entorno amigables, infinidad de ejemplos, control de versiones…

Comentarios

  • Manuel
    Manuel 105 puntos

    A los que nos gusta programar tendemos a complicarnos.
    Mi recomendación, aprende MQL5.

    Desarrollar todo el robot en Python te va a llevar mucho tiempo y va a ser más complejo.

    Discrepo en que no hacer uso del simulador de MT5 sea algo sin importancia, ¿piensas desarrollar tu mismo un simulador para hacer backtest? Hay proyectos al respecto, al contrario que con Easylanguage, la comunidad es muy grande y activa, pero te añadirá complejidad innecesaria.

    Por otro lado está la visualización, puedes hacerlo en Python, pero vas a tener que hacerlo muy bien para obtener los resultados del terminal MT5.

    Yo tengo hechos algunos algoritmos en Python, pero son Scripts para pruebas o tareas sencillas.

    La verdad es que yo también me lo planteé, pero después de ver los contras, desistí.

  • "¿piensas desarrollar tu mismo un simulador para hacer backtest?"

    No, por supuesto que no. Distingo entre algoritmos de optimización y el backtest.

    Me refiero a que quizá no se pueden ejecutar los algoritmos de optimización, no que no se pueda hacer backtest.

    Tú has visto que no se pueda hacer backtest en este caso? Yo mirando rápido por Google parece que no es algo que incluya la librería que comento, lo cual no quiere decir que no se pueda de otro modo.

    Quizá leyendo y escribiendo en un archivo de ambos lados... No se.

  • Manuel
    Manuel 105 puntos

    Si podrás hacer backtest , pero no con la librería estándar de mt5.

    Hay algún proyecto pero no he visto ninguno que me de seguridad.

    Tendrás que programarlo, no es imposible, pero creo que puedes tardar bastante .

  • Y qué opina el sensei Luis??! … espero atento sus comentarios!

  • luis
    luis 374 puntos

    La librería que comentas es muy buena para exportar datos de metatrader directamente a python, no la conocía. Gracias por compartirla.

    Por lo general exportamos datos a un txt en el formato que nos parezca (podemos utilizar json, xml o cualquier otro inventado) y luego lo leemos con python y ya ejecutamos lo que tengamos que ejecutar, pero con esta librería para quien trabaje con mt va a simplificarle muchísimo trabajo.