MT5 und Geschwindigkeit in Aktion - Seite 78

 
Valeriy Yastremskiy:

Verstehen Sie richtig, dass der Terminalspeicher mit dem Terminalprogrammspeicher von mcl, tix und anderen gestapelt ist.

Nein. Simply CopyTicks speichert die angeforderten Ticks für 10 Sekunden im Cache. Wenn zum Beispiel 3 GB Speicher angefordert werden, speichert Terminal diese 3 GB mehr im Cache. Das Terminal wird insgesamt 6 GB verbrauchen. Wenn Sie ArrayFree ausführen und 3 Gb für ein anderes Symbol anfordern, wird das Terminal 9 Gb verbrauchen. Und so weiter.

 
Valeriy Yastremskiy:

Verstehen Sie richtig, dass der Speicher des Terminals zum Speicher der Terminalprogramme mcl, tix und anderen hinzugefügt wird.

Ja, natürlich.
 
Wir müssen ein Skript erstellen, das ein benutzerdefiniertes Symbol auf der Grundlage der Tick-Historie mehrerer Symbole nach einer Formel erstellt
MqlTick Formula( const MqlTick &Symbol1_Tick
                 const MqlTick &Symbol2_Tick,
                 const MqlTick &Symbol3_Tick,
                 const MqlTick &Symbol4_Tick,
                 const MqlTick &Symbol5_Tick );

Es scheint, dass 100 MB RAM für diese Aufgabe ausreichen sollten, selbst für eine Milliarde Ticks. Aber im MT5 kann man diese Aufgabe nicht über CopyTicks lösen.

Hier ist die Krücke:

  1. CopyTicks wird für jedes Symbol einzeln aufgerufen (wobei nach jedem Aufruf auf die Freigabe des Zwischenspeichers gewartet werden muss) und die Tick-Historie über FileSave in die entsprechenden Dateien geschrieben.
  2. Dann folgt das Lesen von Zecken aus diesen Dateien und der Aufruf der Formel für sie.

Ja, es ist eine unheimliche Krücke, aber es gibt keine anderen Möglichkeiten. Sie können also nicht direkt mit CopyTicks arbeiten. Es ist notwendig, Dateiarchive der Zecken zu verwenden.


Der größte Speicherverbrauch wird in p.1. zu verzeichnen sein, selbst wenn man davon ausgeht, dass der Cache nach jedem Aufruf freigegeben wird. In diesem Fall wird S.2. umsonst laufen!

 

Ich handle mit 8 Paaren auf einmal, mit mehreren Expert Advisors für jedes Paar. Und obwohl in Bezug auf die Ressourcen sieht es gut aus, Speichernutzung ist nicht mehr als 25%, CPU ist nicht mehr als 10% belastet, sind Lags spürbar, wie ein neues Diagramm öffnet für ein paar Sekunden, sowie in der allgemeinen Handel. Vielleicht gibt es, zumindest abstrakt, einige bewährte Praktiken, wie man alles verpacken und schneller bearbeiten kann? Ich weiß, dass Sie mehrere Expert Advisors zu einem einzigen virtualisieren. Was sind die Fallstricke? Wie wurde die Übermittlung von Handelsaufträgen umgesetzt? Worauf sollte ich achten?

P.S. Ich selbst nutze die Synchronisation über Virtual und handle über MT4Orders, 1 EA pro Chart.

 
fxsaber:

Gleichermaßen. Nehmen Sie Ihren VPS. Marktscreener können damit nicht arbeiten.

ZS Es wäre gut, wenn die Schluckaufprobleme, die seit Monaten auftreten, beseitigt würden. Führen Sie dieses Skript auf einem Rechner mit unendlich viel RAM aus. Ich kann zum Beispiel keine Zecken vom 1. Juni hochladen, sondern nur ein Zeichen nach dem anderen. Es hängt einfach CopyTicks mit null Ressourcenverbrauch.

Machen Sie einen Speicherauszug des Terminals, wenn es sich "aufhängt". Schauen wir mal, was die Ursache ist.

 
traveller00:

Ich handele mit 8 Paaren auf einmal, mit mehreren Expert Advisors für jedes Paar. Und obwohl in Bezug auf die Ressourcen sieht es gut aus, Speichernutzung ist nicht mehr als 25%, CPU ist nicht mehr als 10% belastet, sind Lags spürbar, wie ein neues Diagramm öffnet für ein paar Sekunden, sowie in der allgemeinen Handel. Vielleicht gibt es, zumindest abstrakt, einige bewährte Praktiken, wie man alles verpacken und schneller bearbeiten kann?

Verwenden Sie ein neues MT4Orders (wo die Bearbeitung der Historie beschleunigt wird, nachdem dieser Zweig erstellt wurde) und machen Sie einen Snapshot der aktuellen Umgebung: Aufträge und Positionen. Ich lasse alles fliegen.

Ich weiß, dass Sie mehrere Expert Advisors zu einem einzigen virtualisieren. Was sind die Fallstricke? Wie wurde die Übermittlung von Handelsaufträgen umgesetzt? Worauf sollte ich achten?

Ich verwende synchrone OrderSend, aber ich deaktiviere die MT5-Prüfungen.

Forum für Handel, automatisierte Handelssysteme und Strategietests

Bibliotheken: MT4Orders

fxsaber, 2020.09.29 08:45

Mit dieser Zeile.

MT4ORDERS::OrderSend_MaxPause = 0; // Отключение проверки корректности работы MT5-OrderSend.

kann verwendet werden, um alles zu deaktivieren. Kann im Falle eines trägen MT5-Handelsverlaufs nützlich sein, da MT4Orders die Korrektheit von MT5-OrderSend manchmal durch Bezugnahme auf diesen Verlauf überprüft (und sogar korrigiert).

Ich empfehle, dies nicht zu tun.


Jedem Set (Satz von Eingabeparametern) wird ein eigenes Virtual zugeordnet. Der Synchronisierer durchläuft alle Virtuals und führt die Synchronisierung für jeden einzelnen durch. Dies muss in einer Schleife geschehen, nicht gleich beim ersten Virtual.

Nach jedem OrderSend-Aufruf (innerhalb des Synchronisierers) wird zwangsläufig ein Snapshot erstellt und es werden neue Ticks (zu allen Virtuals) hinzugefügt, die während der OrderSend-Ausführungszeit entstanden sind. D.h. nach jeder hypothetischen Pause machen wir alles neu.

Frische Häkchen werden jeweils nur über CopyTicks gesetzt. Kein SymbolInfoTick zum Durchlaufen. Vergewissern Sie sich, dass der Synchronisierer nicht aktiviert ist, wenn CopyTicks_LastTick.time_msc < SymbolInfoTick.time_msc ist (dies kommt häufig vor, auch wenn die Aufrufe nacheinander (in beliebiger Reihenfolge) erfolgen). Andernfalls kann es vorkommen, dass zwar das reale Zeitlimit ausgeführt wird, nicht aber das virtuelle Zeitlimit. Und es wird Probleme mit der Synchronisierung geben.

Ich mache Schnappschüsse mit VIRTUAL::Snapshot. Neben dem offensichtlichen Geschwindigkeitsvorteil ermöglicht es Ihnen auch, Ihr Symbol von den anderen zu trennen - nur Ihr Symbol gelangt dorthin. Das bringt noch mehr Geschwindigkeit. Außerdem ist im Snapshot nicht nur der Verlauf deaktiviert,

#define  VIRTUAL_SNAPSHOT_WITHOUT_HISTORY // Отказ от снепшота истории для повышения производительности

sondern auch Felder (siehe unten), die den Zugriff auf die Historie erfordern.

#define  MACROS(A) this.##A = ::Order##A();

  bool ORDERS::Copy( const bool WithoutHistory = false )
  {
    MACROS(CloseTimeMsc)

    if (WithoutHistory && !this.CloseTimeMsc) // Для исторических ордеров оставляем все без изменений.
    {
      const string Str = NULL;
      this.comment = Str;

      this.Commission = 0;
      this.OpenPriceRequest = this.OpenPrice;
    }
    else // В MT4Orders требуется обращение к истории.
    {
      const string Str = ::OrderComment();
      this.comment = Str;

      MACROS(Commission)
      MACROS(OpenPriceRequest)
    }

Zuvor hatte ich auch geprüft, ob LastDeal.time_msc nicht größer als LastTick.time_msc war. Wenn diese Bedingung nicht erfüllt war, verweigerte ich die Synchronisierung aus offensichtlichen Gründen. Aber eine solche Überprüfung verbraucht eine Menge Ressourcen (sie funktioniert mit der Historie), also habe ich abgelehnt.


Trade On-Funktion - OnTick.


Ich habe wahrscheinlich die wichtigsten aufgelistet.

 

Synchron, nehme ich an, nicht nurOrderSend, sondern alle Handelsaufträge, einschließlich Änderung, Löschung usw.?


SymbolInfoTick nicht durchgeworfen wird, weil die Reihenfolge der Ticks durcheinander geraten kann? Und die CopyTicks sind genau in der richtigen Reihenfolge.


Es stellt sich heraus, dass SymbolInfoTick nur benötigt wird, um die Zeit zu überprüfen und das ist alles? Alle Abschlüsse usw. werden nur durchCopyTicks korrigiert?


Ist es sinnvoll zu versuchen, mehrere EAs in 1 auf 1 Chart zu packen? Nichts Unmögliches, aber ich versuche zu verstehen, ob es die Mühe und das Umschreiben wert ist oder ob der Gewinn minimal sein wird?

 
traveller00:

Macht es Sinn zu versuchen, mehrere EAs in 1 auf 1 Chart zu packen? Nichts Unmögliches, aber ich versuche herauszufinden, ob es die Mühe und die Umschreibung wert ist oder ob der Gewinn minimal sein wird?

Woher soll der Gewinn kommen? Jeder wird beim Handel auf einen von ihnen warten.

Und es gibt einfach weniger Parallelen.

Es sei denn, Sie können einen Cache mit Aufträgen für alle behalten, aber der Nutzen ist fraglich...

 
Anton:

Machen Sie einen Speicherauszug des Terminals, wenn es sich "aufhängt". Sehen Sie nach, was die Ursache dafür ist.

Reicht Ihnen der Code nicht aus, um das Problem zu reproduzieren? Oder reproduziert sie sich nicht?

 
traveller00:

Synchron, nehme ich an, nicht nurOrderSend, sondern alle Handelsaufträge einschließlich Änderung, Löschung usw.?

Ich meinte MT5-OrderSend.

SymbolInfoTick nicht übergeben wird, weil die Reihenfolge der Ticks verfälscht werden kann? Und CopyTicks geht genau alles in der richtigen Reihenfolge.

Denn es wird Löcher geben.

Also, SymbolInfoTick ist nur für die Überprüfung der Zeit erforderlich, das ist alles?

Ja.

Der gesamte Handel, etc. wird nur überCopyTicks laufen?

Nur.

Macht es Sinn zu versuchen, mehrere EAs in 1 auf 1 Chart zu packen? Nichts Unmögliches, aber ich versuche herauszufinden, ob es die Mühe und die Umschreibung wert ist oder ob der Gewinn minimal sein wird?

Das ist eine große Hilfe für mich.


Jeder einzelne Durchgang (im Einzeltestmodus) schreibt am Ende seine Schritte in dieselbe Datei. Nachdem ich mir also einige Durchgänge nach der Optimierung angesehen habe, erhalte ich eine Datei mit den Daten dieser Durchgänge. Dann filtere ich sie in dieser Datei und lasse nur das übrig, was gut aussieht. Und ich wähle diese Datei einfach mit dem FileSelectDialog aus, wenn ich den Roboter starte. So wird das Portfolio gehandelt.


Es stellt sich heraus, dass die Optimierung 20 Minuten dauert. Vorschau der Pässe - 3 Minuten. Ihr Filter - 3 Minuten. Inbetriebnahme des Roboters - Sekunden. Der Roboter muss nicht kompiliert werden. Verfolgung von Versionen und Diagrammen - ähnlich.

Beim Starten kann ich den Bericht für jeden Satz sehen. Ich kann jederzeit den Status des virtuellen und seines Namensvetters aus dem realen System sowie den detaillierten HTML-Report für das virtuelle und das reale System einsehen. Sowohl für ein einzelnes Set als auch für das gesamte Portfolio.


Da die Handelsstatistiken der Virtuals besonders schnell geschrieben sind, ist es möglich, Sets schnell zu vergleichen(über die Tastatur).

Dateien:
clip0184.gif  64 kb