Discussione sull’articolo "Un esempio di come assemblare i modelli ONNX in MQL5"

 

Il nuovo articolo Un esempio di come assemblare i modelli ONNX in MQL5 è stato pubblicato:

ONNX (Open Neural Network eXchange) è un formato aperto costruito per rappresentare le reti neurali. In questo articolo mostreremo come utilizzare contemporaneamente due modelli ONNX in un Expert Advisor.

Per un trading stabile, di solito si raccomanda di diversificare sia gli strumenti negoziati che le strategie di trading. Lo stesso vale per i modelli di apprendimento automatico: è più facile creare diversi modelli semplici che uno complesso. Ma può essere difficile assemblare questi modelli in un unico modello ONNX.

Tuttavia, è possibile combinare diversi modelli ONNX addestrati in un unico programma MQL5. In questo articolo prenderemo in considerazione uno degli assemblaggi chiamato classificatore di voto. Vi mostreremo come sia facile implementare un tale assemblaggio.

Risultati del test del primo modello.

Risultati del test del primo modello


Verifichiamo ora il secondo modello. Ecco i risultati del test del secondo modello.

Autore: MetaQuotes

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

Il misterioso numero 63 :)

 
Ivan Butko #:

Il misterioso numero 63 :)

Questo numero è tratto da un altro articolo sui numeri misteriosi. Non riesco a trovare il link

 

Ho impostato la stessa data e le stesse impostazioni, ma i risultati sono stati diversi. Qualcuno sa perché?

Risultati del test del primo modello


Risultati del primo test del modello


Risultati del test del secondo modello


risultati del test del secondo modello
 
mysticsoul #: Ho impostato la stessa data e le stesse impostazioni, ma i risultati sono stati diversi. Qualcuno sa perché?

Potrebbe essere dovuto al fatto che il vostro server di trading non è MetaQuotes-Demo.

 
mysticsoul #:

Ho impostato la stessa data e le stesse impostazioni, ma i risultati sono stati diversi. Qualcuno sa perché?

Risultati del test del primo modello

Risultati del secondo modello
Potrebbe essere dovuto a una differenza nell'inizializzazione del peso dei modelli. Purtroppo non utilizzano la tecnica del "seeding everything" per rendere i loro risultati riproducibili.
 

Innanzitutto, grazie mille per aver messo insieme questo documento, è bello guardare in diverse direzioni. È facile da seguire e ben strutturato.

Per quanto mi riguarda, ottengo percentuali di successo simili e un numero di operazioni leggermente inferiore con il conto demo, ma quando utilizzo il conto demo di meta trader. Con il mio conto di trading si opera solo una volta. Presumo che sia il fuso orario del broker, il mio broker è in Australia (GMT+10). La prima transazione dal conto demo è; Core 1 2023.01.02 07:02:00 deal #2 sell 1 EURUSD at 1.07016 done(based on order #2)

La prima transazione dal mio Broker Australia (GMT+10) è; Core 1 2023.01.03 00:00:00 failed market sell 1 EURUSD [Mercato chiuso] e non so esattamente come risolverlo. Forse l'intero modello dipende dal fuso orario. Se così fosse i tempi dovrebbero essere espressi in ore intere, ma come fa la transazione iniziale 2023.01.02 07:02:00 a diventare 2023.01.03 00:00:00?

Apprezzerei qualsiasi suggerimento sulla causa di questo problema.



 
Slava #:
servizio commerciale

Lo stesso, riesco a riprodurre risultati molto simili con i file onnx originali sul mio conto MetaQuates-Demo.

Poi, riesco a riaddestrare le ML di Python fino al completamento, anche se con i seguenti avvertimenti/errori che possono essere ignorati:

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

entrambi gli script ML terminano con:

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

Successivamente ricompilo l'originale ONNX.Price.Prediction.2M.D1.mq5 per utilizzare i nuovi ML addestrati.

I risultati del backtest con lo stesso conto MetaQuates-Demo sono molto diversi da quelli originali, il che non è positivo.

Mi piacerebbe molto sapere cosa è andato storto?
Grazie mille.