1. Tipos de Enum (enumJnsSignal, enumOrderType)
- enumJnsSignal Este enum define el tipo de señal utilizada en el EA. Hay dos opciones de señal:
- `eTypeCrossMA`: Utiliza la señal de Cross 2 MA(el cruce de dos medias móviles).
- eTypeTrend`: Sigue la tendencia utilizando Medias Móviles y Estocástico.
- enumOrderType Este enum define el tipo de orden:
- `eBuy`: Orden de compra .
- `eSell`: Orden de venta .
- `eNone`: No se ha ejecutado ninguna orden.
2. Parámetros de entrada
- inMagicNumber Un número mágico único utilizado para distinguir las órdenes de este EA.
- inLotSize El tamaño de lote inicial para cada orden.
- inMultiply Factor multiplicador utilizado en la estrategia de tamaño de lote.
- inJarakLayer La distancia en pips entre las posiciones de negociación en la estrategia de rejilla/capa.
- inMAPeriodFast & inMAPeriodSlow Los periodos para medias móviles rápidas y lentas.
- inSTOKPeriod, inSTODPeriod, inSTOSlowing Parámetros para el Oscilador Estocástico.
- inTakeProfit & inStopLoss Los parámetros para Take Profit y Stop Loss.
3. Struct dataTrades
- Esta estructura se utiliza para almacenar datos relacionados con las posiciones de negociación abiertas, como el número total de posiciones (`ttlPos`), el precio medio de las posiciones (`hargaTA`, `hargaTB`), y el volumen total (`ttlLot`).
4. Función OnInit()
- Esta función se encarga de la inicialización del EA, incluyendo la validación de los parámetros de entrada (por ejemplo, asegurándose de que el periodo MA rápido es menor que el periodo MA lento) y la creación de manejadores para los indicadores MA y Estocástico.
5. Función OnTick()
- La función principal ejecutada cada vez que el precio se mueve (tick).
- Llama a la función para comprobar si hay una nueva señal con GetSignal(), y si se encuentra una señal, se utiliza manageTrading() para ejecutar operaciones.
- También llama a setTPSL() para asegurar que el Take Profit y el Stop Loss están siempre actualizados.
6. Función isNewCandle()
- Esta función detecta si se ha formado una nueva vela. Esto es importante porque el EA busca señales sólo en formaciones de velas nuevas.
7. Función GetSignal()
- Esta función determina si existe una señal de operación válida basada en la estrategia seleccionada:
- Para eTypeCrossMA, la señal se determina por el cruce de las medias móviles rápida y lenta.
- Para eTypeTrend, la señal utiliza la confirmación de MA y Estocástico.
8. Función manageTrading()
- Esta función gestiona la ejecución de las operaciones.
- Si se detecta una señal válida, el EA abre una posición con el tamaño de lote determinado mediante la función getLotSize().
- También se aplica una estrategia de rejilla/capa para abrir posiciones adicionales basadas en la distancia del precio (`inJarakLayer`).
9. Función updateDataTrades()
- Esta función actualiza los datos relacionados con las posiciones de negociación en curso, como el cálculo del precio medio y el volumen total de las posiciones abiertas.
10. Función openTrade()
- Esta función abre una nueva posición de negociación basada en la señal generada y el tamaño de lote calculado. Utiliza OrderSend() para ejecutar la orden.
11. Función setTPSL()
- Esta función establece o actualiza el Take Profit y Stop Loss para cada posición abierta.
12. Función modifTPSL()
- Esta función modifica el Take Profit y Stop Loss de las posiciones existentes si los valores difieren de los previamente establecidos.
13. Función validateLot()
- Esta función asegura que el tamaño de lote utilizado se encuentra dentro del rango mínimo y máximo permitido, así como en línea con el paso de lote mínimo (`gLotStep`).
14. Función getLotSize()
- Esta función calcula el tamaño de lote a utilizar basándose en el tamaño de lote inicial y el número de posiciones ya abiertas, teniendo en cuenta el factor multiplicador (`inMultiply`).
Este código está diseñado para capturar las tendencias del mercado y gestionar las posiciones de negociación de forma automática utilizando señales técnicas de Medias Móviles y Estocásticos.