Обсуждение статьи "Пример ансамбля ONNX-моделей в MQL5"

 

Опубликована статья Пример ансамбля ONNX-моделей в MQL5:

ONNX (Open Neural Network eXchange) — открытый стандарт представления нейронных сетей. В данной статье мы покажем возможность одновременного использования двух ONNX-моделей в одном эксперте.

Для стабильной торговли желательно иметь диверсификацию как по торгуемым инструментам, так и по торговым стратегиям. Такая же ситуация и с моделями машинного обучения — проще создать несколько более простых моделей, чем одну сложную. Но собрать потом эти модели в одну ONNX-модель может быть непросто.

Однако можно комбинировать использование нескольких уже обученных ONNX-моделей в одной MQL5-программе. Мы покажем, как можно просто реализовать один из ансамблей, который называется классификатор голосования.

Результаты тестирования первой модели.

Результаты тестирования первой модели


Теперь протестируем только вторую модель. Вот результаты тестирования второй модели.

Результаты тестирования второй модели

Вторая модель оказалась гораздо сильнее первой модели. Результаты подтверждают теорию — ансамблировать нужно слабые модели. Но в данной статье речь шла не о теории ансамблирования, а о практике применения.

Автор: MetaQuotes

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

Загадочное число 63 :)

 
Ivan Butko #:

Загадочное число 63 :)

Это число взято из другой статьи про загадочные числа. Ссылку не найду

 

Я установил ту же дату и те же настройки, но результаты получились разными. Кто-нибудь знает, почему?

Результаты тестирования первой модели


Результаты тестирования первой модели


Результаты тестирования второй модели


результаты тестирования второй модели
 
mysticsoul #: Я установил ту же дату и те же настройки, но результаты получились разными. Кто-нибудь знает, почему?

Это может быть потому, что ваш торговый сервер не MetaQuotes-Demo

 
mysticsoul #:

Я установил ту же дату и те же настройки, но результаты получились разными. Кто-нибудь знает, почему?

Результаты тестирования первой модели

Результаты тестирования второй модели
Это может быть связано с разницей в инициализации веса моделей. К сожалению, они не используют технику "посева всего", чтобы сделать свои результаты воспроизводимыми.
 

Во-первых, большое спасибо за то, что вы собрали все это вместе, приятно смотреть в разные стороны. За ней легко следить, и она хорошо составлена.

Я получаю одинаковые показатели успеха и немного меньшее количество сделок на демо-счете, но когда я использую демо-счет meta trader. С моим торговым счетом он торгует только один раз. Я предполагаю, что это часовой пояс брокера, мой брокер находится в Австралии (GMT+10). Первая сделка с демо-счета: Core 1 2023.01.02 07:02:00 deal #2 sell 1 EURUSD at 1.07016 done(based on order #2).

Первая транзакция от My Broker Australia (GMT+10): Core 1 2023.01.03 00:00:00 failed market sell 1 EURUSD [Market closed], и я не совсем понимаю, как это решить. Возможно, вся модель зависит от временной зоны. Если это так, то время должно выводиться в целых часах? Но как начальная сделка 2023.01.02 07:02:00 превращается в 2023.01.03 00:00:00?

Буду признателен за любые предположения о причине этого.



 
Slava #:
торговая подача

То же самое, мне удалось воспроизвести очень похожие результаты с оригинальными файлами onnx на моем счете MetaQuates-Demo.

Затем мне удалось переобучить Python ML до конца, хотя и со следующими предупреждениями/ошибками, которые можно проигнорировать:

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

оба ML-скрипта завершаются:

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

Затем я перекомпилирую исходный ONNX.Price.Prediction.2M.D1.mq5, чтобы использовать новые ML, которые я обучил.

Результаты бэктестов с тем же счетом MetaQuates-Demo значительно отличаются от оригинала, что не очень хорошо.

Был бы очень признателен узнать, что пошло не так?
Большое спасибо.