Composite MA
- Indikatoren
- Pavel Golovko
- Version: 2.2
- Aktualisiert: 8 November 2025
- Aktivierungen: 20
Composite MA Indicator - Umfassender Leitfaden
Beschreibung:
Der Composite-MA-Indikator ist ein hochentwickeltes Multi-Timeframe-Trendanalyse-Tool, das den Durchschnittswert mehrerer gleitender Durchschnitte über einen benutzerdefinierten Zeitraum berechnet. Er bietet eine umfassende Visualisierung des Markttrends durch eine farbkodierte gleitende Durchschnittslinie auf dem Chart und ein Excel-ähnliches Panel, das die Trendrichtung über 21 verschiedene Zeitrahmen anzeigt. Der Indikator verwendet die Canvas-Technologie für eine reibungslose GUI-Darstellung und bietet Echtzeit-Trendanalysen für mehrere Zeitrahmen.
Nützlichkeit:
Dieser Indikator ist besonders wertvoll für Händler, die einen umfassenden Marktkontext über mehrere Zeitrahmen hinweg suchen. Er hilft bei der Identifizierung von Trendrichtung, Stärke und Konsistenz über verschiedene Handelshorizonte hinweg, von Minuten- bis zu Monatscharts. Der zusammengesetzte Ansatz glättet das Rauschen der einzelnen MAs und liefert zuverlässigere Trendsignale. Das visuelle Panel ermöglicht eine schnelle Bewertung der Marktstimmung und damit ein besseres Timing für den Ein- und Ausstieg sowie die Bestätigung von Trendumkehrungen.
Logisches Konzept:
Die Kernlogik umfasst die Berechnung mehrerer gleitender Durchschnitte (von PeriodeVon bis PeriodeZu) und die Berechnung ihres Durchschnittswerts zur Erstellung eines zusammengesetzten MA. Diese zusammengesetzte Linie ändert ihre Farbe je nach Trendrichtung (blau für Aufwärtstrend, rot für Abwärtstrend). Für die Analyse mehrerer Zeitrahmen berechnet der Indikator separate zusammengesetzte MAs für jeden aktivierten Zeitrahmen und vergleicht die aktuellen mit den vorherigen Werten, um die Trendrichtung zu bestimmen. Das einzigartige Pfeilsystem zeigt sowohl die Richtung des zusammengesetzten MA als auch die Preisposition relativ zum zusammengesetzten MA an.
Methodik der Trenderkennung:
-
Einzelner Zeitrahmen-Trend: Vergleichen Sie den aktuellen Composite-MA-Wert mit dem vorherigen Wert. Steigende Werte zeigen einen Aufwärtstrend (blau), fallende Werte einen Abwärtstrend (rot) an.
-
Multi-Timeframe-Ausrichtung: Analysieren Sie die Trendkonsistenz über mehrere Zeitrahmen hinweg. Starke Trends zeigen eine einheitliche Richtung über mehrere Zeitrahmen hinweg.
-
Bewertung der Trendstärke: Zählen Sie, wie viele Zeitrahmen in der Richtung übereinstimmen. Mehr übereinstimmende Zeitrahmen weisen auf eine stärkere Trenddynamik hin.
-
Erkennung von Umkehrungen: Achten Sie auf Änderungen der Pfeilfarben und Richtungen in mehreren Zeitrahmen gleichzeitig
Verwendung des Indikators für Trend- und Index-Bewegungen:
-
Identifizierung des Haupttrends: Verwenden Sie die zusammengesetzte MA-Linie des Hauptdiagramms für die Trendrichtung des aktuellen Zeitrahmens
-
Multi-Timeframe-Bestätigung: Prüfen Sie das Panel auf Ausrichtung - optimale Einstiegsmöglichkeiten ergeben sich, wenn mehrere Zeitrahmen die gleiche Richtung aufweisen
-
Messung der Trendstärke: Zählen Sie den "Up"- oder "Down"-Status über alle Zeitrahmen hinweg - konsistentere Signale weisen auf stärkere Trends hin
-
Divergenz-Erkennung: Suchen Sie nach Unstimmigkeiten zwischen den Zeitrahmen (z. B. H1 aufwärts, aber M15 abwärts), die auf potenzielle Umkehrungen hindeuten.
-
Unterstützungs-/Widerstandsniveaus: Verwenden Sie zusammengesetzte MA-Werte aus höheren Zeitebenen als dynamische Unterstützung/Widerstand
-
▲ und ▼ Pfeile zeigen die Position des Indexpreises in Bezug auf den Composite MA-Preis für den entsprechenden Zeitrahmen an
Grundlegender MQL5 EA-Integrationscode:
//+------------------------------------------------------------------+ //|Zusammengesetzte MA EA Probe | //+------------------------------------------------------------------+ #property copyright "2025" #property version "1.00" #property description "EA using Composite MA Indicator" //--- Eingabeparameter input group "=== Composite MA Settings ===" input int MA_PeriodFrom = 1; // MA Startzeitraum input int MA_PeriodTo = 100; // MA Endzeitpunkt input int MA_Shift = 0; // MA-Schicht input ENUM_MA_METHOD MA_Method = MODE_SMA; // MA-Methode input ENUM_APPLIED_PRICE MA_Price = PRICE_CLOSE; // MA Angewandter Preis input ENUM_TIMEFRAMES MA_Timeframe = PERIOD_CURRENT; // MA-Zeitrahmen input group "=== Trading Settings ===" input double LotSize = 0.1; // Losgröße input int MagicNumber = 12345; // Magische Zahl input int Slippage = 3; // Schlupf //--- Globale Variablen int composite_ma_handle; // Handle für den Composite MA Indikator //+------------------------------------------------------------------+ //| Experten-Initialisierungsfunktion| //+------------------------------------------------------------------+ int OnInit() { //--- Composite MA Indikator-Handle erstellen 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, // DisplayBars false, // Panel_ON - Ausschalten des Panels in EA false, false, false, false, false, false, false, false, false, false, // Alle M-Zeitfenster aus false, false, false, false, false, false, false, false, // Alle H-Zeitfenster aus false, false, false, // D1, W1, MN1 Bedienfelder aus clrDodgerBlue, clrRed, clrGray, clrBrown // Farben ); 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; } //+------------------------------------------------------------------+ //| Experten-Tick-Funktion| //+------------------------------------------------------------------+ void OnTick() { //--- Prüfen, ob wir genug Balken haben if(Bars(_Symbol, _Period) < 100) return; //--- Komposit-MA-Werte abrufen double ma_current = GetCompositeMAValue(0); // Aktueller Balken double ma_previous = GetCompositeMAValue(1); // Vorherige Leiste if(ma_current == 0 || ma_previous == 0) return; //--- Aktuellen Preis ermitteln double current_price = SymbolInfoDouble(_Symbol, SYMBOL_ASK); //--- Handelslogik bool buy_signal = ma_current > ma_previous && current_price > ma_current; bool sell_signal = ma_current < ma_previous && current_price < ma_current; //--- Prüfung auf vorhandene Positionen bool has_buy = PositionExists(POSITION_TYPE_BUY); bool has_sell = PositionExists(POSITION_TYPE_SELL); //--- Ausführen von Handelssignalen 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); } } //+------------------------------------------------------------------+ //| Komposit-MA-Wert aus Indikatorpuffer holen | //+------------------------------------------------------------------+ 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]; } //+------------------------------------------------------------------+ //| Prüfen, ob Position existiert| //+------------------------------------------------------------------+ 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; } //+------------------------------------------------------------------+ //| Position öffnen| //+------------------------------------------------------------------+ 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()); } } //+------------------------------------------------------------------+ //| Position schließen| //+------------------------------------------------------------------+ 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; } } } } //+------------------------------------------------------------------+ //| Experten-Deinitialisierungsfunktion| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(composite_ma_handle != INVALID_HANDLE) { IndicatorRelease(composite_ma_handle); Print("Composite MA indicator handle released"); } } //+------------------------------------------------------------------+
Wichtige Hinweise für EA-Entwickler:
-
Nur sichtbare Zeitrahmen haben gültige Daten - überprüfen Sie die Eingabeparameter, um zu sehen, welche Zeitrahmen aktiviert sind
-
Interpretation der Statuswerte:
-
1.0 = Aufwärtstrend
-
-1.0 = Abwärtstrend
-
0.0 = Gleichbleibend
-
-2.0 = Nicht verfügbar/nicht berechnet
-
-
Die Preispuffer enthalten den tatsächlichen zusammengesetzten MA-Wert für diesen spezifischen Zeitrahmen
-
Der Indikator berechnet nur für die letzten DisplayBars-Balken , so dass das Kopieren historischer Daten über diesen Bereich hinaus Nullen ergeben kann.
Key Buffer Mapping für EA-Entwickler:
-
Puffer 0: CompositeMABuffer - Wichtigste zusammengesetzte MA-Werte
-
Puffer 1: ColorBuffer - Farbindex (0=Blau/Aufwärts, 1=Rot/Abwärts)
-
Puffer 2-22: Zeitrahmen-Statuspuffer (M1 bis MN1) - Werte: 1=Aufwärts, -1=Abwärts, 0=Flat, -2=N/A
-
Puffer 23-43: Zeitrahmen-Preispuffer - Zusammengesetzte MA-Werte für jeden Zeitrahmen
Dieser Indikator bietet eine robuste Multi-Timeframe-Trendanalyse, die EA-Entwickler für anspruchsvolle Handelsentscheidungssysteme nutzen können.
