Saltar al contenido

Tu primer robot de trading simple con dwxconnect en Darwinex

    portada

    Antes de crear un robot de trading basado en inteligencia artificial es importante conocer como se realiza un robot simple que conecte con Darwinex y realice operaciones. Así tendremos la base para ir analizando como realizar operativas más avanzadas a solo comprar y vender acciones sin mucho sentido.

    Para hacer esto utilizaremos una librería que nos proporciona Darwinex para conectar Python de forma muy simple y que facilita mucho la vida de los que hacemos código Python para hacer trading algorítmico.

    Vamos a ver como conectar nuestro robot desde principio a fin para tener un robot (algo tonto eso sí) que este haciendo operaciones y que se vea en nuestra cuenta de Darwinex como si fuera un robot de trading operando en real.

    Cuenta demo en Darwinex

    Lo primero que tenéis que hacer es crear vuestra propia cuenta demo de Darwinex, lo que podéis hacer entrando directamente pulsando en la siguiente imagen:

    banner estatico

    Nos tendremos que registrar como lo haríamos en cualquier otra web. Una vez que hemos creado la cuenta ya podemos entrar para crear nuestra cuenta demo. Al entrar en Darwinex la primera vez puede parecer un poco confuso encontrar donde crear una cuenta demo, pero la forma más sencilla es irnos directamente a “Fx & CFDs” y pulsar sobre dicho botón:

    CFDs

    Y luego ir a la parte izquierda donde pone mis cuentas:

    Y le damos al botón de “Mis cuentas” y luego al de “Cuentas Demo”. Desde ahí ya podemos ver la opción de crear nuestra cuenta demo:

    Una vez abierta la cuenta demo y que nos llegue un correo indicando el número de cuenta y la clave nos descargamos el Metatrader de Darwinex desde el mismo menú de “Mis cuentas” y dándole a “Descargar terminal de trading” y donde deberéis escoger entre Metatrader 4 o 5.

    descarga metatrader

    La instalación de Metatrader es sencilla, siguiendo las instrucciones de la pantalla tendréis ya instalado el cliente para hacer las operaciones. En la primera ejecución ya os saldrá la pantalla para que introduzcáis los datos de vuestra cuenta demo de Darwinex, con lo que ya tendréis los datos de Darwinex llegando correctamente a Metatrader y unido a vuestra cuenta de Darwinex.

    Ahora vamos a ver como hacemos el robot en Python.

    Librería dwxconnect

    La forma de instalación de esta librería es mucho más simple de la que vimos en el anterior artículo, simplemente hay que entrar aquí y descargarse el fichero que la versión de Metatrader que corresponda con la que tenemos instalada.

    librerias asesor

    Aunque hay otro fichero de “Test” este no nos interesa así que no lo descargamos.

    Una vez descargado el fichero seleccionado nos vamos a nuestro Metatrader y entramos en la carpeta de datos desde “Archivo“:

    carpetaDeDatos

    En la estructura de fichero que veremos tendremos que entrar en las carpetas “MQL4” y luego en “Experts” y en esa ruta dejar el fichero que hemos descargado anteriormente.

    Acto seguido reiniciamos nuestro Metatrader y ya tendremos que ver nuestro nuevo “Asesor Experto” en el navegador de ficheros.

    Ahora lo que tenemos que hacer es compilar el “Asesor Experto” para ello le damos a “Modificar” haciendo click derecho sobre él.

    En cuanto se nos abra el editor solo tendremos que darle al botón Compilar en la parte superior de la ventana para tener nuestro Asesor Experto listo (y ya podemos también cerrar la ventana del editor)

    Para usar el Asesor Experto en igual que en la anterior forma de conexión, solo hay que arrastrarlo sobre la ventana de datos que queramos utilizar. Al igual que la anterior vez hay que activar las opciones de trading automático como se puede ver en la imagen:

    configurar asesor

    En la pestaña de los parámetros de entrada podemos configurar varias opciones, como el máximo de ordenes que permitiremos o el tamaño máximo de lotes que permitiremos (que veremos más adelante).

    parametros asesor

    Una vez configurado, hay que fijarse que esté el botón AutoTrading activado y que aparezca la cara sonriente en la esquina de la ventana donde queremos hacer el trading algorítmico, como podemos ver en la siguiente imagen.

    autotrading cara

    Estructura de la carpeta del robot

    Después entraremos aquí y nos descargaremos fichero dwx_client.py y aquí y nos descargamos el fichero dwx_client_example.py.

    Después creamos una carpeta donde vamos a alojar nuestro robot, y dentro de ella copiamos el fichero dwx_client_example.py. En esa misma carpeta creamos otra llamada api y dejamos ahí el fichero dwx_client.py.

    La carpeta resultante debería de verse así (donde la carpeta del proyecto se llama robot:

    robot
    ├──── dwx_client_example.py
    └──── api
    	  └──── dwx_client.py

    Ahora vamos a analizar como es la estructura del fichero dwx_client_example.py para ver como funciona.

    dwx_client_example.py

    Si abrimos el fichero “dwx_client_example.py” y nos quedamos con la estructura de la clase principal llamada tick_processor podremos ver lo siguiente:

    class tick_processor():
    	# Clase inicial
    	def __init__(self, MT4_directory_path, 
    					sleep_delay=0.005,			 # 5 ms for time.sleep()
    					max_retry_command_seconds=10,  # retry to send the commend for 10 seconds if not successful. 
    					verbose=True):
    
    	def on_tick(self, symbol, bid, ask):
    		
    	def on_bar_data(self, symbol, time_frame, 
    					time, open_price, high, low, close_price, tick_volume):
    	
    	def on_historic_data(self, symbol, time_frame, data):
    		
    	def on_historic_trades(self):
    
    	def on_message(self, message):
    
    	def on_order_event(self):

    Paso por paso veremos lo que es cada clase:

    • __init__: Método inicial donde se realizan todas las inicializaciones de la clase, como los datos que nos queremos descargar, si hay operaciones realizados, numero de operaciones, etc..
    • on_tick: Método que se llama cada vez que se produce un nuevo movimiento en el mercado y nos da el bid y el ask del momento actual.
    • on_bar_data: Cada vez que una nueva barra sale (ya sea una vela japonesa o de cualquier de los otros métodos de ver la información) nos devuelve los valores típicos como se puede ver en él método.
    • on_historic_data: Esta función es muy útil para llamar a datos históricos para hacer nuestras operaciones. Un buen ejemplo es conseguir una media de 200 para sacar los datos, llamaremos a esta función para que nos devuelva las últimas 200 barras y poder realizar la media que queremos.
    • on_historic_trades: Al llamarla consigue un histórico de las operaciones que se han ejecutado.
    • on_message: Por cada mensaje que sale en Metatrader este método lo captura.

    Resto del robot

    Las líneas que quedan son muy simples:

    MT4_files_dir = 'C:/Program Files (x86)/MT_Darwinex/MQL4/Files/'
    
    processor = tick_processor(MT4_files_dir)
    
    while processor.dwx.ACTIVE:
    	sleep(1)

    La carpeta que hay que poner en esa ruta es la que vemos cuando abrimos la carpeta de datos donde hemos dejado el Asesor Experto, pero en esta caso en vez de la carpeta “Experts” apunta a la carpeta “Files”.

    Luego simplemente hace un bucle infinito para que el robot esté siempre funcionando.

    Ejecutando nuestro primer robot de trading

    Si ejecutamos el robot desde la línea de comandos lo haremos con un simple:

    python dwx_client_example.py

    Y en ese momento veremos como empieza a soltarnos datos similares a esto:

    on_tick: 2022-09-15 16:46:58.120337 EURUSD 1.00027 1.00029
    on_tick: 2022-09-15 16:46:58.130334 GBPUSD 1.14748 1.14753
    on_tick: 2022-09-15 16:46:58.210325 EURUSD 1.00028 1.0003
    on_tick: 2022-09-15 16:46:58.211327 GBPUSD 1.14748 1.14753
    on_tick: 2022-09-15 16:46:59.036252 GBPUSD 1.14749 1.14755
    on_tick: 2022-09-15 16:46:59.209043 GBPUSD 1.14749 1.14754
    on_tick: 2022-09-15 16:46:59.927424 GBPUSD 1.14748 1.14753

    Son los datos que tenemos en el método “on_tick” es decir, los datos de cada tick con el bid y el ask como hemos comentado antes. Pero no vemos que haga ninguna operación, aunque parece que en el robot hay código para que abra aleatoriamente ordenes y las cierre a los pocos segundos.

    La forma de que funcione es poniendo a “True” la variable self.open_test_trades, que como vemos en el código esta a “False” (en la línea 32):

    self.open_test_trades = False

    Y con esto ya tendría que empezar a funcionar nuestro robot de trading haciendo y cerrando órdenes. Cuando el robot abra una orden lo podemos ver en los logs de nuestro robot así:

    INFO | Successfully sent order 209454587: EURUSD, sell, 0.01, 1.00088
    New order:  {'magic': 0, 'symbol': 'EURUSD', 'lots': 0.01, 'type': 'sell', 'open_price': 1.00088, 'open_time': '2022.09.15 20:22:52', 'SL': 0.0, 'TP': 0.0, 'pnl': -0.02, 'commission': -0.05, 'swap': 0.0, 'comment': ''}
    on_order_event. open_orders: 1 open orders

    y cuando la cierre mostrar algo así:

    Order removed:  {'magic': 0, 'symbol': 'EURUSD', 'lots': 0.01, 'type': 'sell', 'open_price': 1.00088, 'open_time': '2022.09.15 20:22:52', 'SL': 0.0, 'TP': 0.0, 'pnl': -0.02, 'commission': -0.05, 'swap': 0.0, 'comment': ''}
    on_tick:INFO  2022-09-15 17:22:59.859054|  on_order_event. open_orders: 0 open ordersSuccessfully closed order: 209454587, EURUSD, 0.01EURUSD

    Y en Metatrader podemos ver las ordenes así:

    operaciones metatrader
    Después de ver estos número ya sabemos que no es mejor robot del mundo, pero es un punto de partida para tener algo funcionando.

    Posibles errores

    Hay algunos errores sencillos que os pueden salir a la hora de ejecutar este robot de trading. Pero los más comunes son:

    ERROR | OPEN_ORDER | Could not open order: trade is not allowed in the expert properties

    Cuando sale este error es que no hemos pulsado el botón de “autotrading” que hemos visto al principio o bien que no se ha activado el check del trading automático en la configuración del “Asesor Experto”.

    Otro error que nos podemos encontrar es este:

    ERROR | OPEN_ORDER_LOTSIZE_TOO_LARGE | Lot size (0.10) larger than MaximumLotSize (0.01).

    Esto es un bloqueo debido a que el “Asesor Experto” tiene un límite de 0.01 lotes por operación. Esto lo podemos resolver de dos formas.

    • En el código: Bajando el tamaño de los lotes que hay predefinido en las líneas que lanzan el trading a 0.01
    • En Metatrader: En la configuración de nuestro “Asesor Experto” subiendo el parámetro “MaximumLotSize” a 0.1 o superior.

    Comprobación en Darwinex

    Las operaciones en Darwinex no se pueden comprobar en tiempo real y tendrás que esperar al día siguiente para ver como salen las estadísticas de tu robot. Pero una vez que tu robot esté funcionando podéis ir a cuentas demo y allí veréis vuestra cuenta (en mi caso la he llamado “puebasAgentes”):

    pruebaAgentes

    Una vez que entréis ya podéis ver los datos de vuestro agente como si fuera real, pero con la ventaja de ser una cuenta demo:

    Robot de trading en Darwinex

    Ahora ya podéis hacer todas las pruebas en vuestros robots como si fueran reales con una cuenta de Darwinex en modo demo y, cuando estéis preparados, pasarlo a real y ser capaz de tener un DARWIN capaz de conseguir una subvención.

    Conclusiones

    Con esto tenemos la base para hacer cualquier tipo de robot de trading con python. El ejemplo es muy tonto y las operaciones que hace son casi siempre perdedoras solo por el spread y que abre y cierra muy rápido, pero sirve para ver como se hacen las operaciones.

    Como se puede ver hacer un robot de trading completamente programado por nosotros cada día es más fácil gracias a las librerías publicas que ya nos hacen el trabajo sucio. Nosotros ya solo tenemos que dedicarnos a hacer unas estrategias efectivas.

    Con este artículo y con el de las librerías esenciales de trading, ya tenemos todo lo necesario para poder hacer la operativa en tiempo real tal y como la hacen muchas herramientas de creación de robots de trading, pero con la ventaja de que nosotros tenemos totalmente el control de todo lo que pasa mediante código.

    También os invito a jugar con el código y lo adaptándolo a vuestro gusto, bajando datos de otras divisas, cambiando temporalidades, añadiendo vuestra estrategia, etc. Seguro que disfrutáis mucho haciendo vuestro propio robot de trading algorítmico.

    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.

    Etiquetas:

    2 comentarios en «Tu primer robot de trading simple con dwxconnect en Darwinex»

    1. Hola que tal.
      Estoy intentando hacer un bot usando el lenguaje Python y el framework Flask.
      Básicamente lo que tiene que hacer el bot es recibir las alertas de Tradingview, via webhook, y ejecutar ordenes en el broker Darwinex, usando Metatrader 5.
      Estaría encantado si alguien me pudiera ayudar me haria un gran favor, porque estoy un poco liado sobretodo con la parte de Darwinex. Muchas gracias y un saludo.

      1. Hola Alberto,
        El lugar donde puedes conseguir la ayuda es la comunidad Discord que he creado (https://www.garcia-ferreira.es/comunidad-discord/). Allí estamos mucha gente que te puede echar una mano (yo entre ellos) junto con gente muy buena que ya tiene Darwins funcionando, así que imagínate lo que te pueden ayudar. Y eso que todavía esta empezando.
        Entra y pon tus dudas y seguro que te podemos ayudar.
        Un saludo.

    Deja una respuesta

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