Diskussion zum Artikel "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil V)."

 

Neuer Artikel Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil V). Klassen und Kollektionen für Handelsereignisse, Nachrichten an das Programm senden :

In den vorherigen Artikeln haben wir begonnen, eine große plattformübergreifende Bibliothek zu erstellen, die die Entwicklung von Programmen für MetaTrader 5 und MetaTrader 4 Plattformen vereinfacht. Im vierten Teil haben wir die Verfolgung von Handelsereignissen auf dem Konto getestet. In diesem Artikel werden wir Klassen für Handelsereignisse entwickeln und diese in der Kollektion der Ereignisse platzieren. Von dort aus werden sie an das Basisobjekt der Enginebibliothek und die Steuerelement des Chartprogramms.

Jetzt können wir den EA kompilieren und im Tester starten. Wenn wir auf die Schaltflächen klicken, werden im Testerjournal kurze zweizeilige Meldungen über auftretende Kontoereignisse angezeigt.


Einträge der Ereignisbehandlung des EAs werden im Journal nicht angezeigt, da sie außerhalb des Testers arbeiten. Wenn wir auf die Schaltflächen des EAs eines Demokontos klicken, werden im Terminaljournal drei Zeilen angezeigt: zwei Zeilen aus der Methode zur Anzeige von Kurznachrichten der Klasse CEvent und eine weitere — aus der Funktion OnChartEvent() des EAs.

Nachfolgend sehen wir ein Beispiel für die Anzeige einer Nachricht im Journal, wenn Platzieren und Entfernen einer Pending-Order:

- Pending-Order platziert: 2019.04.05 23:19:55.248 -                                                              
EURUSD 0.10 Sell Limit #375419507 at price 1.14562                                                             
OnChartEvent: id=1001, event=TRADE_EVENT_PENDING_ORDER_PLASED, lparam=375419507, dparam=1.14562, sparam=EURUSD 
- Pending-Order entfernt: 2019.04.05 23:19:55.248 -                                                             
EURUSD 0.10 Sell Limit #375419507 at price 1.14562                                                             
OnChartEvent: id=1002, event=TRADE_EVENT_PENDING_ORDER_REMOVED, lparam=375419507, dparam=1.14562, sparam=EURUSD

Autor: Artyom Trishkin

 
Ich frage mich, wie die Bibliothek mit vielen Nuancen des Handels umgeht. Es ist also wahrscheinlich einen Versuch wert, zumindest den ersten Test durchzuführen.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.

Weniger Code, mehr Rollen... einen EA schreiben

fxsaber, 2019.03.12 21:46

Diese Aufgabe kann durchaus als ein erster Test für das Schreiben von Trading unter MT5 angesehen werden. So kann sich jeder daran versuchen.

 
fxsaber:
Ich frage mich, wie die Bibliothek mit vielen Nuancen des Handels umgeht. Es ist also wahrscheinlich einen Versuch wert, zumindest den ersten Test zu bestehen

Es gibt noch keine Handelsklassen in der Bibliothek. Im Moment kommt die Arbeit mit der Kontohistorie und dem aktiven Marktstatus zum Ende - die Verfolgung von Netting-Kontoereignissen wird im nächsten Artikel veröffentlicht, dann die Arbeit mit dem Konto im MetaTrader 4, und dann, nach der Vorbereitung von Klassen für die Nachrichtenausgabe, wird die Arbeit mit Handelsklassen beschrieben.

 
Artyom Trishkin:

Es gibt noch keine Handelsklassen in der Bibliothek. Im Moment kommt die Arbeit mit der Kontohistorie und dem aktiven Marktstatus zum Ende - die Verfolgung von Netting-Kontoereignissen wird im nächsten Artikel veröffentlicht, dann die Arbeit mit dem Konto in MetaTrader 4, und dann, nach der Vorbereitung der Klassen für die Nachrichtenausgabe, wird die Arbeit mit den Handelsklassen beschrieben.

Das war's. MT5 ist in dieser Hinsicht so komplex, dass wir meiner Meinung nach einen ganzen Artikel brauchen, der die Feinheiten des Handels, die auf MT5 auftreten, im Detail beschreibt und wie man sie berücksichtigt.

 
Artyom Trishkin: Verfolgung von Netting-Account-Ereignissen wird im nächsten Artikel veröffentlicht, dann wird die
die Bibliothek automatisch sowohl Netting- als auch Hedge-Kontotypen erkennen und verarbeiten wird?
 
fxsaber:

Verstanden. MT5 ist in dieser Hinsicht so komplex, dass wahrscheinlich ein ganzer Artikel nötig ist, in dem die Feinheiten des Handels mit MT5 im Detail beschrieben werden und wie man sie berücksichtigen kann.

Ich bin gerade dabei, mich mit solchen Situationen zu beschäftigen. Ich hoffe, dass ich in der Lage sein werde, sie alle richtig zu behandeln.

Etwas anderes ist interessant - auf der Grundlage der beschriebenen Bibliothek werden User-Case-Funktionen für den einfachen Zugriff auf die gesammelten und in der Bibliothek gespeicherten Daten, für die Verwendung von Handelsklassen und dementsprechend für die einfache und leichte Erstellung von Programmen auf der Grundlage dieser Bibliothek erstellt werden.
Obwohl es schon so ist, wie es ist, gibt es eine Möglichkeit, es zu benutzen, aber auf einer niedrigeren Ebene des Zugangs - durch Zeiger auf Listen von Sammlungen, und von ihnen - durch Zeiger auf irgendwelche ihrer Daten. Dies entspricht jedoch nicht den eingangs erwähnten "Ansprüchen" an die Leichtigkeit, mit der eigene Programme auf der Basis der Bibliothek erstellt werden können. Aber das ist erst der Anfang :)

 
Igor Makanu:
Bibliothek automatisch sowohl Netting-Konten als auch Hedge-Konten erkennen und bearbeiten kann?

Ja, das ist bereits geschehen. Sie wird im nächsten Artikel veröffentlicht.

 
Artyom Trishkin:

Ja, jetzt schon. Der nächste Artikel wird veröffentlicht werden.

Aber für jetzt nur Arbeit mit Konto Geschichte und Marktzustand. Dann wird es möglich sein, die Historie einer beliebigen Position auf einem beliebigen Kontotyp auf der Grundlage der gesammelten Daten zu erhalten. Ich werde es in meine Pläne aufnehmen.
 

Sehr leistungsfähig als Testwerkzeug, vielen Dank für die Bereitstellung!

 

Hallo Artyom, herzlichen Glückwunsch zu der tollen Arbeit! Der Beschreibung im Text folgend, scheint es, dass die Funktion CHistoryCollection::OrderSearch(...) eine Unterbrechung hat , die fehlt.

Die for-Schleife schließt immer alle Iterationen von Start-1 bis 0 ab , egal ob sie die "verlorene Bestellung" findet oder nicht.

Vielleicht wäre es effizienter, nach dem Auffinden der "verlorenen Bestellung "eine Pauseeinzufügen :

ulong CHistoryCollection::OrderSearch(const int start,ENUM_ORDER_TYPE &order_type) 
  { 
   ulong order_ticket=0; 
   for(int i=start-1;i>=0;i--) 
     { 
      ulong ticket=::HistoryOrderGetTicket(i); 
      if(ticket==0) 
         continue; 
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)::HistoryOrderGetInteger(ticket,ORDER_TYPE); 
      if(this.IsPresentOrderInList(ticket,type)) 
         continue; 
      order_ticket=ticket; 
      order_type=type; 
      break; 
     } 
   return order_ticket; 
  } 

Was meinen Sie dazu?

Documentation on MQL5: Constants, Enumerations and Structures / Trade Constants / Order Properties
Documentation on MQL5: Constants, Enumerations and Structures / Trade Constants / Order Properties
  • www.mql5.com
Requests to execute trade operations are formalized as orders. Each order has a variety of properties for reading. Information on them can be obtained using functions Position identifier that is set to an order as soon as it is executed. Each executed order results in a deal that opens or modifies an already existing position. The identifier of...
 
Alvaro Arioni :

Hallo Artyom, herzlichen Glückwunsch zu der tollen Arbeit! Nach der Beschreibung im Text, scheint es, dass die Funktion CHistoryCollection::OrderSearch(...) kann eine Pause fehlt.

Die for-Schleife schließt immer alle Iterationen von Start-1 bis 0 ab , egal ob sie die "verlorene Bestellung" findet oder nicht.

Vielleicht wäre es effizienter, nach dem Auffinden der "verlorenen Ordnung" eine Pauseeinzufügen :

...

Was meinen Sie dazu?

Vielleicht gibt es mehr als einen verlorenen Auftrag