Inicio Trading Sistemático Publicación

Babi Ngepet: Asesor Experto para MetaTrader 5 que Revoluciona el Trading

Archivos adjuntos
64444.zip (7.11 KB, Descargar 3 veces)

Parámetros del Asesor Experto (Inputs)

El Asesor Experto (AE) Babi Ngepet ofrece varios parámetros externos que puedes ajustar para controlar su comportamiento:

Parámetros Generales

Parámetro Tipo Descripción
MagicNumber int Un identificador único para las operaciones del AE.
InitialLot double El tamaño de lote inicial para la primera operación en una serie.
AllowBuy bool Permite que el AE abra operaciones de compra (inicial y Martingale).
AllowSell bool Permite que el AE abra operaciones de venta (inicial y Martingale).
TakeProfit int Un Take Profit fijo en puntos/pips que se usa al colocar órdenes pendientes (aunque no para ejecución en mercado).
FindHighLowBackBars int El número de barras anteriores para buscar el máximo y mínimo históricos para la colocación inicial de órdenes pendientes.
ResetAfterBars int El número de barras tras el cual se eliminarán las órdenes pendientes iniciales y se re-evaluarán (si no hay posición abierta).

Estrategia Martingale

Parámetro Tipo Descripción
ReverseMartingale bool Si es verdadero, las operaciones de Martingale serán en la dirección opuesta a la última operación de la serie (esto sería típicamente un enfoque de anti-Martingale o cobertura, pero el código abre en la misma dirección si es falso). La lógica actual sugiere abrir en la misma dirección si ReverseMartingale es falso.
LotMultiplier double El factor por el cual se multiplica el tamaño del lote para la siguiente operación en la serie con pérdidas (por ejemplo, 2.0 significa duplicar el lote).
SecureProfitMartingaleTarget double El beneficio flotante total (en moneda de la cuenta) en el que se cerrarán todas las operaciones abiertas de la serie.
DistanceMartingalePips int La distancia (en pips) que el precio debe moverse en contra del precio de apertura de la última operación antes de abrir una nueva operación de Martingale.
MaxTradesInSeries int El número máximo de operaciones permitidas en una única serie de Martingale.

Estrategia por Tiempo

Parámetro Tipo Descripción
AllowMonday - AllowFriday bool Flags para habilitar o deshabilitar el trading en días específicos de la semana.
ForbiddenDates string Una lista separada por comas de fechas (formato AAAA.MM.DD) en las que se prohíbe el trading.

Resumen de Funciones Clave

OnInit() (Inicialización)

Establece el MagicNumber del AE, el modo de margen y la desviación. Reinicia el estado de Martingale (s_currentLot, s_totalTradesInSeries, etc.) a sus valores iniciales, preparándose para un nuevo comienzo.

OnDeinit() (Desinicialización)

Una función simple para limpieza, imprimiendo un mensaje cuando el AE se detiene o se elimina.

IsTradingDateAllowed() y IsTradingDayAllowed() (Filtros de Trading)

Estas funciones verifican el día y la fecha actuales contra los parámetros definidos por el usuario (AllowMonday a AllowFriday y ForbiddenDates) para determinar si se permite operar.

OpenTradeLogic(ENUM_ORDER_TYPE type, string tradeComment) (Ejecución en Mercado)

Esta función maneja la apertura de nuevas posiciones en el mercado (Compra o Venta).

  1. Valida y normaliza el tamaño del lote de acuerdo con el mínimo, máximo y tamaño de paso del broker.
  2. Verifica que haya margen libre suficiente usando CheckMargin().
  3. Ejecuta la operación sin un Take Profit o Stop Loss fijos (tp_calculated es 0).
  4. Actualiza las variables de estado de Martingale: s_currentLot, s_lastOpenPrice, s_seriesType y s_totalTradesInSeries.

CloseAllPositions()

Itera a través de todas las posiciones abiertas y cierra las que fueron abiertas por este AE (que coincidan con el MagicNumber).

PendingOrders(ENUM_ORDER_TYPE type, double price, double lotSize, string comment) (Colocación de Órdenes Pendientes)

Esta función coloca órdenes de Buy Limit o Sell Limit:

  1. Valida el tamaño del lote y verifica el margen suficiente.
  2. Valida el precio de entrada contra la distancia mínima del broker (SYMBOL_TRADE_STOPS_LEVEL).
  3. Calcula un Take Profit fijo (tp) basado en el parámetro TakeProfit.
  4. Envía la solicitud de operación. Nota: La función UpdateHighLowAndOrders llama a esto para colocar órdenes iniciales de Buy Limit y Sell Limit.

UpdateHighLowAndOrders() (Lógica de Entrada Inicial)

Este es el mecanismo de entrada inicial cuando no hay posiciones abiertas:

  1. Busca hacia atrás FindHighLowBackBars para encontrar el Máximo Máximo y Mínimo Mínimo.
  2. Calcula priceSellLimit (Máximo Máximo + 1 tick) y priceBuyLimit (Mínimo Mínimo - 1 tick).
  3. Verifica si ya existen órdenes Buy Limit y Sell Limit con el MagicNumber del AE.
  4. Coloca una orden Sell Limit inicial justo por encima del máximo reciente y una orden Buy Limit justo por debajo del mínimo reciente, cada una utilizando el InitialLot.

OnTick() (Lógica Principal)

El núcleo de la lógica de ejecución del AE:

  1. Chequeo de Tiempo: Previene cálculos redundantes en el mismo tick.
  2. Chequeo de Filtros: Si no se permite el trading por día/fecha, elimina todas las órdenes pendientes.
  3. Chequeo de Objetivo de Beneficio (Salida de Serie): Si eaHasOpenPositions es verdadero Y totalFloatingProfit es SecureProfitMartingaleTarget, llama a CloseAllPositions() y reinicia todas las variables de estado de Martingale para iniciar una nueva serie.
  4. Colocación de Orden Inicial: Si !eaHasOpenPositions Y se permite operar, reinicia el estado de Martingale y verifica si se ha formado una nueva barra.
    • Si se ha formado una nueva barra, verifica si barsCount es ResetAfterBars. Si es así, elimina las órdenes pendientes y llama a UpdateHighLowAndOrders() para colocar nuevas órdenes iniciales. Si no, simplemente llama a UpdateHighLowAndOrders().
  5. Lógica de Paso de Martingale: Si eaHasOpenPositions es verdadero Y s_totalTradesInSeries es < MaxTradesInSeries:
    • Verifica si totalFloatingProfit es negativo Y el precio se ha movido en contra de la última operación abierta por al menos DistanceMartingalePips.
    • Si ambas condiciones se cumplen, calcula el nextLot multiplicando s_currentLot por LotMultiplier.
    • Determina la dirección orderToOpen (ya sea en la misma dirección que la serie o al revés, según ReverseMartingale).
    • Llama a OpenTradeLogic() para abrir la nueva posición multiplicada, continuando la serie de Martingale.

Resumen de la Estrategia

El AE "Babi Ngepet" implementa una estrategia de Martingale arriesgada pero potencialmente de alta recompensa, combinada con una entrada inicial de ruptura/reversa de rango:

  1. Entrada Inicial: El AE coloca un Buy Limit (debajo del mínimo reciente) y un Sell Limit (por encima del máximo reciente). Esto sugiere una suposición inicial de comportamiento dentro del rango: entra en compra cuando el precio cae a un mínimo y en venta cuando el precio sube a un máximo.
  2. Gestión de Operaciones: Si una de las operaciones iniciales se activa y la posición se mueve hacia una pérdida agregada (beneficio flotante negativo), y el precio sigue moviéndose en contra de las posiciones abiertas por una distancia definida, el AE abre una nueva posición en la misma dirección con un tamaño de lote mayor (Martingale).
  3. Estrategia de Salida: La serie de operaciones sigue aumentando el tamaño del lote hasta que el beneficio flotante agregado de todas las operaciones de la serie alcanza el SecureProfitMartingaleTarget, momento en el cual se cierran todas las posiciones y el AE se reinicia para una nueva serie.

Advertencia: La estrategia de Martingale es conocida por sus altos drawdowns y alto riesgo de pérdida de capital debido a que el tamaño del lote aumenta después de cada paso perdedor.


Publicaciones relacionadas

Comentarios (0)