MT5 und Geschwindigkeit in Aktion - Seite 17

 

Beachten Sie, dass HistorySelect einen physischen Schnappschuss des ausgewählten Verlaufs in den lokalen Cache des EA speichert, so dass Sie ihn ohne Bedenken durchgehen können. Andernfalls kann es zu sehr unangenehmen Effekten kommen, da der Kontoverlauf asynchron aktualisiert bzw. synchronisiert wird. Ganz zu schweigen von der Tatsache, dass der Benutzer selbst die Tiefe des Verlaufs über die Schnittstelle manuell ändern kann.

Daher diese Kopierkosten. Dies gilt umso mehr, wenn Sie absichtlich versuchen, das Kopieren dieses Verlaufs in den Cache von mehreren Threads gleichzeitig zu erzwingen.

Wir haben bereits eine Menge an Sampling-Operationen optimiert und jetzt denken wir über eine optimale Cache-Aktualisierung nach, während in Wirklichkeit 99 % der Samples völlig nutzlos sind und übersprungen werden.

Das heißt, dass der Cache Treffer nahe 100 % anzeigt, es sei denn, Sie setzen die Stichprobengrenzen gezielt nach dem Zufallsprinzip fest.

Wahrscheinlich wird es schon nächste Woche eine wirksame Lösung geben.

 
Renat Fatkhullin:

Beachten Sie, dass HistorySelect einen physischen Schnappschuss des ausgewählten Verlaufs in den lokalen Cache des EA speichert, so dass Sie ihn ohne Bedenken durchgehen können. Andernfalls kann es zu sehr unangenehmen Effekten kommen, da der Kontoverlauf asynchron aktualisiert bzw. synchronisiert wird. Ganz zu schweigen von der Tatsache, dass der Benutzer die Tiefe des Verlaufs selbst manuell über die Schnittstelle ändern kann.

Es gibt eine Tabelle der Aufträge und eine Tabelle der Geschäfte. Warum sollten wir physische Snaps machen, wenn wir die vier Indizes zum Zeitpunkt des HistorySelect-Aufrufs kennen?

Deshalb sind die Kopierkosten auch so hoch. Vor allem, wenn es um das gleichzeitige erzwungene Kopieren dieser Geschichte in den Cache von mehreren Threads geht.

Wir haben bereits eine Menge an Sampling-Operationen optimiert und jetzt denken wir über eine optimale Aktualisierung des Cache nach, während in Wirklichkeit 99 % der Samples völlig nutzlos sind und übersprungen werden.

Das heißt, dass der Cache Treffer nahe 100 % anzeigt, es sei denn, Sie setzen die Stichprobengrenzen gezielt nach dem Zufallsprinzip fest.

Wahrscheinlich wird es schon nächste Woche eine wirksame Lösung geben.

HistoryDealSelect und HistoryOrderSelect zerstören nun die entsprechenden Muster. Warum gibt es nicht, wie in MT4, den Zugriff auf beide Tabellen über Indizes? Neue Funktionen einführen.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2020.08.20 11:28

Neue interne Funktionen.
int OrderExist( const string symbol, ENUM_ORDER_TYPE type, ulong magic, ulong &tickets[] );

int PositionExist( const string symbol, ENUM_POSITION_TYPE type, ulong magic, ulong &tickets[] );

Die Indizes verlangen danach. Ich verstehe nicht, warum ich die Anzahl der Geschäfte auf meinem Konto an einer Stelle erfahren sollte.

 

Und diese Tabellen können sich jederzeit ändern. Das gilt auch für einzelne Datensätze.

Niemand kann ihre Unveränderlichkeit garantieren, da asynchrone Operationen, Synchronisationsprozesse und manuelle Tiefenmodi von den Benutzern festgelegt werden.

Wie ich bereits oben geschrieben habe, werden wir intelligente Caching-Techniken anwenden, die die Kosten für Select-Funktionen auf Null reduzieren werden. Es sei denn, Sie legen die Stichprobengrenzen gezielt nach dem Zufallsprinzip fest. Das letzte Datum kann geändert werden und macht den Cache nicht ungültig, wenn es immer in der Zukunft/zum letzten Mal liegt. Neuere Transaktionen werden sparsam in den Cache aufgenommen.


In MT4 funktioniert es genauso, nur die Cache-Erstellung ist ausgeblendet. Bei jedem OnTick/OnStart von MT4 erstellt das Terminal automatisch und sparsam eine Momentaufnahme des Marktumfelds für jeden EA.

Daher können Sie die tatsächliche Latenzzeit der Datenaufbereitung nicht anhand des MQL4-Codes beurteilen. Zum Glück sind die Daten im MT4 klein und einfach.


In MT5 haben wir auf die Kosten für die automatische Erstellung der Marktumgebung verzichtet, um Verzögerungen zu reduzieren und unnötige Arbeit zu vermeiden. Stattdessen haben wir die volle Kostenkontrolle an die Roboterentwickler abgegeben, die genau das anfordern können, was sie brauchen.

Beachten Sie, dass die Größe des Marktumfelds in MT5 im Vergleich zu MT4 riesig ist - es kann einfach nicht repliziert werden.

Mit Ihren Tests haben Sie eine solche kostspielige Probenahme in Anspruch genommen.

Wir werden das in Ordnung bringen - es ist in unserem Interesse.

 
Renat Fatkhullin:

Und diese Tabellen können sich jederzeit ändern. Das gilt auch für einzelne Datensätze.

Niemand kann ihre Unveränderlichkeit garantieren, da asynchrone Operationen, Synchronisationsprozesse und manuelle Tiefenmodi von den Benutzern festgelegt werden.

Wollen Sie damit sagen, dass vor dem bereits letzten Handel ein weiterer Handel in der Handelshistorie erscheinen kann? Wenn sich ein Gewerbe geändert hat, ein anderes. Aber sich in eine bereits bestehende Liste einzufügen - das habe ich nicht bemerkt.

 

OrderExist und PositionExist sind spezielle optimierte Funktionen, die das stupide Durchlaufen aller Aufträge oder Positionen auf der Suche nach Einträgen nach Symbol, Transaktionsart und Medzhik vermeiden.

Das Ergebnis ist eine Reihe von Tickets.


Mit diesen Funktionen können die Programme eine Menge Geld sparen. Vor allem, wenn offene Positionen und Aufträge massenhaft, ständig und wiederholt in Überschreitungsschleifen aufgerufen werden.

Wir werden in Zukunft effektivere Funktionen für den Zugriff auf umfangreiche Handelsdaten einführen.

Darüber hinaus wird die Sprache erheblich gestärkt und vereinfacht und mit leistungsfähigeren Funktionen ausgestattet.

 
fxsaber:

Wollen Sie damit sagen, dass es einen weiteren Handel in der Handelshistorie vor dem bereits letzten Handel geben kann? Wenn sich ein Geschäft geändert hat, ein anderes. Aber sich in eine bereits bestehende Liste einzufügen - das habe ich nicht bemerkt.

Theoretisch, ja.

Vergessen Sie nicht die Synchronisationsprozesse. Eine große Anzahl von Prozessen auf der Plattform ist asynchron.

Eine Gateway-Integration mit einer Börse oder einem Liquiditätsanbieter kann zum Beispiel Transaktionsberichte mit Verzögerungen von Sekunden oder sogar Minuten senden. Häufig bietet die API überhaupt keinen Zugriff auf die Historie für den Abgleich, sondern liefert langsame und unrhythmische Berichtsgeneratoren.

Bei Marktöffnung oder aufgrund einer unerwarteten Gateway-Neuverbindung können sich die Berichte verzögern. Sie werden in den Verlauf auf dem Server repliziert und sofort asynchron an die Terminals gesendet. Durch die Sortierung nach Datum werden sie an den richtigen Stellen eingefügt, und in der Zwischenzeit können Sie neue Geschäfte eröffnen.

Die meisten Integrations-APIs sind so unausgereift und dysfunktional, dass sie es fast unmöglich machen, garantierte Gateways zu schaffen. Allerdings gibt es die Meinung, dass dies ein Produkt der absichtlichen Sabotage durch ihre Entwickler ist.

 
Renat Fatkhullin:

OrderExist und PositionExist sind spezielle optimierte Funktionen, die das stupide Durchlaufen aller Aufträge oder Positionen auf der Suche nach Einträgen nach Symbol, Transaktionsart und Medzhik vermeiden.

Das Ergebnis ist eine Reihe von Tickets.


Mit diesen Funktionen können die Programme eine Menge Geld sparen. Vor allem, wenn offene Positionen und Aufträge massenhaft, ständig und wiederholt in Überschreitungsschleifen aufgerufen werden.

Wir werden in Zukunft effektivere Funktionen für den Zugriff auf umfangreiche Handelsdaten einführen.

Darüber hinaus wird die Sprache erheblich gestärkt und vereinfacht und mit leistungsfähigeren Funktionen ausgestattet.

Renat, eine große Bitte, um Zugang zu den Anführungszeichen außerhalb von TERMINAL_MAXBARS zu haben, wenn man Copy... Funktionen benutzt. Wenigstens nur den Minutenbereich. Sie können dafür auch eine eigene Funktion einrichten.
Aber um Zugang zu diesen Daten zu haben, müssen Sie TERMINAL_MAXBARS immer auf unbegrenzt setzen (außerdem überlastet es das Terminal), was sehr unpraktisch ist, weil Sie nicht für alle Symbole unbegrenzt brauchen.
Soweit ich weiß, werden beim Kopieren aller kleinen MN1-Periodenbalken zwar alle M1-Balken heruntergeladen, aber es besteht kein Zugriff auf sie.
Natürlich können Sie auch alle Ticks herunterladen, da sie nicht dieser Einschränkung unterliegen, aber das ist zeitaufwändiger und leider stimmen die Ticks nicht immer mit dem gesamten Minutenverlauf überein.

 
Nikolai Semko:

Renat, eine große Bitte, um Zugang zu Kursen außerhalb von TERMINAL_MAXBARS zu haben, wenn man Copy... Funktionen benutzt. Wenigstens nur den Minutenbereich. Sie können dafür auch eine eigene Funktion einrichten.
Aber um Zugang zu diesen Daten zu haben, müssen Sie TERMINAL_MAXBARS immer auf unbegrenzt setzen (außerdem überlastet es das Terminal), was sehr unpraktisch ist, weil Sie nicht für alle Symbole unbegrenzt brauchen.
Soweit ich weiß, werden beim Kopieren aller kleinen MN1-Perioden-Balken zwar alle M1-Balken heruntergeladen, aber es besteht kein Zugriff auf sie.
Natürlich können Sie auch alle Ticks herunterladen, da sie nicht dieser Einschränkung unterliegen, aber das ist zeitaufwändiger und leider stimmen die Ticks nicht immer mit dem gesamten Minutenverlauf überein.

Nein, der Verlauf außerhalb dieser Grenzen wird nicht erfasst und auf Synchronisierung geprüft. Außerdem gibt es keinen Platz, um sie zu speichern (wir bauen keine zusätzlichen unsichtbaren Zwischenspeicher), wir klettern nicht in unwirtschaftlichen Modi auf die Festplatte und wir bauen keine Krücken.

Im Allgemeinen ist dies eine schädliche Idee, da die Entwickler sofort anfangen werden, absolut ineffiziente Algorithmen zu schreiben und den Händlern raten, "5000 oder besser 1000 Balken einzustellen", und uns der Langsamkeit und Ineffektivität beschuldigen.

Wir haben absichtlich zugelassen, dass die Menge der den Diagrammen zugewiesenen Ressourcen kontrolliert wird. Es handelt sich um 64 Bit und der Speicher ist jetzt billig - verwenden Sie die entsprechenden Einstellungen im Rahmen der Regeln und der Architektur.

Wir werden dieses Verhalten nicht ändern.

 
Renat Fatkhullin:

Nein, der Verlauf außerhalb dieser Grenzen wird nicht erhoben und auf Synchronisierung geprüft. Außerdem gibt es keinen Platz, um sie zu speichern (wir werden keine zusätzlichen unsichtbaren Zwischenspeicher einrichten) und wir werden nicht in unwirtschaftlichen Modi über die Festplatte klettern.

In der Tat ist es eine schädliche Idee, da die Entwickler sofort anfangen werden, absolut ineffiziente Algorithmen zu schreiben und den Händlern raten, "5000 oder besser 1000 Balken einzustellen" und uns der Langsamkeit und Ineffizienz beschuldigen.

Wir haben absichtlich zugelassen, dass die Menge der den Diagrammen zugewiesenen Ressourcen kontrolliert wird. Es handelt sich um 64 Bit und Speicher ist jetzt billig - verwenden Sie die entsprechenden Einstellungen im Rahmen der Regeln und der Architektur.

Wir werden dieses Verhalten nicht ändern.

Gut. Ich hab's. Ich danke Ihnen. Durchgestrichen.
Obwohl ich natürlich gerne über Unwirtschaftlichkeit argumentieren
würde. Ich werde unbegrenzt lassen müssen und als Ergebnis werden alle offenen (zum Beispiel habe ich im Moment 14 Charts) den gesamten Verlauf behalten, obwohl ich nur 5000 für die meisten von ihnen brauche. Was im Gegenteil eher unwirtschaftlich sein wird.
Außerdem brauche ich diese Daten nicht zu speichern. Ich werde mich um die Lagerung kümmern. Ich habe das Laden aller Minutenbalken initiiert, sie in ein Array gepackt und brauche es nicht mehr und alle Caches können gelöscht werden, wenn ihre Größe TERMINAL_MAXBARS überschreitet. Vielleicht ist das der Zweck einer separaten Funktion, die keine Caches speichert.

Obwohl ich natürlich zustimme, dass ungezogene Hände das System mit solchen periodischen Belastungen aussetzen können.

 

Sie haben nur zwei Staaten 5000 und eine unbegrenzte?

Du bist der Meister deines eigenen Glücks.

Grund der Beschwerde: