Mira cómo descargar robots gratis
¡Búscanos en Telegram!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Asesores Expertos

Gold MT5 Fractal Breakout EA - Asesor Experto para MetaTrader 5

chen guang
chen guang
Desarrollador Quant | Especialista en EA y Trading Algorítmico
Especializado en Expert Advisors de alto rendimiento para MT4/MT5, indicadores personalizados y sistemas automatizados con estricta gestión de riesgo.
🚀 Recursos gratis y backtests: rbot.cc
| Spanish English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Visualizaciones:
15
Ranking:
(2)
Publicado:
MQL5 Freelance ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

Resumen

Gold Fractal Breakout EA es un asesor experto de MetaTrader 5 que busca máximos y mínimos de oscilación confirmados y, a continuación, intenta colocar órdenes «Buy Stop» y «Sell Stop» cerca de esos niveles. Su detección de estructuras utiliza barras adyacentes configurables en lugar del indicador iFractals integrado. Las órdenes y las posiciones se identifican mediante el símbolo actual y el número mágico configurado.

La estrategia combina la estructura de precios, las entradas pendientes y la gestión de salidas basada en porcentajes. No traza flechas de entrada, marcadores fractales ni paneles de negociación en el gráfico. La ilustración siguiente explica el concepto de colocación de órdenes; es sintética y no representa operaciones históricas, una captura de pantalla de la terminal ni un rendimiento medido.


Configuración conceptual de compra. Precios ilustrativos; sin datos históricos de rendimiento.

Símbolo y marco temporal

El nombre del producto sugiere que se trata del oro, por lo que un símbolo de oro específico del bróker, como XAUUSD, es el punto de partida previsto para la evaluación. Sin embargo, la fuente opera con el símbolo del gráfico al que está vinculada y no contiene ninguna restricción exclusiva al oro. No se ha proporcionado ninguna evidencia de backtest o forward-test que establezca un símbolo óptimo, un marco temporal o un conjunto de parámetros rentables.

El marco temporal de la estructura está fijado en H1 por la constante interna InpFractalTF. No es un parámetro editable. Incluso cuando el periodo del gráfico o del Strategy Tester es D1, CopyRates lee las barras de H1. Los escaneos se ejecutan en el primer tick disponible tras el intervalo configurado, cuyo valor por defecto es de 15 minutos; la gestión de posiciones se ejecuta en cada tick. Por lo tanto, H1 describe los datos de señal por defecto, no el mejor marco temporal de negociación verificado.

Cómo se interpretan las condiciones de entrada

IsSwingHigh requiere que el máximo candidato sea estrictamente superior a todos los máximos adyacentes anteriores y posteriores seleccionados; IsSwingLow requiere el mínimo correspondiente que sea estrictamente inferior. Con la configuración por defecto, se comprueban cinco barras a cada lado. FindSwing comienza más allá de las cinco barras cerradas más recientes, excluyendo la barra actual de la ventana de confirmación, y devuelve el nivel que cumple los requisitos más reciente. Si no se dispone del historial necesario, no se devuelve ningún nivel.

Para una configuración de compra, el precio de venta (Ask) debe estar por debajo del máximo oscilante en una distancia superior al margen mínimo configurado. Para una configuración de venta, el precio de compra (Bid) debe estar por encima del mínimo oscilante en una distancia superior a ese margen. A continuación, el EA aplica su desplazamiento de entrada, comprueba si existe una orden pendiente en la misma dirección dentro de la distancia de duplicación y verifica que la entrada pendiente se encuentre más allá de la distancia mínima de stop del bróker respecto a la cotización actual.

Entrada de compra = máximo del swing + máximo del swing × desplazamiento de compra / 100. Entrada de venta = mínimo del swing − mínimo del swing × desplazamiento de venta / 100. Ambos desplazamientos por defecto son de −0,10 %, por lo que la entrada de compra se sitúa por debajo del máximo y la entrada de venta, por encima del mínimo. Estos valores por defecto se anticipan al límite del swing en lugar de exigir una ruptura completa más allá de él. La orden solo se envía si su precio es válido para una orden stop en relación con el mercado actual.

Fragmentos clave del código

Los siguientes extractos proceden del archivo MQ5 que se puede descargar actualmente desde esta entrada de CodeBase. Explican partes seleccionadas de la implementación y no son programas independientes.

Se ha corregido el historial de H1 y se han confirmado los candidatos

const ENUM_TIMEFRAMES InpFractalTF     = PERIOD_H1; // Se ha fijado el intervalo de tiempo de los datos H1, independientemente del periodo del gráfico o del probador

double FindSwing(bool high)
  {
//--- Cargar las barras de precios para la búsqueda de oscilaciones
   MqlRates r[];
   ArraySetAsSeries(r,true);
   int need=InpMaxSearchBars+InpFractalLeft+InpFractalRight+5;
   if(CopyRates(_Symbol,InpFractalTF,0,need,r)<need)
      return 0;
//--- Omitir los candidatos no confirmados y buscar de más reciente a más antiguo
   int first=InpFractalRight+1;
   int last=MathMin(InpMaxSearchBars,ArraySize(r)-InpFractalLeft-1);
   for(int i=first;i<=last;i++)
      if(high ? IsSwingHigh(r,i) : IsSwingLow(r,i))
         return high?r[i].high:r[i].low;
   return 0;
  }

La matriz «series» utiliza el índice 0 para la barra actual. Al comenzar en InpFractalRight + 1, se mantienen cerradas todas las barras de confirmación más recientes. Con el recuento predeterminado de cinco a la derecha, el primer candidato es el índice 6 y sus barras de comparación más recientes son los índices del 5 al 1. CopyRates solicita explícitamente datos de H1, independientemente del periodo del gráfico asociado.

Comparación estricta de máximos de oscilación

bool IsSwingHigh(const MqlRates &r[],int i)
  {
//--- Comparar el candidato con las barras anteriores
   for(int k=1;k<=InpFractalLeft;k++)
      if(r[i].high<=r[i+k].high)
         return false;
//--- Comparar el candidato con las barras más recientes
   for(int k=1;k<=InpFractalRight;k++)
      if(r[i].high<=r[i-k].high)
         return false;
   return true;
  }

Un candidato se rechaza cuando cualquier máximo adyacente seleccionado es igual o superior a él. IsSwingLow aplica la comparación inversa correspondiente a los mínimos. Estas funciones identifican la estructura de precios confirmada; no recurren al indicador iFractals integrado.

Desplazamientos de entrada y salidas iniciales

double entry=buy?swing+Pct(swing,InpBuyEntryOffsetPct):swing-Pct(swing,InpSellEntryOffsetPct);

   entry=N(entry);

   if(SimilarPending(type,entry))

      return;

//--- Calcular el stop loss y el take profit iniciales

   double sl=buy?entry-Pct(entry,InpStopLossPct):entry+Pct(entry,InpStopLossPct);

   double tp=buy?entry+Pct(entry,InpTakeProfitPct):entry-Pct(entry,InpTakeProfitPct);

   sl=N(sl);

   tp=N(tp);

Este fragmento procede de PlaceBreakout; buy, swing y type se definen anteriormente en dicha función. Pct calcula un porcentaje de su primer argumento, y N alinea los precios con la cuadrícula de ticks del símbolo. Antes de la normalización, un máximo de oscilación de 3000 con un desplazamiento de compra de -0,10 % da como resultado una entrada de 2997; un mínimo de oscilación de 3000 con un desplazamiento de venta de -0,10 % da como resultado una entrada de 3003. Las comprobaciones posteriores de distancia del bróker, volumen, sesión y margen pueden seguir impidiendo el envío de la orden.

Determinación del tamaño y gestión de posiciones

El modo de lote fijo normaliza InpFixedLots al mínimo, máximo y paso de volumen actuales del símbolo. El modo de porcentaje de riesgo estima el volumen de la orden a partir del saldo actual de la cuenta, el porcentaje de riesgo configurado, la distancia entre la entrada y el stop, y el tamaño y el valor del tick del símbolo almacenados en caché durante la inicialización. Ambos modos limitan el volumen al mínimo y máximo del símbolo y lo redondean a la baja al paso de volumen utilizando la precisión decimal derivada del paso. Los valores inferiores al mínimo se elevan hasta el mínimo, lo que puede aumentar la exposición por encima del tamaño solicitado o de la estimación de riesgo. Una distancia no válida o unas propiedades de tick almacenadas en caché provocan un retorno a los lotes fijos normalizados. Antes del envío, las posiciones en la misma dirección y las órdenes pendientes del símbolo se contabilizan contra el SYMBOL_VOLUME_LIMIT, incluidas las operaciones con otros números mágicos; una capacidad restante insuficiente impide la realización de una nueva orden.

El stop loss y el take profit iniciales se calculan como porcentajes del precio de entrada pendiente. En cada tick, el movimiento favorable se mide a partir del precio de apertura de la posición utilizando el precio de compra (Bid) para las compras y el precio de venta (Ask) para las ventas. Al activarse el umbral de equilibrio, el stop se desplaza hacia una pequeña ganancia asegurada basada en el precio. Las actualizaciones del trailing solo se aplican mientras el movimiento favorable se encuentre entre el umbral del trailing y el porcentaje máximo de trailing.

En el umbral de recuperación de pérdidas, el EA desplaza el take profit a una pérdida menor en relación con el precio de apertura. Esto busca una salida si el precio se recupera posteriormente hacia ese objetivo; no cierra la posición inmediatamente ni garantiza la recuperación. Por ejemplo, el objetivo de rescate predeterminado para las compras es un 0,15 % por debajo del precio de entrada tras un movimiento adverso de al menos un 1,00 %. El objetivo actualizado no se restablece automáticamente al «take profit» original cuando finaliza la condición de pérdida.

Parámetros de entrada

A continuación se enumeran las 25 entradas configurables con sus valores predeterminados de origen. Excepto en el caso de «InpRiskPercent», los ajustes porcentuales describen distancias de precio o movimientos de precio, no la rentabilidad de la cuenta. «InpDuplicatePoints» utiliza puntos del símbolo en lugar de un tamaño de pip universal. La distancia del trailing se basa en la cotización actual; los demás porcentajes de salida descritos aquí se basan en el precio de entrada o de apertura.

Parámetro Valor por defecto Significado e interpretación
InpMagic 900009 Identificador que se utiliza junto con el símbolo del gráfico para seleccionar las órdenes y posiciones de este EA.
InpComment «Estrategia GoldX9 9» Texto adjunto a las órdenes enviadas; el filtrado por titularidad utiliza el símbolo y el número mágico.
InpLotMode LOT_FIXED LOT_FIXED utiliza un volumen fijo; LOT_RISK_PERCENT utiliza un cálculo del tamaño de la posición en función del riesgo sobre el capital.
InpFixedLots 0,01 Volumen solicitado en modo fijo, normalizado según el mínimo, máximo y paso del símbolo; también es el valor de reserva normalizado para propiedades de cálculo del riesgo no válidas.
InpRiskPercent 0,50 Riesgo estimado sobre el capital por orden; no es un límite garantizado de pérdida realizada.
InpMaxPending 3 Órdenes pendientes con el mismo símbolo y número mágico, contabilizadas por separado para cada dirección.
InpMaxPositions 10 Umbral secundario de recuento de posiciones; cualquier posición en un símbolo ya bloquea nuevas entradas y activa la cancelación de las órdenes pendientes que se tengan.
InpPendingExpiryHours 15 Marca de tiempo calculada a partir de este valor; las órdenes siguen utilizando GTC, por lo que no se ha implementado la caducidad temporizada.
InpDuplicatePoints 100 Una entrada pendiente del mismo tipo situada a esta distancia o dentro de ella impide el envío.
InpRescanMinutes 15 Tiempo mínimo entre escaneos de entradas; los escaneos requieren la llegada de un tick.
InpFractalLeft 5 Número de barras vecinas más antiguas en la comparación de oscilaciones estricta.
InpFractalRight 5 Número de barras vecinas cerradas más recientes necesarias para confirmar un swing.
InpMaxSearchBars 200 Índice máximo de la serie candidata examinada; se cargan barras adicionales para realizar comparaciones.
InpMinFractalClearancePct 0,02 Margen de venta por debajo de un máximo o margen de compra por encima de un mínimo, expresado como porcentaje de la oscilación.
InpBuyEntryOffsetPct -0,10 Se suma al máximo de la oscilación; un valor predeterminado negativo sitúa la entrada por debajo del máximo.
InpSellEntryOffsetPct -0,10 Se resta del mínimo del swing; un valor predeterminado negativo sitúa la entrada por encima del mínimo.
InpStopLossPct 2,00 Distancia inicial del stop loss respecto al precio de entrada pendiente.
InpTakeProfitPct 1,00 Distancia inicial del objetivo respecto al precio de entrada pendiente.
InpTrailTriggerPct 0,20 Movimiento mínimo favorable respecto al precio de apertura para las actualizaciones del trailing.
InpTrailDistancePct 0,20 Distancia del stop calculada como porcentaje del precio de compra o venta actual.
InpMaxTrailPct 1,00 Umbral máximo de movimiento favorable para las actualizaciones del trailing; no es un límite máximo de beneficio.
InpSalvageTriggerPct 1,00 Movimiento adverso respecto al precio de apertura que activa el objetivo de rescate.
InpSalvageExitPct 0,15 Distancia del objetivo de pérdida respecto al precio de apertura; no se cierra inmediatamente.
InpBreakEvenTriggerPct 0,10 Movimiento favorable respecto al precio de apertura que activa el bloqueo de beneficios.
InpBreakEvenLockPct 0,025 Beneficio fijado en relación con el precio de apertura, antes de gastos.

Organización del código y dependencias

La única inclusión es <Trade/Trade.mqh>, la interfaz de negociación de la biblioteca estándar de MetaTrader 5. Su objeto CTrade, «trade», envía órdenes pendientes, asigna el número mágico del experto, solicita modificaciones de posición y proporciona descripciones de los resultados de las operaciones. No se utiliza para la detección de oscilaciones ni para el cálculo del tamaño del lote. No se hace referencia a ningún indicador personalizado, DLL externa, servicio web ni archivo de inclusión personalizado adicional.

OnInit almacena en caché el tamaño del punto del símbolo, los dígitos, el tamaño del tick y el valor del tick, y comprueba cuatro entradas de recuento positivo. OnTick cancela las entradas pendientes restantes cuando existe una posición en un símbolo, revisa el margen pendiente, gestiona las posiciones y limita los escaneos de entrada solo cuando no existe ninguna posición en un símbolo. OnTradeTransaction también activa la cancelación de las órdenes pendientes tras una operación. Pct y N gestionan las distancias porcentuales y la normalización decimal; OurOrder y OurPosition filtran la titularidad; CountPositions y CountPending imponen límites de tiempo de búsqueda; FindSwing y los auxiliares de oscilación identifican la estructura; SimilarPending, LotsForRisk, PlaceBreakout y ManagePositions implementan comprobaciones de duplicados, cálculo de tamaño, envío y salidas.

Las variables globales internas son trade (la interfaz de negociación), g_last_scan (la hora del último escaneo), g_point (tamaño del punto del símbolo), g_digits (decimales del precio), g_tick_size (incremento del tamaño del tick) y g_tick_value (valor del tick registrado). «InpFractalTF» es una constante interna fijada en «PERIOD_H1». Estas variables internas y la constante del marco temporal no son datos introducidos por el usuario. El EA utiliza las API integradas en la terminal para los precios, el historial, el saldo de la cuenta, las órdenes y las posiciones.

Límites de implementación que hay que comprender antes de realizar las pruebas

InpPendingExpiryHours se utiliza para calcular una marca de tiempo de vencimiento, pero las llamadas a órdenes utilizan explícitamente ORDER_TIME_GTC. Por lo tanto, el código actual no implementa el modo de vencimiento basado en horas anunciado. La limpieza impulsada por el margen puede eliminar las órdenes pendientes de este EA cuando su margen de activación estimado supere el presupuesto de margen libre almacenado en el búfer. Esto no es una caducidad basada en horas. Las entradas pendientes propias se cancelan cuando se detecta una posición abierta en el símbolo. Un nuevo swing por sí solo no cancela las órdenes existentes.

Cualquier posición abierta en el símbolo actual bloquea ahora el envío de nuevas órdenes pendientes, independientemente del número mágico. Tras un evento de operación y los ticks posteriores, el EA intenta cancelar sus órdenes pendientes restantes en ese símbolo. Las órdenes propiedad de otros EA no se cancelan. La eliminación puede retrasarse debido a una zona de congelación o a una sesión cerrada; la cancelación por parte del cliente no es una garantía OCO atómica por parte del servidor. InpMaxPositions sigue siendo un control de recuento secundario, pero no autoriza entradas adicionales mientras exista una posición. El porcentaje de riesgo se aplica por orden propuesta, en lugar de como un límite agregado de la cartera. Los requisitos de volumen mínimo del bróker, el volumen fijo de reserva, los precios de ejecución y los costes de negociación pueden hacer que la exposición real difiera de la estimada. La fuente no contiene ningún filtro de riesgo de spread ni de stop-loss agregado. Comprueba las sesiones de negociación del bróker antes del envío de órdenes y la modificación de posiciones, estima el margen de activación independiente para todas las órdenes pendientes de la cuenta y deja un 20 % del margen libre actual como colchón. Si el volumen normalizado solicitado no cabe en el presupuesto de margen de reserva restante, se omite toda la orden y se registra el motivo. El volumen no se reduce para ajustarse al presupuesto de margen. Las órdenes opuestas no se benefician de ningún alivio de margen por compensación.

Los precios se redondean a la cuadrícula de tamaño de tick del símbolo almacenada en caché y, a continuación, se normalizan a los dígitos del símbolo. Tanto los volúmenes fijos como los basados en el riesgo se normalizan según las especificaciones de volumen del símbolo. Las solicitudes de modificación de salida comprueban las zonas de congelación de SL/TP existentes y las distancias de stop/congelación propuestas, e informan de los resultados rechazados por el servidor. Los intentos de modificación se limitan a uno cada cinco segundos por ciclo de gestión. El EA también comprueba previamente las solicitudes pendientes utilizando OrderCheck antes de su envío. El envío comprueba tanto el valor de retorno de CTrade como el código de resultado del servidor. En caso de fallo, se registra el volumen normalizado solicitado y el mínimo, el máximo, el paso y el límite direccional del símbolo. La inicialización también registra estas especificaciones.

Durante la inicialización, el código fuente comprueba los recuentos de vecinos fractales, los límites de órdenes pendientes y de posiciones, el volumen fijo finito positivo y el porcentaje de riesgo finito positivo cuando se selecciona el cálculo del tamaño del riesgo. Varios otros rangos no se comprueban. Las posiciones opuestas independientes son más fáciles de interpretar en una cuenta de cobertura; en una cuenta de compensación, las órdenes sobre el mismo símbolo afectan a una posición compartida. El código fuente actualizado se ha compilado sin errores ni advertencias. El usuario informó de 50 operaciones en EURUSD H1 con compensación y 40 operaciones en XAUUSD D1 con compensación antes de la incorporación de estas últimas medidas de protección; la ejecución del XAUUSD también informó de errores de sesión, de margen y de modificación congelada. Las medidas de protección actualizadas aún no se han vuelto a probar en esas condiciones. Los horarios de sesión no garantizan la disponibilidad durante cierres excepcionales, y una brecha, un cambio repentino en el capital o una orden pendiente congelada pueden seguir impidiendo la limpieza oportuna del margen. No se garantizan resultados de rendimiento.


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

Prop Firm Equity Guard - Daily Loss Limit and Max Drawdown Protection Prop Firm Equity Guard - Daily Loss Limit and Max Drawdown Protection

Cierra todas las operaciones y bloquea las nuevas cuando se alcanza el límite de pérdidas diario, la pérdida máxima o el objetivo de ganancias. Diseñado para los retos de las empresas de trading por cuenta propia. Funciona con el trading manual y con cualquier otro EA.

Session High Low - Asian, London and New York Range Boxes Session High Low - Asian, London and New York Range Boxes

Traza los rangos de las sesiones de Asia, Londres y Nueva York en forma de recuadros de colores con sus máximos y mínimos, además de líneas de extensión punteadas para la negociación de rupturas. Los mismos rangos se muestran en todos los marcos temporales hasta H1.

London Breakout EA: sencillo y transparente/El asesor técnico London Breakout: sencillo y transparente London Breakout EA: sencillo y transparente/El asesor técnico London Breakout: sencillo y transparente

EA gratuito de ruptura: rango asiático, ruptura en Londres, una operación al día, stop loss siempre activado, lote en función del % de riesgo. Sin grid, sin martingala. / Asesor gratuito: ruptura del rango asiático en la sesión de Londres, una operación al día, stop loss siempre activado, lot en función del porcentaje de riesgo. Sin grid ni martingala.

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

El indicador Acceleration/Deceleration (AC, Aceleración/Desaceleración) mide la aceleración y la desaceleración de la fuerza impulsora del mercado.