Indikatoren: ID Lite Info MA

 

ID Lite Info MA:

Der Indikator zeigt Gleitende Durchschnittswerte (MA), Differenzen zwischen den Werten und die Differenz zum MA.

Eingebaut gleitende Durchschnitte und der ID Lite Info MA auf einem 3-stelligen Chart

Autor: Dina Paches

 

Wenn dieser Indikator bei Ihnen nicht funktioniert. Und der MetaEditor Ihres Handelsterminals zeigt solche Fehlermeldungen an, wenn Sie eine Datei mit diesem Indikator kompilieren (z. B. wenn Sie ihn für den 1150. Build von MetaTrader5 kompilieren):



Um diesen Indikator zu kompilieren und auszuführen:

1. Kopieren Sie diese Funktion und fügen Sie sie am Ende des Indikatorcodes ein:

//+------------------------------------------------------------------+
//| Löschen von Objekten nach gemeinsamen Präfixen in Objektnamen
//||(und Objekttyp, falls erforderlich):|
//| 2014 (zuletzt geändert: 14.07.2015), Dina Paches |
//| https://login.mql5.com/ru/users/dipach |
//+------------------------------------------------------------------+
//| string prefix_obj = gemeinsames Präfix in Objektnamen |
//| long chart_ID = Kartenbezeichnung | 
//| int sub_window=-1 = Fensterindex|
//| int type=-1 = Objekttyp (oder anstelle von int - Objekttyp durch |
//| Aufzählung ENUM_OBJECT)|
//| int start_pos=-1 = Startposition der gemeinsamen Präfix-Teilzeichenkette in |
//| der Name der Objekte|
//+------------------------------------------------------------------+
void ObDeleteN(string prefix_obj,int chart_ID=0,int sub_window=-1,
               int type=-1,int start_pos=0)
  {
   int quantObj=ObjectsTotal(chart_ID,sub_window,type);
   if(quantObj>0)
     {
      int count=0;
      int prefixLen=StringLen(prefix_obj);
      string name[];
      ArrayResize(name,quantObj,quantObj+1);
      ArraySetAsSeries(name,true);

      for(int i=quantObj;i>=0;i--)
        {
         string objNameX=ObjectName(chart_ID,i,sub_window,type);
         string findValue=StringSubstr(objNameX,start_pos,prefixLen);

         if(StringCompare(findValue,prefix_obj,true)==0)
           {
            count=count+1;
            name[count-1]=objNameX;
           }
        }
      if(count>0)
        {
         ArrayResize(name,count,count+1);
         for(int i=count-1;i>=0; i--)
           {
            ObjectDelete(chart_ID,name[i]);
           }
        }
     }
     else return;
  }
//+------------------------------------------------------------------+


2. Fügen Sie einen doppelten Schrägstrich "//" direkt vor dieser Zeile in den Abschnitten OnDeinit() und OnChartEvent() des Codes ein:

 ObjectsDeleteAll(0,prefixObj,0,-1);


3. Kopieren Sie diese Zeile und fügen Sie sie in den Code des Indikators ein (fügen Sie sie unter der obigen Zeile ein, und da die obige Zeile zweimal im Code vorkommt, sollten Sie diese Zeile an zwei Stellen einfügen):

ObDeleteN(prefixObj,0,0);


4. Als Ergebnis werden die Codeabschnitte, in denen die Funktionsvariante nicht funktioniert, z. B. in Build 1150, im Code wie folgt aussehen:


   //ObjectsDeleteAll(0,prefixObj,0,-1);
   ObDeleteN(prefixObj,0,0);


5. Danach kompilieren Sie den Code. Die Fehlermeldungen werden verschwinden und der Indikator wird bereit sein, auf Charts des Build 1150 von MetaTrader5 zu funktionieren.


P./S.: Wenn Sie irgendwelche Fragen haben, schreiben Sie hier in der Diskussion oder in einer privaten Nachricht.

 
P./S.: Ich habe die Objektlöschfunktion im obigen Beitrag durch eine etwas vielseitigere und arbeitssparendere Option ersetzt.
 

Es ist, als ob mir ein Stein von der Seele gefallen wäre. "Wer sucht, der findet" (c) hat zum Glück dieses Mal funktioniert.

Ich habe die Prototypen der obigen Funktionsvariante doch noch gefunden.

Und nun kann ich mich für das detaillierte Schema bei Kovalyov, dem Lehrbuchautor, Artyom und mir namentlich unbekannten 7777877 herzlich bedanken.


P./S.: Beim Parsen der Prototypen dieser Funktion für mich selbst, beim Ergründen ihrer Bedeutung und beim Durchführen von Experimenten ist es mir einmal nicht gelungen (nicht absichtlich!), ihre Quellen aus MQL4 zu speichern, auf deren Grundlage sie schließlich kompiliert und in verschiedenen Formen für meine Codes in MQL4 und MQL5 verwendet wurde. Ich habe den Code dieser Funktion (oder ihrer anderen Varianten) bisher nicht öffentlich oder offen veröffentlicht.

Ich erinnere mich, dass ich durch sehr unglückliche Zufälle auf Arbeiten auf der Website stieß / die Suche nicht funktionierte (oder es war, dass ich, wie ich jetzt feststelle, falsch suchte), als mein Gewissen mich daran erinnerte, Quellen zu finden. Insbesondere erinnerte ich mich daran, dass ich Informationen über das System im Forum gesehen hatte, aber nicht an das Lehrbuch. Dementsprechend habe ich es auf "später" verschoben.

Mit Respekt vor der Arbeit anderer versuche ich also, wenn möglich, die Informationen sofort zu kopieren, woher / von wem ich was genommen habe.

Daher bin ich aufrichtig froh, dass ich ohne irgendwelche Hinweise oder Erinnerungen von außen die primären Quellen-Prototypen dieser Funktion für mich gefunden habe.

 
Bitte posten Sie den Code des Indikators mit den Änderungen gemacht, es ist ein dunkler Wald für mich, aber ich brauche es sehr viel! Ich kann ihn selbst nicht bekommen. Wenn es nicht schwierig ist, die kompilierte Datei für mt5!!!!
 
Siarhei Pekar:
Bitte posten Sie den Code des Indikators mit den Änderungen gemacht, es ist ein dunkler Wald für mich, aber ich brauche es sehr viel! Ich kann ihn selbst nicht bekommen. Wenn es nicht schwierig ist, die kompilierte Datei für mt5!!!!

Die Version des Indikators in Kodobase wurde auf die Version 1.01 geändert, mit den bereits vorgenommenen Änderungen, und jetzt ist er zum Download direkt von der Seite dieses Indikators verfügbar.

 
Siarhei Pekar:

Während ich darüber nachdachte, den Code zu ersetzen, gelang es mir, meine Erklärung dafür zu löschen:

Die Funktion ObjectsDeleteAll(), die in Version 1.01 durch eine andere Funktion zum Löschen von Objekten anhand ihres Namenspräfixes ersetzt wurde, arbeitet schneller, was zu einer schnelleren Codeleistung beiträgt.

Daher wird es nach dem offiziellen Übergang von der 1150. Build (die zu einem Zeitpunkt veröffentlicht wurde, als die Fähigkeit der ObjectsDeleteAll()-Funktion, Objekte anhand ihres Namenspräfixes zu löschen, noch nicht in der Dokumentation festgelegt war) zu einer anderen Build besser sein, die Version des Indikatorcodes auf diejenige mit der Verwendung von ObjectsDeleteAll() zu ändern:


 

Ich habe den Code dieses Indikators aktualisiert. Einschließlich der Fehler beim Ein- und Ausschalten der Anzeige der Indikatorlinien auf dem Diagramm korrigiert (es gab ein Problem, wenn das Einschalten der Anzeige der Linien nach dem Ausschalten nicht funktionierte).

Aktuelle Version: 1.39

 

Ich habe festgestellt, dass ich im Code dieses Indikators für MT5 (Version 1.39) keine zusätzliche Neuberechnung der Werte bei prev_calculated=0 hinzugefügt habe, ähnlich wie es im Code dieses Indikators für MT4 der Fall ist. Das heißt, wenn Sie mit der Version 1.39 arbeiten, besteht die Möglichkeit, dass in der Tabelle des Indikators bei prev_calculated=0 Nullwerte erscheinen.

Das tut mir leid.

Jetzt habe ich eine neue Version(1.42) zur Veröffentlichung geschickt

Da die CodeBase-Moderatoren vielbeschäftigte Leute sind und das Update möglicherweise nicht bald veröffentlicht wird, füge ich die korrigierte Version vorerst hier an.

 

Vielen Dank an den CodeBase-Moderator.

Code heute Nachmittag auf Version 1.42 aktualisiert

P./S.: Ich habe die oben angehängte Datei gelöscht.

 

Gestern wurde das Update auf Version 1.45 veröffentlicht (ich habe mich gerade eingeloggt)

Die Hauptsache: Ich habe die Funktion zum Entfernen eines Indikators aus dem Diagramm ersetzt - ich habe den Wert eines seiner Eingabeparameter korrigiert.