English Русский 中文 Deutsch 日本語 Português
preview
De novato a experto: Noticias animadas utilizando MQL5 (VI) Estrategia de órdenes pendientes para el trading basado en noticias

De novato a experto: Noticias animadas utilizando MQL5 (VI) Estrategia de órdenes pendientes para el trading basado en noticias

MetaTrader 5Trading |
90 0
Clemence Benjamin
Clemence Benjamin

Contenido:



Introducción

La integración de alertas en la versión anterior de nuestro asesor experto supuso un importante avance, transformándolo en una valiosa herramienta para los operadores que trabajan manualmente con noticias. Sin embargo, persiste una limitación clave: el asesor experto aún no ha automatizado la ejecución de las operaciones. Hoy, nuestro objetivo es subsanar esa deficiencia integrando la clase CTrade para permitir el trading automático basado en eventos noticiosos.

Las versiones anteriores de nuestro proyecto ya ofrecían varias ventajas, cada nueva característica diseñada para resolver un problema específico y mejorar el valor práctico del asesor experto. Aquí tienes un breve resumen de algunos de esos beneficios:

  • Acceso cómodo al calendario de noticias: Los usuarios pueden ver los próximos eventos económicos directamente en el gráfico sin interrumpir su flujo de trabajo de trading o análisis.
  • Titulares de noticias económicas en tiempo real: Hemos integrado Alpha Vantage como nuestra fuente de noticias, proporcionando titulares actualizados para mantener informados a los operadores.
  • Información integrada sobre indicadores: Mediante la API MQL5, pudimos obtener datos de indicadores técnicos y mostrar información personalizada en paneles del gráfico.
  • Información generada por IA: Conectamos modelos de IA locales para generar información sobre el mercado, añadiendo una dimensión analítica sofisticada, aunque esto provocó cierta ralentización que afectó a la velocidad de desplazamiento entre los diferentes paneles.

Con estos sólidos cimientos establecidos, ahora estamos listos para afrontar el siguiente desafío: convertir automáticamente las señales de noticias en ejecuciones de operaciones reales dentro del asesor experto.



Descripción general de la estrategia para la integración de órdenes pendientes

En última instancia, el éxito o el fracaso de todo asesor experto depende de la lógica que rige cuándo y cómo opera. Hasta el momento, nuestro proyecto del Asesor Experto News Headline se ha centrado en una potente experiencia visual y un sistema de alertas para eventos económicos. Hemos creado paneles para eventos, teletipos de noticias e incluso análisis basados en inteligencia artificial que se desplazan por el gráfico. Sin embargo, si bien todas estas herramientas son útiles, dejan al operador a cargo de ejecutar las operaciones manualmente. El siguiente paso lógico es convertir este asesor experto en un sistema de trading autónomo que no solo informe, sino que actúe con decisión cuando surjan oportunidades.

Nos estamos preparando para integrar la lógica de trading de órdenes pendientes para capturar la volatilidad que suelen desatar las noticias económicas de gran impacto. Esta fase de planificación es crucial porque, sin un plan sólido, la implementación puede volverse fácilmente caótica o propensa a errores.

La necesidad de una lógica de trading en los asesores expertos

Un asesor experto puramente informativo, por muy impresionante que sea visualmente, sigue siendo pasivo. Para automatizar las operaciones, un asesor experto necesita reglas claras para:

  1. Momento oportuno: Cuándo realizar las operaciones.
  2. Dirección: Si conviene comprar, vender o mantenerse neutral.
  3. Tipo de orden: Indica si se deben colocar órdenes de mercado, órdenes límite u órdenes stop.
  4. Controles de riesgo: Cómo definir los niveles de stop-loss y take-profit.
  5. Lógica de limpieza: Cómo eliminar o modificar órdenes cuando cambian las circunstancias.

En nuestro caso, elegimos intencionadamente condiciones basadas en el tiempo para ejecutar las operaciones. Este enfoque es especialmente adecuado para el trading de noticias, ya que se conoce de antemano el momento en que se publicarán las noticias. A diferencia de las configuraciones que se basan exclusivamente en patrones gráficos o señales de indicadores, este enfoque utiliza el calendario de noticias programado como principal desencadenante de la actividad de trading.

Observaciones del mercado que respaldan la estrategia

Tras meses de observación y pruebas, hemos observado un patrón de comportamiento recurrente del mercado: los mercados suelen experimentar una contracción de la volatilidad unos minutos antes de la publicación de datos económicos importantes. La liquidez puede disminuir ligeramente a medida que los operadores y las instituciones esperan al margen nueva información. Luego, cuando se difunde la noticia, los precios suelen subir o bajar bruscamente, impulsados tanto por operadores humanos como por sistemas algorítmicos que reaccionan a los nuevos datos.

Este marcado movimiento posterior a las noticias puede ser:

  1. Una ruptura alcista si la noticia sorprende positivamente.
  2. Una ruptura bajista si la noticia impacta negativamente al mercado.

Este repunte de la volatilidad crea un terreno propicio para las estrategias basadas en órdenes pendientes, diseñadas para aprovechar cualquier ruptura que se produzca en el mercado.

El plan maestro de órdenes pendientes

Nuestro enfoque para operar con las noticias se basará en dos órdenes de stop pendientes:

  1. Una orden Buy Stop, colocada por encima del precio reciente del mercado, para aprovechar las rupturas alcistas.
  2. Una orden Sell Stop, colocada por debajo del precio del mercado, para aprovechar las rupturas bajistas.

Tenemos la intención de colocar estas órdenes un número específico de minutos antes de la publicación programada de la noticia (según lo definido por nuestro parámetro de entrada InpOrderMinutesBefore). Esto le da al asesor experto tiempo para preparar las órdenes, minimizando al mismo tiempo la exposición al ruido de mercado falso.

La lógica es elegante:

Si la noticia tiene el impacto suficiente como para provocar un movimiento decisivo en los precios, se debería activar una de estas órdenes pendientes, lo que nos permitiría aprovechar el impulso en esa dirección. En cuanto se completa una orden, se elimina la orden opuesta para evitar quedar atrapado en una reversión.

Sin el paso de eliminación, ambas órdenes podrían ejecutarse en rápida sucesión, un fenómeno conocido como “whipsaw” o un movimiento brusco con giro rápido del precio. Esto puede provocar que ambas operaciones se cierren con pérdidas, lo que desvirtúa el objetivo de la estrategia.

Gestión de riesgos en el trading de noticias

Operar con noticias conlleva riesgos únicos. A diferencia de las configuraciones tradicionales que evolucionan gradualmente, las noticias económicas pueden provocar que un par de divisas salte decenas de pips en milisegundos. Los diferenciales se amplían, se produce un deslizamiento y los precios presentan brechas.

En el asesor experto que estamos diseñando, la gestión de riesgos no será una cuestión secundaria, sino un principio de diseño fundamental.

Estamos incorporando varias capas de protección a la estrategia:

1. Distancias fijas de Stop-Loss y Take-Profit

Exponemos InpStopLossPips e InpTakeProfitPips como entradas. Esto permite un control preciso sobre hasta dónde puede moverse el precio en nuestra contra antes de que limitemos las pérdidas, y hasta dónde pretendemos dejar que lleguen las ganancias. Por ejemplo, un stop loss de 10 pips y un take profit de 20 pips crean un perfil de riesgo-recompensa controlado de 2:1.

2. Compensación por spread y tamaño de tick

Antes de realizar las órdenes, calculamos el spread actual y lo incorporamos al offset de la orden pendiente. Esto evita que el diferencial active "accidentalmente" nuestras órdenes ante meras fluctuaciones entre la oferta y la demanda, preservando así la integridad de nuestros niveles de entrada previstos.

3. Cálculos dinámicos de pips

Los pares como el USDJPY tienen convenciones de pip diferentes (0,01) en comparación con el EURUSD (0,0001). Nuestro asesor experto lee el tamaño del tick y los dígitos del símbolo, lo que garantiza que nuestros niveles de SL, TP y pendientes se calculen correctamente para cada instrumento.

4. Limpieza de órdenes no ejecutadas

Una vez que se activa una operación, el asesor experto elimina instantáneamente la orden opuesta. Esto evita la doble exposición durante los picos caóticos.

Todas estas medidas están diseñadas para garantizar que nuestro asesor experto opere con la disciplina de un operador humano experimentado, sin pánico ni impulsos. En condiciones volátiles como los viernes de NFP (nóminas no agrícolas), estas medidas de protección son cruciales.

Comprender el papel de CTrade

Un elemento central de nuestro plan es la clase CTrade, una capa de abstracción de alto nivel que engloba las funciones de trading de bajo nivel de MQL5. Sin CTrade, nos veríamos obligados a construir manualmente cada estructura MqlTradeRequest y MqlTradeResult, gestionar los códigos de retorno y administrar docenas de escenarios de error. CTrade se encarga de:

  • Empaquetar las órdenes con la estructura adecuada.
  • Comprobación de los permisos del símbolo y de los requisitos de margen.
  • Gestión del deslizamiento mediante ajustes de desviación.
  • Seguimiento de los números de ticket para su posterior modificación o eliminación.
  • Registro de eventos y manejo de errores.

En la práctica, en lugar de escribir páginas de lógica de solicitud, simplemente llamaremos a:

trade.BuyStop(volume, price, symbol, stoploss, takeprofit);
trade.SellStop(volume, price, symbol, stoploss, takeprofit);
trade.OrderDelete(ticket);

Es más rápido, más limpio y reduce drásticamente el riesgo de errores.

Nuestro plan de integración

En resumen, la integración de nuestras órdenes pendientes seguirá este flujo conceptual:

1. Examine el calendario económico para identificar el próximo evento de gran impacto.

2. Calcula la diferencia horaria entre el momento actual y el evento.

3. Coloque las órdenes pendientes un número determinado de minutos antes de la hora de las noticias:

  • Calcule el precio de referencia a partir de la apertura M1 más cercana.
  • Sume o reste compensaciones de pips, ajustando según el spread.
  • Calcula los precios de stop-loss y take-profit.

4. Utilice los métodos de CTrade para enviar órdenes Buy Stop y Sell Stop.

5. Supervise las posiciones abiertas:

  • En cuanto se active una orden, elimine la orden hermana.

6. Gestionar el riesgo:

  • Aplicar distancias SL/TP fijas.
  • Asegúrese de cancelar las órdenes pendientes si ya no son necesarias.

Este diseño garantiza que estaremos preparados para actuar con la máxima rapidez, manteniendo la exposición y el riesgo bajo control.

En resumen, he presentado todo el proceso de desarrollo en detalle, destacando cada paso involucrado en la integración de la lógica de trading basada en noticias en nuestro asesor experto. Para complementar esta explicación, también he incluido un diagrama de flujo que representa visualmente las etapas de desarrollo y las decisiones clave que deben tomarse a lo largo del proceso. Esto proporciona una visión general completa para cualquier persona que desee comprender tanto los aspectos técnicos como prácticos de la implementación de dicha estrategia en MQL5.

Diagrama de flujo de desarrollo

Diagrama de flujo de los procesos de desarrollo

Los conceptos anteriores sientan las bases para la siguiente etapa: la implementación real de MQL5. En la siguiente fase, traduciremos este plan a código, conectaremos la lógica de CTrade, la integraremos en nuestro bucle de temporizador y probaremos exhaustivamente cómo se comporta el asesor experto en torno a eventos noticiosos en directo.

Aquí es donde nuestro asesor experto "News Headline" se transforma de una herramienta puramente informativa en un potente sistema de trading autónomo, capaz de reaccionar en milisegundos y aprovechar oportunidades que ningún operador manual podría capturar con tanta rapidez.


Implementación

Esta etapa se centra en el proceso de integración práctica, proporcionando un desglose detallado del código y explicaciones para garantizar una comprensión clara. Aquí presentamos la clase CTrade, que incorporamos incluyendo su archivo de cabecera al principio del código de nuestro asesor experto, tal y como se muestra en el fragmento de código resaltado que aparece a continuación. Tómese su tiempo para revisar cada fragmento de código y su explicación correspondiente para comprender en profundidad cómo funciona la integración y cómo se conectan los diferentes componentes dentro del asesor experto.

1. Configuración y configuración de operaciones

Justo después de nuestros lienzos estándar para dibujar gráficos y variables de análisis de IA, declaramos un único objeto CTrade trade junto con un puñado de variables globales: ordersPlaced, nextEventTime y dos identificadores de tickets (ticketBuyStop, ticketSellStop). Este bloque se encuentra junto con nuestras entradas para el volumen, los desplazamientos de pips, el stop-loss/take-profit en pips y la configuración de "minutos antes". Al centralizar estos parámetros en la sección "ORDER EXECUTION INPUTS" y crear una única instancia de CTrade, aprovechamos los métodos de alto nivel de la biblioteca MQL5 Trade, manteniendo al mismo tiempo la posibilidad de personalizar todos los parámetros desde el cuadro de diálogo de Entradas del asesor experto.

#include <Trade/Trade.mqh>
//…
CTrade trade;
bool   ordersPlaced    = false;
datetime nextEventTime = 0;
ulong  ticketBuyStop   = 0;
ulong  ticketSellStop  = 0;
//--- ORDER EXECUTION INPUTS ---
input int    InpOrderMinutesBefore  = 3;    
input double InpOrderVolume         = 0.10; 
input double InpStopOffsetPips      = 5.0;  
input double InpStopLossPips        = 20.0; 
input double InpTakeProfitPips      = 40.0; 

2. Identificando el próximo evento noticioso

En ReloadEvents(), después de obtener y ordenar los eventos de alto/medio/bajo impacto de hoy, calculamos nextEventTime encontrando la marca de tiempo más temprana entre solo aquellos niveles de importancia que el usuario ha habilitado para operar. Al establecer ordersPlaced = false y poner a cero ambas variables de ticket cada vez que se actualiza la lista de eventos, se garantiza que cada nuevo ciclo de publicación de noticias comience desde cero, sin indicadores persistentes ni órdenes pendientes huérfanos.

void ReloadEvents()
{
  // … calendar fetching and sorting …

  // pick next event only from enabled levels
  datetime th = INT_MAX;
  if(InpTradeHigh && ArraySize(highArr)>0) th = MathMin(th, highArr[0].time);
  if(InpTradeMed  && ArraySize(medArr)>0)  th = MathMin(th, medArr[0].time);
  if(InpTradeLow  && ArraySize(lowArr)>0)  th = MathMin(th, lowArr[0].time);
  nextEventTime = (th==INT_MAX ? 0 : th);

  // reset order flags
  ordersPlaced   = false;
  ticketBuyStop  = ticketSellStop = 0;
}

3. Determinación del momento oportuno para el período de órdenes pendientes

Dentro de OnTimer(), comparamos la hora actual del servidor (now) con nextEventTime – InpOrderMinutesBefore*60. En cuanto el reloj entra en ese intervalo —y solo una vez por evento, gracias a nuestro filtro «ordersPlaced»—, procedemos a crear dos órdenes de stop pendientes (de compra y de venta). Esta separación entre «cuándo operar» y «cómo operar» mantiene clara nuestra lógica de timing y evita las reentradas repetidas.

void OnTimer()
{
  datetime now       = TimeTradeServer();
  datetime placeTime = nextEventTime - InpOrderMinutesBefore*60;

  if(!ordersPlaced && nextEventTime>now && now>=placeTime)
  {
    // … compute prices and place orders …
    ordersPlaced = true;
  }

  // … rest of drawing, alerts, AI, etc. …
}

4. Cálculo de precios con precisión de pips y colocación de órdenes

Para calcular los niveles de precios que respeten el tamaño del tick de cada símbolo, obtenemos SYMBOL_POINT y consideramos que un «pip» equivale a diez puntos, incluso en los pares con el yen japonés. A continuación, calculamos la apertura exacta de la vela M1 en el momento objetivo mediante iBarShift + iOpen. Los desplazamientos de los niveles de entrada, stop-loss y take-profit se multiplican por el valor en pips y se suman o restan al precio de apertura de la vela. Antes de enviar las órdenes, cada precio bruto se procesa mediante NormalizeDouble(..., SYMBOL_DIGITS) para cumplir con los requisitos de precisión del bróker. Por último, llamamos a trade.SetExpertMagicNumber() y a trade.BuyStop(...) / trade.SellStop(...). En segundo plano, la clase CTrade se encarga de la llamada a OrderSend(), la comprobación de resultados y la notificación de errores, por lo que el código de nuestro asesor experto sigue siendo conciso.

// inside the placement block in OnTimer()
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double pip   = point * 10.0;

// find the bar open at target time
int idx = iBarShift(_Symbol, PERIOD_M1, placeTime, false);
if(idx >= 0)
{
  double baseOpen = iOpen(_Symbol, PERIOD_M1, idx);
  double ask      = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
  double bid      = SymbolInfoDouble(_Symbol, SYMBOL_BID);
  double spreadPips = (ask - bid) / pip;

  double offsetP = (spreadPips + InpStopOffsetPips) * pip;
  double slP     = InpStopLossPips   * pip;
  double tpP     = InpTakeProfitPips * pip;

  double rawBuy  = baseOpen + offsetP;
  double rawSell = baseOpen - offsetP;
  double rawBsl  = rawBuy  - slP;
  double rawBtp  = rawBuy  + tpP;
  double rawSsl  = rawSell + slP;
  double rawStp  = rawSell - tpP;

  int d = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
  double buyPrice  = NormalizeDouble(rawBuy,  d);
  double sellPrice = NormalizeDouble(rawSell, d);
  double buySL     = NormalizeDouble(rawBsl,  d);
  double buyTP     = NormalizeDouble(rawBtp,  d);
  double sellSL    = NormalizeDouble(rawSsl,  d);
  double sellTP    = NormalizeDouble(rawStp,  d);

  trade.SetExpertMagicNumber(123456);
  trade.SetDeviationInPoints(10);

  ticketBuyStop  = trade.BuyStop (InpOrderVolume, buyPrice,  _Symbol, buySL,  buyTP) ? trade.ResultOrder() : 0;
  ticketSellStop = trade.SellStop(InpOrderVolume, sellPrice, _Symbol, sellSL, sellTP) ? trade.ResultOrder() : 0;
}

5. Eliminación de órdenes no ejecutadas

Inmediatamente después de que se hayan colocado las órdenes pendientes, el asesor experto sigue consultando PositionSelect(_Symbol). Cuando uno de nuestros stops se convierte en una posición abierta, detectamos el lado ejecutado mediante PositionGetInteger(POSITION_TYPE) y, a continuación, llamamos a trade.OrderDelete() en el ticket opuesto. Al dividir esto en dos instrucciones independientes (una para eliminar la orden y otra para restablecer el ID del ticket a cero), la lógica queda muy clara: CTrade vuelve a abstraer el protocolo de bajo nivel, lo que garantiza que este proceso de cancelación quede bien resuelto.

// later in OnTimer()
if(ordersPlaced && PositionSelect(_Symbol))
{
  long ptype = PositionGetInteger(POSITION_TYPE);
  if(ptype==POSITION_TYPE_BUY && ticketSellStop>0)
  {
    trade.OrderDelete(ticketSellStop);
    ticketSellStop = 0;
  }
  if(ptype==POSITION_TYPE_SELL && ticketBuyStop>0)
  {
    trade.OrderDelete(ticketBuyStop);
    ticketBuyStop = 0;
  }
}

Poniendo todo en su sitio

Al combinar estas secciones —datos de entrada y variables globales, selección de eventos, sincronización, cálculo del precio con precisión al pip, colocación de órdenes pendientes con tecnología CTrade y limpieza automática—, hemos transformado un asesor experto centrado principalmente en la visualización en un sistema de piloto automático totalmente basado en las noticias. El encabezado Trade.mqh se encarga de toda la infraestructura (formato de las órdenes, envío/modificación/eliminación, almacenamiento de tickets y resultados), lo que permite que nuestro asesor experto se centre en el «qué» (parámetros de la operación y sincronización de los eventos) en lugar del «cómo» (creación de estructuras MqlTradeRequest sin procesar). Para tu comodidad, al final de este artículo se incluye el código fuente completo e integrado del asesor experto, con todas las partes unidas, listo para compilar y cargar en MetaTrader 5.


Pruebas

Resultado de la prueba preliminar:

2025.07.15 13:45:02.348  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.922 sl: 148.128 tp: 147.522 [invalid price]
2025.07.15 13:49:02.373  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: buy stop 0.10 USDJPY.0 at 147.951 sl: 147.740 tp: 148.351 [invalid price]
2025.07.15 13:49:02.374  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.929 sl: 148.140 tp: 147.529 [invalid price]

Durante nuestra fase inicial de pruebas, el asesor experto se encontró con varios errores de «precio no válido» al intentar colocar órdenes pendientes de compra stop y venta stop, como se desprende de entradas del registro tales como CTrade::OrderSend: venta stop 0,10 USDJPY.0 a 147,922; sl: 148,128; tp: 147,522 [precio no válido]. Estos errores se debieron a dos descuidos fundamentales en la implementación inicial: en primer lugar, el asesor experto no gestionó adecuadamente los tamaños de pip y tick específicos de cada instrumento, y en segundo lugar, intentó calcular los precios basándose en cotizaciones de compra/venta en tiempo real, que fluctúan rápidamente y pueden incumplir restricciones del bróker, como las distancias mínimas de los niveles de stop. Para solucionar esto, hemos revisado la lógica para que tenga en cuenta el precio de apertura de la vela M1 más reciente que se haya cerrado unos minutos antes de la publicación de la noticia. Esto proporcionó una referencia más estable y fiable para calcular los precios de entrada pendientes.

Además, obtuvimos dinámicamente el tamaño del pip del símbolo mediante SymbolInfoDouble(SYMBOL_POINT) y calculamos los valores de los pips utilizando una escala basada en el tamaño del tick, lo que garantiza la coherencia en instrumentos como el USDJPY, que suelen utilizar tres decimales (0,001), en comparación con instrumentos de cinco decimales como el EURUSD (0,00010). Todos los precios calculados se normalizaron además mediante NormalizeDouble(precio, dígitos) para ajustarlos a la precisión del símbolo. Esta doble mejora —un precio de referencia estable y un formato de precios correcto— garantizó que todas las órdenes pendientes queden dentro de rangos válidos, resolvió por completo los errores de precios no válidos e hizo que el asesor experto fuera seguro y adaptable a cualquier par de divisas.

Pruebas finales

Durante mis pruebas, me centré en un evento de gran repercusión que se avecinaba: el discurso del gobernador del Banco de Inglaterra, Bailey, que aparecía en el calendario de asesor experto como «un evento de alto impacto marcado en rojo». En el momento de capturar las imágenes de prueba, el asesor experto mostró correctamente una cuenta atrás que indicaba «5 minutos restantes» para este evento. Sabiendo que nuestra lógica está configurada para colocar órdenes pendientes tres minutos antes de una publicación prevista, esperé deliberadamente otros dos minutos para ver si el asesor experto iniciaría la operación tal y como se esperaba.

Ventana de aviso que informa de un evento que tendrá lugar en 5 minutos

La configuración predeterminada coloca las órdenes exactamente tres minutos antes de la hora del evento. Sin embargo, las pruebas prácticas de un asesor experto basado en noticias de este tipo plantean retos específicos, sobre todo porque el Probador de estrategias de MetaTrader 5 no es del todo adecuado para simular eventos del calendario económico en tiempo real. El simulador de estrategias funciona reproduciendo los datos de cotización del mercado, pero no tiene acceso a datos de calendario en tiempo real ni admite solicitudes HTTP asíncronas de la misma forma que durante el funcionamiento en tiempo real. Esto significa que no podemos «avanzar rápidamente» hasta los comunicados de prensa en el simulador ni validar todo el proceso del asesor experto —desde la obtención de los titulares de las noticias hasta la ejecución de las operaciones— en condiciones de tiempo real.

Prueba del asesor experto para la colocación de órdenes pendientes

Para superar esta limitación, una técnica práctica consiste en ajustar el parámetro de entrada que define con cuántos minutos de antelación al evento noticioso se colocan las órdenes pendientes. Por ejemplo, supongamos que hay un evento noticioso real programado dentro de 50 minutos y quieres evitar tener que esperar casi una hora. En su lugar, puedes ajustar temporalmente el tiempo de espera de las órdenes pendientes, cambiando el valor predeterminado de 3 minutos a, por ejemplo, 45 minutos. De esta forma, podrás comprobar si el asesor experto activa su lógica de colocación de órdenes con rapidez, sin tener que esperar mucho tiempo. Si coloca las órdenes correctamente al utilizar este desfase horario modificado, te da la seguridad de que la lógica de automatización del asesor experto también funcionará correctamente cuando el evento esté más cerca en situaciones reales.

Durante mi prueba, probé a utilizar un stop-loss y un take-profit de 20 pips, pero me parecieron un poco elevados para mi gusto y para el tamaño de mi cuenta de trading. Para muchos operadores minoristas, un stop de 10 pips puede ser una opción más conservadora y práctica, dependiendo del saldo de la cuenta y de la tolerancia al riesgo. En definitiva, el asesor experto es lo suficientemente flexible como para permitirte ajustar tus niveles de stop-loss y take-profit de acuerdo con tu estrategia personal de gestión de riesgos.



Conclusión

Lo que comenzó como un sencillo sistema de visualización de noticias y eventos se ha convertido ahora en una sofisticada solución de trading y visualización de noticias, basada en una sólida estrategia de órdenes pendientes. A lo largo de este proceso, hemos podido comprobar de primera mano la extraordinaria flexibilidad de MQL5, que se integra a la perfección con sistemas externos —desde motores de inteligencia artificial y API de noticias hasta las potentes herramientas analíticas integradas en la plataforma—. Este proceso ha sido sencillamente increíble, ya que ha puesto de manifiesto las posibilidades prácticamente infinitas que ofrece MQL5 para el trading algorítmico.

Nuestro asesor experto se ha convertido en una obra maestra casi perfecta del trading basado en noticias, que combina visualizaciones en tiempo real en los gráficos, una lógica de trading automatizada y una gestión de riesgos disciplinada. Gracias a los ajustes preestablecidos personalizables, los operadores pueden ajustar la configuración para encontrar sus parámetros óptimos y pueden implementar el asesor experto en un servidor privado virtual (VPS), lo que le permite funcionar como un compañero fiable para el trading basado en noticias las 24 horas del día.

En esta versión actual, hemos realizado nuestras pruebas sin configurar la clave de la API de noticias y sin conectarnos al servidor de IA. Esta decisión deliberada nos permitió centrarnos por completo en perfeccionar la lógica de trading, garantizando la estabilidad y evitando una sobrecarga del rendimiento durante las pruebas. Incluso sin estas integraciones activadas, observamos un funcionamiento fluido y fiable en el manejo de eventos y la ejecución de operaciones.

Para quienes estén interesados en ampliar aún más el EA, he adjuntado los archivos necesarios para configurar un modelo de IA local. Si quieres profundizar en esa configuración, vuelve a consultar el artículo en el que detallamos los pasos a seguir.

Aunque el asesor experto ya cuenta con numerosas funciones, aún hay mucho margen para introducir mejoras adicionales. Si el tiempo y las circunstancias lo permiten, tenemos previsto publicar versiones futuras con funciones aún más avanzadas.

Os invito cordialmente a que me enviéis vuestras opiniones, comentarios y resultados de las pruebas. Juntos podemos seguir perfeccionando esta herramienta y continuar explorando las nuevas posibilidades del trading algorítmico basado en noticias.


Conclusiones principales

LecciónDescripción
Gestión de eventos con OnTimerEl uso de la función OnTimer() permite que tu asesor experto realice acciones según un horario fijo, como consultar las horas de publicación de noticias, actualizar gráficos o gestionar operaciones sin depender de nuevos ticks.
Uso de CTrade para la gestión de órdenesLa clase CTrade simplifica la creación, modificación y cierre de órdenes sin necesidad de escribir código de bajo nivel para las solicitudes de trading, lo que garantiza una lógica de trading más estable y fácil de mantener.
Gestión dinámica de arraysEl manejo de matrices en MQL5, como cambiar su tamaño y ordenarlas, es fundamental para gestionar listas de eventos, datos de precios u otros conjuntos de datos dinámicos.
Manejo y análisis de cadenasAnalizar respuestas JSON o de texto, recortar cadenas y gestionar subcadenas es fundamental a la hora de integrar API web o crear mensajes personalizados para los usuarios en tu asesor experto.
Principios de gestión de riesgosCalcular correctamente el tamaño de las posiciones, así como las distancias de stop-loss y take-profit, es fundamental para mantener la solidez de la cuenta y reducir la exposición a picos bruscos e impredecibles del precio durante la publicación de noticias.
Integración de WebRequestMQL5 permite enviar solicitudes HTTP/HTTPS a servidores externos, lo que habilita funciones como la obtención de titulares de noticias o predicciones de IA, lo que aporta datos externos de gran valor a las estrategias de trading.
Dibujo en lienzo gráficoCCanvas y otras clases similares te permiten dibujar elementos visuales personalizados en los gráficos, desde texto que se desplaza hasta gráficos, lo que hace posible crear superposiciones avanzadas de interfaz de usuario directamente en los gráficos de MetaTrader 5.
Precisión específica del símboloCada símbolo puede tener diferentes tamaños de puntos y pips o diferentes números de decimales. Ajusta siempre los cálculos, como las compensaciones de precio y los niveles de stop-loss (SL) y take-profit (TP), para que se adapten a la precisión del símbolo y así evitar errores en las órdenes.
Números mágicosLos números mágicos identifican de forma única las órdenes de un asesor experto concreto, lo que permite gestionar las posiciones de forma segura y evitar conflictos con otros asesores expertos u operaciones manuales.
Depuración y registroEl uso de Print(), Alert() y los mecanismos de registro ayuda a localizar errores y a observar el comportamiento de las estrategias de asesor experto durante el desarrollo y el trading en vivo.


Archivos adjuntos

Nombre del archivoVersiónDescripción
News Headline EA.mq51.10Asesor experto de MetaTrader 5 que combina eventos del calendario económico, titulares de noticias de Alpha Vantage, análisis de indicadores técnicos, análisis de mercado basados en inteligencia artificial, alertas, notificaciones push y ejecución automática de operaciones basadas en noticias con gestión dinámica de pips.
download_model.py
Script de Python que descarga y guarda un modelo de aprendizaje automático necesario para generar información sobre el mercado de la IA. Garantiza que el componente de IA del asesor experto disponga localmente del archivo de modelo necesario para realizar predicciones.
serve_insights.pyServicio web en Python que se ejecuta localmente para aceptar solicitudes HTTP POST del EA y responder con análisis del mercado generados por IA. Actúa como backend de IA para proporcionar información en tiempo real sobre los paneles en el asesor experto.

Volver al índice

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

Archivos adjuntos |
download_model.py (0.28 KB)
serve_insights.py (1.77 KB)
Simulación de mercado: Position View (VII) Simulación de mercado: Position View (VII)
En este artículo, comenzaremos a realizar algunas mejoras en el indicador de posición, para poder interactuar con él y modificar las líneas de precio, o cerrar una posición directamente mediante la interacción con el indicador de posición. Antes de entrar realmente en la implementación, conviene aclarar algo, sobre todo para quienes no estén al tanto. No es posible, de ninguna manera, usar un indicador para modificar algo en el servidor de trading. Esto se debe a que MetaTrader 5 cuenta con un sistema de seguridad que permite únicamente a los Asesores Expertos actuar sobre una orden o una posición. Ninguna otra aplicación que no sea un Asesor Experto podrá manipular órdenes o posiciones.
Del básico al intermedio: Navegando por la SandBox Del básico al intermedio: Navegando por la SandBox
En este artículo veremos dos formas de observar e incluso tener cierta interacción con el contenido de una SandBox, tomando MetaTrader 5 como base. Entender el contenido que se muestra en este artículo será fundamental para entender lo que se verá en los próximos artículos.
Del básico al intermedio: Como burbujas de jabón Del básico al intermedio: Como burbujas de jabón
En este artículo, se explicará un mecanismo muy simple y fácil de entender, cuyo propósito es ordenar un array cualquiera. En él, veremos que no siempre el resultado obtenido es el que esperamos tener, por lo que será necesario adaptar la propia implementación para conseguir los resultados adecuados.
Simulación de mercado: Position View (VI) Simulación de mercado: Position View (VI)
En este artículo, haremos diversas mejoras para que el indicador de posición refleje lo que realmente ocurre en el servidor de trading, en términos de posiciones y del estado actual de estas. Debo recordar que estas aplicaciones, que se mostrarán aquí, no pretenden en ningún caso sustituir ningún elemento disponible en MetaTrader 5. Tampoco deben usarse sin los debidos cuidados y criterios, ya que su objetivo es presentar un código didáctico, es decir, con fines de aprendizaje sobre cómo funciona el sistema. El motivo por el que digo que el código es didáctico es que el uso de mensajes, en algunos casos, no es la mejor forma de implementar ciertas funcionalidades.