Algoritmo de autoadaptación (Parte IV): Funcionalidad adicional y pruebas

21 abril 2021, 14:28
Maxim Romanov
0
384

Introducción

Antes de comenzar, le recomendamos que lea el artículo anterior de esta serie: "Algoritmo de autoadaptación (Parte III): Renunciando a la optimización". Esto resulta ahora imprescindible, ya que sin leer el artículo anterior no quedará claro de qué estamos hablando.


Trabajando dentro de las series principales

El comercio se realiza mediante series de posiciones. El capital asignado para abrir una posición en un instrumento comercial se divide en varias partes para hacer que el punto de entrada sea borroso. El algoritmo predice la probabilidad de un viraje en un área determinada, pero no puede determinar exactamente cuándo se invertirá el precio, por consiguiente, para compensar los errores que ocurren al abrir una posición, el volumen se acumula con una serie de posiciones según sea necesario.

En el artículo anterior, mostramos cómo el algoritmo genera una señal para abrir posiciones y simultáneamente analiza varias escalas para determinar la escala máxima de la tendencia. Asimismo, describimos el algoritmo básico de trabajo. Pero el gráfico de la serie de precios no consta de una escala. La tendencia puede tener lugar en varias escalas a la vez, mientras que puede resultar plana en otras escalas. Podemos usar esta característica para obtener beneficios.

Aquí debemos aclarar que entendemos por área de tendencia el segmento donde la probabilidad de continuación de la tendencia es superior al 50%, y por tendencia plana o flat, al contrario, el segmento donde la probabilidad de un cambio de tendencia es superior al 50%. En otras palabras, si el bloque anterior era ascendente, en el área de tendencia el nuevo bloque también aumentará con una probabilidad superior al 50%. En un gráfico plano, por el contrario, tras un bloque ascendente, será más probable que aparezca un bloque descendente. La definición se describe con mayor detalle en el artículo "¿Qué son las tendencias y cómo es la estructura de los mercados: de tendencia o plana?".

trend-flat

Figura 1. Tendencia y flat simultáneos en diferentes escalas 

La figura 1 muestra una tendencia bajista pronunciada en 32 bloques con un tamaño de 0,00061. Pero en 32 bloques de una escala de 0,00131, la tendencia está casi ausente. En la mayoría de los casos, coexisten en el tiempo escalas en las que hay tendencia y escalas en las que hay flat.

El algoritmo siempre inicia el análisis en los bloques más pequeños, pero durante este proceso, el tamaño de los bloques puede crecer sustancialmente. De hecho, puede crecer hasta tal punto que dentro del bloque de mayor escala quepan suficientes bloques del tamaño inicial para que sea posible generar una señal al comienzo de una nueva serie. Mostramos un ejemplo en la figura 2.

inside from block

Figura 2. Movimientos dentro de un bloque de escala mayor

En la figura 2, tomamos uno de los bloques y mostramos lo que ha sucedido en su interior. En los bloques de escala mayor, vemos un bloque ascendente, pero si miramos lo que ha sucedido dentro, podremos ver cómo se desarrollaron los eventos. Y si el algoritmo ha cambiado a una gran escala de trabajo, los procesos que ocurren dentro de los bloques de dicha escala ayudarán a obtener beneficios adicionales que usaremos en el futuro para aumentar la estabilidad del algoritmo.

El trabajo se realiza utilizando series de posiciones conectadas de manera lógica. Pero si la escala de los bloques aumenta considerablemente y la serie iniciada no ha finalizado, será necesario iniciar una nueva serie de posiciones independiente de la anterior, pero también lógicamente conectada con ella. 

Necesitamos ciertos criterios para iniciar una nueva serie con una antigua por concluir. Si comenzamos una nueva serie cuando el tamaño de bloque de la serie principal es superior al valor de umbral, obtendremos un mal resultado. En este caso, el algoritmo no será adaptativo, porque el salto para comenzar una nueva serie se configurará de forma manual. Este enfoque provocará que el algoritmo inicie periódicamente nuevas series en un área de tendencia larga, aumentando la carga sobre el depósito.

long trend

Figura 3. Oscilaciones de menor escala en una gran área de tendencia

La figura 3 muestra un ejemplo de tendencia bajista a largo plazo para GBPUSD en 2008. El retroceso a lo largo de esta tendencia hasta el punto de cierre de una serie de posiciones ocupó 275 días. También existen tendencias más prolongadas. Sería incorrecto si el algoritmo no comerciara todo este tiempo, sino que esperara a que el precio retrocediera para completar la serie de posiciones comenzada anteriormente. La elipse roja indica el área donde no se puede iniciar una nueva serie, y el círculo azul muestra el área dónde las series adicionales generarán beneficios.

Ahora, debemos introducir el concepto de marco temporal básico. En nuestro trabajo, entendemos por marco temporal el tamaño de los bloques. Tomamos los datos iniciales para el análisis del marco temporal estático M1. El marco temporal básico es el marco temporal que el algoritmo usa actualmente para abrir posiciones. El algoritmo comienza a analizar el estado del mercado desde el primer marco temporal y lo incrementa hasta el marco temporal requerido, dependiendo del tamaño del movimiento de la tendencia. Si el tamaño de bloque del primer marco temporal es de 10 puntos, el tamaño de bloque del segundo marco temporal será 10*KTF. Aquí KTF es el factor de multiplicación del tamaño de bloque para obtener los bloques del siguiente marco temporal. Si KTF=1.1, y el tamaño de bloque del primer marco temporal=10, entonces los tamaños de bloque serán los siguientes:

TF1=10 puntos, TF2=10*1.1=11 puntos, TF3=11*1.1=12.1 puntos, etcétera.

La tarea principal es evitar el comienzo de una nueva serie durante un largo movimiento sin retroceso. Si tomamos el ejemplo de la figura 3, tras comenzar la segunda serie a mitad de la tendencia, el algoritmo escaneará todas las escalas e inmediatamente pasará a la escala máxima o se aproximará a ella. En este caso, el tamaño de bloque del marco temporal básico de la segunda serie será aproximadamente igual al tamaño de bloque del marco temporal básico de la primera serie, y esto no tiene sentido.

Para que la señal de comienzo de la segunda serie tenga sentido, será necesario no solo que el tamaño de bloque del marco temporal básico sea superior al umbral, sino también se que forme un movimiento plano de amplitud suficiente en el marco temporal básico de la segunda serie. Hemos desarrollado un mecanismo que se muestra esquemáticamente en la figura 4.

confirmed series

Figura 4. Mecanismo de confirmación del inicio de la segunda serie

Hemos implimentado el mecanismo de la siguiente manera. El comienzo de la segunda serie se hace posible después de que el marco temporal básico de la primera serie haya superado el umbral. Después de este evento, en el primer marco temporal de la segunda serie, comenzará la búsqueda de la preponderancia de bloques descendentes o ascendentes para formar la señal de inicio de la segunda serie. Esto se hace de la misma forma que en la primera serie. Una vez hallada la señal para el inicio de la segunda serie (se ha encontrado un área de tendencia con magnitud suficiente), se deberá confirmar la posibilidad de iniciar la segunda serie. Para hacerlo, necesitamos encontrar un área plana en el marco temporal básico de la segunda serie. Esto es necesario para asegurarnos de que el área de tendencia encontrada forma parte de un área plana y no parte de una gran tendencia usada para comerciar la primera serie.

Si, para iniciar una serie y buscar un movimiento de tendencia, analizamos 10 bloques (como en el ejemplo de la figura 4), entonces nos surgirá la pregunta: ¿cuántos bloques debemos tomar para encontrar un área plana? Si ahora establecemos este número de manera estricta, entonces el algoritmo no será adaptativo, lo cual implica que este número de bloques debería depender de alguna manera de lo que suceda ahora en el mercado.

Para determinar el número de bloques de confirmación de la serie, deberemos establecer el intervalo en el que se realizará la búsqueda del área plana. Dicho intervalo se establecerá mediante dos valores:

  • Bmin  — número mínimo de bloques del intervalo de confirmación de la segunda serie;
  • Bmax  — número máximo de bloques del intervalo de confirmación de la segunda serie;
  • NPb(s2)  — número de bloques preponderantes de la segunda serie;
  • %PV  — porcentaje de los ajustes para determinar el estado plano (flat).

El valor mínimo Bmin se determina muy fácilmente: Bmin=NPb(s2)/(%PV/100).

Para determinar el límite superior del intervalor de Bmax, deberemos calcular cuántos bloques del marco temporal básico de la segunda serie caben en los últimos 2 bloques formados del marco temporal básico de la primera serie y añadir a este valor los bloques del marco temporal básico de la segunda serie para los que aún no se ha formado un bloque grande. Así es como se calcula el límite superior del intervalo Bmax. 

Vamos a analizar el ejemplo de la figura 4. Supongamos que %PV=50, y el número de bloques predominantes es NPb(S2)=9. Entonces Bmin=9/(50/100)=18. El número mínimo de bloques en los que se puede encontrar un flat es 18. Para encontrar Bmax, debemos contar cuántos bloques pequeños hay en los dos últimos grandes; en la figura 4, vemos que son 14 bloques. Luego contamos cuántos bloques pequeños se construyen a la derecha del cierre del último bloque grande, es decir, 5 bloques. A continuación, encontramos la suma 14+5=19. El intervalo obtenido es Bmin=18, Bmax=19. 

Después, en el intervalo de 18 a 19 bloques del marco temporal básico de la segunda serie, buscamos un área de flat. Tomaremos como área de flat aquella en la que el número de bloques descendentes sea igual al número de bloques ascedentes. Podemos ajustar el criterio de área plana en los ajustes, porque el 50% es un intervalo demasiado estrecho. Por ejemplo, podemos establecer un valor de 50-55% y considerar que si los bloques predominantes son del 50% al 55%, entonces esta será un área plana.

Al realizar los cálculos, Bmax puede resultar bastante grande y Bmin también constituye una magnitud flotante. Por ello, para un número de bloques distinto, determinar el área plana usando un porcentaje fijo resulta una solución incorrecta. Sería mejor establecer el valor como probabilidad de entrada en el intervalo y luego recalcularlo como un porcentaje. Para ello, hemos desarrollado el recuadro 1, que mostramos a continuación.

series confirmation table

Recuadro 1. Recuadro para calcular el porcentaje del número de bloques para confirmar la serie.

Supongamos que el criterio para un área plana se establece en el 56,25% de bloques en una dirección para una muestra de 16 bloques. Este porcentaje corresponde al 80,36% de todos los eventos que entran en el intervalo de 2 a 16 bloques verticales. Es decir, en el 80,36% de los casos, en 16 bloques, el proceso superará de 2 a 16 bloques en vertical. Teniendo el recuadro, podemos recalcular el porcentaje de confirmación de la serie para cada número único de bloques, considerando que el porcentaje de confirmación debe ser tal que el 80,36% de todos los eventos entren en el intervalo de amplitud.

Utilizando el recuadro, para cada número de bloques del intervalo Bmin-Bmax, calculamos su porcentaje actual para la confirmación de la serie.

Este mecanismo permite iniciar una nueva serie de posiciones cuando la anterior aún no se ha cerrado, reduciendo sustancialmente el número de situaciones en las que el tamaño de bloque de la segunda serie se vuelve igual al tamaño de bloque de la primera serie, y la segunda serie deja de tener sentido.

Una vez comenzada la segunda serie, esta funciona exactamente igual que la primera, es decir, el algoritmo contiene todos los mecanismos necesarios para monitorear las tendencias y ajustar la escala comercial actual. 

En cuanto comienza la segunda serie, el algoritmo empieza a rastrear el tamaño del bloque de su marco temporal básico, y cuando supera el umbral, la tercera serie se inicia según las condiciones descritas anteriormente. De esta forma, podemos crear tantas series adicionales como sean necesarias

Cómo funciona

Como ejemplo, vamos a analizar la sección del gráfico mostrada en la figura 5. Esta es la misma área que se muestra en la figura 3. Para el algoritmo, esta área resulta complicada, pues se da una larga espera del retroceso para cerrar posiciones.

opening positions

Figura 5. Ejemplo de creación de varias series de forma simultánea

La figura 5 muestra cómo se comporta el algoritmo en una tendencia prolongada. Después de iniciarse la serie principal con posiciones Buy, el tamaño del bloque del marco temporal básico se ha vuelto muy grande, y esto ha permitido que el algoritmo cree la segunda y la tercera serie sin esperar a que se cierre el marco temporal básico. Este enfoque nos permite usar los movimientos de los precios en una escala más pequeña y obtener beneficios adicionales al suavizar las fluctuaciones de los fondos del depósito.

Vamos a analizar 2 área con el mismo precio y valorar la reducción de capital en estos dos momentos temporales. El primer punto será el 13/11/2008 con un precio de 1.45554, las posiciones Buy de la primera serie están abiertas y el precio va en contra de las posiciones abiertas, los fondos son de 8265.16$. Luego, el precio sigue descendiendo y el 10.04.2009 vuelve al nivel 1.45554. Pero ahora los fondos han aumentado en 1677,57$, es decir, 9942,48$. Si el precio se mueve en contra de nuestra posición, no obtendremos una reducción tan grande como podría resultar sin utilizar el mecanismo de serie adicional.

Usando las fluctuaciones en el precio de un activo sucedidas a menor escala, podemos reducir significativamente los riesgos derivados del comercio a gran escala. Al mismo tiempo, el escalado automático nos permite comerciar siempre en la escala actual, mientras que el mecanismo para confirmar una serie adicional supone una función de adaptación a las condiciones actuales.


Compensando las posiciones con pérdidas y los errores de decisión

Los métodos de detección de tendencias y escalado automático funcionan bien, pero no son perfectos. Durante el trabajo, el algoritmo abre a veces posiciones a destiempo. Las posiciones se pueden abrir al comienzo de una tendencia prolongada y se puede producir una pérdida en el punto calculado de cierre de una serie de posiciones. No podemos mover el punto de cierre de la posición, porque se calcula según las características de la serie de precios. Podrá ver cómo se calcula el retroceso de la tendencia y por qué se eligen exactamente esos valores de retroceso en el artículo anterior "Algoritmo de autoadaptación (Parte III): Renunciando a la optimización". Pero podemos calcular las posiciones abiertas erróneamente y corregirlas.

Corrigiendo las posiciones erróneas con la ayuda del beneficio de las series adicionales

Uno de los objetivos del algoritmo de series adicionales es la corrección de posiciones erróneas. En el artículo anterior, mostramos que la amplitud promedio del movimiento del precio aumenta de forma no lineal dependiendo del número de saltos superados y, por ello, la pérdida promedio de una posición abierta erróneamente aumentará de forma no lineal partiendo del número de saltos superados.

average loss

Figura 6. Ley de pérdida creciente a partir del número de saltos superados

La figura 6 muestra una ley aproximada según la cual la pérdida promedio aumenta para una posición abierta. Los parámetros serán ligeramente diferentes para cada instrumento, pero es importante que la forma de la curva se mantenga aproximadamente para poder medir este parámetro. Esta ley permite pronosticar la pérdida promedio de una posición incorrectamente abierta y muestra la posible eficacia del uso de los beneficios de las series adicionales para cerrar posiciones incorrectamente abiertas.

Parte del beneficio obtenido del trabajo de las series adicionales se usará para cerrar las posiciones abiertas por error. Por nuestra parte, hemos hecho posible personalizar este parámetro en la configuración. Parte del beneficio obtenido del trabajo deberá destinarse a mantener la estabilidad del algoritmo. Cuanto mejor funcione el algoritmo, menor será el beneficio que tendremos que invertir en mantener la estabilidad. Ahora usamos el 80% del beneficio de la serie adicional para compensar las posiciones con pérdidas.

Hemos desarrollado un método sencillo para identificar las posiciones erróneas. Si la serie obtiene pérdidas en el punto de cierre calculado, definitivamente contendrá posiciones erróneas. De entre todas las posiciones en esta serie, se localiza la menos rentable y se valora el volumen actual de pérdidas para esta posición. Si esta posición pertenece a la primera serie, el 80% del beneficio obtenido de la segunda serie debería cubrir las pérdidas actuales en esta posición. Si se cumple esta condición, la posición se cerrará. 

A medida que comerciemos, se irá acumulando una reserva de fondos que se usará para compensar las posiciones no rentables. Cuando surja la necesidad, estos fondos se usarán para compensar las pérdidas de una posición abierta; las pérdidas derivadas del cierre de la posición se restarán a esta reserva. Después, el algoritmo sigue acumulando reservas para la próxima compensación. Esto continuará hasta que se cierren todas las posiciones erróneas o finalice la serie principal. Una vez finalizada la serie principal, todos los fondos no usados de la reserva se pondrán a cero.

Las posiciones abiertas erróneamente de la primera serie permanecerán en el mercado hasta que el beneficio de la segunda serie permita cerrarlas con un beneficio condicional igual a cero. Funcionará de forma análoga para el resto de la serie. El beneficio de la tercera serie se usará para compensar las posiciones erróneas de la segunda serie, y así sucesivamente. 

La figura 5 muestra que algunas posiciones Buy de la primera serie se cerraron con pérdidas sin esperar al punto de cierre total de la serie: aquí se activó el algoritmo de compensación de pérdidas.

Así, las fluctuaciones explotadas para conseguir beneficios en la segunda serie resultan siempre inferiores a la amplitud de la tendencia en la primera serie. La amplitud de la tendencia en la tercera serie es aún menor. Las series adicionales no provocan un aumento significativo en la reducción de los fondos, pero generan un beneficio adicional que se usa para mantener la estabilidad. El número de series adicionales abiertas simultáneamente dependerá únicamente del estado actual del mercado: el tráder no podrá configurarlo, esta es otra función adaptativa. El algoritmo en sí tiene una estructura fractal, pues se copia a sí mismo en diferentes escalas. Al mismo tiempo, ajusta su trabajo individualmente para cada escala.

Corrección del punto de cierre de la serie usando como base las fluctuaciones de escalas menores

Como hemos escrito anteriormente, el punto de cierre de la serie (retroceso de la tendencia principal) dependerá de la velocidad a la que se produce este retroceso. La velocidad se mide como el número de saltos superados por el precio para finalizar el retroceso. Cuanto mayor sea el número de saltos, menor será el retroceso del movimiento de tendencia. Esta característica se relaciona con las razones fundamentales del surgimiento de tendencias. Las tendencias crean volúmenes de transacciones que superan la liquidez actual. Es decir, se da la apertura o cierre de posiciones para grandes cantidades. Una vez que se ha abierto la posición condicional que ha creado el movimiento de tendencia, debemos cerrarla, y esto demanda liquidez. Si la cerramos de inmediato, el retroceso será el 100% de la tendencia anterior, es decir, aparecerá exactamente el mismo movimiento de tendencia en la dirección opuesta. Pero cuanto más lento se cierre la posición, menor será el retroceso. En este caso, no importará en absoluto si uno de los participantes de las transacciones haya provocado un movimiento o muchos, el mecanismo será el mismo.

El algoritmo ajusta el punto de cierre según el número de bloques en el marco temporal básico. No obstante, en las escalas grandes, esto no resulta suficiente; dentro de los bloques a gran escala hay fluctuaciones de precios y también debemos considerar estas para corregir el punto de cierre, porque los bloques son solo una representación condicional de los movimientos de precio creada por conveniencia.

Podríamos calcularlo todo, considerar todas las fluctuaciones, y eso sería lo más correcto, pero por simplicidad (el algoritmo ya es complejo de por sí), lo hemos hecho de otra forma. Para corregir el punto de cierre, usaremos el beneficio de las series adicionales del instrumento. Esto supone el 80% del beneficio obtenido por el cierre de las series adicionales. Se calcula cuánto benenficio obtendrá la serie en la divisa del depósito si todas las posiciones se cierran en el punto de cierre calculado. Luego se toma el beneficio actual de esta serie y se le suma el beneficio disponible en el momento actual procedente del trabajo de las series adicionales. Si el valor resultante es mayor o igual al beneficio valorado en el punto de cierre, la serie principal finalizará. Asimismo, se considerará que el retroceso ha terminado y la serie ha finalizado.

Close point

Figura 7. Corrección del punto de cierre según el beneficio de las series adicionales

La figura 7 muestra un ejemplo de corrección del punto de cierre según el beneficio de las series adicionales. Las posiciones abiertas deberían cerrarse en el punto alto, en 1.69846, con un beneficio de 915.66$. Para cuando el precio alcanzó el nivel de 1,60887, el nivel de beneficio actual era de 109,35$, pero debido a las grandes fluctuaciones, la serie adicional ganó 1009$ y el 80% de este beneficio se usará para cerrar la serie anticipadamente, es decir, tenemos disponibles 807,2$. Se comprueba la desigualdad 109,35+807,2=916,55>915,66 y la serie finaliza prematuramente.

Este mecanismo es necesario para determinar con mayor precisión el punto de cierre y, con menos frecuencia, para crear situaciones en las que el retroceso ya se haya completado y la serie aún no se haya cerrado.

Corrección de posiciones erróneas usando el beneficio obtenido del comercio con otros activos

El algoritmo descrito anteriormente funciona y ayuda a reducir la volatilidad de los fondos, pero el sistema se ha desarrollado para funcionar simultáneamente en 28 instrumentos comerciales. Ciertos instrumentos comerciales pueden encontrarse en un estado de tendencia alcista o bajista excesiva durante mucho tiempo. Por consiguiente, para reducir aún más la volatilidad del gráfico de rendimiento, deberemos usar el beneficio obtenido al cerrar cada primera serie en otros instrumentos. 

Este enfoque funcionará si la tendencia en algunos instrumentos comerciales va acompañada de flat en otros. En la figura 6, mostramos una ley aproximada, según la cual la amplitud de oscilación promedio en un instrumento aumenta partiendo del número de saltos. Conociendo esta ley, podremos decir que todo sucederá de la misma manera en los 28 instrumentos comerciales. Es decir, la distancia promedio superada por el precio en vertical será aproximadamente proporcional al tamaño del salto multiplicado por el número de saltos a la potencia 0.5 (diferentes instrumentos y mercados tendrán su propia potencia). Para mayor claridad, tomaremos 28 instrumentos comerciales y calcularemos cuántos pasarán en promedio en n saltos, o mejor aún, los mostraremos en el gráfico.

¿Cómo mostrar 28 instrumentos comerciales independientes en un gráfico? Cada uno de ellos tiene su propia volatilidad individual y un intervalo de fluctuaciones diferente; todos sabemos que el comportamiento de cada instrumento comercial no se parece al de los demás. En cualquier caso, no son similares solo en la forma en que los vemos en el gráfico. Si recalculamos el tamaño de las velas no en puntos, sino en una sola divisa (por ejemplo, en dólares), y asumimos que estamos realizando transacciones por una cantidad fija en dólares, entonces la escala y la volatilidad de cada instrumento serán aproximadamente las mismas. Dentro de un sistema comercial, el factor decisivo será cuántos dólares se mueve el precio en vertical en n saltos cuando comerciamos con una cantidad fija.

Debemos pasar del gráfico en puntos al gráfico de beneficios. Es importante considerar que hablamos de una cantidad fija para comerciar, y no de un lote fijo, son cosas completamente distintas. Supongamos que el comercio se realiza con parejas de divisas por una suma de 1000$ para cada instrumento. Entonces, tendremos 4 tipos de fórmulas en total, dependiendo del formato de la pareja de divisas. Vamos a recalcular el tamaño de las velas de puntos a dólares utilizando las siguientes fórmulas:

  • formula EURUSD;
  • formula USDCAD;

  • formula eurgbp;

  • formula cadchf

En las fórmulas: 

  • EURUSD, USDCAD, EURGBP, CADCHF  — tamaño de la vela en dólares para la pareja de divisas correspondiente cuando comerciamos con 1000$;
  • EURUSD(-1), USDCAD(-1), EURGBP(-1), CADCHF(-1)  — precio de cierre de la vela anterior;
  • EURUSD(0), USDCAD(0), EURGBP(0), CADCHF(0)  — precio de cierre de la última vela formada;
  • 1000 — suma de la transacción en dólares.

Vamos a analizar la primera fórmula para EURUSD y todas las parejas de divisas en las que se ha realizado una transacción por una suma con la divisa que se encuentra en segundo lugar. Las transacciones se realizarán por una suma de 1000$, entonces, la lógica encargada de determinar el tamaño de la vela será la siguiente: vendemos 1000$ -->> compramos EUR al tipo de cambio de la vela anterior (vela -1) -->> por 1000$ realizamos la transacción inversa de EUR al tipo de cambio de la última vela cerrada (vela 0) -->> del número de EUR comprados por 1000$ al tipo de cambio (-1) de la vela, restamos el número de EUR vendidos por 1000$ al tipo de cambio de la vela cero -->> el benefico/pérdidas obtenidos en EUR se convierte a dólares al tipo de cambio actual EURUSD -->> obtenemos el beneficio/pérdidas en dólares. Así obtenemos el tamaño de la vela en dólares. 

Además, para crear un gráfico con el tamaño de las velas en dólares, deberemos añadir el tamaño de cada vela subsiguiente al tamaño de la anterior.

Para USDCAD y todas las parejas de divisas en las que el dólar está en primer lugar, el cálculo resultará más fácil: la transacción ya está en dólares. Para los tipos cruzados, el sentido del cálculo resulta similar a la fórmula para EURUSD, excepto que en la pareja EURGBP, debemos convertir los 1000$ a GBP, luego debemos realizar una transacción comercial y después convertir el beneficio resultante de EUR nuevamente a dólares. Para CADCHF, el sentido es similar a las opciones anteriores, pero el recálculo se realiza a través de la pareja con el dólar en primer lugar, y la fórmula se modifica de la forma correspondiente.

En cualquier caso, el objetivo de las operaciones es calcular cuántos dólares podemos ganar/perder comerciando con 1000$ para una vela de una amplitud determinada para cada pareja de divisas. 

En este algoritmo, el 80% del beneficio total obtenido del cierre de cada primera serie de cualquier instrumento comercial se usará para compensar las posiciones abiertas erróneamente del instrumento que requiera dicha compensación. Por consiguiente, el algoritmo completo trabajará en el cierre oportuno de las "posiciones adicionales" no solo para su propio instrumento comercial, sino también para cualquier otro instrumento. El objetivo es cerrar las posiciones erróneas lo más rápido posible para que las áreas de tendencia prolongadas no provoquen reducciones significativas en los fondos. Esto debería reducir la volatilidad del gráfico de rentabilidad.

28 currency pairs

Figura 8. Camino recorrido en 10,000 saltos para las 28 parejas de divisas

La figura 8 muestra los recuadros de beneficio para las 28 parejas de divisas al mismo tiempo; estas se han calculado usando las fórmulas que mostramos arriba. Los gráficos se han construido para 10,000 velas del marco temporal H4. Para el análisis, hemos tomado los datos desde 2004 hasta mediados de 2010. Adjuntaremos al artículo el archivo Excel. El lector podrá sustituir los datos propios que le resulten interesantes y ver las fórmulas con las que se construyen los gráficos.

La figura 8 muestra que durante la tendencia en algunas parejas de divisas, se detecta flat en otras. Esto confirma de que podemos reducir la volatilidad del gráfico de rentabilidad compensando las posiciones abiertas erróneamente con el beneficio obtenido del comercio con todos los instrumentos simultáneamente. Siempre habrá un instrumento comercial con el que el algoritmo obtendrá beneficios en el momento actual.

Este comportamiento resulta típico no solo en el mercado de divisas, sino también en el mercado de valores, con algunas reservas. El mercado de divisas suele ser simétrico para situaciones de crecimiento y caída, mientras que el mercado de valores muestra un comportamiento asimétrico. El panorama en el mercado de valores resultará aproximadamente igual que en el mercado de divisas, con una diferencia: existirá un sesgo alcista y una gran correlación entre activos. Pero si tomamos instrumentos comerciales de las bolsas de diferentes países, la correlación podría reducirse significativamente, hasta el punto de alcanzar una correlación negativa entre activos.

Además, hemos medido el tamaño promedio de las velas en dólares de todos los instrumentos comerciales: es de 2.26$. Conociendo el número de saltos y el tamaño medio de estos, en teoría, podemos estimar el desplazamiento promedio en vertical de todas las herramientas. Para ello, 2.26$*10000^0.5=226$. En realidad, todos los instrumentos comerciales se han movido de media 216.41$ en 10 000 pasos, lo cual se encuentra cerca del valor teórico.

En este algoritmo, el 80% del beneficio total obtenido del cierre de cada primera serie de cualquier instrumento comercial se usará para compensar las posiciones abiertas erróneamente del instrumento que requiera dicha compensación. Por consiguiente, el algoritmo completo trabajará en el cierre oportuno de las "posiciones adicionales" no solo para su propio instrumento comercial, sino también para cualquier otro instrumento. El objetivo es cerrar las posiciones erróneas lo más rápido posible para que las áreas de tendencia prolongadas no provoquen reducciones significativas en los fondos. Esto debería reducir la volatilidad del gráfico de rentabilidad.

La figura 9 muestra cómo funciona esto y cómo de bien realiza la idea su trabajo. Para la prueba, hemos seleccionado instrumentos comerciales no correlacionados, tomando como periodo el año 2020 y el marco temporal M1. Debemos tener en cuenta que no hemos optimizado la configuración, hemos ajustado esta de la misma forma para todos los instrumentos: el propio algoritmo corrige su trabajo en tiempo real.

GBPUSD+AUDNZD

EURCAD+CHFJPY

GBPUSD+AUDNZD+EURCAD+CHFJPY

Figura 9. Ejemplo de funcionamiento de la función de compensación de instrumentos múltiples

Primero, llevamos a cabo la prueba con parejas de divisas aparte, para así evaluar el gráfico de rentabilidad de cada uno individualmente, y luego efectuamos una prueba simultánea de las cuatro parejas de divisas con el modo de compensación habilitado.

Podemos ver que la reducción máxima de los fondos tuvo lugar en la pareja de divisas GBPUSD, y ascendió a 4311$. La rentabilidad máxima también se muestra en GBPUSD 1555$. En este caso, además, hemos obtenido unas pérdidas de 109$ en AUDNZD porque detuvimos la prueba. Si la prueba hubiera continuado, el comercio se habría quedado en positivo.

Con la ayuda del algoritmo de compensación de instrumentos múltiples, hemos podido aminorar la reducción de los fondos durante la prueba en cuatro parejas de divisas simultáneamente, de 4311$ a 3517$, es decir, en un 18%. Así, hemos conseguido una rentabilidad total de 2015.21$. Al mismo tiempo, el número total de transacciones completadas durante el comercio individual resultó ser 1446, y durante la negociación conjunta se redujo a 1409, lo cual sugiere que los algoritmos de compensación en sí mismos no influyen casi en el curso de la negociación, pero mejoran la estabilidad de trabajo.

Por consiguiente, cuantos más instrumentos comerciales usemos para el comercio, más fluido será el gráfico de rentabilidad que obtengamos, incluso lineal, si comerciamos simultáneamente con 1000 instrumentos comerciales de diferentes bolsas mundiales y diferentes mercados. Asimismo, podemos comerciar a la vez en los mercados de valores y divisas, e incluso en el mercado de criptomonedas, equilibrando así los volúmenes de transacciones para cada instrumento comercial.


Pruebas

El algoritmo debería funcionar con cualquier instrumento comercial, así que primero mostraremos cómo funciona con las acciones AAPL (Appl). Por el momento, el robot no puede recopilar las características estadísticas del instrumento: esta función está en desarrollo. Por eso, estableceremos 2 parámetros manualmente. Estamos hablando del porcentaje para la apertura de una serie y el porcentaje para el cierre de una serie. Sin embargo, los valores de estos parámetros no se obtuvieron usando el método de optimización y ajuste, sino que se midieron con la ayuda de un indicador que se integrará en el robot. En el futuro, el robot ajustará estos valores por sí mismo.

AAPL Buy 

AAPL Buy tester report

Figura 10. AAPL, solo posiciones largas

Para las acciones de AAPL, las pruebas se realizarán por separado para las posiciones Buy y para las posiciones Sell, ya que las características estadísticas del instrumento no son simétricas para el ascenso y la caída. Para las posiciones Buy, los parámetros son más agresivos, mientras que para las posiciones Sell, son más conservadores. No obstante, solo cambian 2 parámetros.

La figura 10 muestra el resultado del backtest para el periodo comprendido entre el 24 de junio de 2012 y el 28 de diciembre de 2020, es decir, durante 7,5 años. La prueba se realizó en el marco temporal M1. Podemos ver que el gráfico de rentabilidad es plano, la reducción máxima por capital es de 858$ y se han ganado 1704$. En total, se han abierto 176 posiciones y el factor de beneficio es 18,13, lo cual supone un muy buen indicador.

Muchos dirán que para ganar dinero con las acciones de AAPL en crecimiento abriendo solo posiciones Buy, no necesitamos un algoritmo complejo, y tendrán razón. Veamos cómo se comportará el algoritmo si solo se permiten posiciones de Sell. Abrir posiciones cortas con las acciones de Appl es igual a un suicidio, pero el algoritmo es adaptativo, dejemos que sobreviva.

AAPL sell

AAPL sell report

Figura 11. AAPL, solo posiciones cortas

En la figura 11, mostramos cómo ha trabajado el algoritmo con las acciones de AAPL desde el 24.06.2012 al 28.12.2020, marco temporal M1. Los resultados ya no son tan buenos como en las posiciones Buy, pero se las arregla para ganar dinero. Aquí, la reducción máxima del capital ha sido de 10533$, mientras que el rendimiento ha sido de 2234$. El factor de beneficio ya es mucho menor, igual a 1,4. Al mismo tiempo, se han abierto 944 posiciones. Si pudiéramos comerciar con posiciones Buy y Sell al mismo tiempo, el resultado sería mejor, porque los algoritmos de compensación de posiciones erróneas se activarían, reduciendo la volatilidad del gráfico de rentabilidad. Y la situación mejorará aún más si comerciamos simultáneamente con 28 instrumentos. Sin embargo, el hecho de que haya funcionado 7.5 años en un modo casi automático, sin ajustar los parámetros a la historia, es un muy buen resultado.

Ahora lo que importa es que ha podido adaptarse a condiciones complicadas. No hemos tomado las acciones de AAPL para probarlas porque sí, obviamente, se trata de un instrumento comercial complejo para comerciar con posiciones cortas. Echemos un vistazo al gráfico de este instrumento durante las pruebas.

AAPL chart

Figura 12. Gráfico de las acciones de AAPL desde el 24.06.2012 al 28.12.2020

La figura 12 muestra cómo de intenso ha sido el crecimiento de las acciones de AAPL; durante los últimos 7.5 años, el activo ha aumentado 6.3 veces. Ganar dinero en un modo totalmente automático sin optimización en un gráfico de este tipo no es una tarea trivial en absoluto.

El algoritmo ha sido creado para trabajar con 28 instrumentos comerciales al mismo tiempo, por lo que realizaremos más pruebas con 28 instrumentos comerciales a la vez. Primero, veamos los resultados del trabajo para el mercado FÓREX. En la simulación, hemos usado las parejas de divisas: GBPUSD, EURUSD, NZDUSD, AUDUSD, USDCAD, USDCHF, USDJPY, EURGBP, EURAUD, EURNZD, EURCAD, EURCHF, EURJPY, GBPAUD, GBPNZD, GBPCAD, GBPCHF, GBPJPY, AUDNZD, AUDCAD, AUDCHF, AUDJPY, NZDCAD, NZDCHF, NZDJPY, CADCHF, CADJPY, CHFJPY. Hemos establecido absolutamente las mismas configuraciones para todas las parejas de divisas; el propio algoritmo se ha adaptado en tiempo real a todos los cambios en el mercado. 

La prueba se ha realizado del 01/01/2008 al 13/01/2021 (13 años), usando para ello el marco temporal M1. El robot consume muchos recursos y la prueba de 1 año tarda unos 12 días, por consiguiente, para paralelizar las pruebas, hemos dividido el intervalo de prueba en secciones de 1 a 2,5 años.

2008-2009

2009-2010

2010-2011

24.06.2010 -24.06.2012

24.06.2012 - 24.06.2014

24.06.2014-24.06.216

24.06.2016 - 24.06.2018

24.06.2018-13.01.2021

Figura 13. Pruebas de las 28 parejas de divisas desde el 01/01/2008 hasta el 13/01/2021

La figura 13 muestra las pruebas para las 28 parejas de divisas simultáneamente. Podemos ver que el comercio en casi todos los intervalos de prueba ha terminado en terreno positivo, salvo la sección del 24 de junio de 2012 al 24 de junio de 2014. Aquí, la prueba ha terminado con unas pequeñas pérdidas iguales a 123$. Esto se debe a que la prueba se ha detenido. Si la prueba hubiera continuado sin interrupción durante 13 años, el robot habría salido de la reducción. En todo el tiempo se han abierto 14.415 posiciones; este valor, significativo desde el punto de vista estadístico, sugiere que no hemos obtenido los resultados por casualidad. La reducción de los fondos tiene un valor adecuado, pero en futuras versiones del algoritmo, deberemos trabajar en la mejora de los indicadores de rentabilidad y estabilidad. 

El robot es universal, así que vamos a ver cómo funciona con las acciones de empresas rusas que cotizan en MOEX. La configuración es la misma que para las divisas, y también la misma para todos los instrumentos, pero solo se permiten posiciones largas. La versión actual del robot aún no puede ajustar los parámetros por separado para posiciones cortas y largas, pero estamos desarrollando dicha funcionalidad. Hemos realizado la prueba del 01.02.2013 al 20.09.2018 (5 años 7 meses) y establecido un apalancamiento de 1:5 en el simulador. En el portafolio hemos seleccionado los instrumentos con mayor liquidez: GAZP, CHMF, ALRS, HYDR, LKOH, MAGN, MGNT, MTSS, NLMK, NVTK, ROSN, RTKM, SBER, SNGS, SNGSP, TATN, VTBR, SBERP, TATNP, AFLT, FEES, GMKN, RSTI, SIBN, UPRO, MSNG, MTLR, PLZL.

moex

Figura 14. Prueba con 28 acciones de empresas rusas del 01.02.2013 al 20.09.2018

La figura 14 muestra los resultados de las pruebas de 28 acciones de empresas rusas. Podemos ver que el algoritmo gana dinero de forma bastante consistente y uniforme. Como en el caso anterior, la rentabilidad no ha resultado alta. No obstante, lo importante es que no perdemos dinero, lo ganamos. Durante todo el tiempo se han abierto 5485 posiciones, lo cual significa que no hemos obtenido el resultado por casualidad. 

¿De dónde viene el beneficio?

No basta con crear un algoritmo o un modelo que funcione, también debemos comprender por qué funciona y de dónde proviene el beneficio. En este caso, el beneficio surge de una fuente no obvia: hablamos del aumento de entropía. Por entropía, entendemos aquí la entropía determinada según el principio de Boltzmann, caracterizada por el número de estados posibles del sistema y la probabilidad de un estado particular.

Sería más correcto decirlo de otra manera: la entropía en el mercado es aproximadamente constante, y cuanto mayor sea la liquidez de un instrumento, mayor resultará la entropía del gráfico de precios de este instrumento. Con el aumento en el número de transacciones comerciales realizadas en un instrumento comercial, el número de estados posibles también aumenta, y el sistema se esfuerza por ocupar el estado más probable. Así, el efecto del aumento de entropía surge cuando la propia entropía es aproximadamente constante, pero el número de posibles estados del sistema crece.

La entropía máxima se puede ver en el mercado de divisas, mientras que la mínima se ve en activos de baja liquidez. La entropía de cada instrumento comercial específico tiende a ser máxima, pero la afluencia de fondos impide que esto suceda. La afluencia de fondos se da por dos motivos: por el atractivo inversor del activo y por la emisión de fondos. Para cada instrumento comercial, la entropía aumentará eventualmente.


Resumiendo

La rentabilidad ha resultado baja, pero los artículos nos muestran un modelo que nos permite comerciar con beneficios de una forma completamente automática con instrumentos comerciales completamente diferentes, y no solo diferentes, sino que también se comercian en mercados fundamentalmente distintos. Ya hemos mostrado las pruebas para 57 instrumentos comerciales, y dado que la configuración para cada instrumento comercial es la misma, podemos decir que esto equivale a 520 años de pruebas para un instrumento comercial.

  • Hemos conseguido un algoritmo básico que puede funcionar de manera estable. Bien es cierto que luego debemos perfeccionarlo, mejorando cada mecanismo descrito para aumentar significativamente la rentabilidad y reducir las pérdidas de fondos. 
  • En el artículo anterior, hablamos sobre dos métodos para el seguimiento de la tendencia actual. Estos se describen en el párrafo "retraso en la apertura de posiciones". Hemos realizado pruebas para 28 instrumentos comerciales usando el método "retraso a lo largo del área de tendencia". Esta no es la mejor práctica, el "retraso en función de las características estadísticas del instrumento" funciona mejor, pero en este momento el algoritmo aún no está terminado, así que hemos usado aquello que funciona correctamente. En futuras versiones del algoritmo, mejoraremos significativamente esta función.
  • Necesitamos un análisis de datos adicional para preseleccionar el tamaño de bloque mínimo para reducir el número de posiciones abiertas erróneamente.
  • El algoritmo no considera las diferencias en los precios de los activos que provocan las diferencias en el precio del bloque basado en estos activos. Esto reduce significativamente la rentabilidad de los instrumentos bursátiles. Debemos implementar el equilibrio del tamaño del lote para el portafolio, dependiendo del valor del bloque para cada activo específico.
  • Para un mejor funcionamiento, tendremos que crear una gestión aparte de los algoritmos de toma de decisiones para las posiciones largas y cortas, y añadir el análisis de las características estadísticas y la asimetría de cada instrumento comercial específico.
  • El 80% del beneficio total se destinará a mantener la estabilidad del algoritmo, por lo que deberemos mejorar tanto el mecanismo de compensación de las posiciones no rentables como los mecanismos de toma de decisiones: esto aumentará significativamente la rentabilidad.
  • El algoritmo no sabe cómo recopilar las características estadísticas de cada instrumento comercial y actualmente funciona "a ciegas", usando únicamente los mecanismos de adaptación. En las próximas versiones, ajustaremos los parámetros según las características estadísticas del instrumento comercial de forma completamente automática, lo cual mejorará los indicadores de rentabilidad. 
  • Ahora no se usan las diferencias entre los gráficos de precio de las parejas de divisas y las acciones; debemos perfeccionar el modelo añadiendo el conocimiento existente.

    Artículos anteriores sobre este tema

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

    Archivos adjuntos |
    chart_in_dollars.zip (16374.28 KB)
    Trabajando con los precios y Señales en la biblioteca DoEasy (Parte 65): Colección de la profundidad de mercado y clase para trabajar con las Señales MQL5.com Trabajando con los precios y Señales en la biblioteca DoEasy (Parte 65): Colección de la profundidad de mercado y clase para trabajar con las Señales MQL5.com
    En el presente artículo, crearemos una clase de colección de profundidad de mercado para todos los símbolos y comenzaremos a desarrollar la funcionalidad necesaria para trabajar con el servicio de señales de MQL5.com. Para ello, crearemos una clase de objeto de señal.
    Aplicación práctica de las redes neuronales en el trading (Parte 2). Visión por computadora Aplicación práctica de las redes neuronales en el trading (Parte 2). Visión por computadora
    El uso de la visión por computadora permite entrenar redes neuronales con la representación visual de la tabla de precios y los indicadores. Este método nos permitirá utilizar con mayor libertad todo el complejo de indicadores técnicos, pues no requiere su suministro digital a la red neuronal.
    Redes neuronales: así de sencillo (Parte 11): Variaciones de GTP Redes neuronales: así de sencillo (Parte 11): Variaciones de GTP
    Hoy en día, quizás uno de los modelos de lenguaje de redes neuronales más avanzados sea GPT-3, que en su versión máxima contiene 175 mil millones de parámetros. Obviamente, no vamos a crear semejante monstruo en condiciones domésticas. Pero sí que podemos ver qué soluciones arquitectónicas se pueden usar en nuestro trabajo y qué ventajas nos ofrecerán.
    Redes neuronales: así de sencillo (Parte 10): Multi-Head Attention (atención multi-cabeza) Redes neuronales: así de sencillo (Parte 10): Multi-Head Attention (atención multi-cabeza)
    Ya hemos hablado con anterioridad del mecanismo de auto-atención (self-attention) en las redes neuronales. En la práctica, en las arquitecturas de las redes neuronales modernas, se usan varios hilos de auto-atención paralelos para buscar diversas dependencias entre los elementos de la secuencia. Vamos a ver la implementación de este enfoque y evaluar su influencia en el rendimiento general de la red.