Saltar al contenido

Pon tu modelo de ML en producción con un servidor VPS y Darwinex

    VPS

    Existen muchos artículos sobre como se debe crear modelos de machine learning para que haga trading, pero poco se habla de como poner un modelo en producción usando un servidor VPS. Los tutoriales siempre terminan enseñando como el algoritmo funciona correctamente con el conjunto de validación y ahí nos quedamos.

    Aunque ya vimos como hacer más pruebas con la simulación de montecarlo la mejor forma de probar un modelo es ponerlo una temporada con los datos reales y ver como funciona. Lógicamente, no estoy diciendo de ponerlo directamente en real y que empiece a hacer las operaciones con dinero de verdad, sino hacerlo con una cuenta demo para que veamos como funciona.

    En este caso pondremos nuestro robot de trading en la nube utilizando https://clouding.io/ una plataforma que nos permite tener nuestro propio pc en la nube (en el futuro lo haré con contenedores y sus ventajas) y la conexión con una cuenta demo de Darwinex.

    Nuestro modelo

    Lógicamente para subir un modelo a producción hay que tener un modelo ya creado y entrenado con unos hiperparámetros definidos. Esto como es normal es diferente para cada caso y según como sea vuestro modelo tendréis que meter unos datos u otros.

    También hay que tener en cuenta que se puede guardar de diferentes formas según sea el modelo que has entrenado por ejemplo un modelo entrenado en sklearn se puede guardar así:

    joblib.dump(model, 'mi_modelo.joblib')

    Mientras que modelo creado creado usando redes neuronales se puede guardar por ejemplo usando HDF5:

    model.save('mi_modelo.h5')

    Es importante saber como se ha guardado el modelo para saber como hay que cargarlo, ya que esto sí que diferiere mucho de una forma a otra, y existen muchas formas de guardar el modelo.

    Una vez guardado el modelo ya podemos empezar a pensar como ponerlo en producción.

    Pasar del análisis al robot

    La forma del robot es muy similar a como hemos hecho en el artículo de nuestro primer robot de trading, solo que ahora la “inteligencia” de nuestro robot la va a dar el modelo y no nuestra estrategia como hicimos en ese artículo.

    Imaginemos que tenemos un robot de trading que está haciendo muy buena operativa basándose en las bandas de Bollinger y ya lo tenemos guardado en formato “joblib”. En __init__ de la clase “tick_processor” de la conexión con Darwinex lo cargaremos haciendo lo siguiente:

    # Cargamos el modelo de categorización de velas
    self.loaded_model = joblib.load('robot_bollinger.joblib')

    En el momento que queramos hacer una predicción utilizando este modelo sería:

    acción = self.loaded_model.predict(pd.DataFrame([open, high, low, close,'BBL_5_2.0','BBM_5_2.0', 'BBU_5_2.0']))

    Y con esa acción ya podríamos hacer muestro trading. Simplificando mucho podríamos tener un modelo que simplemente hiciera trading de posiciones en largo y cerrase estas posiciones, con lo cual nuestro código podría ser algo así:

    # Si la acción es compra
    if action == 1:
    	self.dwx.open_order(symbol=symbol, order_type='buy', price=close_price, lots=0.01)
    
    # Si la acción es venta
    if action == 2:
    	self.dwx.close_all_orders()
    
    if action == 0:
    	print("No hacer nada")

    Lo más importante es que hay que pasarle a vuestro modelo exactamente los mismos datos y en la misma forma en la que hicisteis el entrenamiento, sino es imposible que funcione correctamente. Este punto es esencial para que al robot de trading le lleguen los mismo datos con los que he hecho el entrenamiento y produzca las mismas salidas que lo ha hecho durante tanto el entrenamiento como en la validación.

    Otro detalle que tenemos que tener en cuenta es, ¿cuales son nuestras salidas del modelo? Es decir, ¿nuestro robot solo hace operaciones en largo? ¿hace operaciones en corto?, ¿pone stop loss y take profit?, ¿Siempre compra la misma cantidad o es variable?, etc.. Todas estas operaciones las habrá que realizar en nuestro siguiente código y dependiendo de la salida del código tendremos que hacer que esa salida se transforme en código de Darwinex.

    Todos estos detalles tiene que ir en el código de python para que haga bien la conexión de todo el proceso de trading.

    Pequeño test Pre-producción

    Una vez que ya tengais todo esto estaría bien realizar un test pre-producción para saber que tal y como teneis vuestro robot funciona en vuestra máquina. Para ello me vuelvo a remitir al articulo donde explico como poner un robot en funcionamiento y teneís todos los pasos para hacerlo, aunque ahora con nuestro modelo entrenado.

    Una vez que veáis que vuestro robot ya funciona en local es cuando ya podemos empezar a prepararnos para ponerlo en producción. ¡Así que vamos allá!

    ¿Qué vamos a necesitar?

    Para poner un modelo en producción no podemos hacerlo con nuestro PC de casa porque no son ordenadores preparados para ello y además no tienen una serie de características que nos pueden ofrecer los servidores en la nube.

    La forma más sencilla de hacerlo es replicar nuestro entorno de trabajo en servidor VPS, que son las siglas de Servidor virtual privado. Un servidor VPS es un tipo de servidor al que nos podemos conectar y trabajar como si fuera nuestro propio ordenador y poner ahí nuestro robot de trading a funcionar.

    ¿Y por que hacerlo en un servidor y no en tu ordenador? En tu ordenador hay muchas cosas que pueden fallar y hacer que tu operativa sea un desastre, como que se vaya la luz de tu casa cuando tienes una operación abierta o que a proveedor de internet le de por hacer pruebas y te quedes sin internet. Lo que solo sería una molestia en tu día a día puede ser un trauma en tu operativa, así que no conviene arriesgar con esto.

    Tipos de VPS hay muchos y a precios muy variados, pero nosotros no necesitamos un gran servidor, pero lo que si nos interesa son los tiempos de uptime que nos dan.

    Algunos de los más famosos son:

    Nosotros no necesitaremos mucha máquina y el único requisito que vamos a poner es que sea Windows (lo que eleva un poco más el precio) más que nada por evitar complicaciones (la instalación en linux ya la explicaremos en otra entrada del blog). Así que por unos 10 o 20 euros podemos encontrar un servidor que cumpla nuestras espectativas.

    En esta entrada no voy a centrarme en uno solo ya que son todos muy similares y explicaré como hacerlo para que os sirva para cualquier servidor VPS.

    Conectando con el servidor VPS

    Una vez que ya tengamos el servidor VPS os tienen que dar tres cosas para conectaros:

    • Una URL o IP donde está vuestro servidor
    • Usuario
    • Contraseña del usuario.

    Con estos datos ya podemos conectarnos al servidor y empezar configurarlo. Para hacer esto utilizaremos el programa que ya nos viene con Windows “Conexión a escritorio remoto”:

    Conexión a escritorio remoto para el servidor VPS

    Al abrir esta aplicación ya podemos poner nuestros datos, pero hay una opción muy importante que debemos activar. Para acceder a ella tenemos que desplegar las opciones que nos da este programa:

    Mostrar opciones

    Una vez que pulséis sobre “Mostrar opciones” veréis que se despliegan muchas más opciones separadas por pestañas. En ese momento tendréis que ir a “Recursos locales” y luego en la parte de abajo ir a “Más”:

    Recursos locales, mas

    Y ahí se abrirá una nueva ventana en la cual se podrán ver gran parte de vuestros dispositivos para poder hacer que la máquina virtual también los tenga. A nosotros lo que nos interesa es compartir el disco que es donde tenemos nuestro código. Así una vez que nos conectemos a la IP del servidor VPS que nos han dado e introduzcamos el usuario y contraseña, al ir a al explorador de archivos podremos ver nuestro disco duro con todos los datos, entre los que estarán nuestro robot.

    ¿Qué necesitamos para nuestro robot?

    Nuestro lo básico que necesitamos es:

    • Python: Exactamente la misma versión con la que habéis creado el robot.
    • El Metatrader de Darwinex: Para la conexión a los datos.

    La descarga de python la podeis hacer desde la propia web de python y la instalación tan sencilla como siempre (Acordarse de poner la carpeta “bin” de python en el path de windows para poder lanzarla desde línea de comandos).

    La descarga de metatrader desde Darwinex ha cambiado un poco desde la último tutorial que realicé sobre el tema, ahora se encuentra en el menú de “Cuentas de trading”, “Plataformas” y después teneis que darle a “Ver más”:

    Descarga metatrader desde Darwinex

    Una vez que le deis a “Ver más” ya os aparecerá el enlace para poder descargar Metatrader:

    Link metatrader

    Una vez descargado hay que seguir los pasos del tutorial para poner el asesor experto, tal y como expliqué en la entrada del primer robot de trading con dwxconnect.

    Lanzando todo

    Una vez creado ya el ambiente solo nos queda lanzar el script y ver si conecta bien y realiza operaciones. Por ser un poco organizado vamos a repasar qué es lo imprescindible para tener el robot funcionando en el servidor VPS:

    • Metatrader descargado desde Darwinex con la cuenta (empieza con una demo) configurada
    • El asesor experto que nos va a dar la conexión entre python y metatrader.
    • Python en la misma versión que el que hiciste las pruebas
    • El modelo de machine learning (normalmente) en la misma carpeta del robot
    • Tu código con el robot en el cual se encuentra la carga del modelo y toda la lógica de programación

    Una vez que tengamos esto podríamos lanzar nuestro script y todo debería de funcionar sin problemas.

    Futuro

    A partir de ese momento ya podrás empezar a ver tus estadísticas de trading en tu cuenta de Darwinex. Y podrás tener tu propia cuenta demo auditada como si fuera real viendo todos los datos como si tuvieras tu propio Darwin.

    prueba Darwinex

    Y en el momento que decidas pasarla a real el proceso será muy sencillo, y así que tendrás tu propio Darwin con el que podrás dar envidia a los demás.

    Conclusiones

    Como se puede ver no es tan difícil tener un robot de trading en producción. Por unos 10 euros (incluso alguno menos si pillas una oferta) puedes llegar a tener tu infraestructura montada con un servidor VPS y lista para empezar a hacer trading algorítmico más en serio de lo que lo hacías hasta ahora.

    Lógicamente esto es un primer paso, ya que no vas a tener un robot ganador al primer entrenamiento que has realizado. Aquí es donde empieza verdaderamente la labor de programador y de empezar a jugar con el machine learning, pero a estas alturas ya deberías de tener un buen robot funcionando con todo lo que se está mostrando en este blog.

    Como siempre, si tenéis cualquier duda o mejora del artículo no dudéis en poneros en contacto conmigo y os contestaré lo antes posible.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *