Neuer MetaTrader 5 Build 3620: Verbesserungen am Web-Terminal, ONNX-Unterstützung und schnelle Matrix-Multiplikationen in MQL5
Ich sehe heute morgen etwas merkwürdige Nachrichten vom Terminal:
- 6:29: New version (3601) available)
- 6:30 download von mt5w64 , mt5wide64 , mt5wst64
- 7:42 Check for beta version
you are using the latest version - The version check shows build 3588 is running
Irgendwie widersprechen sich alle Nachrichten zusammen genommen?
Hier könnte man noch etwas verbessern ;)
Außerdem, immer wenn ich auf "Hilfe" => "Über" klicke erscheint das Schild mit der Version (ohne Hinweis, ob beta oder release) und/aber im Journal wird gleichzeitig ausgedruckt:
2023.03.04 08:16:14.970 LiveUpdate check for release version 2023.03.04 08:16:15.119 LiveUpdate you are using the latest version
Es läuft aber die Beta-Version :(
Man könnte auch mal endlich diesen Fehler beheben. Der ist schon ewig drin.
Das selbe Menü Deals Trades ....was denn nun ?
Ich (B.3621, Win 10) habe im Zuge einer EA-Entwicklung immer wieder den Debugger (EurUsd,...) gestartet und das hat jedes Mal auch im Terminal ein neues Chart-Fenster aufgemacht.
Statt alle jetzt einzeln anwählen und dann mit Ctrl+F4 löschen zu müssen, dachte ich ich klicke einfach auf das vorher gesicherte Profil des Terminals (ohne die Charts durch den Debugger) und alls überzähligen Chart würden verschwinden - aber nein, nix passiert :(
Es wäre schön, wenn das Terminal auch so auf ein Profil reagieren würde.
- 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.
Die neue Version der aktualisierten MetaTrader 5-Plattform wird am Freitag, den 10. März 2023, veröffentlicht.
Das Update bietet Verbesserungen des Webterminals. Wir haben eine Reihe von Farbvorlagen für die Webterminal-Schnittstelle implementiert und das Fenster für die Spezifikation von Symbolen verbessert.
Außerdem bietet die neue Version die Allgemeine Matrixmultiplikation (GeMM) in MQL5. Dieser Algorithmus beschleunigt die Berechnungen auf den meisten Prozessoren. Der neue Algorithmus wird derzeit von der Methode matrix::GeMM unterstützt.
Wir haben auch Unterstützung für Operationen mit ONNX-Modellen in MQL5 implementiert. Dies wird die Verwendung von neuronalen Netzen in Expert Advisors erheblich erleichtern.
Die neue Version realisiert folgende Änderungen:
MetaTrader 5 Client Terminal Build 3620
ONNX ist ein Open-Source-Format für Modelle des maschinellen Lernens. Dieses Format wird von vielen Plattformen unterstützt, darunter Chainer, Caffee2 und PyTorch. Erstellen Sie ein ONNX-Modell mit Hilfe spezieller Tools, integrieren Sie es in Ihre MQL5-Anwendung und nutzen Sie es, um Handelsentscheidungen zu treffen.
Beschreibungen aller unterstützten Funktionen finden Sie in der Dokumentation. Ein Beispiel für ein ONNX-Testmodell finden Sie unter „öffentliche Projekte“ im MetaEditor. Suchen Sie das Projekt ONNX.Price.Prediction in „Toolbox \ Öffent,iche Projekte“ und wählen Sie im Kontextmenü die Option Teilnehmen. Das Projekt wird auf Ihren Computer heruntergeladen und erscheint im Navigator:
Kompilieren Sie das Projekt und lassen Sie es auf EURUSD H1 laufen, um das Ergebnis zu sehen.
Neben dem Modell und dem MQL5-Code, der es ausführt, enthält das Projekt auch das Python-Skript PricePredictionTraining.py. Es zeigt, wie Sie selbst ein ONNX-Modell erstellen können. Um das Skript auszuführen, installieren Sie Python auf Ihrem Computer und die erforderlichen Module über die Eingabeaufforderung:
python -m pip install --upgrade tensorflow
python -m pip install --upgrade pandas
python -m pip install --upgrade scikit-learn
python -m pip install --upgrade matplotlib
python -m pip install --upgrade tqdm
python -m pip install --upgrade metatrader5
python -m pip install --upgrade onnx==1.12
python -m pip install --upgrade tf2onnx
Der neue Algorithmus wird derzeit von der Methode matrix::GeMM unterstützt. Wenn Ihr Prozessor die Befehle AVX and FMA unterstützt (die meisten nach 2013 veröffentlichten Prozessoren unterstützen diese Befehle), wird der Algorithmus automatisch aktiviert.
Matrizen und Vektoren werden an eine DLL als Zeiger auf einen Puffer übergeben. Um zum Beispiel eine Matrix vom Typ float zu übergeben, muss der entsprechende Parameter der aus der DLL exportierten Funktion einen Pufferzeiger vom Typ float aufnehmen. Zum Beispiel:
MQL5
#import "mmlib.dll" bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta); #import
C++extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
Zusätzlich zu den Puffern sollten Sie Matrix- und Vektorgrößen für eine korrekte Verarbeitung übergeben.MQL5: Die neue Funktion CopySeries zum Kopieren von synchronisierten Zeitreihen aus MqlRates in separate Arrays hinzugefügt.
Die Funktion CopySeries ermöglicht es, mit einem einzigen Aufruf nur die erforderlichen Zeitreihen in verschiedene spezifizierte Arrays zu erhalten, wobei alle Zeitreihendaten synchronisiert werden. Das bedeutet, dass alle Werte in den resultierenden Arrays bei einem bestimmten Index N zum selben Balken des angegebenen Symbol/Zeitrahmenpaares gehören. Daher muss der Programmierer die empfangenen Zeitreihen nicht zusätzlich mit der Eröffnungszeit der Balken synchronisieren.
Im Gegensatz zu CopyRates, das den gesamten Satz von Zeitreihen als MqlRates-Array zurückgibt, ermöglicht die Funktion CopySeries, bestimmte erforderliche Zeitreihen in separaten Arrays zu erhalten. Dies kann durch die Angabe einer Kombination von Flags geschehen, um den Typ der Zeitreihe auszuwählen. Die Reihenfolge der an die Funktion übergebenen Arrays muss mit der Reihenfolge der Felder in der MqlRates-Struktur übereinstimmen:
struct MqlRates { datetime time; // period beginning time double open; // open price double high; // high price for the period double low; // low price for the period double close; // close price long tick_volume; // tick volume int spread; // spread long real_volume; // exchange volume }
Wenn Sie also die Werte der Zeitreihen „time“, „close“ und „real_volume“ für die letzten 100 Balken des aktuellen Symbols/Zeitrahmens abrufen möchten, sollten Sie den folgenden Aufruf verwenden:
datetime time[]; double close[]; long volume[]; CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);
Die Reihenfolge der Arrays „time, close, volume“ muss mit der Reihenfolge der Felder in der Struktur MqlRates übereinstimmen. Die Reihenfolge der Werte in der Maske rates_mask wird nicht berücksichtigt. Die Maske könnte auch folgendermaßen aussehen:
COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE
Beispiel
//--- input parameters input datetime InpDateFrom=D'2022.01.01 00:00:00'; input datetime InpDateTo =D'2023.01.01 00:00:00'; input uint InpCount =20; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart(void) { //--- arrays to get timeseries from the Rates structure double open[]; double close[]; float closef[]; datetime time1[], time2[]; //---request close prices to a double array ResetLastError(); int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount, COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close); PrintFormat("1. CopySeries returns %d values. Error code=%d", res1, GetLastError()); ArrayPrint(close); //--- now also request open prices; use float array for close prices ResetLastError(); int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount, COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef); PrintFormat("2. CopySeries returns %d values. Error code=%d", res2, GetLastError()); ArrayPrint(closef); //--- compare the received data if((res1==res2) && (time1[0]==time2[0])) { Print(" | Time | Open | Close double | Close float |"); for(int i=0; i<10; i++) { PrintFormat("%d | %s | %.5f | %.5f | %.5f |", i, TimeToString(time1[i]), open[i], close[i], closef[i]); } } /* Result 1. CopySeries returns 0 values. Error code=0 [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604 [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247 2. CopySeries returns 0 values. Error code=0 [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604 [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247 | Time | Open | Close double | Close float | 0 | 2023.03.01 17:00 | 1.06660 | 1.06722 | 1.06722 | 1 | 2023.03.01 18:00 | 1.06722 | 1.06733 | 1.06733 | 2 | 2023.03.01 19:00 | 1.06734 | 1.06653 | 1.06653 | 3 | 2023.03.01 20:00 | 1.06654 | 1.06520 | 1.06520 | 4 | 2023.03.01 21:00 | 1.06520 | 1.06573 | 1.06573 | 5 | 2023.03.01 22:00 | 1.06572 | 1.06649 | 1.06649 | 6 | 2023.03.01 23:00 | 1.06649 | 1.06694 | 1.06694 | 7 | 2023.03.02 00:00 | 1.06683 | 1.06675 | 1.06675 | 8 | 2023.03.02 01:00 | 1.06675 | 1.06684 | 1.06684 | 9 | 2023.03.02 02:00 | 1.06687 | 1.06604 | 1.06604 | */ }
MetaTrader 5 Web Terminal Build 3620
Die Aktualisierung wird über das Live-Update-System verfügbar sein.