Discusión sobre el artículo "Ejemplo de un conjunto de modelos ONNX en MQL5"

 

Artículo publicado Ejemplo de un conjunto de modelos ONNX en MQL5:

ONNX (Open Neural Network eXchange) es un estándar abierto para representar redes neuronales. En este artículo, le mostraremos la posibilidad de usar dos modelos ONNX simultáneamente en un asesor experto.

Para lograr un comercio estable, resulta deseable diversificar tanto los instrumentos negociados como las estrategias comerciales. La situación es la misma con los modelos de aprendizaje automático: resulta más sencillo crear varios modelos más simples que uno complejo, si bien podríamos tener dificultades al ensamblar estos modelos en un modelo ONNX.

Sin embargo, podemos combinar el uso de varios modelos ONNX ya entrenados en un programa MQL5. Vamos a ver lo fácil que resulta implementar uno de los conjuntos llamado clasificador de votación.

Resultados de la prueba del primer modelo.

Resultados de la prueba del primer modelo


Ahora probaremos solo el segundo modelo. Aquí tenemos los resultados de las pruebas del segundo modelo.

Resultados de la prueba del segundo modelo

Autor: MetaQuotes

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

El misterioso número 63 :)

 
Ivan Butko #:

El misterioso número 63 :)

Este número está sacado de otro artículo sobre números misteriosos. No encuentro el enlace

 

He puesto la misma fecha y los mismos ajustes, pero los resultados han sido diferentes. ¿Alguien sabe por qué?

Resultados del primer modelo


Resultados de las pruebas del primer modelo


Resultados del segundo modelo


resultados de las pruebas del segundo modelo
 
mysticsoul #: He puesto la misma fecha y la misma configuración, pero los resultados han sido diferentes. ¿Alguien sabe por qué?

Puede ser porque su servidor de comercio no es MetaQuotes-Demo

 
mysticsoul #:

He puesto la misma fecha y los mismos ajustes, pero los resultados han sido diferentes. ¿Alguien sabe por qué?

Resultados del primer modelo

Resultados de las pruebas del segundo modelo
Podría deberse a una diferencia en la inicialización del peso de los modelos. Desgraciadamente, no utilizan la técnica de "sembrar todo" para que sus resultados sean reproducibles.
 

En primer lugar, muchas gracias por reunir todo esto, es agradable mirar en diferentes direcciones. Es fácil de seguir y bien elaborado.

Para mí tengo tasas de éxito similares y un número ligeramente inferior de los oficios con la cuenta de demostración, pero cuando uso la cuenta de demostración meta comerciante. Con mi cuenta de operaciones sólo se negocia una vez. Estoy asumiendo que es la zona horaria para el corredor de mi corredor está en Australia (GMT + 10). La primera transacción de la cuenta demo es; Core 1 2023.01.02 07:02:00 deal #2 sell 1 EURUSD at 1.07016 done(based on order #2)

La primera transacción de Mi Broker Australia (GMT+10) es; Core 1 2023.01.03 00:00:00 mercado fallido vender 1 EURUSD [Mercado cerrado] y no exactamente seguro de cómo resolver esto. Posiblemente todo el modelo depende de la zona horaria. Si ese fuera el caso, los tiempos deberían estar en horas enteras, pero ¿cómo se convierte la transacción de inicio 2023.01.02 07:02:00 en 2023.01.03 00:00:00?

Agradecería cualquier sugerencia al respecto.



 
Slava #:
servicio comercial

Lo mismo digo, logro reproducir resultados muy similares con los archivos onnx originales en mi cuenta MetaQuates-Demo.

Luego, logro re-entrenar los MLs de Python hasta completarlos; aunque con las siguientes advertencias/errores que pueden ser ignorados:

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

ambos scripts ML terminan 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

A continuación vuelvo a compilar el original ONNX.Price.Prediction.2M.D1.mq5 para utilizar los nuevos MLs que he entrenado.

Los resultados del backtest con la misma cuenta MetaQuates-Demo fueron muy diferentes de los originales; lo cual no tiene buena pinta.

Me gustaría saber qué ha fallado:
Muchas gracias.