Discussion de l'article "Un exemple d'assemblage de modèles ONNX dans MQL5"

 

Un nouvel article Un exemple d'assemblage de modèles ONNX dans MQL5 a été publié :

ONNX (Open Neural Network eXchange) est un format ouvert conçu pour représenter les réseaux neuronaux. Dans cet article, nous allons montrer comment utiliser simultanément 2 modèles ONNX dans un Expert Advisor.

Pour un trading stable, il est généralement recommandé de diversifier à la fois les instruments négociés et les stratégies de trading. Il en va de même pour les modèles d'apprentissage automatique : il est plus facile de créer plusieurs modèles simples qu'un seul modèle complexe. Mais il peut être difficile d'assembler ces modèles en un seul modèle ONNX.

Mais il est possible de combiner plusieurs modèles ONNX entraînés dans un programme MQL5. Dans cet article, nous examinerons l'un de ces ensembles, appelé le classificateur par vote. Nous allons vous montrer comment il est facile de mettre en œuvre un tel ensemble.

Résultats des tests du premier modèle

Résultats des tests du premier modèle


Testons maintenant le second modèle. Voici les résultats du test du deuxième modèle.

Résultats des tests du deuxième modèle

Le deuxième modèle s'est avéré beaucoup plus solide que le premier. Les résultats confirment la théorie selon laquelle les modèles faibles doivent être assemblés. Toutefois, cet article ne porte pas sur la théorie de l'assemblage, mais sur son application pratique.


Auteur : MetaQuotes

 
Для обучения используются серии из 63 цен Close

Le mystérieux numéro 63 :)

 
Ivan Butko #:

Le mystérieux numéro 63 :)

Ce nombre est tiré d'un autre article sur les nombres mystérieux. Je n'arrive pas à trouver le lien

 

J'ai choisi la même date et les mêmes paramètres, mais les résultats sont différents.

Résultats de l'essai du premier modèle


Résultats des tests du premier modèle


Résultats de l'essai du deuxième modèle


résultats des tests du deuxième modèle
 
mysticsoul #: J'ai réglé la même date et les mêmes paramètres, mais les résultats ont été différents.

Il se peut que votre serveur commercial ne soit pas MetaQuotes-Demo.

 
mysticsoul #:

J'ai choisi la même date et les mêmes paramètres, mais les résultats sont différents.

Résultats des tests du premier modèle

Résultats des tests du deuxième modèle
Cela pourrait être dû à une différence dans l'initialisation du poids des modèles. Malheureusement, ils n'utilisent pas la technique "seeding everything" pour rendre leurs résultats reproductibles.
 

Tout d'abord, merci beaucoup d'avoir préparé ce document, c'est bien de pouvoir regarder dans différentes directions. C'est facile à suivre et bien conçu.

En ce qui me concerne, j'obtiens des taux de réussite similaires et un nombre de transactions légèrement inférieur avec le compte de démonstration, mais lorsque j'utilise le compte de démonstration de meta trader. Avec mon compte de trading, il n'y a qu'une seule transaction. Je suppose que c'est le fuseau horaire du courtier, mon courtier est en Australie (GMT+10). La première transaction du compte démo est ; Core 1 2023.01.02 07:02:00 deal #2 sell 1 EURUSD at 1.07016 done(based on order #2)

La première transaction de My Broker Australia (GMT+10) est ; Core 1 2023.01.03 00:00:00 failed market sell 1 EURUSD [Market closed] et je ne sais pas exactement comment résoudre ce problème. Il est possible que l'ensemble du modèle dépende du fuseau horaire. Si c'était le cas, les heures devraient être exprimées en heures entières ? mais comment la transaction de départ 2023.01.02 07:02:00 devient-elle 2023.01.03 00:00:00 ?

J'apprécierais toute suggestion sur la cause de ce problème.



 
Slava #:
trade serve

Même chose ici, j'ai réussi à reproduire des résultats très similaires avec les fichiers onnx originaux sur mon compte MetaQuates-Demo.

Ensuite, j'ai réussi à ré-entraîner les MLs Python jusqu'à la fin ; bien qu'avec les avertissements/erreurs suivants qui peuvent être ignorés :

D:\MT5 Demo1\MQL5\Experts\article_12433\Python>python ONNX.eurusd.D1.10.Training.py
2023-11-19 18:07:38.169418: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'cudart64_110.dll'; dlerror: cudart64_110.dll not found
2023-11-19 18:07:38.169664: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
data path to save onnx model
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 5187/5187 [00:00<00:00, 6068.93it/s]
2023-11-19 18:07:40.434910: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'nvcuda.dll'; dlerror: nvcuda.dll not found
2023-11-19 18:07:40.435070: W tensorflow/stream_executor/cuda/cuda_driver.cc:263] failed call to cuInit: UNKNOWN ERROR (303)
2023-11-19 18:07:40.437138: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: WIN-SSPXX7BO0B0
2023-11-19 18:07:40.437323: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: WIN-SSPXX7BO0B0
2023-11-19 18:07:40.437676: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
Epoch 1/50
111/111 - 1s - loss: 1.6160 - mae: 0.9378 - val_loss: 2.7602 - val_mae: 1.3423 - lr: 0.0010 - 1s/epoch - 12ms/step
Epoch 2/50
111/111 - 0s - loss: 1.4932 - mae: 0.8952 - val_loss: 2.4339 - val_mae: 1.2412 - lr: 0.0010 - 287ms/epoch - 3ms/step
...

les deux scripts ML se terminent par :

111/111 - 0 s - loss: 1.2812 - mae: 0.8145 - val_loss: 1.2598 - val_mae: 0.8142 - lr: 1.0000 e-06 - 366 ms/epoch - 3 ms/step
Epoch 50/50
111/111 - 0 s - loss: 1.3030 - mae: 0.8203 - val_loss: 1.2604 - val_mae: 0.8143 - lr: 1.0000 e-06 - 365 ms/epoch - 3 ms/step
33/33 [==============================] - 0 s 1 ms/step - loss: 1.1542 - mae: 0.7584
test_loss=1.154
test_mae=0.758
2023-11-19 18:07:57.480814: I tensorflow/core/grappler/devices.cc:66] Number of eligible GPUs (core count >= 8, compute capability >= 0.0): 0
2023-11-19 18:07:57.481315: I tensorflow/core/grappler/clusters/single_machine.cc:358] Starting new session
2023-11-19 18:07:57.560110: I tensorflow/core/grappler/devices.cc:66] Number of eligible GPUs (core count >= 8, compute capability >= 0.0): 0
2023-11-19 18:07:57.560380: I tensorflow/core/grappler/clusters/single_machine.cc:358] Starting new session
2023-11-19 18:07:57.611678: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:354] MLIR V1 optimization pass is not enabled
saved model to model.eurusd.D1.10.onnx
24/24 - 0 s - loss: 0.6618 - accuracy: 0.6736 - val_loss: 0.8993 - val_accuracy: 0.4759 - lr: 4.1746 e-05 - 37 ms/epoch - 2 ms/step
Epoch 300/300
24/24 - 0 s - loss: 0.6531 - accuracy: 0.6770 - val_loss: 0.8997 - val_accuracy: 0.4789 - lr: 4.1746 e-05 - 39 ms/epoch - 2 ms/step
11/11 [==============================] - 0 s 682 us/step - loss: 0.8997 - accuracy: 0.4789
test_loss=0.900
test_accuracy=0.479
2023-11-19 18:07:19.838160: I tensorflow/core/grappler/devices.cc:66] Number of eligible GPUs (core count >= 8, compute capability >= 0.0): 0
2023-11-19 18:07:19.838516: I tensorflow/core/grappler/clusters/single_machine.cc:358] Starting new session
2023-11-19 18:07:19.872285: I tensorflow/core/grappler/devices.cc:66] Number of eligible GPUs (core count >= 8, compute capability >= 0.0): 0
2023-11-19 18:07:19.872584: I tensorflow/core/grappler/clusters/single_machine.cc:358] Starting new session
saved model to model.eurusd.D1.63.onnx

Ensuite, je recompile le fichier original ONNX.Price.Prediction.2M.D1.mq5 pour utiliser les nouveaux MLs que j'ai entraînés.

Les résultats du backtest avec le même compte MetaQuates-Demo étaient très différents de l'original ; ce qui ne semble pas bon.

J'aimerais vraiment savoir ce qui n'a pas fonctionné ?
Merci beaucoup.