Diskussion zum Artikel "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XXX): Schwebende Handelsanfragen - die Verwaltung der Anfrageobjekte"

 

Neuer Artikel Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XXX): Schwebende Handelsanfragen - die Verwaltung der Anfrageobjekte :

Im vorigen Artikel haben wir die Klassen der schwebenden Anfrageobjekte erstellt, die dem allgemeinen Konzept der Bibliotheksobjekte entsprechen. Dieses Mal werden wir uns mit der Klasse befassen, die die Verwaltung von schwebenden Anfrageobjekten ermöglicht.

Zunächst wollte ich eine eigenständige Klasse zur Verwaltung von schwebende Anfrageobjekte mit allen notwendigen Methoden schaffen. Es stellte sich jedoch heraus, dass die Hauptklasse CTrading der Bibliothek und die geschaffene neue Klasse zur Verwaltung von schwebenden Anfrageobjekten so miteinander verbunden sind, dass es viel einfacher wäre, die neue Klasse zur Verwaltung von schwebenden Anfrageobjekten von der Haupthandelsklasse abzuleiten.

Die gesamte Verwaltung der schwebenden Anfrageobjekte wird im Timer der Klasse durchgeführt, daher machen wir den Timer der Basis-Handelsklasse virtuell, was bedeutet, dass der Timer der Verwaltungsklasse für schwebende Anfragen ebenfalls virtuell sein wird. Dann wird alles, was sich auf den Timer der Basis-Handelsklasse bezieht, im Timer der Klasse eingestellt, während alles, was in der Klasse zur Verwaltung der schwebenden Anfrageobjekte funktionieren soll, im Timer dieser Klasse eingestellt wird.

Abgesehen von der Klasse für die Verwaltung von schwebender Anfrageobjekte werden wir eine kleine Klasse erstellen, um eine Pause zu arrangieren, um die Verwendung der Funktion Sleep() zu vermeiden, die die Programmausführung für eine Verzögerungszeit anhält. Mit dem Pause-Objekt werden wir nicht mehr von Ticks abhängig sein, was bedeutet, dass wir in der Lage sein werden, einen Code zu testen, der an Wochenenden warten muss. Die Pause soll im Timer gesteuert werden.

Autor: Artyom Trishkin

 

Guten Tag,

Vielen Dank für die geleistete Arbeit.

Eine kleine Bitte: Ich bin die Artikel wirklich durchgegangen (in erster Linie, um mein Wissen zu erweitern), aber aufgrund der Länge des Artikelzyklus und der Notwendigkeit, mich mit anderen Projekten zu beschäftigen, muss ich zurückgehen und frühere Artikel erneut lesen, um die Änderungen zu verstehen. Das Projekt ist gewachsen, und wenn möglich, sollten Sie in einem künftigen Artikel auf die heutige Bibliotheksstruktur zurückkommen und sie erläutern.

Mit freundlichen Grüßen und Dank im Voraus

 
Олег Миронов:

Guten Tag,

Vielen Dank für die Arbeit, die Sie geleistet haben.

Eine kleine Bitte: Ich bin die Artikel wirklich durchgegangen (in erster Linie, um mein Wissen zu erweitern), aber aufgrund der Länge des Artikelzyklus und der Notwendigkeit, mich mit anderen Projekten zu beschäftigen, muss ich zurückgehen und frühere Artikel erneut lesen, um die Änderungen zu verstehen. Das Projekt ist gewachsen, und wenn möglich, sollten Sie in einem zukünftigen Artikel die heutige Struktur der Bibliothek erläutern.

Mit freundlichen Grüßen und Dank im Voraus

Ich werde versuchen herauszufinden, wie man eine recht einfache Struktur irgendwie illustrieren kann. Es ist sehr einfach, und zur gleichen Zeit - hat eine Menge von Links zwischen verschiedenen Klassen der Bibliothek.

Alles, was erstellt wird - alles ist in CEngine akkumuliert - von diesem Objekt im Moment gibt es Zugriff auf alle Klassen der Bibliothek (und es wird ein weiterer Zugangspunkt sein - durch die Klasse der Benutzerfunktionen, aber bereits abgeschlossen werden). Aber im Moment gibt es nur Zugriff auf die Methoden aller erstellten Klassen, die im Moment notwendig sind.
Die Klassen selbst verwenden Zeiger aufeinander, um die Daten der einen Klasse in einer anderen verwenden zu können. Und wenn man anfängt, all diese Beziehungen zu zeigen, kann man noch mehr Verwirrung stiften. Und wenn man alle Basisobjekte zeigt, die von vielen Klassen und Listen innerhalb von Klassen vererbt werden, und auch noch zeigt, wo sie alle im Zeitgeber laufen - dann wird es ein Durcheinander.
Deshalb ist es viel einfacher, einfach die Struktur einer Klasse darzustellen, und alle anderen Klassen sind mit dieser Struktur identisch. Und das ist sehr einfach, aber absolut unzureichend, um die Struktur der gesamten Bibliothek und ihre Zusammenhänge darzustellen.
Und noch etwas - die Bibliothek wird allmählich erweitert, aber wiederum im Rahmen des eingangs erwähnten Konzepts zum Aufbau von Bibliotheksobjekten. Es genügt also, ihre Struktur einmal zu verstehen, und dann wird es ganz einfach sein.
Aber natürlich werde ich darüber nachdenken (und ich denke bereits darüber nach), wie man alles einfacher und zugänglicher darstellen kann.

 

Artem, guten Tag. Ihre Arbeit ist von unschätzbarem Wert! Vielen Dank für die Möglichkeit, zu entwickeln und die Zeit, die Sie verbringen, so dass Menschen wie ich kann es qualitativ zu speichern.

Ich habe einen Vorschlag: sollten wir ein Repository mit Ihren Libs auf github veröffentlichen? Was es tun würde:

  1. Nun, ein Versionskontrollsystem, natürlich.
  2. Eine Möglichkeit für jeden, sich an der Entwicklung der DoEasy-Bibliothek zu beteiligen.
  3. Die Möglichkeit, den Code schnell zu durchsuchen und jederzeit auf die aktuellste Version zuzugreifen.

Beim Studium der Bibliothek habe ich zum Beispiel mehrere Fehler gefunden und behoben und einen Teil des Codes optimiert. Und in einem solchen Fall könnte ich Ihnen nun im Rahmen des Versionskontrollsystems eine spezielle Anfrage schicken, anhand derer Sie entscheiden würden, ob Sie meine Verbesserungen in die aktuelle Version der Bibliothek aufnehmen oder nicht.

Sie machen eine tolle Arbeit, und wir könnten gemeinsam (es gibt viele Leute wie mich) unsere Zeit für das Gemeinwohl investieren, um DoEasy zu verbessern. Ich bin bereit, bei der Verwirklichung des Vorgeschlagenen zu helfen.

 
Сергей Романов:

Artem, guten Tag. Ihre Arbeit ist von unschätzbarem Wert! Vielen Dank für die Möglichkeit, zu entwickeln und die Zeit, die Sie verbringen, so dass Menschen wie ich kann es qualitativ zu speichern.

Ich habe einen Vorschlag: sollten wir ein Repository mit Ihren Libs auf github veröffentlichen? Was es tun würde:

  1. Nun, ein Versionskontrollsystem, natürlich.
  2. Die Möglichkeit, sich an der Entwicklung der DoEasy-Bibliothek zu beteiligen, für jeden.
  3. Die Möglichkeit, den Code schnell zu durchsuchen und jederzeit auf die aktuellste Version zuzugreifen.

Zum Beispiel habe ich beim Studieren der Bibliothek einige Fehler gefunden und behoben und einige Codes optimiert. Und in einem solchen Fall könnte ich Ihnen nun im Rahmen des Versionskontrollsystems eine spezielle Anfrage schicken, anhand derer Sie entscheiden würden, ob Sie meine Verbesserungen in die aktuelle Version der Bibliothek aufnehmen oder nicht.

Sie machen eine tolle Arbeit, und wir könnten gemeinsam (es gibt viele Leute wie mich) unsere Zeit für das Gemeinwohl investieren, um DoEasy zu verbessern. Ich bin bereit, bei der Verwirklichung des Vorgeschlagenen zu helfen.

Hallo. Vielen Dank für Ihr Feedback.

Im Moment ist es noch zu früh, um über das Repository zu sprechen und nachzudenken - die Bibliothek befindet sich in aktiver Entwicklung, und bis ich alles, was ich geplant habe, erstellt und veröffentlicht habe, möchte ich nicht von dem Plan abweichen. Und die zahlreichen Korrekturen und Überarbeitungen durch Dritte werden den Autor nur davon ablenken, den Plänen zu folgen.

Aber es ist besser, über die gefundenen Fehler und die Möglichkeiten ihrer Beseitigung direkt in den Diskussionen der Artikel zu berichten, in denen Fehler gefunden wurden - es wird nur die Entwicklung der Bibliothek und die Beseitigung der gefundenen Fehler unterstützen.

 

Beim Kompilieren der Datei TradingControl.mqh treten zwei Fehler auf:

'CTrading::OpenPosition<double,d...' - cannot access private member function TradingControl.mqh 328 21
siehe Deklaration von 'CTrading::OpenPosition<double,double>' Trading.mqh 146 24
'CTrading::PlaceOrder<double,double...' - kann nicht auf private member function TradingControl zugreifen.mqh 344 18
siehe Deklaration von 'CTrading::PlaceOrder<double,double,double,double>' Trading.mqh 156 26

Diese Methoden befinden sich im privaten Bereich der Klasse CTrading. Die Fehler verschwinden, wenn Sie sie in den öffentlichen Teil dieser Klasse verschieben. Aber in den angehängten Dateien (und so wie ich es verstehe, funktionieren sie) befinden sich diese Methoden auch im privaten Bereich der Klasse CTrading, und diese beiden Fehler treten beim Kompilieren der Datei TradingControl.mqh auf.

Artem, wie funktioniert es dann bei Ihnen? Entweder gibt es hier einen Fehler oder ich verstehe etwas falsch.

P.S. Ich habe die angehängten Dateien für den nächsten Teil - 31 - heruntergeladen, und auch dort befinden sich diese Methoden im privaten Bereich der CTrading-Klasse und auch diese beiden Fehler treten beim Kompilieren auf.

 
MQL_User #:

Beim Kompilieren der Datei TradingControl.mqh treten zwei Fehler auf:

'CTrading::OpenPosition<double,d...' - kann nicht auf private member function TradingControl.mqh 328 21
siehe Deklaration von 'CTrading::OpenPosition<double,double>' Trading.mqh 146 24
'CTrading::PlaceOrder<double,double...' - kann nicht auf private member function TradingControl zugreifen.mqh 344 18
siehe Erklärung von 'CTrading::PlaceOrder<double,double,double,double>' Trading.mqh 156 26

Diese Methoden befinden sich im privaten Bereich der Klasse CTrading. Die Fehler verschwinden, wenn Sie sie in den öffentlichen Teil dieser Klasse verschieben. In den angehängten Dateien (die meines Wissens auch funktionieren) befinden sich diese Methoden jedoch ebenfalls im privaten Bereich der Klasse CTrading, und die beiden Fehler treten beim Kompilieren der Datei TradingControl.mqh auf.

Artem, wie funktioniert es dann bei Ihnen? Entweder gibt es hier einen Fehler oder ich verstehe etwas falsch.

P.S. Ich habe die angehängten Dateien für den nächsten Teil - 31 - heruntergeladen, und auch dort befinden sich diese Methoden im privaten Bereich der CTrading-Klasse und auch diese beiden Fehler treten beim Kompilieren auf.

Dies wurde nach einem kürzlichen Update so. Versuchen Sie, diese Methoden in einem geschützten Bereich unterzubringen, damit sie nicht von außen zugänglich sind. Öffentliche Methoden sind zu schlecht

 
Artyom Trishkin #:

Dies ist nach einer kürzlichen Aktualisierung der Fall. Versuchen Sie, sie in einen geschützten Bereich zu stellen, damit sie nicht von außen zugänglich sind. Öffentlich ist zu schlecht

Okay, ich werde das tun.

Eine weitere Frage: es gibt Methoden im öffentlichen Bereich ClosePosition, PlaceBuyStop, PlaceBuyLimit, etc. Ist es für sie nicht entscheidend, dass sie im öffentlichen Bereich stehen?

 
MQL_User #:

In Ordnung, das werde ich.

Und noch eine Frage: Es gibt Methoden im öffentlichen Bereich ClosePosition, PlaceBuyStop, PlaceBuyLimit, etc. Ist es nicht wichtig, dass sie im öffentlichen Bereich stehen?

Sie sollten dort sein - sie sind eine der Methoden für die Arbeit mit Aufträgen und Positionen