Terminal
- Correction du calcul du bénéfice total dans les rapports de trading.
- Mise à jour des données fondamentales pour les instruments de trading disponibles via la fenêtre du Market Watch.
- Correction du lancement de la plateforme de trading sous Wine 7.0.1 sous Linux.
- Correction de l'ajout de symboles dans la fenêtre de Profondeur de Marché via la barre de recherche. Un symbole trouvé par description ne pouvait pas être ajouté à la liste en cliquant sur sa ligne.
MQL5
- Prise en charge des opérations avec les modèles ONNX (Open Neural Network Exchange).
ONNX est un format open-source pour les modèles d'apprentissage automatique. Ce format est pris en charge par de nombreuses plateformes, notamment Chainer, Caffee2 et PyTorch. Créez un modèle ONNX à l'aide d'outils spécialisés, intégrez-le dans votre application MQL5 et utilisez-le pour prendre des décisions de trading.
Les descriptions de toutes les fonctions prises en charge sont disponibles dans la documentation. Un exemple de modèle ONNX de test est disponible dans les projets publics dans MetaEditor. Trouvez le projet ONNX.Price.Prediction dans "Boîte à Outils \ Projets Publics" et sélectionnez Rejoindre dans le menu contextuel. Le projet sera téléchargé sur votre ordinateur et apparaîtra dans le Navigateur :
Compilez le projet et exécutez-le sur EURUSD H1 pour voir le résultat.
En plus du modèle et du code MQL5 qui l'exécute, le projet comprend également le script Python PricePredictionTraining.py. Il montre comment vous pouvez créer vous-même un modèle ONNX. Pour exécuter le script, installez Python sur votre ordinateur et les modules requis à partir de la ligne de commande :
python.exe -m pip install --upgrade pipDes instructions sur l'utilisation de ONNX sont disponibles dans la documentation.
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 python -m pip install --upgrade tf2onnx
- Ajout de la prise en charge de la Multiplication de Matrices Générales (GeMM). Cet algorithme accélère les calculs sur certains types de processeurs grâce à des tâches parallélisées et à une utilisation optimisée des caches L1/L2/L3. La vitesse de calcul est comparable à celle de logiciels populaires tels que Math Kernel Library (MKL) et OpenBLAS. Des tests comparatifs détaillés seront publiés prochainement.
Le nouvel algorithme est actuellement pris en charge dans la méthode matrix::GeMM. Si votre processeur prend en charge les instructions AVX et FMA (la plupart des processeurs commercialisés après 2013 prennent en charge ces instructions), l'algorithme sera activé automatiquement.
- Ajout de la possibilité de transférer des matrices et des vecteurs vers les DLL. Cela permet d'importer des fonctions qui utilisent les types pertinents à partir de variables externes.
Les matrices et les vecteurs sont transmis à une DLL sous la forme d’un pointeur vers un buffer. Par exemple, pour passer une matrice de type float, le paramètre correspondant de la fonction exportée depuis la DLL doit prendre un pointeur de buffer de type float. Par exemple :
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); #importC++
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)En plus des buffers, vous devez transmettre les tailles de matrice et de vecteur pour un traitement correct.
-
Ajout d'une nouvelle fonction CopySeries pour copier des séries temporelles synchronisées de MqlRates dans des tableaux séparés.
La fonction CopySeries permet d'obtenir uniquement les séries temporelles nécessaires dans différents tableaux spécifiés au cours d'un appel, et toutes les données des séries temporelles seront synchronisées. Cela signifie que toutes les valeurs des tableaux résultants à un certain indice N appartiendront à la même barre sur la paire Symbole/Timeframe spécifiée. Par conséquent, le programmeur n'a pas besoin de synchroniser les séries temporelles reçues avec l'heure d'ouverture de la barre.
Contrairement à CopyRates, qui renvoie l'ensemble complet des séries temporelles sous la forme d'un tableau MqlRates, la fonction CopySeries permet d'obtenir des séries temporelles spécifiques requises dans des tableaux séparés. Cela peut se faire en spécifiant une combinaison de drapeaux pour sélectionner le type de série temporelle. L'ordre des tableaux transmis à la fonction doit correspondre à l'ordre des champs dans la structure MqlRates :
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 }Donc si vous avez besoin d'obtenir les valeurs des séries temporelles 'time', 'close' et 'real_volume' pour les 100 dernières barres du Symbol/Timeframe actuel, vous devez faire l'appel suivant :
datetime time[]; double close[]; long volume[]; CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);L'ordre des tableaux "time, close, volume" doit correspondre à l'ordre des champs de la structure MqlRates. L'ordre des valeurs dans rate_mask est ignoré. Le masque pourrait être le suivant :
COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSEExemple
//--- 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 | */ } - Correction de la fonction OrderSend. La fonction pouvait retourner un ticket d’ordre incorrect si un même compte était utilisé simultanément sur plusieurs plateformes.
- Correction de l'importation des bibliothèques EX5. Une erreur s'est produite si le nom de la bibliothèque importée correspondait au nom du fichier dans lequel elle a été importée.
MetaEditor
- Ajout de l'envoi de notifications push aux membres d’un projet partagé. La nouvelle option permet d’informer les utilisateurs des modifications apportées aux paramètres et aux fichiers du projet. Pour activer les notifications, entrez votre identifiant MetaQuotes dans la section "Paramètres \ Sécurité" de votre profil MQL5.Community.
- Mise à jour des icônes de fichiers dans le navigateur. De nouvelles icones plus simples les rendront plus faciles à comprendre.
Tester
- Correction d'une erreur qui provoquait la coupure d’une chaîne de caractère si elle contenait le caractère "|".
- Correction des erreurs rapportées dans les journaux de crash.
Nouvelle version 3620 du Terminal Web MetaTrader 5
- Ajout de modèles de couleurs prêts à l'emploi pour l'interface du Terminal Web. Les modèles affectent l'affichage des barres et des lignes du graphique, ainsi que les prix dans le Market Watch et les états financiers du compte. Notre équipe de conception a préparé des préréglages de modèles de couleurs, basés sur vos suggestions et sur des combinaisons de couleurs traditionnelles.
- Fenêtre de spécification de symbole repensée. Les données des instruments de trading ont été réorganisées en blocs logiques pour faciliter la visualisation.
- Correction de l’ouverture de comptes réels via le terminal web. Le serveur pouvait renvoyer une erreur après avoir rempli un formulaire d'inscription.
- Correction d'une erreur dans la boîte de dialogue de trading. Si l'utilisateur fermait une position en appuyant sur le bouton X dans la fenêtre Boîte à outils alors que la boîte de dialogue de modification de position était ouverte, le contenu de la boîte de dialogue n'était pas réinitialisé. Après la mise à jour, la boîte de dialogue sera automatiquement réinitialisée à un nouveau mode de passation d’ordre dans ce cas.
- Correction de l'affichage du champ Serveur dans la boîte de dialogue de gestion des comptes.
- Correction de l'affichage de la période actuelle sur la barre d'outils.
- Correction de l’affichage des volumes en termes d'unités d'actifs sous-jacents, dans la boîte de dialogue de trading.
- Correction de la modification des niveaux du Stop Loss et du Take Profit. La modification d'une des valeurs peut réinitialiser la seconde sous certaines conditions.
- Correction de l’affichage des avertissements de risque d'investissement.
- MetaTrader 5 pour iPhone/iPad : Amélioration des fonctions de trading et d'analyse sur les graphiques
- MetaTrader 5 build 3550 : Améliorations et corrections
- MetaTrader 5 build 3540 : Authentification 2FA/TOTP et amélioration du Market Watch dans le terminal Web
- MetaTrader 5 build 3520 : Authentification 2FA/TOTP avec Google Authenticator
- MetaTrader 5 build 3510 : Améliorations du Terminal Web