English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Algoritmos que generan ingresos empleando órdenes Trailing Stop

Algoritmos que generan ingresos empleando órdenes Trailing Stop

MetaTrader 5Sistemas comerciales | 25 diciembre 2013, 13:49
2 416 0
Гребенев Вячеслав
Гребенев Вячеслав

Introducción

En el artículo La estrategia de Forex "todo o nada" ya se mostraba uno de los algoritmos que utilizan un entrada aleatoria y una salida cronometrada. Dicho algoritmo no tenía en cuenta los eventos del mercado ni la dirección en la que se debe entrar al mercado. Para el algoritmo, solo era importante la volatilidad del mercado más o menos constante. Básicamente, el algoritmo no generaba ninguna pérdida o beneficio, pero se mostró muy útil para jugar a la lotería.

La idea principal que debemos extraer de dicho artículo es que la duración de una transacción no puede establecerse por un periodo inferior a una hora ni mayor a una semana. Los valores inferiores a una hora generaban una pérdida más rápida debido al margen diferencial, mientras que los valores superiores a una semana prolongaban la lotería durante años.

Comencemos nuestro estudio de los algoritmos con el familiar par de divisas EURUSD y una salida usando la orden Trailing Stop.

 

1. Algoritmo con entrada y salida aleatoria usando Trailing Stop

  1. Entrar al mercado en dirección aleatoria;
  2. Establecer Trailing Stop igual a TS;
  3. Esperar hasta que Trailing Stop comience;
  4. Volver al punto 1 o parar la operación.

Podemos esperar obtener algún beneficio usando este algoritmo ya que la situación del mercado está siendo supervisada por Trailing Stop. Claramente, si el movimiento del precio fue puramente aleatorio, este algoritmo no lograría nada. Pero el movimiento real del precio está lejos de ser caótico y por tanto es posible que obtengamos algún beneficio.

En lugar de adivinar cómo se comportará el algoritmo, vamos a desarrollar y probar un asesor experto. Hasta ahora hemos tratado extensamente cómo establecer una orden Trailing Stop en un programa. En este artículo no vamos a pasar del nivel del algoritmo a la programación, ya que no terminaríamos. Como el asesor experto va a ser desarrollado a efectos de estudio, tomamos como depósito máximo 100.000 USD y como mínimo 0,1. Esto nos permitirá ver más acción antes de la parada.

Supongamos que Trailing Stop sea igual a TS y que todas las demás órdenes límite en este artículo se expresan como porcentaje del tamaño promedio del cuerpo de las cinco últimas velas (alto-bajo) en el gráfico actual. El período que vamos a usar para mostrar el gráfico actual es D1. Podemos tomar cualquier otro número de velas, no necesariamente cinco, ya que esto no va a influir en el razonamiento de forma significativa. Es importante que al elegir la escala de medida no nos basemos ni en la volatilidad actual, ni en la moneda elegida, ni en en el par de divisas.

Para hacer una prueba, establecemos TS=100% en D1. Una vez establecido dicho valor, la duración de una transacción será de un día, aproximadamente. Tal y como se ha mencionado anteriormente, no puede establecerse una duración menor para la transacción y un valor menor para TS debido al margen diferencial. Establecer mayores valores prolongaría el tiempo de ejecución del algoritmo.


Figura 1. Saldo obtenido por el algoritmo con una entrada y una salida aleatoria usando Trailing Stop, donde TS=100

Figura 1. Saldo obtenido por el algoritmo con una entrada y una salida aleatoria usando trailing stop, donde TS=100

 

La Figura 1 sugiere que el algoritmo proporciona beneficios y ahora que el asesor experto ha sido desarrollado podríamos finalizar el artículo aquí, como suele ser el caso.

Sin embargo, después de leer artículos de este tipo surgen tres preguntas que nos dejan muy insatisfechos:

  1. ¿Es el beneficio mostrado el resultado de utilizar los parámetros adecuados para los datos históricos?
  2. ¿Por qué se eligió el par de divisas EURUSD? ¿Qué ocurrirá si usamos otro par de divisas?
  3. ¿Por qué se eligió precisamente esta parte de los datos históricos? Además, el algoritmo tiene una entrada aleatoria y el resultado obtenido bien podría ser de naturaleza aleatoria.

Vamos a responder a estas preguntas una a una.

El algoritmo con un entrada y salida aleatoria tiene solo un parámetro TS elegido según consideraciones meramente generales -pérdida debida a margen diferencial y a la duración de la transacción. No obstante, el algoritmo debería ser optimizado.

Para la optimización vamos a usar casi todos los datos históricos disponibles desde 1990 hasta 2012. Como el algoritmo tiene una entrada aleatoria, vamos a tomar 100 secuencias de entrada distintas para cada valor de TS. De esta forma, vamos a eliminar la aleatoriedad en el algoritmo y evitar que se adapte a los datos históricos.

 

Figura 2. Optimización del valor TS de Trailing Stop para EURUSD, D1 (TS=500 óptimo )

Figura 2. Optimización del valor TS de Trailing Stop para EURUSD, D1 (TS=500 óptimo )

 

La optimización se realizó en el modo de prueba "solo precios de apertura", lo que explica los cálculos inexactos, especialmente para valores TS menores aunque, no obstante, representan correctamente la idea.

Como puede verse en la Figura 2, la optimización no da un máximo claro. Con valores menor de la orden Trailing Stop, donde TS se encuentra en el rango de 50 a 100, se obtienen pérdidas. Además, para valores de TS comprendidos entre 150 y 850, el algoritmo proporciona, de media, beneficio. En los casos en que TS se sitúa en el rango de 900 a 1.500, el algoritmo comienza a dar pérdidas otra vez.

No deben considerarse valores de TS mayores a 1.500. Cuando TS=500, el algoritmo ejecuta cerca de 25 operaciones sobre 22 años, lo que está en el umbral de lo razonable. Como no hemos identificado un máximo claro, vamos a tomar el centro del rango de beneficios de 150 a 850, es decir, TS=500 (130 operaciones sobre 22 años).

Vamos a considerar ahora el saldo obtenido por el algoritmo para pares de divisas distintos. De nuevo, para evitar que se adapte a los datos históricos, no vamos a considerar el saldo de una sola pasada sino, más bien, el saldo medio de 100 pasadas con distintas entradas aleatorias.

 

Figura 3. Saldo obtenido por el algoritmo con entrada y salida aleatoria usando Trailing Stop TS=500 para EURUSD, en promedio sobre 100 entradas aleatorias.

Figura 3. Saldo obtenido por el algoritmo con entrada y salida aleatoria usando Trailing Stop TS=500 para EURUSD, en promedio sobre 100 entradas aleatorias.

 

Figura 4. Saldo obtenido por el algoritmo con entrada y salida aleatoria usando Trailing Stop TS=500 para GBPUSD, en promedio sobre 100 entradas aleatorias.

Figura 4. Saldo obtenido por el algoritmo con entrada y salida aleatoria usando Trailing Stop TS=500 para GBPUSD, en promedio sobre 100 entradas aleatorias.

 

Figura 5. Saldo obtenido por el algoritmo con entrada y salida aleatoria usando Trailing Stop TS=500 para USDJPY, en promedio sobre 100 entradas.

Figura 5. Saldo obtenido por el algoritmo con entrada y salida aleatoria usando Trailing Stop TS=500 para USDJPY, en promedio sobre 100 entradas aleatorias.

 

Los saldos obtenidos por el algoritmo con entrada y salida aleatoria usando Trailing Stop TS=500 para EURUSD, GBPUSD y USDJPY, en promedio sobre 100 entradas aleatorias, se muestran en las Figuras 3 a 5. Los saldos promedio se muestran a lo largo de los ejes Y y el tiempo a lo largo de los ejes X. Veamos con mayor detenimiento los saldos promedio.

Lo primero que cabe señalar para todos los pares de divisas es la presencia de pronunciadas subidas y prolongadas caídas en los precios. Sugiero llamar a los algoritmos que resulten de los balances de estos, algoritmos de tipo "seudo-pérdida". De hecho, si tomamos un período aleatorio de tres meses, lo más probable es que no contenga una subida pronunciada en los precios, y todo lo que veremos será una graciosa, estable y consistente pérdida. Dicho lo cual, esta pérdida será mucho más rápida que una pérdida habitual debido al margen diferencial. Al mismo tiempo, podemos ver que el algoritmo de seudo-pérdida puede ser tanto ganador como perdedor en un período de 20 años.

Segundo. El número de tendencias al alza en los precios para distintos pares de divisas. Por ejemplo, no hay tantas subidas en el gráfico GBPUSD como en el USDJPY. Además, las tendencias al alza no son en absoluto de naturaleza caótica con relación al tiempo. Puede observarse un gran movimiento al alza en 2009 para los tres pares de divisas: EURUSD, GBPUSD y USDJPY. Los gráficos de divisas sugieren que la tendencia al alza de 2009 es consecuencia de la crisis de diciembre de 2008. Por tanto, las tendencias al alza son indicadores de crisis. A partir de ahora, voy a referirme a todos los movimientos al alza usando el término crisis.

Las crisis mostradas en los gráficos de saldos promedio pueden reflejar eventos históricos reales, pero también pueden mostrar los suyos propios, es decir, pueden ser falsos. Tales crisis podrían haber sido observadas en una trayectoria aleatoria idealmente caótica aunque, no obstante, serían falsas. Las crisis nunca estarían en sincronía unas con otras en una trayectoria aleatoria caótica. El número de crisis identificadas en la curva de saldo promedio determina si el movimiento real del precio tiene su origen en una crisis o no.

Tercero. Una vez examinados los saldos y el funcionamiento del algoritmo usando distintas monedas, podemos ir comprendiendo poco a poco como opera el algoritmo. Mientras que el mercado está en silencio, el movimiento del precio es similar a una trayectoria aleatoria caótica, y el algoritmo, de media, pierde debido al margen diferencial. Los períodos de pérdidas constantes se alternan con falsas crisis -movimientos al alza, provocando, de media, pérdidas debidas al margen diferencial.

Como las transacciones en el algoritmo son de muy larga duración, con una duración en torno a dos meses, las pérdidas son muy lentas y pueden obviarse. Cuando se afronta una crisis real, el movimiento del precio deja de ser caótico. Se hace predecible y sigue una tendencia, o bien, con propensión a seguir una tendencia. Un mayor desarrollo de la crisis puede llevar a valores extremos en el precio, diferenciándose claramente de una trayectoria aleatoria caótica.

El algoritmo se comporta en una crisis de la siguiente forma: una vez prevista la dirección de la tendencia, el algoritmo espera el repunte de la crisis acercándose a la orden Trailing Stop y en ese momento se activa una vez se alcanza el pico. Si el algoritmo ha realizado un pronóstico incorrecto con respecto a la dirección de la tendencia, la orden Trailing Stop contribuye al comienzo de la tendencia y el algoritmo invierte la posición con una probabilidad 50/50. De esta forma, el algoritmo gestiona con éxito cerca de tres cuartas partes de todas las crisis reales, que es básicamente como genera ingresos.

Como puede verse, para conseguir beneficios el algoritmo necesita movimientos con tendencia de crisis. Esto tiene relación con el movimiento del precio del par de divisas EURUSD mostrado anteriormente. Mientras que el movimiento del par GBPUSD no sigue tendencia alguna y no está sujeto a crisis. ¿Por qué hay tal diferencia en el comportamiento del precio? Todo lo que sé, a partir de un análisis fundamental, es que todas las guerras comerciales surgen entre Europa y Estados Unidos, mientras que el Reino Unido y Estados Unidos mantienen una amistosa relación. Podemos ver el valor de esta amistad en los gráficos de saldos promedio usando el algoritmo.

El comportamiento del precio también puede determinarse mediante reguladores financieros. La crisis de 2008 se superó con inyecciones financieras que se reflejaron en forma de picos en los gráficos de saldos promedio de casi todos los pares de divisas. Estamos al tanto de la crisis de 2008 gracias a los artículos de prensa de entonces. Los Estados Unidos han adoptado medidas de expansión monetaria en dos ocasiones desde entonces. Dónde, cuándo, en qué dirección y cómo ha sido inyectado el dinero, fue, por alguna razón y como suele ser habitual, una incógnita.

El balance promedio de EURUSD sugiere una crisis en 2010 y a mediados de 2010. ¿Podrían ser esas las dos ocasiones en que se tomaron medidas de expansión monetaria? Los reguladores procuran intervenir en silencio, sin informar al mercado. No siempre es fácil identificar una crisis en el gráfico de precio a simple vista, ya que las subidas o bajadas de precios no siempre indican crisis. El saldo promedio del movimiento del precio sirve como indicador que ayuda a descubrir las crisis. Determinar cuál es la crisis verdadera y cuál es la falsa es algo distinto y complicado.

A continuación vamos a decir algo sobre la estabilidad de los movimientos en los precios. Por ejemplo, el saldo GBPUSD está disminuyendo de forma constante durante 22 años mientras que el saldo EURUSD muestra un crecimiento medianamente constante. El movimiento del par USDJPY tiene muy poca estabilidad. La estabilidad del movimiento del precio es muy importante ya que es la única garantía de rentabilidad del futuro algoritmo. No puede haber ninguna otra garantía de rentabilidad del logaritmo en el análisis técnico.

Por tanto, hemos visto cómo y qué movimientos del precio son usados por el algoritmo para generar beneficio. Es hora de examinar el beneficio. A efectos de estudio, el tamaño de lote usado anteriormente fue de 0,1. Este tamaño de lote no es el óptimo en términos de beneficio. Calculemos el tamaño óptimo del lote. El beneficio aumenta en proporción al tamaño del lote. El riesgo de un stop out (cierre forzado de posiciones) es también proporcional al tamaño del lote. Para el saldo EURUSD, la máxima retirada de 200 USD se observó en 1991.

Si el tamaño del lote hubiera sido de 25, en lugar de 0,1, la reducción habría alcanzado 50.000 USD, o el 50%. En otras palabras, si el tamaño del lote fuera 25, no habríamos podido evitar el stop out. De esta forma, el tamaño óptimo del lote se sitúa en el rango de 0,1 a 25. Puede hacer un cálculo más preciso del tamaño del lote si quiere. Yo tomaré tan solo la media entre 0,1 y 25 y usaré 10 como aproximación. Por tanto, el tamaño de lote óptimo es 10.

El algoritmo obtuvo 1.000 USD usando el tamaño de lote de 0,1 (ver el saldo de EURUSD). Si el lote fuera 10, el algoritmo habría dado un beneficio de 140.000 USD. El depósito fue de 100.000 USD. Por consiguiente, en 22 años nuestro beneficio sería del 140% o un 6% por año. Con los pies en la tierra, no es mucho pero es más que el interés ofrecido por muchos bancos por depósitos mantenidos en moneda extranjera.


Variaciones del algoritmo

El algoritmo del que hablamos con anterioridad mostraba una entrada y una salida aleatoria usando Trailing Stop. Era necesaria una entrada aleatoria para obtener los saldos promedio sin que se adaptaran a los datos históricos. Fue de gran ayuda cuando intentamos analizar y comprender el funcionamiento de las órdenes Trailing Stop. Pero el algoritmo no mostró la misma eficacia al gestionar una crisis y la influencia que las tendencias tienen sobre el movimiento del precio.

Como pudimos ver anteriormente, el algoritmo solo pudo gestionar tres cuartas partes del total de crisis. El desarrollo de un algoritmo que sea capaz de gestionar el comportamiento de los precios en relación a su sensibilidad a las tendencias es una de las tareas generales que comprende el análisis técnico y que no vamos a abordar en este momento. Por ahora, nos vamos a limitar a mejorar el algoritmo con una entrada aleatoria.

Una de las ideas más simples consiste en considerar un algoritmo con una entrada inversa. Vimos anteriormente que cuando tiene lugar una entrada fallida en la tendencia y se activa la orden Trailing Stop el algoritmo puede adivinar la dirección de la tendencia con una probabilidad de 50/50. Pero dejemos de hacer adivinanzas y entremos de lleno en dirección opuesta a la transacción anterior.

2. Algoritmo con una entrada y una salida inversa usando una orden Trailing Stop

  1. Entrar al mercado en dirección opuesta a la transacción anterior. En primer lugar, entramos, digamos, en la dirección de compra.
  2. Establecemos la orden Trailing Stop igual a TS
  3. Esperar hasta que la orden Trailing Stop se inicie
  4. Volver al punto 1 o parar la operación.

El desarrollo de un asesor experto basándonos en el algoritmo es una operación rutinaria. Sin preocuparnos por la optimización del valor de TS, tomamos el valor óptimo de 500 identificado previamente. Si se elige realizar la optimización obtendremos aún TS=500. El depósito es, como antes, 100.000 USD, el tamaño de lote es 0,1 y el período de tiempo es D1.

Figura 6. Saldo obtenido por el algoritmo con una entrada inversa (primera entrada - compra)

Figura 6. Saldo obtenido por el algoritmo con una entrada inversa (primera entrada - compra)

Figura 6. Saldo obtenido por el algoritmo con una entrada inversa (primera entrada - venta)

Figura 6. Saldo obtenido por el algoritmo con una entrada inversa (primera entrada - venta)

Las figuras 5 y 6 muestran los saldos obtenidos por el algoritmo con una entrada inversa. Podemos ver que la dirección de la primera entrada solo importa hasta la primera crisis. Tras la primera crisis los saldos son similares.

Como antes, este es un algoritmo de seudo-pérdida que genera ingresos en tiempos de crisis, especialmente en la crisis de 2008. La disminución de los valores mostrada por el algoritmo con una entrada aleatoria e inversa son prácticamente iguales, pero sin embargo el beneficio generado por el algoritmo de entrada inversa es de 9.000 USD frente a los 1.400 USD de antes. Por tanto, la rentabilidad ya no es del 6%, sino que ahora es 6*9.000/1.400=38% por año. Y un 38% por año no es un rendimiento nada desdeñable de hecho.

El algoritmo con una salida usando Trailing Stop puede mejorarse de varias formas. Podemos usar diferentes entradas para predecir la dirección de la tendencia o utilizar la naturaleza periódica de las crisis para habilitar/deshabilitar el algoritmo en base al análisis fundamental. Y muchas otras cosas. Dejaré esto para los entusiastas a modo de obsequio.

La parte más difícil de estos algoritmos no es el desarrollo ni la optimización de un asesor experto sino, más bien, la obtención de un comportamiento estable del precio a largo plazo (con relación al saldo promedio) desde el punto de vista algorítmico. Y la estabilidad del precio va a ser generosamente recompensada mediante beneficios. La obtención del comportamiento del precio en términos de un determinado algoritmo va a requerir la modificación de los parámetros del algoritmo, lo que comprende un procedimiento distinto y complicado.

Finalmente, no me queda más que aprovechar las pérdidas constantes en los precios GBPUSD mostradas en la figura anterior. Lo más básico que podemos hacer es negociar en dirección opuesta a las transacciones del algoritmo con una entrada y salida aleatoria que utiliza la orden Trailing Stop. Sin embargo, esto no va a ser tan fácil. Una solución mejor sería usar las órdenes Trailing Take o Trailing Profit -no estoy seguro de cuál es la mejor forma de llamarlas.

La orden Trailing Take es, esencialmente, muy similar a Trailing Stop, pero en lugar del nivel Stop Loss, el algoritmo rastrea constantemente el nivel Trail Profit. Si el precio actual se aleja del nivel Take Profit en un valor mayor a TP, el nivel Take Profit se desplaza hacia el precio. El nivel Stop Loss queda sin establecer, es decir, al nivel Stop Out.

Para evitar la repetición del algoritmo de entrada aleatoria voy a plantear inmediatamente el algoritmo con una entrada y salida inversa usando Trailing Take.

3. Algoritmo con una entrada y salida inversa usando Trailing Take

  1. Entrar en dirección opuesta a la transacción anterior;
  2. Establecer Trailing Take igual a TP;
  3. Esperar hasta que Trailing Take se inicie;
  4. Volver al punto 1.

Estamos usando GBPUSD, D1, el depósito es 100.000 USD, el tamaño de lote a efectos de estudio es 0,1, y TP=500.

Figura 7. Saldo obtenido por el algoritmo con una entrada y salida inversa usando Trailing Take. GBPUSD, D1

Figura 7. Saldo obtenido por el algoritmo con una entrada y salida inversa usando Trailing Take. GBPUSD, D1

El algoritmo funciona con movimientos del precio sin crisis y sin tendencia.

El mecanismo de funcionamiento del algoritmo es el siguiente: un movimiento del precio sin tendencia tiende a romper cualquier tendencia y transformarse en un canal horizontal. Si la orden Take Profit se inicia en el canal horizontal, significa que estamos próximos a la pared del canal y deberíamos entrar en dirección opuesta a la anterior negociación, que es exactamente lo que hacemos.

La figura sugiere que la disminución de los valores mostrado por este algoritmo es un poco menor que la que tuvo lugar anteriormente, mientras que el beneficio generado en 19 años usando el tamaño de lote 0,1, a efectos de estudio, es de 7.000 USD. La rentabilidad alcanzada usando el lote óptimo puede estimarse aproximadamente en un 30% por año.

Creo que, como es habitual, voy a terminar este artículo con este gráfico de saldo con una subida muy acentuada. Espero que el par de divisas y los datos históricos utilizados, así como la optimización del algoritmo que hemos visto en este artículo no le hayan dejado profundamente insatisfecho.

Conclusión

En este articulo se han considerado tres algoritmos con entradas aleatorias e inversas en la negociación y salidas usando Trailing Stop. Se ha descrito el comportamiento del precio de EURUSD, USDJPY y GBPUSD en términos del algoritmo con una entrada y salida aleatoria usando Trailing Stop.

Con base en la estabilidad de los movimientos del precio, se ha propuesto el uso de un algoritmo con una salida y una entrada inversa usando Trailing Stop como rentable, con una rentabilidad estimada del 6% por año. De acuerdo con la estabilidad de los movimientos del precio y el conocimiento del funcionamiento del algoritmo de entrada aleatoria, se han propuesto dos algoritmos de entrada inversa que pueden conseguir una rentabilidad del 30% por año. Se han tenido en cuenta los mecanismos de funcionamiento del algoritmo y los códigos de los asesores expertos suministrados.

Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/442

Operaciones de trading en MQL5 - Es fácil Operaciones de trading en MQL5 - Es fácil
Casi todos los operadores llegan al mercado para ganar dinero, pero algunos también disfrutan de ello. Sin embargo, no solo la operativa manual puede proporcionarle una experiencia apasionante. El desarrollo de sistemas de trading automatizados también puede ser fascinante. Crear un robot de trading puede ser tan interesante como leer una buena novela de misterio.
Visualizar una estrategia en el simulador de Meta Trader 5 Visualizar una estrategia en el simulador de Meta Trader 5
Todos conocemos el refrán "mejor verlo una vez que oírlo cien veces". Podemos leer varios libros sobre París o Venecia, pero basándonos solo en nuestra imaginación no podemos vivir la misma experiencia que si diésemos un paseo al atardecer por estas magníficas ciudades. La ventaja de la visualización puede aplicarse fácilmente a cualquier otro aspecto de nuestras vidas, incluso el trabajo en el mercado de valores, por ejemplo, cuando analizamos los gráficos de precios usando indicadores y, por supuesto, visualizando el probador de estrategia. Este artículo describe las características de visualización del simulador de Meta Trader 5.
Uso de los recursos en MQL5 Uso de los recursos en MQL5
Los programas MQL5 no solo automatizan cálculos rutinarios, sino que también pueden crear un entorno gráfico completo. Las funciones para crear controles realmente interactivos son ahora virtualmente tan ricas como las de los lenguajes de programación. Si desea escribir un programa entero e independiente en MQL5, use los recursos disponibles en ellos. Los programas con recursos son más fáciles de mantener y distribuir.
¡Cree su propio robot de trading en 6 pasos! ¡Cree su propio robot de trading en 6 pasos!
Si no sabe como se construyen las clases trade y le asustan las palabras "Programación Orientada a Objetos", este artículo es para usted. De hecho, no necesita conocer más detalles para escribir su propio módulo de señales de trading. Tan solo siga algunas reglas simples. Todo lo demás será realizado por el MQL5 Wizard y podrá disponer de un robot de trading ¡listo para ser usado!