Diskussion zum Artikel "Erweiterung der MQL5-Standardbibliothek und Wiederverwendung von Code"

 

Neuer Artikel Erweiterung der MQL5-Standardbibliothek und Wiederverwendung von Code :

Die MQL5-Standardbibliothek erleichtert Ihnen das Leben als Entwickler. Dennoch geht sie nicht auf die Bedürfnisse aller Entwickler auf der Welt ein. Wenn Sie also das Gefühl haben, dass Sie mehr benutzerdefinierte Funktionen brauchen, können Sie einen Schritt weitergehen und die Bibliothek erweitern. Dieser Beitrag begleitet Sie durch die Integration des technischen Indikators ZigZag von MetaQuotes in die Standardbibliothek. Wir lassen uns durch die Designphilosophie von MetaQuotes inspirieren, um unser Ziel zu erreichen.

Die MQL5-Standardbibliothek ist ein objektorientiertes Framework aus gebrauchsfertigen Klassen, die Ihnen das Leben als Entwickler erleichtern. Dennoch geht sie nicht auf die Bedürfnisse aller Entwickler auf der Welt ein. Wenn Sie also das Gefühl haben, dass Sie mehr benutzerdefinierte Funktionen brauchen, können Sie einen Schritt weitergehen und die Bibliothek erweitern. Dieser Beitrag begleitet Sie durch die Integration des technischen Indikators ZigZag von MetaQuotes in die Standardbibliothek. Wir lassen uns durch die Designphilosophie von MetaQuotes inspirieren, um unser Ziel zu erreichen.

Kurz gesagt, ist die MQL5-API dafür vorgesehen, Sie in den Genuss von wiederverwendbaren Codes, Zuverlässigkeit, Flexibilität und einfacher Wartung kommen zu lassen. Soweit die Theorie. Doch darüber hinaus müssen Sie dazu in der Lage sein, Codes auf die Art der Standardbibliothek zu schreiben, sodass der Erfolg Ihrer Anwendungen garantiert werden kann, wenn Sie Ihre MQL5-Kenntnisse erweitern und ausgeklügeltere Anwendungen entwickeln möchten, beispielsweise mehrwährungsfähige Expert Advisors.

Mit der steigenden Komplexität Ihrer EAs und Indikatoren wird es immer wichtiger, die Konzepte hinter der Entwicklung eines Frameworks vollständig zu begreifen. Ein konkretes Beispiel ist mein persönliches Bestreben, einen komplexen, mehrwährungsfähigen EA zu entwickeln, das mich dazu zwingt, die Grundlagen meines Projekts von Grund auf durchzudenken.

Abbildung 1. Regelmäßige Polyeder sind perfekte Objekte und veranschaulichen die Idee hinter der Ausarbeitung von Anwendungen auf Basis eines soliden Konzepts.

Abbildung 1. Regelmäßige Polyeder sind perfekte Objekte und veranschaulichen die Idee hinter der Ausarbeitung von Anwendungen auf Basis eines soliden Konzepts

Autor: Jordi Bassaganas

[Gelöscht]  

Ich danke Ihnen. Sehr informativ.

 

Ich versuche zu verstehen, was dieser Code in diesem Artikel bedeutet, warum wir ein * in der Nähe des CINDICATOBUFFER haben und dann at verwenden.

((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");

Ich bitte um eine detaillierte Erklärung

Danke

 
rodlivar:<br/ translate="no">

Ich versuche zu verstehen, was dieser Code in diesem Artikel bedeutet, warum wir ein * in der Nähe des CINDICATOBUFFERs haben und dann at verwenden.

((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");

Ich bitte um eine detaillierte Erklärung

Danke

* bezeichnet einen Zeiger. Detaillierte Erklärung in diesem Artikel Verwendung der Objektzeiger in MQL5
 

string

m_handle=iCustom(symbol,period,zigzag,depth,deviation_create,backstep);

Ich kann den Pfad zu dem Indikator nicht finden.

Wie kann ich den Pfad hier korrekt angeben? Die Indikatoren, die ich aufrufen möchte, befinden sich im Standardordner

 
Tango_X:

string

m_handle=iCustom(symbol,period,zigzag,depth,deviation_create,backstep);

Ich kann den Pfad zu dem Indikator nicht finden.

Was ist der richtige Weg, um hier anzugeben, die Indikatoren, die ich aufzurufen versuche, liegen im Standardordner.

Standard Zigzag liegt im Ordner Examples - Sie müssen den Namen des Ordners zum Pfad hinzufügen


 
Rashid Umarov:

Der Standard-Zigzag befindet sich im Examples-Ordner - Sie müssen den Ordnernamen im Pfad hinzufügen



2017.07.12 10:38:05.703 Proba2(EURUSD.m,M1) kann den benutzerdefinierten Indikator 'Examples\ZigZag' nicht laden [4302]

Was ist los?? alles ist genau wie in deinem Bild.
 
Tango_X:

2017.07.12 10:38:05.703 Proba2 (EURUSD.m,M1) kann den benutzerdefinierten Indikator 'Examples\ZigZag' nicht laden[4302]

Was ist los? Alles ist genau wie in deinem Bild.

Wer schaut sich den Fehlercode an?

ERR_MARKET_NOT_SELECTED

4302

Symbol nicht in MarketWatch ausgewählt

 
Rashid Umarov:

Wer wird sich den Fehlercode ansehen?

ERR_MARKET_NOT_SELECTED

4302

Symbol in MarketWatch nicht ausgewählt


Ich gebe NULL ein - es funktioniert, ich gebe "EURUSD" ein - es funktioniert nicht!!!!

bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period,
                      const int depth,const int deviation_create,const int backstep)
  {
//--- Verlauf prüfen
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- erstellen
   //m_handle=iCustom(symbol,period, "Examples\\\ZigZag",depth,deviation_create,backstep);
     //m_handle=iCustom("EURUSD",period, "Examples\\\ZigZag",depth,deviation_create,backstep); - funktioniert NICHT
     m_handle=iCustom(NULL,period,"Examples\\ZigZag",depth,deviation_create,backstep);       - работает
//--- Prüfung des Ergebnisses
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- Indikator erfolgreich erstellt
   if(!Initialize(symbol,period,depth,deviation_create,backstep))
     {
      //--- Initialisierungsfehler
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
 
Ich hab's! Die Frage ist gelöst! Ich habe einen Symbolnamen mit einem Präfix) - "EURUSD.m".
 
//+------------------------------------------------------------------+
//|| Erstellen Sie den "Zig Zag"-Indikator|
//+------------------------------------------------------------------+
bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period,
                      const int depth,const int deviation_create,const int backstep)
  {
//--- Verlauf prüfen
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- erstellen
   m_handle=iCustom(symbol,period,"zigzag",depth,deviation_create,backstep);
//--- Prüfung des Ergebnisses
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- Indikator erfolgreich erstellt
   if(!Initialize(symbol,period,depth,deviation_create,backstep))
     {
      //--- Initialisierungsfehler
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
bool CiZigZag::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
                        const int depth,const int deviation_init,const int backstep)
  {
   if(CreateBuffers(symbol,period,3))
     {
      //--- Rendering-Statuszeile
      m_name  ="ZigZag";
      m_status="("+symbol+","+PeriodDescription()+","+
               IntegerToString(depth)+","+IntegerToString(deviation_init)+","+
               IntegerToString(backstep)+") H="+IntegerToString(m_handle);
      //--- Einstellungen speichern
      m_depth=depth;
      m_deviation=deviation_init;
      m_backstep=backstep;       
      //--- Puffer erstellen
      ((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
      ((CIndicatorBuffer*)At(1)).Name("HIGH");
      ((CIndicatorBuffer*)At(2)).Name("LOW");
      //--- ok
      return(true);
     }
//--- Fehler
   return(false);
  }


Helfen Sie mir zu verstehen, wie die Indizierung Richtung des Indikators Puffer Array hier festgelegt ist, d.h. das gleiche wie ArraySetAsSeries. Die Standardrichtung ist von der Gegenwart zur Vergangenheit, aber ich muss es von der Vergangenheit zur Gegenwart machen. Seit gestern kämpfe ich mit dieser Frage! Hilfe!