English Русский 中文 Deutsch 日本語 Português
preview
Características del Wizard MQL5 que debe conocer (Parte 25): Pruebas y operaciones en múltiples marcos temporales

Características del Wizard MQL5 que debe conocer (Parte 25): Pruebas y operaciones en múltiples marcos temporales

MetaTrader 5Sistemas comerciales |
340 2
Stephen Njuki
Stephen Njuki

Introducción

En nuestro último artículo vimos las medias pitagóricas que son un grupo de medias móviles de las cuales algunas son bastante novedosas y no lo suficientemente comunes a pesar de su potencial en beneficiar a algunos traders como insinuamos en los informes de prueba. Estas medias pitagóricas se representaban en un diagrama de semicírculo que resumía cuál era cada valor medio cuando se presentaban dos valores desiguales que sumaban el diámetro del semicírculo. Entre los valores de la cuerda en el semicírculo que no se tocaba en el artículo estaba el valor indicado como Q que representaba la media cuadrática de los dos valores a y b.

La media cuadrática también se conoce comúnmente como media, tiende a ponderarse más hacia los valores más grandes del conjunto cuya media se busca, a diferencia de las medias geométrica y armónica que vimos en el artículo anterior. También es como si la media geométrica solo devolviera valores positivos, por lo que el conjunto muestreado cuya media se busca debe tener solo valores positivos. Sin embargo, este artículo trata sobre "implementar estrategias en múltiples marcos de temporales en Asesores Expertos ensamblados con el Asistente MQL5", por lo que la media cuadrátiva simplemente será la herramienta que usaremos para mostrar cómo se pueden probar múltiples marcos de tiempo en un Asesor Experto ensamblado con el Asistente (Wizard MQL5).

Entonces, ¿por qué es complicado realizar pruebas en múltiples marcos de tiempo con expertos creados con el Asistente? Bueno, en mi opinión, esto se debe a que la personalización de esto debería realizarse para cada señal agregada en el espacio de ensamblaje del Asistente y esto a menudo se pasa por alto. La personalización de los nombres de los símbolos y los marcos de tiempo para un Asesor Experto ensamblado por el Asistente se puede realizar durante los pasos de selección de señales del Asistente, pero a menudo la mayoría de las personas asumen que una vez que elige una señal, puede elegir el símbolo y el período, pero este no debería ser el caso con el ensamblaje por el Asistente. En este artículo anterior, mostré varias formas de acomodar el comercio de múltiples símbolos en los expertos ensamblados por el Asistente modificando el código fuente ensamblado. Un enfoque obvio y primario que no compartí fue realizar múltiples conexiones de señales, donde cada conexión de señal sería para un símbolo específico. Estos encadenamientos múltiples se producen a pesar de encadenar la misma señal. La personalización de la señal en la asignación del símbolo debe hacerse en estos pasos que se indican a continuación:

n1


n2

Del mismo modo, se pueden personalizar múltiples marcos temporales para cada Asesor Experto dentro de una señal como parámetro de entrada (se adjunta código de ejemplo de esto). Sin embargo, el enfoque preferido podría ser asignar cada plazo requerido a una señal y adjuntar independientemente esta señal en el montaje del Asistente. Los pasos para personalizar los marcos de tiempo para cada señal son muy similares a los que compartimos anteriormente con el trading de múltiples símbolos.

f1


f2

Las estrategias de múltiples marcos temporales pueden ser una bendición en casos como cuando se buscan oportunidades de divergencia entre los marcos temporales rastreados, como una tendencia bajista de corto plazo en el marco temporal más rápido (o más corto) que podría ser una señal importante si esto ocurre en el contexto de una tendencia alcista importante en el marco temporal más grande. Como alternativa, se podrían desarrollar estrategias de marcos temporales múltiples en torno a configuraciones de confirmación entre los dos o más marcos temporales probados. Estas y otras razones son las que nos llevan a profundizar en la implementación de estrategias de marcos de tiempo múltiples en Asesores Expertos ensamblados por el Asistente.

De la misma manera, el comercio de múltiples símbolos ya analizado en este artículo, ciertamente amplía las posibilidades de un comerciante. Sin embargo, para este artículo, consideraremos tres pares de divisas que tienen el potencial de cancelarse entre sí en una configuración de arbitraje, pero no buscaremos desarrollar o probar sistemas de arbitraje cubiertos, sino que intentaremos explorar configuraciones de promedios móviles comunes, si las hay, cuando todos los pares están siendo negociados por un Asesor Experto.

El trading de múltiples marcos de tiempo y múltiples símbolos es muy interesante y, sin embargo, debido a cómo se codifican los expertos ensamblados por el Asistente, el diseño inherente es que se agreguen señales paralelas o múltiples en el ensamblaje del Asistente y cada señal agregada atiende a un símbolo o marco de tiempo específico. La razón principal de esto, en mi opinión, se debe a las fases de inicialización del Asistente para ensamblar los Asesores Expertos. Hay 4 fases de inicialización de la clase 'CExpertBase', que sirve como clase ancla no sólo para las señales sino también para la gestión del dinero y del Trailing Stop. Estas fases son el inicio de la Inicialización, la configuración de los valores de los parámetros, la comprobación de los valores de los parámetros y, por último, la finalización de la Inicialización.

Concretamente, en la fase de parametrización es cuando se asigna a una instancia de la clase de señal Experto su símbolo comercial y su marco temporal. Según la documentación, aunque, esto también puede ocurrir en la fase de comprobación de parámetros. Creo que la fase de parametrización se llama fase de ajuste, pero no he encontrado documentación al respecto. Por lo tanto, debido a que un símbolo comercial determina muchos de los parámetros en los que se basaría la clase de señal, como qué precios OHLC cargar, el tamaño del punto, etc., esto es algo que por diseño se establece una vez en la Inicialización. Del mismo modo, el marco temporal utilizado para recuperar las memorias intermedias de precios OHLC tiene que estar predeterminado y esto también ocurre durante la Inicialización, y nunca después.

Por lo tanto, estas restricciones de diseño significan que la forma prevista de utilizar multisímbolos y marcos temporales es cuando se preasigna una instancia de una clase de señal durante el montaje del Asistente, de forma que estos valores de símbolo y marco temporal actúan como parámetros constantes.

Sin embargo, existe una advertencia cuando se trata de operar con múltiples símbolos bajo este régimen de preasignación dentro del Asistente. Como vimos en el artículo multidivisas, todavía tenemos que crear una instancia de matriz de la clase CExpert y reasignar nuestros símbolos comerciales previstos a cada instancia de la clase experta en esta matriz. Parece que lo que hace el Asistente de asignación de símbolos es únicamente determinar qué símbolo se utilizará para obtener los datos de precios de OHLC en las enumeraciones 'USED_SERIES'. Sin embargo, el símbolo real que se negocia después de ser inicializado bajo la clase Symbol-Info 'm_symbol', es el símbolo que se asigna en el primer paso del montaje del Asistente, antes de seleccionar cualquier señal.

s1

Esta restricción en el trading de múltiples símbolos no se refleja en el trading de múltiples marcos de tiempo, ya que la asignación de señal de un marco de tiempo durante el ensamblaje del Asistente es suficiente para garantizar que cada marco de tiempo asignado se utilizará en el procesamiento de señales una vez que el Asesor Experto esté operando.


Implicaciones de la fase de ajuste en la inicialización

Debido a que solo podemos configurar personalizaciones para símbolos comerciales y marcos de tiempo en la inicialización, esta restricción significa que no podemos explorar ni optimizar símbolos comercializables o marcos de tiempo ideales una vez que se ha ensamblado un Asesor Experto. Existen soluciones alternativas a esto donde el símbolo comercial o período de tiempo buscado puede servir como parámetro de entrada para una clase de señal personalizada. Dichos parámetros de entrada tomarían la forma de una cadena y la enumeración de marcos de tiempo, respectivamente. Naturalmente, también tendrían valores predeterminados y, en general, la asignación de valores de marco de tiempo personalizados debería ser más sencilla ya que las opciones provienen de la enumeración ENUM_TIMEFRAMES ya configurada. Sin embargo, cuando se trata de nombres de símbolos para operar, se debe utilizar un paso o función adicional para garantizar que el nombre del símbolo ingresado sea realmente válido, esté incluido en el seguimiento del mercado y sea negociable.


Promedios móviles cuadráticos

Las medias cuadráticas, que también se denominan raíz cuadrática media, son simplemente la raíz cuadrada de la media de todos los valores al cuadrado de un conjunto. Como la mayoría de las medias no aritméticas, tienen un sesgo o ponderación de preferencia y éste, a diferencia de la media geométrica y la media armónica, es hacia los valores más grandes del conjunto. En el diagrama de semicírculo que se mostraba en este artículo anterior, donde se representaban a escala dentro del semicírculo los distintos tipos de medias para dos valores u iguales a y b, se indicaba también la media cuadrática, que equivalía a la longitud de la cuerda marcada Q.

Donde:

  • n : Es el número de valores en el conjunto.
  • x : Son los valores del conjunto en su índice respectivo.

Utilizamos la media cuadrática para desarrollar y probar una señal personalizada que se negocia en múltiples marcos temporales y otra señal personalizada que también se negocia en múltiples símbolos. En el artículo anterior, debido al sesgo o ponderación de preferencia hacia los valores más pequeños en un conjunto para la media geométrica y la media armónica, desarrollamos medias especulares que tenían sesgos hacia los valores más grandes. La implementación de la media cuadrática en MQL5 viene dada por el siguiente código:

//+------------------------------------------------------------------+
//| Quadratic Mean                                                   |
//+------------------------------------------------------------------+
double CSignalQM::QM(int Index, int Mask = 8)
{  vector _f;
   _f.CopyRates(m_symbol.Name(), m_period, Mask, Index, m_length);
   vector _p = _f*_f;
   double _m = _p.Mean();
   return(sqrt(_m));
}

Antes de profundizar y empezar a explorar posibles aplicaciones, sería prudente hacer algo similar para la media cuadrática, ya que se inclina más hacia los valores más grandes, teniendo una media espejo etiquetada (QM) que se pondera más hacia los valores más pequeños. Una vez más, esta dicotomía de ponderación de menor valor frente a ponderación de mayor valor puede permitirnos derivar amortiguadores de precios bajos y amortiguadores de precios altos, respectivamente.

En el artículo anterior, utilizamos estos pares de buffers para generar señales de envolventes (Bandas de Bollinger) y divergencias. Además de estas 2 aplicaciones, podemos generar aplicaciones alternativas si, por ejemplo, derivamos señales OSMA, sin embargo, dado que el propósito principal de este artículo no es la introducción de la media cuadrática o promedios per se, sino el trading de múltiples símbolos y el trading en múltiples marcos de tiempo, nos ceñiremos a las aplicaciones ya presentadas en el artículo anterior. Como siempre, el lector puede modificar independientemente el código adjunto para explorar otras vías de implementación de la media cuadrática.

El espejo 'QM' se puede dar mediante una fórmula similar a la que compartimos en el último artículo:

//+------------------------------------------------------------------+
//| Inverse Quadratic Mean                                           |
//+------------------------------------------------------------------+
double CSignalQM::QM_(int Index, int Mask = 8)
{  double _am = AM(Index, Mask);
   double _qm = QM(Index, Mask);
   return(_am + (_am - _qm));
}

La tesis central de esta fórmula es que la media aritmética proporciona la media más imparcial y justa, lo que implica que cualquier distancia de esta media respecto a una media alternativa puede «reflejarse» si tomamos esta media aritmética bruta como línea de espejo. El código fuente de MQL5 que implementa esto es por lo tanto idéntico al que ya compartimos y no será compartido aquí. Se adjunta a continuación.

Una vez más, nuestro objetivo es mostrar la negociación multisímbolo y multihorario. Dos tipos de Asesores Expertos. Se deduce por tanto que podríamos tener el QM como señal de Bandas de Bollinger para uno y el otro utilizando la señal de divergencia, con ambas implementaciones ya introducidas en el último artículo.

Como hemos destacado anteriormente, los Asesores Expertos reunidos en el Asistente MQL5 fueron diseñados para permitir la prueba (y negociación) de múltiples marcos temporales y múltiples símbolos por señal. Cada señal utilizada por el Asesor Experto obtiene su símbolo personalizado y/o marco de tiempo antes de ser agregada al Asistente. Esto implica que podríamos haber probado múltiples símbolos y múltiples marcos de tiempo en cualquier señal, sin embargo, dado que solo analizamos promedios nuevos en el último artículo, continuamos en esa línea al cubrir medias cuadráticas.


Desarrollo de clases de señales personalizadas con medias cuadráticas

No realizaremos pruebas para el Asesor Experto de símbolos multidivisa, ya que lo montado en el Asistente requiere modificaciones que ya hemos abordado en este artículo. Como se mencionó anteriormente, las pruebas para Asesores Expertos multisímbolo y multitrama de tiempo se pueden realizar con el mismo archivo de señal, ya que estos valores de símbolo y marco de tiempo se asignan por señal. El procesamiento de las condiciones largas y cortas seguirá el enfoque general que tuvimos con la generación de señales para la media geométrica en el artículo anterior. Aunque estamos haciendo algunos cambios ya que en el artículo anterior tratábamos con una sola señal, podíamos permitirnos el lujo de buscar puntos de entrada bruscos como el cruce de bandas superiores del precio que buscábamos cuando buscábamos una señal bajista o el cruce de bandas inferiores que buscaba una señal alcista.

En este artículo, ya que estamos manejando múltiples señales en paralelo, es poco probable que todas tengan un cruce al mismo tiempo, por lo que en lugar de buscar puntos de entrada tan agudos, utilizamos las bandas como un indicador de probabilidad para alcistas y bajistas, midiendo qué tan por encima (para bajistas) o por debajo (para alcistas) está el precio de cierre en relación con la línea de base de las dos bandas. Por lo tanto, cuanto más por encima de la línea de base esté el precio de cierre actual, mayor será la ponderación bajista, y cuanto más por debajo de la línea de base esté el precio de cierre, mayor será la ponderación alcista.

Así, cada una de las señales utilizadas, que se ejecutaron en diferentes marcos temporales, proporcionan una condición alcista o bajista en función de dónde se encuentren las posiciones de sus respectivos precios de cierre. A continuación, estas condiciones se combinan utilizando las ponderaciones individuales optimizadas de las señales para llegar a una única condición, a través de la media ponderada. Es esta media la que determina si se pueden cerrar las posiciones actuales y si se abren nuevas posiciones. El código de nuestras condiciones largas y cortas modificadas se comparte a continuación:

//+------------------------------------------------------------------+
//| "Voting" that price will grow.                                   |
//+------------------------------------------------------------------+
int CSignalQM::LongCondition(void)
{  int result = 0;
   m_close.Refresh(-1);
   if(m_close.GetData(StartIndex()) > m_close.GetData(StartIndex() + 1) && m_close.GetData(StartIndex()) > BandsDn(StartIndex()) && m_close.GetData(StartIndex() + 1) < BandsDn(StartIndex() + 1))
   {  result = int(round(100.0 * ((m_close.GetData(StartIndex()) - m_close.GetData(StartIndex()+1))/(fabs(m_close.GetData(StartIndex()) - m_close.GetData(StartIndex()+1)) + fabs(BandsUp(StartIndex()) - BandsDn(StartIndex()))))));
   }
   return(result);
}
//+------------------------------------------------------------------+
//| "Voting" that price will fall.                                   |
//+------------------------------------------------------------------+
int CSignalQM::ShortCondition(void)
{  int result = 0;
   m_close.Refresh(-1);
   if(m_close.GetData(StartIndex()) < m_close.GetData(StartIndex() + 1) && m_close.GetData(StartIndex()) < BandsUp(StartIndex()) && m_close.GetData(StartIndex() + 1) > BandsUp(StartIndex() + 1))
   {  result = int(round(100.0 * ((m_close.GetData(StartIndex()+1) - m_close.GetData(StartIndex()))/(fabs(m_close.GetData(StartIndex()) - m_close.GetData(StartIndex()+1)) + fabs(BandsUp(StartIndex()) - BandsDn(StartIndex()))))));
   }
   return(result);
}


Aplicación y pruebas prácticas

Una vez que un Experto que utiliza nuestra señal anterior es ensamblado en el Asistente, si estamos utilizando múltiples marcos de tiempo, entonces la parte del encabezado del archivo MQ5 se verá de la siguiente manera:

//+------------------------------------------------------------------+
//|                                                           qm.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\My\SignalWZ_25.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedMargin.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title           = "qm_frame"; // Document name
ulong        Expert_MagicNumber     = 2028; //
bool         Expert_EveryTick       = false; //
//--- inputs for main signal
input int    Signal_ThresholdOpen   = 10;   // Signal threshold value to open [0...100]
input int    Signal_ThresholdClose  = 10;   // Signal threshold value to close [0...100]
input double Signal_PriceLevel      = 0.0;  // Price level to execute a deal
input double Signal_StopLevel       = 50.0; // Stop Loss level (in points)
input double Signal_TakeLevel       = 50.0; // Take Profit level (in points)
input int    Signal_Expiration      = 4;    // Expiration of pending orders (in bars)
input int    Signal_0_QM_Length     = 50;   // QM(50) H1 Averaging Length
input double Signal_0_QM_Weight     = 1.0;  // QM(50) H1 Weight [0...1.0]
input int    Signal_1_QM_Length     = 50;   // QM(50) H4 Averaging Length
input double Signal_1_QM_Weight     = 1.0;  // QM(50) H4 Weight [0...1.0]
input int    Signal_2_QM_Length     = 50;   // QM(50) D1 Averaging Length
input double Signal_2_QM_Weight     = 1.0;  // QM(50) D1 Weight [0...1.0]
//--- inputs for money
input double Money_FixMargin_Percent = 10.0; // Percentage of margin

Como puede verse, asignamos un parámetro de longitud de la media móvil y un parámetro de ponderación a cada uno de los tres marcos temporales elegidos, que en este caso son PERIOD_H1, PERIOD_H4 y PERIOD_D1. Dado que la señal generada para el Asesor Experto es una media ponderada de la distancia entre el precio de cierre y la línea de base de la Banda de Bollinger, esto implica que siempre tenemos una señal en cualquier momento, a diferencia de las entradas bruscas que exploramos con la media geométrica en el artículo anterior. Esto significa que probablemente sería una buena idea realizar pruebas sin objetivos de precio para salidas como Stop Loss o Take Profit. En el último artículo, el único precio objetivo que utilizamos fue el Take Profit. Sin embargo, el precio de Stop Loss nunca está garantizado y, según las pruebas realizadas, la mayoría de las cuentas se quedan sin margen, sobre todo porque el tamaño de la posición era demasiado optimista, en lugar de por no tener Stop Loss. Obviamente, el debate sobre la importancia de un Stop Loss es algo que estoy seguro que continuará, pero esta es mi opinión. Para este artículo, sin embargo, nos ceñiremos únicamente al precio objetivo de toma de beneficios, y el lector es bienvenido a realizar cambios en los parámetros de entrada cuando realice las pruebas para adaptarse a su enfoque de gestión de pérdidas.


Informes y análisis del Probador de estrategias

Si hacemos ejecuciones de prueba para el año 2023 en el marco de tiempo de una hora para el par EURJPY, mientras buscamos una señal equilibrada de los marcos de tiempo de 1 hora, 4 horas y Diario, obtenemos lo siguiente como algunos de nuestros resultados justos:

r2

c2

En cierto sentido, los resultados están muy lejos de lo que conseguíamos cuando confiábamos en las entradas bruscas en los cruces de precios de las bandas superiores e inferiores. Por lo tanto, realizamos pruebas con múltiples marcos temporales mientras utilizábamos la entrada brusca desde el cruce de precios de las Bandas de Bollinger y, sorprendentemente, aparte del rendimiento, el número de operaciones realizadas cuando se esperaban estos cruces fue mayor que en el enfoque de media ponderada que acabamos de adoptar anteriormente. A continuación se presentan los resultados:

r1

c1


Conclusión

En conclusión, hemos mostrado cómo se pueden utilizar múltiples marcos de tiempo en Asesores Expertos ensamblados con el Asistentes. El punto principal que tratamos al mostrar esto es que el proceso de montaje del Asistente permite que cada señal no sólo tenga su propio marco temporal, sino también su propio símbolo. Personalizar una señal asignándole un marco temporal específico implica que los búferes OHLC para esa señal estarán vinculados a ese marco temporal, y este es un proceso relativamente sencillo, a diferencia de la personalización de una señal para operar con un símbolo en particular. Esto se debe a que cuando se asignan señales para operar con un símbolo específico, es necesario realizar cambios adicionales en la instancia de la clase «CExpert», que debe tener un formato de matriz para acomodar cada símbolo que se va a operar. En la demostración de la operativa con marcos temporales múltiples, utilizamos las medias cuadráticas como nuestra señal y, al igual que en el artículo anterior, derivamos una versión especular de la misma que está más ponderada hacia los valores más pequeños en el conjunto promediado, dado que la media cuadrática, por defecto, está más ponderada hacia los valores más grandes. Probamos esto en dos escenarios, uno evaluando siempre las probabilidades y otro buscando señales de entrada específicas, y obtuvimos resultados significativamente diferentes con cualquiera de los dos enfoques.

Sin embargo, en general, el trading en múltiples marcos temporales tiene como objetivo apuntar a los puntos de entrada más precisos o "más correctos" monitoreando simultáneamente un marco temporal amplio para la tendencia macro y seleccionando la señal para la entrada real en el marco temporal más corto. Para este fin, tal vez hubiera sido más prudente utilizar diferentes señales, cada una con un marco temporal diferente, donde el marco temporal más grande adopta el enfoque de probabilidad que consideramos en nuestro primer caso de prueba anterior, y el marco temporal más pequeño considera los puntos de cruce reales como el punto de activación de la señal.

El lector puede implementar y probar esto ya que ambas instancias de estas clases de señales están adjuntas en la parte inferior y, además, existen implementaciones alternativas de múltiples marcos de tiempo que pueden tomar un marco de tiempo indicador como entrada donde este marco de tiempo sería diferente del marco de tiempo del gráfico al que está adjunto el Asesor Experto. Este enfoque proporciona una solución al problema de no poder seleccionar el marco de tiempo óptimo que está presente cuando se asignan marcos de tiempo a una señal durante el ensamblaje del Asistente. Al tenerlo como parámetro de entrada de señal, se podría optimizar para que se ajuste mejor a la estrategia. Curiosamente, este enfoque puede incluso utilizarse para asignar un marco de tiempo a un búfer de serie OHLC personalizado. Su principal deficiencia está en el trading de múltiples símbolos, donde si bien las lecturas de precios e indicadores se pueden hacer a partir de un nombre de símbolo que es un parámetro, las operaciones solo se pueden realizar si se realizan cambios en el archivo Expert ensamblado como se mencionó anteriormente.


Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/15185

Marcel Fitzner
Marcel Fitzner | 5 oct 2024 en 13:22
Además de mostrar cómo se añaden diferentes marcos temporales en el Asistente de EA, el artículo no demuestra cómo se gestiona exactamente la prueba de múltiples marcos temporales en el código, ¿o me estoy perdiendo algo?
Khaled Ali E Msmly
Khaled Ali E Msmly | 8 oct 2024 en 19:44

HolaStephen

Su artículo es muy maravilloso, gracias por ello. ¿Puede adjuntar los archivos para que podamos probarlo, o es el código en el artículo todo el código utilizado en el experimento?

Gestor de riesgos para el trading algorítmico Gestor de riesgos para el trading algorítmico
Los objetivos de este artículo son: demostrar por qué el uso del gestor de riesgos es algo imprescindible, adaptar los principios del riesgo controlado en el trading algorítmico en una clase aparte, de modo que todo el mundo pueda comprobar de forma independiente la eficacia del enfoque de racionamiento del riesgo en el trading intradía y la inversión en los mercados financieros. En este artículo, detallaremos la escritura de una clase de gestor de riesgos para el trading algorítmico como continuación del artículo anterior sobre la escritura de un gestor de riesgos para el trading manual.
Creación de una interfaz gráfica de usuario interactiva en MQL5 (Parte 1): Creación del panel Creación de una interfaz gráfica de usuario interactiva en MQL5 (Parte 1): Creación del panel
Este artículo explora los pasos fundamentales en la elaboración e implementación de un panel de Interfaz Gráfica de Usuario (GUI) utilizando MetaQuotes Language 5 (MQL5). Los paneles de utilidades personalizados mejoran la interacción del usuario en la negociación simplificando las tareas habituales y visualizando la información esencial de la negociación. Al crear paneles personalizados, los operadores pueden agilizar su flujo de trabajo y ahorrar tiempo durante las operaciones.
Uso del algoritmo de aprendizaje automático PatchTST para predecir la acción del precio durante las próximas 24 horas Uso del algoritmo de aprendizaje automático PatchTST para predecir la acción del precio durante las próximas 24 horas
En este artículo, aplicamos un algoritmo de red neuronal relativamente complejo lanzado en 2023 llamado PatchTST para predecir la acción del precio durante las próximas 24 horas. Utilizaremos el repositorio oficial, haremos ligeras modificaciones, entrenaremos un modelo para EURUSD y lo aplicaremos para realizar predicciones futuras tanto en Python como en MQL5.
Algoritmo de evolución del caparazón de tortuga (Turtle Shell Evolution Algorithm, TSEA) Algoritmo de evolución del caparazón de tortuga (Turtle Shell Evolution Algorithm, TSEA)
Hoy hablaremos sobre un algoritmo de optimización único inspirado en la evolución del caparazón de las tortugas. El algoritmo TSEA emula la formación gradual de los sectores de piel queratinizada que representan soluciones óptimas a un problema. Las mejores soluciones se vuelven más "duras" y se encuentran más cerca de la superficie exterior, mientras que las menos exitosas permanecen "blandas" y se hallan en el interior. El algoritmo utiliza la clusterización de soluciones según su calidad y distancia, lo cual permite conservar las opciones menos acertadas y aporta flexibilidad y adaptabilidad.