Diskussion zum Artikel "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil X): Kompatibilität mit MQL4" - Seite 6

 
Sam Zabil:
Hallo. Sie haben sicherlich eine große und notwendige Arbeit geleistet. Für das, was Sie haben, ein großes menschliches Dankeschön! Aber es gibt eine Frage. Der Expert Advisor, den Sie zu Testzwecken verwenden, wenn Sie auf dem Konto arbeiten, ändert alle Aufträge und Positionen unabhängig von den Majiks und Unterschieden der Währungspaare. D.h. Sie setzen ihn auf Eurobucks und gleichzeitig steht eine andere Eule auf einer anderen Währung und hält dort ihre Aufträge und Positionen. Sie klicken auf Ihre Advisor-Änderung von Gewinn oder Stop und er zieht nicht nur Eurobucks, sondern alles, was im Terminal ist. Das ist nicht koscher. Danke für Ihr Verständnis.

Hallo. Der Expert Advisor ist nur zum Testen des Materials im Artikel gedacht. Jeder Artikel wird mit einem Test-Expert Advisor geliefert, und jeder Expert Advisor kann nur für das getestet werden, wofür er gemacht wurde - die im Artikel beschriebene Bibliothek, aus deren Dateien der Expert Advisor stammt.

Wenn die gesamte Artikelserie abgeschlossen ist, werden Sie in der Lage sein, Ihre eigenen Programme unter Verwendung der beschriebenen Bibliothek zu erstellen.

 
Alexey Viktorov:

Artem I hat die Situation noch einmal durchgespielt.

Das Skript hat alle offenen Positionen von gestern geschlossen. Ich habe keine Aufträge auf das Konto gelegt, aber die von gestern sind geschlossen. Es gibt Aufzeichnungen über die Löschung von Aufträgen. Und nicht nur einen. Es gab dreimal einen Eintrag "Dieses Ereignis ist bereits in der Liste".

Dann habe ich drei weitere Positionen aufgegeben und sie mit dem Skript wieder geschlossen. Alles passierte wieder. Drei Positionen geschlossen ... drei Versuche, eine Position zu löschen, die bereits in der Historie ist.

Auch wenn Sie keine Protokolle mögen, werde ich es direkt von der Registerkarte "Experten" setzen.

Zum Zeitpunkt der Eröffnung des USDJPY (unterste Zeile der Aufzeichnungen) gab es keine offenen Positionen und keine ausstehenden Aufträge.

Reproduziert, gefunden, korrigiert.

In der Methode Refresh() der Klasse CEventCollection müssen Sie die Zeile 233 einfügen (die Zeile kann eine andere Nummer haben, da ich alles in ständiger Entwicklung habe):

//--- Wenn ein Ereignis in der Kontohistorie
   if(is_history_event)
     {
      //--- Wenn die Anzahl der historischen Aufträge gestiegen ist (MQL5, MQL4)
      if(new_history_orders>0 #ifdef __MQL4__ && new_market_pendings<0 #endif )
        {
         //--- Abrufen der Liste der nur gelöschten ausstehenden Aufträge
         CArrayObj* list=this.GetListHistoryPendings(list_history);
         if(list!=NULL)
           {
Diese Korrektur wird in Artikel 12 enthalten sein.
 
Ich danke Ihnen. Ich habe es hinzugefügt. Die Zeilennummer hat sich nicht geändert.
 
Alexey Viktorov:
Ich danke Ihnen. Ich habe sie hinzugefügt. Die Zeilennummer hat sich nicht geändert.

Gut

 

Ich schreibe in einer anderen Zeile.

Danke, Artem, für eine so wunderbare und informative Artikelserie

 
Aleksei Mikhanoshin:

Ich schreibe in einer anderen Zeile.

Danke, Artem, für eine so wunderbare und informative Artikelserie

Gern geschehen, Alexej. Wir kennen uns schon seit langem mit Vornamen.....

 
Ich danke Ihnen allen für Ihre Antworten. Ich verstehe den Zweck dieses Panels vollkommen. Mir hat das Panel einfach gefallen. Übrigens habe ich meine Frage durch die magische Sortierung von Positionsblättern und Aufträgen gelöst. Ehrlich gesagt war ich zu faul, um mich gleich mit dem Code zu beschäftigen.
 
Sam Zabil:
Ich danke Ihnen allen für Ihre Antworten. Ich verstehe den Zweck dieses Panels vollkommen. Mir hat das Panel einfach gefallen. Übrigens habe ich meine Frage durch die magische Sortierung von Positionsblättern und Aufträgen gelöst. Ehrlich gesagt war ich zu faul, um mich gleich mit dem Code zu beschäftigen.

Nun, das ist gut so.

In der Tat ist es bereits möglich, alle Listen zu erhalten, und von ihnen jedes Objekt. Und die Listen können nach Bedarf sortiert und nach beliebigen Werten gefiltert werden. Um dies zu tun, wird CSelect() für die erhaltene Liste verwendet - es gibt Beispiele in den Methoden der Bibliotheksklasse.

Damit wird ein einfacher Zugriff, eine Auswahl und eine Filterung organisiert. Bisher ist nur die Erstellung der notwendigen Datenbank im Gange.

 
Die Idee ist gut. Aber ich glaube, sie wurde bereits von fxsaber umgesetzt.
 
Sergey Seriy #:
Die Idee ist gut. Aber ich denke, sie wurde bereits von fxsaber umgesetzt.

Sie können die Arbeiten von fxsaber verwenden