Diskussion zum Artikel "Ein Beispiel für die Zusammenstellung von ONNX-Modellen in MQL5"

 

Neuer Artikel Ein Beispiel für die Zusammenstellung von ONNX-Modellen in MQL5 :

ONNX (Open Neural Network eXchange) ist ein offenes Format zur Darstellung neuronaler Netze. In diesem Artikel zeigen wir Ihnen, wie Sie zwei ONNX-Modelle gleichzeitig in einem Expert Advisor verwenden können.

Für einen stabilen Handel ist es in der Regel empfehlenswert, sowohl die gehandelten Instrumente als auch die Handelsstrategien zu diversifizieren. Das Gleiche gilt für Modelle des maschinellen Lernens: Es ist leichter, mehrere einfachere Modelle zu erstellen als ein komplexes. Es kann jedoch schwierig sein, diese Modelle zu einem ONNX-Modell zusammenzufügen.

Es ist jedoch möglich, mehrere trainierte ONNX-Modelle in einem MQL5-Programm zu kombinieren. In diesem Artikel betrachten wir eines aus so einem Ensemble, den sogenannten Abstimmungsklassifikator. Wir werden Ihnen zeigen, wie einfach es ist, ein solches Ensemble zu realisieren.

Die Ergebnisse des ersten Modelltests.

Erste Modelltestergebnisse


Nun wollen wir das zweite Modell testen. Hier sind die Ergebnisse des zweiten Modelltests.

Zweite Modelltest-Ergebnisse

Autor: MetaQuotes

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

Die geheimnisvolle Zahl 63 :)

 
Ivan Butko #:

Die geheimnisvolle Zahl 63 :)

Diese Zahl stammt aus einem anderen Artikel über geheimnisvolle Zahlen. Ich kann den Link nicht finden

 

Ich habe das gleiche Datum und die gleichen Einstellungen gewählt, aber die Ergebnisse sind unterschiedlich ausgefallen - weiß jemand, warum?

Testergebnisse des ersten Modells


Erste Ergebnisse der Modellprüfung


Testergebnisse des zweiten Modells


Ergebnisse der zweiten Modellprüfung
 
mysticsoul #: Ich habe dasselbe Datum und dieselben Einstellungen gewählt, aber die Ergebnisse sind unterschiedlich ausgefallen, weiß jemand warum?

Es könnte daran liegen, dass Ihr Handelsserver nicht MetaQuotes-Demo ist.

 
mysticsoul #:

Ich habe das gleiche Datum und die gleichen Einstellungen gewählt, aber die Ergebnisse sind unterschiedlich ausgefallen - weiß jemand, warum?

Ergebnisse des ersten Modelltests

Ergebnisse des zweiten Modelltests
Es könnte an einem Unterschied in der Initialisierung der Modelle liegen. Leider verwenden sie nicht die Technik des "Seeding Everything", um ihre Ergebnisse reproduzierbar zu machen.
 

Erstens, vielen Dank für die Zusammenstellung, es ist schön, in verschiedene Richtungen zu schauen. Es ist einfach zu folgen und gut zusammengesetzt.

Für mich erhalte ich ähnliche Erfolgsraten und eine etwas geringere Anzahl von Trades mit dem Demokonto, aber wenn ich das Meta Trader Demokonto benutze. Mit meinem Handelskonto wird nur einmal gehandelt. Ich nehme an, dass es an der Zeitzone des Brokers liegt, mein Broker ist in Australien (GMT+10). Die erste Transaktion vom Demokonto ist; Core 1 2023.01.02 07:02:00 deal #2 sell 1 EURUSD at 1.07016 done(based on order #2)

Die erste Transaktion von My Broker Australia (GMT+10) ist; Core 1 2023.01.03 00:00:00 failed market sell 1 EURUSD [Market closed] und nicht genau sicher, wie dies zu lösen. Möglicherweise ist das gesamte Modell zeitzonenabhängig. Wenn das der Fall wäre, sollten die Zeiten in ganzen Stunden angegeben werden... aber wie wird die Starttransaktion 2023.01.02 07:02:00 zu 2023.01.03 00:00:00?

Ich würde mich über jeden Vorschlag zur Ursache dieses Problems freuen.



 
Slava #:
Handelsaufschlag

Auch hier gelingt es mir, sehr ähnliche Ergebnisse mit den ursprünglichen onnx-Dateien auf meinem MetaQuates-Demokonto zu reproduzieren.

Dann schaffe ich es, die Python-MLs bis zum Ende zu trainieren; allerdings mit folgenden Warnungen/Fehlern, die ignoriert werden können:

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
...

Beide ML-Skripte enden mit:

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

Als nächstes kompiliere ich die ursprüngliche ONNX.Price.Prediction.2M.D1.mq5 neu, um die neuen MLs zu verwenden, die ich trainiert habe.

Die Backtest-Ergebnisse mit dem gleichen MetaQuates-Demo-Konto waren viel anders als das Original; das sieht nicht gut aus.

Ich würde wirklich gerne wissen, was schief gelaufen ist.
Vielen Dank.