Composite MA
- Indicadores
- Versión: 2.2
- Actualizado: 8 noviembre 2025
- Activaciones: 20
Indicador MA compuesto - Guía completa
Descripción:
El indicador MA compuesto es una sofisticada herramienta de análisis de tendencias en múltiples marcos temporales que calcula el valor medio de múltiples medias móviles en un intervalo de periodos definido por el usuario. Proporciona una visualización completa de la tendencia del mercado a través de una línea de media móvil compuesta codificada por colores en el gráfico y un panel de estilo Excel que muestra la dirección de la tendencia en 21 marcos temporales diferentes. El indicador utiliza la tecnología canvas para una representación fluida de la interfaz gráfica y ofrece un análisis de la tendencia en tiempo real en múltiples marcos temporales.
Utilidad:
Este indicador es excepcionalmente valioso para los operadores que buscan un contexto de mercado completo en múltiples marcos temporales. Ayuda a identificar la dirección, la fuerza y la consistencia de la tendencia en varios horizontes de negociación, desde gráficos de minutos hasta mensuales. El enfoque compuesto suaviza el ruido de las MA individuales, proporcionando señales de tendencia más fiables. El panel visual permite una rápida evaluación de la alineación del sentimiento del mercado, permitiendo una mejor sincronización de entrada/salida y confirmación de los cambios de tendencia.
Concepto lógico:
La lógica básica consiste en calcular varias medias móviles (de PeriodFrom a PeriodTo) y calcular su valor medio para crear una MA compuesta. Esta línea compuesta cambia de color según la dirección de la tendencia (azul para tendencia alcista, rojo para tendencia bajista). Para el análisis de marcos temporales múltiples, el indicador calcula MA compuestas separadas para cada marco temporal habilitado y compara los valores actuales con los anteriores para determinar la dirección de la tendencia. El exclusivo sistema de flechas muestra tanto la dirección de la MA compuesta como la posición del precio en relación con la MA compuesta.
Metodología de Detección de Tendencia:
-
Tendencia en un solo marco temporal: Compara el valor actual de la MA compuesta con el valor anterior. Los valores al alza indican una tendencia alcista (azul), los valores a la baja indican una tendencia bajista (rojo).
-
Alineación multitemporal: Analice la consistencia de la tendencia a través de los marcos temporales. Las tendencias fuertes muestran una dirección uniforme en varios plazos.
-
Evaluación de la fuerza de la tendencia: Cuente cuántos plazos se alinean en la dirección. Un mayor número de plazos alineados indica un mayor impulso de la tendencia.
-
Detección de reversión: Esté atento a los cambios en los colores y direcciones de las flechas en varios plazos simultáneamente.
Uso del indicador para los movimientos de tendencias e índices:
-
Identificación de la tendencia principal: Utilice la línea MA compuesta del gráfico principal para la dirección de la tendencia en el marco temporal actual.
-
Confirmación en múltiples marcos temporales: Compruebe la alineación del panel: las entradas óptimas se producen cuando varios plazos muestran la misma dirección.
-
Medición de la fuerza de la tendencia: Cuente los estados "Arriba" o "Abajo" a través de los marcos temporales - las señales más consistentes indican tendencias más fuertes
-
Detección de divergencias: Busque desacuerdos entre marcos temporales (por ejemplo, H1 al alza pero M15 a la baja) que sugieran posibles retrocesos.
-
Niveles de soporte/resistencia: Utilice valores MA compuestos de plazos superiores como soporte/resistencia dinámicos
-
Las flechas▲ y ▼ indican la posición del precio del índice en relación con el precio MA compuesto para el marco temporal correspondiente
Código básico de integración de EA MQL5:
//+------------------------------------------------------------------+ //|Muestra compuesta MA EA | //+------------------------------------------------------------------+ #property copyright "2025" #property version "1.00" #property description "EA using Composite MA Indicator" //--- Parámetros de entrada input group "=== Composite MA Settings ===" input int MA_PeriodFrom = 1; // Período inicial MA input int MA_PeriodTo = 100; // MA Período final input int MA_Shift = 0; // Turno MA input ENUM_MA_METHOD MA_Method = MODE_SMA; // Método MA input ENUM_APPLIED_PRICE MA_Price = PRICE_CLOSE; // MA Precio aplicado input ENUM_TIMEFRAMES MA_Timeframe = PERIOD_CURRENT; // Marco temporal MA input group "=== Trading Settings ===" input double LotSize = 0.1; // Tamaño del lote input int MagicNumber = 12345; // Número mágico input int Slippage = 3; // Deslizamiento //--- Variables globales int composite_ma_handle; // Mango para el indicador Composite MA //+------------------------------------------------------------------+ //| Función de inicialización experta| //+------------------------------------------------------------------+ int OnInit() { //--- Crear manija de indicador MA Compuesto composite_ma_handle = iCustom(_Symbol, _Period, "Composite MA.ex5", true, // Trendline_ON MA_PeriodFrom, MA_PeriodTo, MA_Shift, MA_Method, MA_Price, MA_Timeframe, 200, // Barras de visualización false, // Panel_ON - apaga el panel en EA false, false, false, false, false, false, false, false, false, false, // Todos los paneles temporales M desactivados false, false, false, false, false, false, false, false, // Todos los paneles horarios H desactivados false, false, false, // Paneles D1, W1, MN1 apagados clrDodgerBlue, clrRed, clrGray, clrBrown // Colores ); if(composite_ma_handle == INVALID_HANDLE) { Print("Error creating Composite MA indicator handle: ", GetLastError()); return INIT_FAILED; } Print("Composite MA indicator loaded successfully"); return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ //| Función tick experto| //+------------------------------------------------------------------+ void OnTick() { //--- Comprobar si tenemos suficientes barras if(Bars(_Symbol, _Period) < 100) return; //--- Obtener valores MA compuestos double ma_current = GetCompositeMAValue(0); // Barra actual double ma_previous = GetCompositeMAValue(1); // Barra anterior if(ma_current == 0 || ma_previous == 0) return; //--- Obtener el precio actual double current_price = SymbolInfoDouble(_Symbol, SYMBOL_ASK); //--- Lógica de negociación bool buy_signal = ma_current > ma_previous && current_price > ma_current; bool sell_signal = ma_current < ma_previous && current_price < ma_current; //--- Comprobar las posiciones existentes bool has_buy = PositionExists(POSITION_TYPE_BUY); bool has_sell = PositionExists(POSITION_TYPE_SELL); //--- Ejecutar señales de trading if(buy_signal && !has_buy) { if(has_sell) ClosePosition(POSITION_TYPE_SELL); OpenPosition(POSITION_TYPE_BUY); } else if(sell_signal && !has_sell) { if(has_buy) ClosePosition(POSITION_TYPE_BUY); OpenPosition(POSITION_TYPE_SELL); } } //+------------------------------------------------------------------+ //| Obtener el valor MA compuesto del buffer del indicador || //+------------------------------------------------------------------+ double GetCompositeMAValue(int shift) { double ma_value[1]; ArraySetAsSeries(ma_value, true); if(CopyBuffer(composite_ma_handle, 0, shift, 1, ma_value) < 1) { Print("Error copying Composite MA buffer: ", GetLastError()); return 0; } return ma_value[0]; } //+------------------------------------------------------------------+ //| Comprobar si la posición existe| //+------------------------------------------------------------------+ bool PositionExists(ENUM_POSITION_TYPE type) { for(int i = 0; i < PositionsTotal(); i++) { if(PositionGetSymbol(i) == _Symbol && PositionGetInteger(POSITION_MAGIC) == MagicNumber) { if(PositionGetInteger(POSITION_TYPE) == type) return true; } } return false; } //+------------------------------------------------------------------+ //| Posición abierta| //+------------------------------------------------------------------+ void OpenPosition(ENUM_POSITION_TYPE type) { MqlTradeRequest request = {0}; MqlTradeResult result = {0}; request.action = TRADE_ACTION_DEAL; request.symbol = _Symbol; request.volume = LotSize; request.magic = MagicNumber; request.slippage = Slippage; if(type == POSITION_TYPE_BUY) { request.type = ORDER_TYPE_BUY; request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK); } else { request.type = ORDER_TYPE_SELL; request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID); } if(!OrderSend(request, result)) { Print("Error opening position: ", GetLastError()); } } //+------------------------------------------------------------------+ //| Posición de cierre| //+------------------------------------------------------------------+ void ClosePosition(ENUM_POSITION_TYPE type) { for(int i = 0; i < PositionsTotal(); i++) { if(PositionGetSymbol(i) == _Symbol && PositionGetInteger(POSITION_MAGIC) == MagicNumber) { if(PositionGetInteger(POSITION_TYPE) == type) { MqlTradeRequest request = {0}; MqlTradeResult result = {0}; request.action = TRADE_ACTION_DEAL; request.symbol = _Symbol; request.volume = PositionGetDouble(POSITION_VOLUME); request.magic = MagicNumber; if(type == POSITION_TYPE_BUY) { request.type = ORDER_TYPE_SELL; request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID); } else { request.type = ORDER_TYPE_BUY; request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK); } if(!OrderSend(request, result)) { Print("Error closing position: ", GetLastError()); } break; } } } } //+------------------------------------------------------------------+ //| Función de desinicialización experta| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(composite_ma_handle != INVALID_HANDLE) { IndicatorRelease(composite_ma_handle); Print("Composite MA indicator handle released"); } } //+------------------------------------------------------------------+
Notas importantes para los desarrolladores de EA:
-
Sólo los timeframes visibles tienen datos válidos - compruebe los parámetros de entrada para ver qué timeframes están habilitados
-
Interpretación de valores de estado:
-
1.0 = Tendencia alcista
-
-1.0 = Tendencia a la baja
-
0.0 = Plano
-
-2.0 = No disponible/no calculado
-
-
Los búferes de precios contienen el valor real de la MA compuesta para ese marco temporal específico
-
El indicador sólo calcula para las últimas barras DisplayBars , por lo que copiar datos históricos más allá de ese rango puede devolver ceros.
Mapeo de Búferes Clave para Desarrolladores de EAs:
-
Buffer 0: CompositeMABuffer - Principales valores MA compuestos
-
Buffer 1: ColorBuffer - Índice de color (0=Azul/Arriba, 1=Rojo/Abajo)
-
Búferes 2-22: Búferes de estado del marco temporal (M1 a MN1) - Valores: 1=Arriba, -1=Abajo, 0=Plano, -2=N/A
-
Búferes 23-43: Valores MA compuestos para cada marco temporal.
Este indicador proporciona un sólido análisis de tendencias en múltiples marcos temporales que los desarrolladores de EA pueden aprovechar para crear sofisticados sistemas de decisión comercial.
