OnTradeTransaction, der alle Transaktionen an einen öffentlichen Ort schreibt (z.B. in eine Ressource).
Dadurch entsteht eine enorme Flexibilität.
Sie können zum Beispiel hundert Async-Aufträge senden und auf ihre Ausführung warten, ohne die Tiefen des Codes zu verlassen und ihn weiter auszuführen.
Wir sprechen hier natürlich von Anfragen. Und das magische Thema hat damit nichts zu tun.
Obwohl es sinnvoll wäre, Entwickler Transaktionsdatensätze in ein öffentliches Array ausführen zu lassen. Ohne einen Indikator.
Natürlich wäre ein öffentlich verfügbares Array von Transaktionen ab dem Zeitpunkt der Terminal-Operation durch Entwickler ein logischer Weg, um die Asynchronität des Handels im MT5 zu fördern. Aber die Nachfrage nach einer solchen Lösung ist wahrscheinlich nahe Null. Für den Moment schließt die Bibliothek diese Lücke, falls jemand sie braucht.
Der Wert liegt nicht in der Bibliothek, sondern in dieser Funktionalität, wenn es ein Archiv aller Terminal-Transaktionen gibt.
Es wird möglich, eine Handelsbibliothek zu schreiben, wenn man sich überhaupt keine Gedanken über Asynchronität, Warten auf Ergebnisse usw. machen muss. Die Handelsbibliothek selbst macht alles unsichtbar.
Ein Beispiel: Auf einem Konto befinden sich 1.000 $. Es werden 100 asynchrone Aufträge Kauf USDCHF 1 Lot gesendet. Es ist klar, dass 99 von ihnen vom Handelsserver (nicht vom Terminal) abgelehnt werden, nur der erste wird ausgeführt. Aber vor der Stornierung und einer Antwort des Handelsservers kann die intelligente Handelsbibel davon ausgehen, dass 100 KAUF-Positionen vorhanden sind.
Beispielsweise können aufgrund einer teilweisen Ausführung viele Positionen anstelle einer einzigen offen sein. Wenn Sie viele Positionen/Aufträge ändern müssen, ist es sehr praktisch, den vorgeschlagenen Ansatz zu verwenden.
Sie brauchen sich beim Verlassen von OnTick nichts zu merken, Sie brauchen nicht OnTradeTransaction zu schreiben und dort mit RequestID umzugehen - der gleiche Weg. Sie schreiben, wie üblich, nur in OnTick. Und darin haben Sie immer und überall die volle Kontrolle über asynchrone Transaktionen. Sie erhalten blitzschnelle Mehrfachänderungen ohne Tamburin - Sie müssen nicht einmal über Asynchronität und ihre Eigenheiten nachdenken.
Interessante Idee, danke. Die Leistung sollte sich durch die Parallelisierung des Codes verbessern, so wie ich es verstehe. Funktioniert es in der Testversion korrekt?
Ich habe es nicht im Tester ausprobiert. Aber wenn Multicurrency OnTick im Tester nach der gleichen Idee funktioniert, sollte es auch hier funktionieren.
ZЫ Aber die Idee ist nicht in Parallelisierung. Es war in MT4, dass wir durch Handelsströme zu verteilen waren.
// Beispiel für das Speichern/Austauschen von Daten über Ressourcen innerhalb des Terminals #include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/de/code/22166 void OnStart() { const RESOURCEDATA<int> ResourceINT("::int"); // Ressource für den Austausch von Ints. const - als Beweis dafür, dass nichts in das Klassenobjekt geschrieben wird int ArrayINT[] = {1, 2, 3}; int Num = 5; ResourceINT = ArrayINT; // Die Ressource speichert ein Array. ResourceINT += Num; // Einen weiteren Wert zur Ressource hinzugefügt. ResourceINT += ArrayINT; // Ein Array hinzugefügt. int ArrayINT2[]; ResourceINT.Get(ArrayINT2); // Lesen von Daten aus der Ressource. ArrayPrint(ArrayINT2); // Zurückgezogen: 1 2 3 5 1 2 3 ResourceINT.Free(); // Gelöschte Daten aus der Ressource Print(ResourceINT.Get(ArrayINT2)); // Prüfen, dass keine Daten vorhanden sind: 0 const RESOURCEDATA<MqlTick> ResourceTicks("::Ticks"); // Ressource für den Austausch von Ticks. const - als Beweis dafür, dass nichts in das Klassenobjekt geschrieben wird MqlTick Tick; if (SymbolInfoTick(_Symbol, Tick)) for (int i = 0; i < 3; i++) ResourceTicks += Tick; // Der Tiki-Ressource hinzugefügt MqlTick Ticks[]; ResourceTicks.Get(Ticks); // Lesen von Daten aus der Ressource. ArrayPrint(Ticks); // Zurückgezogen. // Dies ist der vollständige Name der Ressource, auf die von einem anderen Programm aus zugegriffen werden soll const string NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::Ticks"; Print(NameOut); // Druckt den vollständigen Namen der Ressource. const RESOURCEDATA<MqlTick> Resource(NameOut); // Ressource für den Zugriff auf Daten (schreibgeschützt) aus einem anderen Programm MqlTick TicksOut[]; Resource.Get(TicksOut); // Lesen von Daten aus der Ressource. ArrayPrint(TicksOut); // Zurückgezogen. Resource.Free(); // Es gibt keine Möglichkeit, schreibgeschützte Ressourcendaten zu beeinflussen. Print(_LastError); // ERR_INVALID_PARAMETER - Fehlerhafter Parameter beim Aufruf einer Systemfunktion. }
Beispiel für das Speichern/Austauschen von Daten über Ressourcen innerhalb des Terminals
Ist es möglich, Daten zu lesen, die gerade geschrieben werden? Kann ich also unvollständige Informationen lesen?
Bislang kann ich mir keine Verwendung für diese Bibliothek vorstellen.
Sie wird definitiv nicht für den Devisenhandel benötigt, und auch an der Börse gibt es keinen Bedarf dafür.
Haben Sie diese Bibliothek an der Börse getestet?
In welchem Fall denken Sie, dass sie nützlich sein kann?
Ist es möglich, Daten zu lesen, die gerade geschrieben werden? D.h. nicht vollständige Informationen lesen?
Hier müssen Sie experimentieren. Ich denke, dass das gleichzeitige Schreiben/Lesen einer Ressource genauso funktioniert wie bei globalen Variablen, da das Schreiben in beiden Fällen eine Erstellung ist: ResourceCreate und GlobalVariableSet. Der einzige Unterschied zwischen einer Ressource und einer globalen Variable ist, dass man nicht einmal theoretisch gleichzeitig etwas in eine Ressource schreiben kann. Bei Global ist das möglich.
Das Lesen einer Ressource bedeutet nämlich, dass ein Teil der Daten aus dem Speicher geholt wird. Und wenn das Lesen begonnen hat, sollte das Schreiben einer Ressource keinen Einfluss darauf haben, denn beim Schreiben wird ein weiteres Stück Speicher zugewiesen. Sie können sich kaum überschneiden, weil das Betriebssystem selbst dies höchstwahrscheinlich verhindern wird. Aus diesem Grund sollte es meiner Meinung nach keine Lade-/Speicherkonflikte mit Ressourcen geben. Aber natürlich ist es besser, diese Frage den Entwicklern zu stellen.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
TradeTransactions:
Zugriff auf die Daten von OnTradeTransaction an beliebiger Stelle innerhalb einer Anwendung
Autor: fxsaber