기고글 토론 "MQL5에서 ONNX 모델을 앙상블하는 방법의 예시"

 

새로운 기고글 MQL5에서 ONNX 모델을 앙상블하는 방법의 예시 가 게재되었습니다:

ONNX(Open Neural Network eXchange)는 신경망을 위해 만들어진 개방형 형식입니다. 이 글에서는 하나의 Expert Advisor에서 두 개의 ONNX 모델을 동시에 사용하는 방법을 소개하겠습니다.

안정적인 트레이딩을 위해서는 일반적으로 거래하는 상품과 트레이딩 전략을 다양화할 것을 권장합니다. 머신 러닝 모델도 마찬가지입니다: 하나의 복잡한 모델보다 여러 개의 간단한 모델을 만드는 것이 더 쉽습니다. 하지만 이러한 모델을 하나의 ONNX 모델로 조립하는 것은 어려운 작업입니다.

그러나 하나의 MQL5 프로그램에서 학습된 여러 ONNX 모델을 결합할 수 있습니다. 이 글에서는 투표 분류기라는 앙상블 중 하나를 살펴볼 것입니다. 이러한 앙상블을 구현하는 것이 얼마나 쉬운지 보여드리겠습니다.

첫 번째 모델 테스트 결과

첫 번째 모델 테스트 결과


이제 두 번째 모델을 테스트해 보겠습니다. 두 번째 모델 테스트 결과는 다음과 같습니다.

두 번째 모델 테스트 결과

두 번째 모델은 첫 번째 모델보다 훨씬 더 강력한 것으로 밝혀졌습니다. 결과는 약한 모델들을 조합해야 한다는 이론을 확인시켜줍니다. 그러나 이 글은 앙상블 이론에 대한 것이 아니라 실제의 적용에 대한 글입니다.


작성자: MetaQuotes

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

신비한 숫자 63 :)

 
Ivan Butko #:

신비한 숫자 63 :)

이 숫자는 신비한 숫자에 관한 다른 기사에서 가져온 것입니다. 링크를 찾을 수 없습니다.

 

같은 날짜, 같은 설정을 했는데 결과가 다르게 나왔는데 이유를 아시는 분 있나요?

첫 번째 모델 테스트 결과


첫 번째 모델 테스트 결과


두 번째 모델 테스트 결과


두 번째 모델 테스트 결과
 
mysticsoul #: 같은 날짜에 같은 설정을 했는데 결과가 다르게 나왔는데 그 이유를 아는 사람이 있나요?

거래 서버가 메타쿼츠 데모용이 아니기 때문일 수 있습니다.

 
mysticsoul #:

같은 날짜, 같은 설정을 했는데 결과가 다르게 나왔는데 이유를 아시는 분 있나요?

첫 번째 모델 테스트 결과

두 번째 모델 테스트 결과
모델 가중치 초기화의 차이 때문일 수 있습니다. 안타깝게도 결과를 재현할 수 있도록 "모든 것을 시딩"하는 기법을 사용하지 않습니다.
 

첫째, 이것을 함께 모아 주셔서 감사합니다. 다른 방향을 보는 것이 좋습니다. 따라하기 쉽고 잘 정리되어 있습니다.

저에게는 데모 계좌와 비슷한 성공률과 약간 낮은 거래 횟수를 얻었지만 메타 트레이더 데모 계좌를 사용할 때입니다. 내 거래 계좌로 한 번만 거래합니다 . 브로커의 시간대가 호주 (GMT+10) 라고 가정하고 있습니다. 데모 계좌의 첫 거래는 다음과 같습니다; 코어 1 2023.01.02 07:02:00 거래 #2 1 EURUSD 1.07016에 매도 완료(주문 #2기준 )

내 브로커 호주 (GMT+10) 거래는 다음과 같습니다; 코어 1 2023.01.03 00:00:00 시장가 1 EURUSD 매도 실패 [시장 마감], 해결 방법을 정확히 알 수 없습니다. 전체 모델이 시간대에 따라 달라질 수 있습니다. 그렇다면 시간은 전체 시간으로 나와야 하는데 어떻게 시작 거래 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
...

두 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을 사용합니다.

동일한 메타쿼츠 데모 계정으로 백테스트한 결과는 원본과 많이 달라서 좋지 않습니다.

무엇이 잘못되었는지 알려주시면 정말 감사하겠습니다.
감사합니다.