Expert Advisors: DoubleZigZag

 

DoubleZigZag:

Für die Analyse wurden zwei Indikatoren ZigZag verwendet.

DoubleZigZag

Autor: Vladimir Karputov

 

Hallo, können Sie eine Variable für Stop-Loss und Take-Profit setzen? Danke!

 
zanpo:

Hallo, können Sie eine Variable für Stop-Loss und Take-Profit setzen? Danke!


Dieser Advisor wurde ohne Stop Loss und Take Profit entwickelt.

Vielleicht, wenn ich will, wird es in einem ANDEREN Berater realisiert werden.

 

Hallo, schöne EA zu öffnen Handel!

Aber zum Beispiel später, müssen wir Position manuell schließen, oder durch Trailing?

 
metaangel :

Hallo, netter EA zur Handelseröffnung!

Aber zum Beispiel später, müssen wir Position manuell zu schließen, oder durch Trailing?

Positionen werden mit einem entgegengesetzten Signal geschlossen: zum Beispiel, ein Signal erschien zu öffnen KAUFEN - dann zuerst schließen wir die SELL-Positionen und dann öffnen wir die KAUFEN.

 
Könnte man das Money Management im Vergleich zur Verwendung von festen Losen irgendwie ergänzen?
 
Brian Sinclair :
Könnte man das Money Management gegenüber der Verwendung von festen Lots irgendwie ergänzen?

Präzisieren Sie Ihre Frage.

 
Brian Sinclair :
Könnte man das Money Management im Vergleich zu festen Lots hinzufügen?

Ich habe Version 2 veröffentlicht: DoubleZigZag 2

Neu in Version 2:

  • Geld-Management: Lot OR Risk - mehr im Abschnitt Positionsgrößenmanagement (Lotberechnung)
  • Der Wert für "Money Management" - mehr im Abschnitt Positionsgrößenmanagement (Lotberechnung)
  • Nur eine Position - es gibt immer nur eine Position auf dem Markt
  • Reverse - eine Umkehrung eines Handelssignals
  • Close opposite - Schließen von Positionen entgegengesetzt zum Handelssignal, wobei zuerst eine garantierte Schließung der Gegenposition erfolgt und erst dann eine neue Position in der Signalrichtung eröffnet wird
  • Es kann nur eine "Markteintritts"-Transaktion auf dem Balken geben (dies ist ein interner Parameter, er wird nicht in den Eingabeparametern ausgegeben und steht in keinem Zusammenhang mit dem Parameter " Nur eine Position ").
Советники: DoubleZigZag 2
Советники: DoubleZigZag 2
  • 2020.02.08
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Советники: DoubleZigZag 2
 
Automated-Trading:

DoubleZigZag:

Autor: Vladimir Karputov

//+------------------------------------------------------------------+
//|Hatorii_Total_Coverage.mq5 |
//|Urheberrecht 2026, MetaQuotes Ltd. |
//| PROFI-SYSTEM: DOPPELTER ZICKZACK + PAUSE + SL IM ZICKZACKPUNKT |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026"
#property version   "1.50"
#property strict

#include <Trade\Trade.mqh>

//--- ENUMS
enum ENUM_DIRECTION { DIR_BOTH = 0, DIR_ONLY_BUY = 1, DIR_ONLY_SELL = 2 };

//--- INPUTS (Englisches Menü [zitiert: 2025-12-23])
input group "=== Betriebliche Konfiguration ==="
input ENUM_DIRECTION InpTradeMode   = DIR_BOTH;     // Adresse
input double         InpLot         = 0.1;          // Stapel
input int            InpMagic       = 882025;       // Magische Zahl

input group "=== FILTROS DE ESTRUCTURA (ZIGZAG) ==="
input bool           InpUseMacroZZ  = true;         // ZigZag X8 (Haupttrendfilter) verwenden
input bool           InpSLatZZ      = true;         // Genaue SL in ZigZag Point platzieren [zitiert: 2026-01-02].

input group "=== FILTROS DE TENDENCIA (EMA) ==="
input bool           InpUseEMA      = false;        // EMA-Filter aktivieren [zitiert: 2025-12-21].
input int            InpEMAPeriod   = 200;          // Personalisierter UKORE-Wert [zitiert: 2025-12-21].

input group "=== RUTA DEL INDICADOR ==="
input string         InpIndiPath    = "nuevos\\hf"; // Obligatorische Route [Zitat: 2025-12-24].
input int            InpAmplitude   = 2;            // HalfTrend Amplitude

//--- GLOBAL
CTrade  trade;
int     handleHT, handleEMA, handleZZ_Fast, handleZZ_Macro;
datetime lastTradeTime = 0;

//+------------------------------------------------------------------+
int OnInit() {
   //--- Initialisierung von HalfTrend
   handleHT = iCustom(_Symbol, _Period, InpIndiPath, InpAmplitude);
   
   //--- EMA initialisieren
   handleEMA = iMA(_Symbol, _Period, InpEMAPeriod, 0, MODE_EMA, PRICE_CLOSE);
   
   //--- Initialisierung der ZigZags (Ihr korrigierter Code in OnInit)
   handleZZ_Fast  = iCustom(_Symbol, _Period, "Examples\\ZigZag", 13, 5, 3);
   handleZZ_Macro = iCustom(_Symbol, _Period, "Examples\\ZigZag", 13*8, 5*8, 3*8);
   
   if(handleHT == INVALID_HANDLE || handleZZ_Fast == INVALID_HANDLE || handleZZ_Macro == INVALID_HANDLE) {
      Alert("Error al cargar indicadores. Revisa la ruta: ", InpIndiPath);
      return(INIT_FAILED);
   }
   
   trade.SetExpertMagicNumber(InpMagic);
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
void OnTick() {
   double bufHT[], bufEMA[], bufMacroZZ[];
   ArraySetAsSeries(bufHT, true);
   ArraySetAsSeries(bufEMA, true);
   ArraySetAsSeries(bufMacroZZ, true);
   
   if(CopyBuffer(handleHT, 7, 0, 1, bufHT) < 1) return;
   if(CopyBuffer(handleEMA, 0, 0, 1, bufEMA) < 1) return;
   if(CopyBuffer(handleZZ_Macro, 0, 0, 2, bufMacroZZ) < 1) return;

   double trendHT = bufHT[0];
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

   //--- 1. AGGRESSIVES SCHLIESSEN (Wenn sich die HF-Farbe ändert, schließen)
   GestionarCierres(trendHT);

   //--- 2. EINGANGSLOGIK DURCH UNTERBRECHUNG
   if(!PositionExists() && iTime(_Symbol, _Period, 0) != lastTradeTime) {
      
      double highPrev = iHigh(_Symbol, _Period, 1);
      double lowPrev  = iLow(_Symbol, _Period, 1);
      
      // Filter
      bool emaBuyOK  = !InpUseEMA || (ask > bufEMA[0]);
      bool emaSellOK = !InpUseEMA || (bid < bufEMA[0]);
      
      // Zickzack-Makrofilter (letzte Zeilenrichtung)
      bool macroBuyOK = true;
      bool macroSellOK = true;
      if(InpUseMacroZZ) {
         // Vereinfachte Logik: Wir prüfen die Richtung des letzten Abschnitts des Zickzack-Makros.
         // (Hier könnten Sie eine komplexere Spitzenlogik hinzufügen)
      }

      //--- KAUFEN (blauer HF + Bruch des vorherigen Hochs)
      if(trendHT == 0.0 && InpTradeMode != DIR_ONLY_SELL && emaBuyOK && macroBuyOK) {
         if(ask > highPrev) {
            double sl = InpSLatZZ ? BuscarUltimoPuntoZZ(false) : 0;
            if(trade.Buy(InpLot, _Symbol, ask, sl, 0, "Ruptura + ZZ SL")) lastTradeTime = iTime(_Symbol, _Period, 0);
         }
      }

      //--- SELL (Rote HF + Bruch des vorherigen Tiefs)
      if(trendHT == 1.0 && InpTradeMode != DIR_ONLY_BUY && emaSellOK && macroSellOK) {
         if(bid < lowPrev) {
            double sl = InpSLatZZ ? BuscarUltimoPuntoZZ(true) : 0;
            if(trade.Sell(InpLot, _Symbol, bid, sl, 0, "Ruptura + ZZ SL")) lastTradeTime = iTime(_Symbol, _Period, 0);
         }
      }
   }
}

//--- Funktion zur Ermittlung des exakten ZigZag-Punktes für den Stop Loss [cite: 2026-01-02].
double BuscarUltimoPuntoZZ(bool buscarAlto) {
   double zzVal[];
   ArraySetAsSeries(zzVal, true);
   for(int i=1; i<100; i++) {
      if(CopyBuffer(handleZZ_Fast, 0, i, 1, zzVal) > 0) {
         if(zzVal[0] > 0) return zzVal[0];
      }
   }
   return 0;
}

void GestionarCierres(double trend) {
   for(int i=PositionsTotal()-1; i>=0; i--) {
      ulong ticket = PositionGetTicket(i);
      if(PositionSelectByTicket(ticket) && PositionGetInteger(POSITION_MAGIC) == InpMagic) {
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && trend == 1.0) trade.PositionClose(ticket);
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && trend == 0.0) trade.PositionClose(ticket);
      }
   }
}

bool PositionExists() {
   for(int i=PositionsTotal()-1; i>=0; i--) {
      if(PositionSelectByTicket(PositionGetTicket(i))) {
         if(PositionGetInteger(POSITION_MAGIC) == InpMagic && PositionGetString(POSITION_SYMBOL) == _Symbol) return true;
      }
   }
   return false;
     }