Discussão do artigo "Um exemplo de como montar modelos ONNX em MQL5"

 

Novo artigo Um exemplo de como montar modelos ONNX em MQL5 foi publicado:

O ONNX (Open Neural Network Exchange) é um padrão aberto para a representação de modelos de redes neurais. Neste artigo, mostraremos a possibilidade de usar dois modelos ONNX simultaneamente em um Expert Advisor.

Para garantir uma negociação consistente e estável, é comum aconselhar a diversificação dos instrumentos negociados e das estratégias de negociação. Isso também se aplica aos modelos de aprendizado de máquina: a criação de diversos modelos mais simples é mais viável do que um único complexo. Contudo, pode ser desafiador combinar esses modelos em um único modelo ONNX.

Apesar disso, é factível unir vários modelos ONNX já treinados em um programa MQL5. Neste artigo, vamos explorar uma dessas combinações, conhecida como classificador de votação, e mostrar como implementá-la de forma simples e eficiente.

Seguem os resultados dos testes do primeiro modelo.

Resultados do teste do primeiro modelo


Agora seguem os testes do segundo modelo.

Resultados do teste do segundo modelo

Autor: MetaQuotes

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

O misterioso número 63 :)

 
Ivan Butko #:

O misterioso número 63 :)

Esse número foi retirado de outro artigo sobre números misteriosos. Não consigo encontrar o link

 

Eu defini a mesma data e as mesmas configurações, mas os resultados foram diferentes. Alguém sabe por quê?

Resultados do teste do primeiro modelo


Resultados do primeiro teste de modelo


Resultados do teste do segundo modelo


resultados do teste do segundo modelo
 
mysticsoul #: Eu defini a mesma data e as mesmas configurações, mas os resultados foram diferentes. Alguém sabe por quê?

Pode ser porque seu servidor de negociação não é o MetaQuotes-Demo

 
mysticsoul #:

Eu defini a mesma data e as mesmas configurações, mas os resultados foram diferentes. Alguém sabe por quê?

Resultados do teste do primeiro modelo

Resultados do teste do segundo modelo
Isso pode ser devido a uma diferença na inicialização do peso dos modelos. Infelizmente, eles não usam a técnica de "semear tudo" para tornar seus resultados reproduzíveis.
 

Em primeiro lugar, muito obrigado por organizar este material, é bom dar uma olhada em diferentes direções. É fácil de acompanhar e bem elaborado.

Para mim, obtenho taxas de sucesso semelhantes e um número ligeiramente menor de negociações com a conta de demonstração, mas quando uso a conta de demonstração do Meta Trader. Com minha conta de negociação, ela só é negociada uma vez. Presumo que seja o fuso horário da corretora, pois minha corretora fica na Austrália (GMT+10). A primeira transação da conta demo é; Core 1 2023.01.02 07:02:00 deal #2 sell 1 EURUSD at 1.07016 done(based on order #2)

A primeira transação da My Broker Australia (GMT+10) é; Core 1 2023.01.03 00:00:00 failed market sell 1 EURUSD [Market closed] e não sei exatamente como resolver isso. É possível que todo o modelo dependa do fuso horário. Se esse for o caso, os horários devem ser definidos em horas inteiras... mas como a transação inicial 2023.01.02 07:02:00 se torna 2023.01.03 00:00:00:00?

Gostaria de receber sugestões sobre a causa desse problema.



 
Slava #:
serviço comercial

Da mesma forma, consegui reproduzir resultados muito semelhantes com os arquivos onnx originais na minha conta MetaQuates-Demo.

Em seguida, consegui treinar novamente os MLs Python até a conclusão, embora com os seguintes avisos/erros que podem 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 os scripts de ML terminam com:

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

Em seguida, recompilei o ONNX.Price.Prediction.2M.D1.mq5 original para usar os novos MLs que treinei.

Os resultados do backtest com a mesma conta MetaQuates-Demo foram muito diferentes do original, o que não parece bom.

Gostaria muito de saber o que deu errado.
Muito obrigado.