![Teoría de categorías en MQL5 (Parte 11): Grafos](https://c.mql5.com/2/55/Category-Theory-p11_600x314.jpg)
Teoría de categorías en MQL5 (Parte 11): Grafos
Introducción
En el artículo anterior, analizamos grupos de monoides y exploramos el concepto de simetría dentro de monoides típicos. Al introducir el axioma adicional de que todos los miembros de un grupo monoide deben tener operaciones binarias inversas y limitantes entre elementos de espejo para obtener un solo elemento, hemos ampliado la aplicabilidad de los monoides en puntos críticos de las decisiones comerciales. Usando esto como base, continuaremos estudiando la teoría de categorías y su aplicación práctica en el desarrollo de un sistema comercial mediante el estudio de grafos.
Los grafos son una potente herramienta para modelar sistemas complejos y visualizar las relaciones entre diferentes componentes. En el contexto del desarrollo de un sistema comercial, la implementación de grafos de teoría de categorías en MQL5 puede ofrecer información valiosa y una visión alternativa sobre los procesos de toma de decisiones. Si bien nuestro artículo anterior insinuó el potencial de los grupos monoides a la hora de reclasificar y normalizar conjuntos de monoides para mejorar las decisiones comerciales, este artículo, en cambio, explorará la utilidad de los grafos de la teoría de categorías como parte del desarrollo de un sistema comercial MQL5. Aunque la teoría de categorías reconoce la amplia utilidad y la interconexión de los grafos, el propósito de este artículo consiste en resaltar sus beneficios específicos para el desarrollo de un sistema comercial, incluida la gestión de trailing stops, como ya hemos hecho en artículos anteriores donde analizamos los sistemas comerciales.
En este artículo, exploraremos los beneficios adicionales del uso de grafos en MQL5, analizando cómo mejoran el diseño y la organización del sistema, facilitan el análisis y la visualización de datos avanzados y contribuyen a la optimización del sistema y a las mejoras de rendimiento. No obstante lo dicho, estos beneficios no serán el foco de atención.
Los grafos en la teoría de categorías
Los grafos son una forma de definir “específicamente” los vértices interconectados y las flechas que los conectan dentro de un sistema. Así, en el marco de la teoría de categorías, representan cuatro entidades, a saber: un conjunto de vértices; un conjunto de flechas que conectan esos vértices; una función de homomorfismo de un conjunto de flechas a un conjunto de vértices que representa el vértice original para cada flecha y, finalmente, otra función de homomorfismo para que las flechas apunten hacia estos vértices.
Antes de continuar, podría resultar útil decir algunas palabras sobre las principales diferencias entre la teoría de grafos y la teoría de categorías. A primera vista, parece que ambas tratan de elementos de enlace, lo cual puede hacer que el ciudadano medio se pregunte: ¿por qué no son lo mismo? Para responder a esta pregunta, analizaremos como ejemplo el proceso de cocinado de alimentos con sus pasos e ingredientes en cada etapa. La teoría de grafos en este caso se centraría en la secuencia de pasos de preparación de una receta determinada y quizás en qué otras iteraciones en esos pasos (grafo camino) se pueden utilizar para cambiar o mejorar una receta. La teoría de categorías adoptará un enfoque más abstracto, prestando mayor atención a las transformaciones en cada paso de preparación y analizando cómo se comparan con las transformaciones de los pasos de preparación en otras recetas. Otra receta estaría en una categoría diferente si consideramos cada paso de la preparación como un conjunto/dominio que contiene una lista de ingredientes. En otras palabras, la teoría de categorías presta más atención a los morfismos o, en este caso, a los funtores, no a una secuencia de pasos. Así que aquí consideraremos los grafos como una herramienta para la teoría de categorías. Este tema se trata con más detalle en la discusión sobre la comparación de categoría de grafos y grafo de categorías (en inglés).
Por lo tanto, para nuestros objetivos, podremos considerar los grafos como un medio para catalogar el número y la secuencia de pasos en un sistema interconectado. Desde que comenzamos a usar monoides, hemos analizado un sistema de decisiones comerciales (con monoides en cada nodo) que seguía estos pasos:
- Selección de marco temporal
- Selección de un periodo de análisis retrospectivo
- Selección del precio aplicable
- Selección de los indicadores
- Y finalmente, selección de una acción comercial.
Esquemáticamente se puede representar así:
Los sistemas alternativos de los mismos pasos también se pueden representar así:
Opción 1
Opcion 2
En cada una de estas opciones 1 y 2, simplemente hemos repetido los pasos intermedios entre el marco temporal y la acción comercial. Como veremos en el ejemplo 2 a continuación, la capacidad de crear diferentes caminos presenta modelos distintos que pueden resultar útiles a la hora de tomar algunas decisiones comerciales.
Sin embargo, formalmente, si analizamos nuestro sistema por defecto, que funciona desde el marco temporal hasta la acción comercial, el gráfico estará representado por dos tablas: una tabla de flechas y una tabla de vértices. Las tablas se muestran a continuación:
donde los índices de origen y destino en la tabla de flechas serán los índices de los vértices. La columna de índice en las flechas solo servirá para numerar las flechas.
Al remodelar el sistema comercial, nos fijaremos en los informes, como en los artículos anteriores. Así, intentaremos estudiar el significado de los grafos, alternando las etapas internas de análisis retrospectivo, el precio aplicado y el indicador. Para no complicar demasiado nuestra lógica, dejaremos los pasos inicial y final sin modificaciones. Asimismo, consideraremos los posibles homomorfismos entre diferentes grafos, si tenemos en cuenta la hipótesis de que no existe un sistema ideal y las condiciones cambian en cada nueva barra. Por consiguiente, intentaremos proyectar el siguiente homomorfismo de grafos, dados, digamos, los dos últimos.
MQL5 y el desarrollo de un sistema comercial
En nuestra serie de artículos, hemos analizado el desarrollo de sistemas comerciales utilizando la biblioteca integrada del wizard en MQL5. Los sistemas comerciales en forma de asesores se pueden ensamblar usando el wizard integrado en el IDE, siempre que el usuario seleccione una señal, un método de gestión de capital y un método de trailing stop de entre los disponibles en la biblioteca. Para estos artículos, buscaremos ampliar la biblioteca, en particular los métodos de trailing stop integrados, añadiendo alternativas que utilicen los conceptos de teoría de categorías discutidos en los artículos.
El desarrollo de un sistema comercial en MQL5 a menudo enfrenta muchos problemas: desde la depuración incluso de asesores relativamente simples hasta la localización y el uso de datos de ticks precisos y, finalmente, la realización de las pruebas correspondientes durante periodos de historia bastante largos. Existen otros problemas, pero los enumerados son los principales. El problema de depuración suele ser más difícil que otros porque en muchos casos los errores no serán errores de compilación que el compilador nos notificará, sino que pueden encontrarse en la lógica del sistema de nuestro asesor, y es posible que no aparezcan durante las pruebas hasta que comencemos a trabajar en el mercado real. Precisamente por eso el montaje de nuestro asesor a partir de componentes de la biblioteca estándar (en la medida de lo posible) puede resultar de gran ayuda para evitar este problema. Con este fin, los sistemas que probaremos en estos artículos serán construidos por el wizard utilizando una biblioteca pública y el código estándar, con modificaciones provenientes únicamente de nuestra clase especial que implementará un concepto específico.
Estudiando las capacidades de los grafos en los sistemas comerciales MQL5
Quizá resulte útil comenzar analizando los beneficios abstractos de los grafos en MQL5. En general, estos tienen el potencial de mejorar el diseño y la organización del sistema.
Si consideramos nuestra hipótesis de que no existe un orden ideal de pasos comerciales entre la selección del marco temporal y la selección de la acción comercial, entonces podríamos usar los cambios entre estos sistemas como homomorfismos de grafos. Estos homomorfismos podrían examinarse en busca de relaciones cuadráticas o incluso lineales cuando se colocan en series para ver si se pueden realizar predicciones. En otras palabras, usaremos grafos para gestionar mejor las relaciones entre los componentes de nuestro sistema comercial.
Si podemos establecer dicha relación entre homomorfismos de grafos, ya sea cuadrática o lineal, podremos reutilizarla en otras situaciones de acción del precio o similares, eliminando así la necesidad de reexaminar y calcular dichas relaciones. En otras palabras, estaremos mejorando la modularidad y la reutilización de nuestros sistemas comerciales.
Y eso no es todo: si damos un paso fuera de nuestro sistema comercial "cerrado" y tratamos de ver qué más podrían indicar los diferentes "caminos" de grafos, podremos analizar las correlaciones entre los tipos de caminos y la acción del precio. Supongamos que estamos analizando una barra de precios que tiene los cuatro precios típicos: apertura, máximo, mínimo y cierre. Podríamos considerar esto como un camino porque no siempre están en la secuencia O-H-L-C. En las barras alcistas, aunque no siempre, el orden puede ser O-H-L-C. Esta y otras observaciones pueden ayudar al reconocimiento de patrones usando la detección temprana de cambios en la acción del precio según el tipo de trayectoria de los movimientos del precio anteriores dentro de la barra.
Además, si simplemente coloreamos los intra-pasos de nuestro sistema comercial de 5 pasos, que comienza con la selección del marco temporal y termina con la selección de la acción comercial, y hacemos que nuestro asesor actualice periódicamente y muestre estos pasos secuenciales coloreados en el gráfico que está ejecutando, sabremos inmediatamente qué sistema estamos utilizando en ese momento. Esto resultaría útil si nos atenemos a nuestra hipótesis anterior de que la secuencia ideal de pasos podría cambiar con cada nueva barra de precios en el gráfico. Esta representación visual del sistema comercial en un formato tan dinámico puede resultar muy útil para que los tráders analicen y comprendan las tendencias a largo plazo en la acción del precio.
La optimización y la mejora del rendimiento del sistema comercial también se podrán utilizar junto con los grafos si los parámetros de entrada están configurados para que coincidan con la configuración del grafo. Por ejemplo, si en un sistema comercial distinto al que estamos considerando, intentáramos encontrar la señal de entrada ideal para cada tipo de paso dentro de la barra de precio (ver OHLC más arriba), podrían optimizarse durante el periodo estratégico y probarse en el futuro para evaluar la estrategia.
Sin embargo, los grafos también tienen sus puntos débiles. El principal es el requisito de representación e interpretación visual. En un entorno comercial volátil, esto puede suponer un desafío, por lo que los asesores que utilizan grafos deberán ser lo más fluidos y flexibles posible y utilizar técnicas eficientes de uso de memoria (como la indexación de los distintos pasos del sistema) para garantizar una ejecución más fluida y eficiente.
Ejemplos: Implementación de grafos en MQL5
Ejemplo 1: grafos basados en valores de barras intra-precio:
Al igual que en artículos anteriores, podemos estudiar el impacto de diferentes trayectorias gráficas de las barras de precio internas con retraso sobre los posibles máximos y mínimos de las barras de precios posteriores. Por lo tanto, las barras de precio internas considerarán la secuencia de precios de apertura, mínimo, máximo y cierre. Siempre se comienza con una apertura y se termina con un cierre, pero el orden de los máximos y mínimos no será estándar, y esta variabilidad nos permitirá estudiar cualquier relación con los cambios posteriores de los máximos y mínimos. Para lograr este objetivo, como antes, crearemos un ejemplar de la clase Expert Trailing y añadiremos este par con otras clases existentes a la biblioteca de gestión de señales y capital para formar un asesor. Luego combinaremos nuestra clase de seguimiento con la clase de señal Awesome Oscillator y la clase de gestión de capital con margen fijo.
A continuación le mostramos los resultados de las pruebas de la pareja USDJPY H1 desde junio de 2022 hasta junio de 2023.
Ejemplo 2: grafos como modificación del sistema comercial original.
Como segundo ejemplo, podemos observar las diversas iteraciones de los intra-pasos de nuestro sistema comercial usadas en artículos anteriores. Recordemos que las etapas eran: seleccionar un marco temporal, un periodo de análisis retrospectivo, el precio aplicado, un indicador y, finalmente, elegir una solución comercial. Entonces, como hemos restringido el primer y el último vértice de los caminos de grafo para el caso 1, también fijaremos la selección del marco temporal y la selección de la decisión comercial como la primera y la última, respectivamente. Por lo tanto, al realizar la prueba y la validación, repetiremos el periodo de análisis retrospectivo, la selección del precio aplicado y el indicador, para encontrar diferentes formas. Asimismo, probaremos la precisión del impacto de cada camino, como en el ejemplo 1, en la predicción de los cambios entre rangos de barras de precios. Las predicciones realizadas según la iteración seleccionada se utilizarán para establecer el trailing stop, como en los artículos anteriores.
Si probamos la pareja USDJPY como en el ejemplo 1, obtendremos los resultados que se muestran en el siguiente informe.
Posibles problemas y peculiaridades.
Como podemos ver en los asesores de prueba implementados en los dos casos anteriormente analizados, el uso de grafos en un sistema comercial requiere mucho entrenamiento para obtener resultados significativos. Si observamos el primer asesor, veremos que hemos derivado nuestros caminos según los pasos de los precios de apertura, máximo, mínimo y cierre dentro de la barra. Estas caminos se han codificado como una clase primitiva que ni siquiera incluye la ponderación para cada flecha, una característica que resulta útil si un ejemplar de la clase de grafo se actualiza con nueva información de las flechas a lo largo del tiempo. En su lugar, utilizaremos un ejemplar de una clase que se inicializará en cada nueva barra, perdiendo en el proceso la memoria aprendida. La implementación de esta última opción implicará (de forma ideal) el almacenamiento del archivo en un IDE aislado de estos grafos, lo cual de por sí requerirá mucha memoria. A esto deberemos añadirle que la potencia de procesamiento y el tiempo dedicado a las pruebas aumentarán en comparación con la clase simple que usamos en el ejemplo. Además, hemos elegido definir cada punto máximo como un punto de precio dentro de la barra, pero podríamos haber usado la opción más eficiente desde el punto de vista computacional para definir cada punto de precio como un precio de cierre. Esto resalta la necesidad de sopesar las decisiones cuidadosamente y compararlas con la precisión esperada de nuestro sistema. Además, hay muchos tipos de grafos dirigidos. Esto significa que el diseñador deberá seleccionar cuidadosamente los elementos que funcionarán mejor con la estrategia prevista. Para empeorar las cosas, los datos de precio de los brókeres nunca están completos y a menudo contienen lagunas y precios ausentes. También deberemos sumarle a esto la relación bastante compleja entre las flechas del gráfico y los precios vinculados. Esta se ve influida por muchos factores, incluidas las condiciones del mercado, el sentimiento de los inversores, los acontecimientos económicos y muchos otros. Es posible que el desarrollador del sistema de grafos deba asegurarse de que su sistema pueda producir resultados comerciales significativos a largo plazo y, dado el volumen de ambigüedad presentado aquí, esto ciertamente complicará el proceso. Una consideración final aquí sería la escalabilidad, ya que a medida que haya nuevos datos de precio disponibles cada día, será necesario actualizar los grafos, especialmente los grafos de entrenamiento con pesos (que no analizamos en nuestros estudios de caso). El sobreajuste de grafos inevitablemente requerirá más trabajo con el tiempo a menos que el desarrollador pueda idear métodos eficientes para codificar sus clases para evitar esto.
Todavía no existen bibliotecas, al menos adecuadas para implementar la teoría de grafos en MQL5. Esto significa que los programadores deberán invertir mucho tiempo y recursos para encontrar soluciones viables, y como tales decisiones son muy individuales, inevitablemente se verán sujetas a errores. A modo de comparación, existen muchos indicadores comerciales disponibles en MQL5 IDE, que implementan muchas ideas, desde el indicador Relative Strength hasta las bandas de Bollinger (al menos 47 en total), que se pueden usar sin tener que codificarlos desde cero.
Como hemos señalado antes, implementar estructuras y algoritmos de grafos desde cero sin las bibliotecas adecuadas en MQL5 no solo demandará mucho tiempo, sino que también resultará un proceso propenso a errores, y también requerirá que los tráders realicen un esfuerzo significativo en codificar soluciones viables. Este proceso no solo aumentará el tiempo de desarrollo, sino que también aumentará el riesgo de errores y omisiones.
A diferencia de la implementación de la teoría de grafos, algunos otros conceptos comerciales tienen bibliotecas MQL5 ampliamente utilizadas y bien documentadas. Estos incluyen indicadores técnicos integrados como medias móviles, osciladores y líneas de tendencia. Los tráders pueden acceder a estos indicadores y utilizarlos fácilmente sin tener que reinventar la rueda. Además, tienen a su disposición una amplia colección de indicadores personalizados desarrollados por la comunidad comercial, lo cual permite a los tráders elegir entre una variedad de soluciones listas para usar.
Además, MQL5 ofrece un conjunto completo de funciones matemáticas, incluidos cálculos estadísticos, transformaciones matemáticas y distribuciones de probabilidad. Estas características permiten a los tráders realizar cálculos y análisis complejos, lo cual facilita el desarrollo de estrategias comerciales complejas.
Aunque MQL5 ofrece bibliotecas para muchos conceptos comerciales, la falta de bibliotecas estándar diseñadas específicamente para la implementación de grafos supone un problema grave. Los tráders que buscan incorporar grafos a sus estrategias se encuentran con diferentes obstáculos relacionados con un gasto excesivo de tiempo y esfuerzo, una fiabilidad y eficiencia escasas y la necesidad de aprender rápidamente.
Para llenar el vacío en la implementación de grafos en MQL5, podemos considerar varios enfoques. Por ejemplo, considerar las contribuciones de la comunidad MQL5 en cuanto al desarrollo y la distribución de bibliotecas relacionadas con grafos, ya que estas pueden aumentar significativamente la disponibilidad de soluciones listas para usar. La colaboración y el intercambio de conocimientos, así como los proyectos de código abierto, crean un ecosistema dinámico que beneficia a todos los tráders que buscan implementar estrategias basadas en grafos. También puede considerar las bibliotecas de terceros fuera del ecosistema MQL5. Varios lenguajes de programación como Python o C++ ya cuentan con extensas bibliotecas de grafos que se pueden integrar con MQL5 a través de DLL (bibliotecas de enlace dinámico) personalizadas o API (interfaces de programación de aplicaciones). Finalmente, puede presionar de la forma que considere más oportuna para que se incluyan bibliotecas de grafos estandarizadas en futuras actualizaciones de MQL5. La solicitud de mejoras y los comentarios sobre la necesidad y los beneficios de dichas bibliotecas puede alentar a los proveedores de plataformas a eliminar esta brecha.
Además, el Open-CL disponible en el IDE, puede ayudarle a resolver los problemas de rendimiento.
¿Qué es lo próximo?
Diariamente se producen avances en los grafos de la teoría de categorías que podrían conducir a una eventual implementación en los sistemas comerciales. Existen varios sitios web dedicados a este tema, por ejemplo, este o este (en inglés). La perspectiva de integración con plataformas de inteligencia artificial como ChatGPT 4.0 ya no parece tan lejana como hace, digamos, dos años. El desarrollo está en marcha. El potencial y las oportunidades para una mayor investigación y desarrollo seguirán creciendo constantemente, así que puede esperar cada vez más noticias interesantes en este ámbito.
Conclusión
Hoy hemos analizado la implementación de grafos de la teoría de categorías en MQL5, prestando especial atención a la utilidad de los grafos en el desarrollo de sistemas comerciales. Recomendamos al lector que, antes de utilizar en sus propios sistemas comerciales los materiales y códigos presentados, realice un análisis más profundo de los mismos.
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/12844
![Teoría de categorías en MQL5 (Parte 12): Orden](https://c.mql5.com/2/56/Category-Theory-p12-avatar.png)
![Programación orientada a objetos (OOP) en MQL5](https://c.mql5.com/2/56/object-oriented-programming-avatar.png)
![Desarrollo de un factor de calidad para los EAs](https://c.mql5.com/2/55/Desenvolvendo_um_fator_de_qualidade_para_os_EAs_Avatar.png)
![Desarrollo de un sistema de repetición — Simulación de mercado (Parte 18): Ticks y más ticks (II)](https://c.mql5.com/2/56/replay-p18-avatar.png)
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso