記事「MQL5でONNXモデルをアンサンブルする方法の例」についてのディスカッション

 

新しい記事「MQL5でONNXモデルをアンサンブルする方法の例」はパブリッシュされました:

ONNX (Open Neural Network eXchange)は、ニューラルネットワークを表現するために構築されたオープンフォーマットです。この記事では、1つのエキスパートアドバイザー(EA)で2つのONNXモデルを同時に使用する方法を示します。

安定した取引のためには、通常、取引される商品と取引戦略の両方を多様化することが推奨されます。同じことが機械学習モデルにも当てはまります。複雑なモデルを1つ作成するよりも、いくつかの単純なモデルを作成する方が簡単ですが、これらのモデルを1つのONNXモデルに組み立てるのは難しい場合があります。

ただし、1つのMQL5プログラムで複数の訓練済みONNXモデルを組み合わせることができます。この記事では、投票分類器と呼ばれるアンサンブルの1つを検討します。このようなアンサンブルを実装するのがいかに簡単かをお見せします。

最初のモデルのテスト結果

最初のモデルのテスト結果


次に、2番目のモデルをテストします。2番目のモデルのテスト結果は次のとおりです。

2番目のモデルのテスト結果

2番目のモデルは、最初のモデルよりもはるかに強力であることが判明しました。この結果は、弱いモデルはアンサンブルする必要があるという理論を裏付けています。ただし、この記事はアンサンブルの理論に関するものではなく、実際のアプリケーションに関するものでした。

作者: MetaQuotes

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

謎の数字63 :)

 
Ivan Butko #:

謎の数字63 :)

この数字は不思議な数字に関する別の記事から引用した。リンクが見つかりません。

 

同じ日付、同じ設定にしたのですが、結果が違ってしまいました。どなたか理由をご存じですか?

第1モデルのテスト結果


最初のモデルテスト結果


2回目のテスト結果


セカンドモデルのテスト結果
 
mysticsoul #: 同じ日付、同じ設定にしたのに、結果が違っていた。

あなたの取引サーバーがMetaQuotes-Demoでないからかもしれません。

 
mysticsoul #:

同じ日付、同じ設定にしたのですが、結果が違ってしまいました。どなたか理由をご存じですか?

最初のモデルのテスト結果

2番目のモデルのテスト結果
モデルのウェイト初期化の違いによるものかもしれない。残念なことに、彼らは結果を再現可能にするために "seeding everything "というテクニックを使っていない。
 

まず、これをまとめてくれて本当にありがとう。フォローしやすく、よくまとまっています。

私の場合、デモ口座では同じような成功率で、取引回数も少し少ないのですが、メタトレーダーのデモ口座を使うと、同じような成功率で、取引回数も少し少なくなります。私の取引口座では一度しか取引しません。私のブローカーはオーストラリア(GMT+10) です。デモ口座からの最初の取引は; Core 1 2023.01.02 07:02:00 取引 #2 1.07016で1 EURUSDを売る 完了(注文#2に基づいて)

マイ・ブローカー・ オーストラリア (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 #:
トレードサーブ

こちらも同じで、MetaQuates-Demo口座のオリジナルのonnxファイルで 非常によく似た結果を再現することができました。

その後、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
...

で終了:

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口座を使ったバックテスト結果は、オリジナルとはかなり違っていました。


ありがとうございます。