Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Business

Crea un robot de comercio de algoritmos: Conceptos básicos para escribir un asesor experto en MQL4

Read Time: 24 mins

Spanish (Español) translation by Esther (you can also view the original English article)

Los mercados financieros mundiales te ofrecen un enorme potencial de ganancias y pérdidas. Siempre hay un potencial de ganancias en el mercado, ya que puede colocar operaciones en cualquier dirección. Independientemente de que tu postura sea alcista o bajista, la posibilidad de que el trader gane dinero siempre está presente, al igual que la posibilidad de sufrir pérdidas.

Con demasiada frecuencia, las emociones, las trampas psicológicas de la mente y la disciplina mental se interponen en el camino de los beneficios y son las principales razones por las que el 95% (o más) de todos los nuevos operadores pierden todo su capital de inversión en el primer mes.

El uso de un robot de comercio de algoritmos Expert Advisor en Meta Trader escrito en el lenguaje MQL4 es una forma de acceder al mercado a través del código, eliminando así las emociones y trabajando solo con los números y la lógica de tu programa.

Sacar las emociones de la ecuación es una medida, pero esto no significa que los robots no puedan perder. De hecho, incluso los grandes bancos de inversión han tenido que desconectar sus robots de trading antes de que la pérdida fuera fatal. En 2013, Goldman Sachs tuvo graves fallos en sus algoritmos de trading que costaron 100 millones de dólares.

Antes de continuar con esta guía e incluso contemplar el uso de tu dinero real y duramente ganado, debes saber que puedes perder todo el depósito en tu cuenta de corredor de tu código (y tal vez en el peor de los casos más con algunos corredores si se aplican cargos adicionales)

Tú eres el responsable último de las operaciones, aunque el código del programa las coloque por ti. Aunque la pérdida es una posibilidad, también puedes multiplicar la cuenta y hacerla crecer exponencialmente mientras duermes.

Si te gusta funcionar completamente en piloto automático, esto podría lograrse sin ninguna interacción en absoluto. Podrías ganar dinero literalmente de forma pasiva mientras sigues con tu vida cotidiana.

Esta estrategia de comercio totalmente libre no es una que yo promueva, ni es una que yo utilice y haya encontrado rentable en absoluto. Supervisar un robot activo y las operaciones actuales, junto con mantener un ojo en el calendario económico y los eventos, es muy diferente de dejarlo libre y esperar lo mejor. Las victorias pueden ser épicas, pero las pérdidas no atendidas son mucho más grandes.

Instalación de MQL4

Por favor, descarga MT4 desde tu sitio web e instálalo en tu máquina.

Una vez que MT4 esté funcionando, necesitarás una cuenta con un agente de bolsa que soporte MT4. Ellos podrán darte tus credenciales de acceso a MT4.

Todos los corredores ofrecen una cuenta de demostración, y se te recomienda utilizar siempre la cuenta de demostración para escribir y probar tu software.

Una vez que hayas configurado MT4 en tu escritorio, podemos continuar con la creación de nuestro propio robot de comercio de algoritmos Expert Advisor.

Cómo escribir un robot

Hay muchos lenguajes que serían adecuados para escribir un algoritmo de comercio desde cero, pero las complicaciones que encontrarás son, de hecho, con la API de acceso directo al mercado que te proporcionará tu corredor de bolsa, que es como realmente te permitirá colocar las órdenes de comercio en los mercados financieros.

El procesamiento de los datos del mercado podría lograrse en una plétora de lenguajes, y probablemente en una medida más rápida que el MQL4 de MT4 puede ejecutar pruebas retrospectivas (las pruebas retrospectivas son una forma de probar tu robot de algoritmo; más sobre esto más adelante). Por razones de facilidad de funcionalidad y apoyo general para el software financiero, recomiendo encarecidamente el uso de MQL4 (MetaQuotes Language 4), el lenguaje nativo de MetaTrader 4, para escribir tu robot de comercio de algoritmos.

Sintaxis de MQL4

MQL4 es similar en su forma a PHP, C, C++ o VBScript. A continuación se muestra un ejemplo de una función que se llamará en cada tick de los datos del mercado:

Aquí comprobamos si se han cargado suficientes datos de mercado con Bares < 100. MQL4 establece variables predefinidas como Bars (que contiene el número de barras cargadas en el gráfico).

Adicionalmente, verificamos con una o || condicional para IsTradeAllowed(). Esta es una función de comprobación para verificar que el contexto de negociación no está actualmente ocupado.

Los elementos de MQL4 como estas variables predefinidas y las funciones de operación de gráficos como Symbol() hacen que escribir tu estrategia sea un paseo, y para mí son la razón por la que es realmente preferible codificar robots de comercio de algoritmos en MQL4 sobre otros lenguajes.

Te recomiendo que eches un vistazo a la Referencia MQL4 siempre que tengas tiempo para adquirir más confianza en el uso de MQL4 para satisfacer aún más tus necesidades.

Editar el código MQL4 en el MetaEditor

Recomiendo utilizar el MetaEditor IDE incorporado que viene con la plataforma de comercio MT4. Para entrar en el editor, basta con hacer clic derecho en un asesor experto existente en el panel del navegador de la izquierda y selecciona modificar en el menú.

The MT4 Trading Terminal and Strategy TesterThe MT4 Trading Terminal and Strategy TesterThe MT4 Trading Terminal and Strategy Tester

A continuación se abrirá el MetaEditor de MT4 y podrás crear un nuevo archivo. Esto ofrece al usuario el resaltado de sintaxis y la salida de depuración.

Importante: Tendrás que compilar tus archivos mq4 en asesores expertos ex4 utilizando el MetaEditor si estás editando en un editor externo. Así que familiarizarse con el MetaEditor es una necesidad.

Nuestro algoritmo

Para nuestra estrategia, comenzaremos utilizando una base de soporte y resistencia del indicador SMA (Smoothed Moving Average). La SMA puede predecir una señal de entrada/salida alcista o bajista. La media móvil suavizada nos ayuda a eliminar el ruido del mercado, dándonos una visión más clara de la dirección de la acción del precio

Uptrend support and downtrend resistanceUptrend support and downtrend resistanceUptrend support and downtrend resistance

En una tendencia alcista o bajista, la SMA puede comportarse como un soporte o una resistencia, dependiendo de la orientación. Cuando el precio está subiendo, la SMA se comportará como un suelo de soporte, y cuando el precio está bajando, viceversa como una resistencia/techo.

Base para la entrada

Cuando trazamos dos SMA de diferentes periodos, una de un periodo de 40 y otra de un periodo de 100, podemos ver cómo se cruzan y crean una base de entrada. Como hemos mencionado antes, cuando la SMA está por debajo del precio (menos que el precio de cierre), la consideramos una base de soporte, y cuando la SMA está por encima del precio (mayor que el precio de cierre), la consideramos una línea de resistencia.

Por lo tanto, en el código, primero hacemos lo siguiente para crear un método para comprobar el cruce de entradas para determinar posteriormente nuestra base de entrada:

Ahora podemos calcular nuestro SMA utilizando el método del indicador técnico iMA proporcionado por MQL4 y ejecutarlo a través de nuestra función CheckForCross para ver si ha habido un cruce como este:

Aquí estamos utilizando el MODE_SMMA para que nos devuelva la Media Móvil Suavizada del método del indicador técnico iMA para el método de suavización que hayamos elegido.

Si quieres utilizar otro método de suavizado, hay varias opciones como Simple, Exponencial y Lineal ponderado.

Al igual que con todos los soportes y resistencias, la metodología de comercio estándar funciona aquí: ¡comprar soportes y vender resistencias!

Así que, para nuestro algoritmo, vamos a hacer precisamente eso. Cuando hay un cruce en cualquier dirección, vamos a aplicar la dirección apropiada de comercio y entrar en el mercado.

Aquí comprobamos el retorno de la función CheckForCross que definimos anteriormente, después de cargarla con nuestras dos SMAs definidas por el indicador técnico iMA.

Utilizamos OrderSend, que es proporcionado por MQL4, para abrir la operación. Como mejor práctica, el resultado se almacena en la variable ticket y más tarde se comprueba si el valor de retorno es positivo para poder manejar cualquier error que pueda haber sido reportado desde el lado del corredor.

Bases para la salida

Al igual que la base de entrada (excepto en el caso inverso), cuando la SMA crea un cruce de muerte, podemos utilizar esta señal para el cierre de nuestra operación, si es que hay alguna abierta. La lógica para esto se escribiría así:

Aquí introducimos un bucle for para iterar sobre todas las órdenes abiertas, aunque actualmente solo operaremos una operación a la vez, esto nos permite ampliar en el futuro y tener múltiples operaciones abiertas si lo consideramos necesario.

Esto también facilita el uso del método OrderSelect, ya que podemos utilizar la variable cnt de nuestro bucle for.

Una vez dentro de la iteración, simplemente miramos el OrderType actual (comprobando si se trata de una orden Buy OP_BUY o Sell OP_SELL) y luego aplicamos la lógica condicional del retorno de nuestro método CheckForCross.

Añadir la gestión del dinero

En este momento, nuestro algoritmo es sencillo, con una base para la entrada y salida de las operaciones, pero sigue siendo peligrosamente estúpido en lo que respecta a la gestión de los fondos. Para mantener el riesgo bajo cierto control, solo colocaremos una quinta parte del capital negociable en cada operación, por lo que ahora tenemos que tenerlo en cuenta en nuestro algoritmo.

Esto significa que si tienes 10.000 dólares en la cuenta, solo operamos con una quinta parte a la vez (2.000 dólares), por lo que el script solo colocará una operación con un lote de menor tamaño de 0,1 o 0,2, por ejemplo, basándose en este cálculo de una quinta parte.

Utilizamos AccountFreeMargin y NormalizeDouble para generar este tamaño de lote, y si se calcula por debajo del tamaño de lote mínimo de 0,1, lo fijaremos en 0,1.

A medida que la cuenta crece (¡o se reduce!), la exposición solo se fijará en una quinta parte del capital de la cuenta. Esto significa que la sobreexposición de una cantidad fija (por ejemplo, operar con un lote fijo específico en una cuenta de cualquier tamaño) teóricamente no puede ocurrir, ergo el riesgo de llamada de margen por exceso de operaciones se elimina o se reduce en gran medida.

La llamada al margen es un riesgo muy real si el mercado se mueve en contra de ti drásticamente antes de regresar debido a un pico/fluctuación mientras no estás cerca para depositar más fondos.

En términos sencillos, el tamaño del lote de la operación será calculado dinámicamente por nuestro script para cumplir con el tamaño de la equidad. Así que el potencial de ganancias cada vez más grandes es muy real.

Nota: Una buena característica podría ser proporcionar un parámetro para limitar el conjunto negociable. Por ejemplo, si quieres negociar solo con 1.000 dólares de tu cuenta, independientemente del margen disponible, podrías establecer el disponible negociable a solo 1.000 dólares en lugar de todo el tamaño de tu cuenta.

Personalmente, siempre utilizo este tipo de características cuando pongo en marcha nuevos scripts con el fin de reducir mi exposición al riesgo, hasta que esté realmente seguro de que el script está funcionando con la suficiente solidez como para que se le permitan más fondos.

Programáticamente, esto requiere un parámetro y un ligero cambio en el ejemplo de código anterior para comprobar esa variable en lugar del valor de AccountFreeMargin().

Descanso

Además, intentaremos llevar a cabo algunas situaciones de equilibrio, lo que significa que si el mercado ha cambiado en nuestra contra para crear una pérdida sustancial desde la apertura, buscamos salir con una pérdida mínima y al menos alcanzar el equilibrio para conservar nuestro capital.

Esto se puede conseguir vigilando la pérdida de nuestra operación y la relación con el precio de apertura. Si la dirección cambia y nuestra operación queda fuera del dinero, podemos intentar cerrar la operación lo más cerca posible del precio de entrada:

Lo anterior utiliza OrderModify para intentar establecer el stop loss al precio de apertura de la orden. Se trata de un método rudimentario pero sencillo para asegurar que salimos cuando el precio vuelve a nuestro precio de entrada. Solo se aplica cuando el beneficio actual no realizado está en pérdidas.

Añadir un margen de beneficio

Se podría añadir un margen para el punto de equilibrio simplemente añadiendo al método OrderOpenPrice así:

Para este ejemplo, permitimos 10 puntos de diferencia en nuestra entrada al cierre a través del límite de parada.

Nota: La dirección de la operación debe comprobarse para este método, es decir, si debe sumarse o restarse del precio de entrada según se trate de una posición de compra o de venta.

Otra forma de asegurar que nuestras ganancias no se pierdan es utilizar un trailing stop, que será discutido en detalle en otra guía.

El script completo

Aquí está el listado completo de nuestro asesor experto. Tenemos varios parámetros disponibles a nuestra disposición como el nivel de take profit, stop loss, y los períodos de SMA.

Por favor, siéntete libre de jugar con los parámetros para ver qué es lo que mejor funciona para tu situación de trading y afina tu algoritmo.

Recuerda: los resultados pasados no son en absoluto indicativos del futuro.

Probándolo

Preparing to test out our applicationsPreparing to test out our applicationsPreparing to test out our applications

Podemos probar los datos de mercado de días, meses o incluso años anteriores de un instrumento financiero con facilidad en el entorno MT4 (Meta Trader 4). Sin embargo, se recomienda a los operadores que no confíen solamente en las pruebas retrospectivas, sino que las utilicen como guía para dirigir su estrategia de comercio y ver la eficacia de una idea.

Las pruebas retrospectivas permiten a los operadores comprobar si sus ideas son válidas, por así decirlo, antes de comprometerse con más esfuerzo y avanzar en la escritura del código de su algoritmo.

¿Dónde colocar los archivos de expertos?

Si has estado utilizando un editor de texto externo para escribir tu asesor, tendrás que cargar tu asesor experto en la plataforma de trading MT4 para compilarlo y comprobar los errores. Simplemente añada el archivo .mq4 a su instalación de MetaTrader en el directorio de expertos, por ejemplo /MetaTrader4/MQL4/Experts.

El Asesor Experto estará entonces disponible dentro de tu software MT4 desde el menú del Navegador en el lado izquierdo bajo la sección de expertos.

Nota: Asegúrate de que estás probando en una cuenta demo. Una cuenta real operará con dinero real, y aunque las ganancias serán reales, también lo serán las pérdidas.

Pruebas de espalda

The results from a backtest show you how well you algorithm performedThe results from a backtest show you how well you algorithm performedThe results from a backtest show you how well you algorithm performed

Si has probado una estrategia en el último año del cable (GBP/USD) y has comprobado que el ratio de beneficios es superior a 1 (lo que significa que has ganado dinero), entonces podrías estar ante algo bueno.

Que esto funcione en el mundo real es otra cuestión, y es por lo que las pruebas de avance son igualmente importantes, al igual que las pruebas de puntuación Z. Ese es un tema mucho más avanzado para el aprendizaje automático de tu algoritmo, que no se tratará aquí, sino en posteriores guías más avanzadas.

Cómo iniciar una prueba de espalda

Utiliza el atajo de teclado Control-R para abrir el Probador de Estrategias o selecciónalo en el menú Ver. El panel del comprobador se abrirá en la parte inferior de tu ventana.

Desde aquí, puedes seleccionar el algoritmo a ejecutar en el primer menú desplegable, así que elige el nombre de archivo del Asesor Experto que has creado aquí. A continuación, puedes elegir el símbolo (instrumento financiero). Yo voy a hacer la prueba en el símbolo forex GBPUSD del par libra esterlina-dólar americano.

También podemos seleccionar la resolución del periodo de tiempo que se va a ejecutar (periodo de 15 minutos, periodo de 1 hora, periodo de 1 día, etc.). Yo voy a utilizar la configuración de 30 minutos.

Por último, tenemos una opción para modelar en cada tick, puntos de control o solo precios abiertos. Cuando escribas tu script, puedes optar por el de Precios Abiertos solamente, ya que ejecutará rápidamente tu prueba, aunque los resultados no valdrán la pena para apostar dinero real todavía.

Para ello, cuando se busca una prueba real antes de pasar a las pruebas de avance, se recomienda ejecutar en Every Tick. ¡Esto tomará mucho más tiempo para procesar! (Puede dejarlo corriendo en una VPN de MT4 en línea o por supuesto durante la noche en tu máquina local si lo deseas).

Modificación de los parámetros

Establecemos un par de parámetros (PeriodOne y PeriodTwo) para nuestro asesor experto para que los periodos de tiempo de las dos medias móviles puedan ser modificados.

Se puede acceder a ellas a través del Probador de Estrategias haciendo clic en el botón Propiedades del Experto y viendo la pestaña de entrada.

Aquí se puede dar un valor numérico a cada parámetro; los valores por defecto son PeriodOne = 40 y PeriodTwo = 100.

Pruebas de avance

Una vez que hayas probado con los datos históricos, puedes empezar a probar con el mercado en vivo, ya que habrás visto si tus ideas han resistido la tormenta de la prueba retrospectiva, y (con suerte) habrás encontrado algo de confianza en lo que crees que es una estrategia ganadora.

En el mercado en vivo, puedes encontrarte con que tu estrategia se cae de golpe debido a elementos que no habías tenido en cuenta en tus pruebas previas. Recuerda que el mercado siempre tiene razón. Tu código nunca es más inteligente que el mercado, y no existe la suerte en el comercio.

Una prueba de avance es realmente la prueba de fuego para ver si la estrategia será rentable para que pongas dinero real en ella.

La prueba de avance suele realizarse mejor en una VPN dedicada para los EA (Asesores Expertos) de MT4, que la mayoría de los corredores de divisas suelen proporcionar de forma gratuita. El script se ejecutará 24/5 mientras el mercado está abierto, y serás capaz de supervisar las operaciones en vivo iniciando sesión en la cuenta desde un terminal, ya que se ejecutará en tu dispositivo móvil a través de la aplicación MT4-o máquina de escritorio a través del software MT4.

Alta Volatilidad

Lo que puede ser un verdadero asesino para nuestros scripts es la alta volatilidad en el mercado, que puede ocurrir por muchos factores externos.

Por ejemplo, cualquier choque o choque relámpago, una guerra, unas elecciones, una subida de los tipos de interés, el rendimiento de los bonos o un informe económico importante como el IPC, el PIB o los cambios en el sistema fiscal van a provocar grandes cambios en toda la economía mundial y en sus numerosos mercados financieros. Así que también, indirectamente, tu operación en un par de divisas o en un valor puede verse afectada por los acontecimientos de otro país, que quizá no hayas previsto en un principio.

Recientemente, el Brexit y, más tarde, la investigación del FBI a Hillary Clinton durante el periodo previo a las elecciones en EE.UU. fueron ejemplos de alta volatilidad en el mercado para cualquier persona que esté interesada en analizarlo más de cerca.

The Brexit vote caused the British Pound to plummet against the DollarThe Brexit vote caused the British Pound to plummet against the DollarThe Brexit vote caused the British Pound to plummet against the Dollar

Tomemos el caso del Brexit. La opinión pública británica parecía creer mayoritariamente que el voto del Brexit sería muy improbable. No fui tan optimista y saqué todas mis libras, ahorrando gran parte de mi patrimonio en el Reino Unido debido a la caída del tipo de cambio.

En cuanto a los demás, me temo que no tuvieron tanta suerte. La cobertura de un voto de permanencia, como algunos de los principales asesores de los bancos habían declarado, habría dado lugar, por supuesto, a la inversa, y a una pérdida de aproximadamente el 15% para los que tienen la libra, mientras esperan que se recupere.

Situaciones como esta son ideales para apagar tu robot de comercio y solo operar fuera de la alta volatilidad del mercado. La codificación de este tipo de resultados va a ser muy difícil de forma automática va en los indicadores principales o de retardo y es mejor negociado después del evento o de forma manual. Las posibilidades de que se produzcan señales falsas o contradictorias son siempre mayores durante los grandes acontecimientos, y un enfoque fundamental manual en lugar de uno técnico puede ser más rentable.

No hay nada de malo en detener tu robot porque estás esperando una crisis. Puede ahorrarte una pérdida, mientras que por otro lado puede hacerte perder una gran victoria. En mi experiencia, las posibilidades de ganar son mucho menores, debido a la pura incertidumbre y a la probabilidad de que se produzca una llamada de margen o de que se alcance el stop loss antes de que la operación pueda progresar debido a picos momentáneos extremos.

Conclusiones

Hemos establecido algunos de los fundamentos de la escritura de un algoritmo de comercio y presentó muchas ideas nuevas. De caminar a través del código. Espero que ahora se pueda ver el funcionamiento interno de un algoritmo en MQL4, y ver cómo un indicador técnico como la media móvil se utiliza para generar una señal de entrada y salida.

En cuanto a la gestión del dinero, hemos revisado la posibilidad de incluir condiciones de equilibrio y el tamaño de lote dinámico para utilizar una quinta parte del capital disponible. Siéntete libre de ajustar estas partes del código a tus deseos de riesgo. Hemos repasado el probador de estrategias de back-testing de MT4 y hemos abierto las puertas a la posibilidad de realizar pruebas hacia delante e incluso pruebas de Z-score en el futuro, todas ellas vitales antes de salir al mercado.

Con más ajustes e investigación, es posible que algún día tenga una experiencia muy rentable en los mercados. ¡Ahora que tienes un buen asesor experto fundacional como una secuencia de comandos de base, puedes empezar a escribir tus propias estrategias en el lenguaje MQL4, y ¡probar si realmente funcionan tan bien como sientes que deben, o como algunos libros de comercio y mentores pueden aludir a!

En el futuro, definitivamente querrás probar más tu algoritmo antes de comprometer dinero real en él. Una vez que te sientas lo suficientemente seguro de que tienes un script que funciona bien, es posible que también quieras unirte a una comunidad para llevar tus ideas más allá y ayudar a la lluvia de ideas, o desmontar otros algoritmos para ver su funcionamiento y cómo podrías incorporarlos a tu estrategia.

Compartir asesores expertos con otros operadores es una gran manera de colaborar y ver cómo otras personas están escribiendo su algoritmo para la plétora de indicadores técnicos por ahí como MACD, RSI, CCI, ADX, Bandas de Bollinger y Ichimoku ... la lista sigue y sigue.

Tal vez en el futuro, si tienes la suficiente confianza, quieras vender tu script a otros, en cuyo caso el mercado de MT4 o en tu propio sitio podrían ser lugares ideales para empezar.

Para hacer más pruebas, te recomiendo que descargues todos los datos de mercado anteriores y los cargues en MT4 para poder hacer una prueba más exhaustiva. Para más información sobre esto, por favor consulta esta guía, y ¡que te diviertas operando!

Descargo de responsabilidad: Este artículo no pretende ser un consejo de inversión o financiero, sino un tutorial técnico para la creación e investigación de software. El código se proporciona únicamente con fines educativos, tal y como está, sin garantía alguna.

Advertisement
Did you find this post useful?
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.