Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 2938

 
Evgeny Dyuka #:
Sí, existe, pero da un error
Hay algún tipo de autorización en alguna parte.

Pues no lo sé. Prueba a dejar y borrar el proyecto, luego vuelve a unirte a él y obtén una actualización del repositorio.

Al salir de un proyecto en el registro:

2023.02.28 16:31:47.481 Storage successfully left the project 'ONNX.Price.Prediction'

Al borrar, no se escribe nada. Al unirse a un proyecto:

2023.02.28 16:31:59.970 Storage successfully joined to the project 'ONNX.Price.Prediction'

Al recibir una actualización:

2023.02.28 16:41:43.985 Storage checkout started for MQL5\Shared Projects\ONNX.Price.Prediction
2023.02.28 16:41:44.750 Storage added MQL5\Shared Projects\ONNX.Price.Prediction\Python
2023.02.28 16:41:44.750 Storage added MQL5\Shared Projects\ONNX.Price.Prediction\Python\PricePredictionTraining.py
2023.02.28 16:41:44.750 Storage added MQL5\Shared Projects\ONNX.Price.Prediction\Python\PricePrediction.py
2023.02.28 16:41:44.750 Storage added MQL5\Shared Projects\ONNX.Price.Prediction\Python\model.onnx
2023.02.28 16:41:44.750 Storage added MQL5\Shared Projects\ONNX.Price.Prediction\ONNX.Price.Prediction.mq5
2023.02.28 16:41:44.750 Storage added MQL5\Shared Projects\ONNX.Price.Prediction\ONNX.Price.Prediction.mqproj
2023.02.28 16:41:44.784 Storage checkout completed successfully in 797 ms

La autorización era sólo al conectarse al repositorio - es imposible unirse al proyecto sin ella.

No puedo ayudarte más. A no ser que tengas una versión antigua - yo lo hice en la última (beta y release).

 
Aleksey Nikolayev #:

Pues no lo sé. Prueba a salir del proyecto y borrarlo, luego vuelve a unirte a él y obtén una actualización del repositorio.

Cuando abandonas un proyecto en el registro:

Al borrar, no se escribe nada. Al unirse a un proyecto:

Al recibir una actualización:

La autorización era sólo cuando se conectaba al repositorio - sin ella es básicamente imposible unirse al proyecto.

No puedo ayudarte con nada más. A menos que tengas una versión antigua - yo lo hice en la última (beta y release).

lo tengo, gracias
 
Evgeny Dyuka #:
Entendido, gracias.

Por si acaso, voy a publicar el proyecto en el archivo.

Archivos adjuntos:
 
Renat Fatkhullin #:

¿Con qué cuenta te has conectado a MQL5 Storage?

¿Ha especificado su correo electrónico o su nombre de usuario exacto con mayúsculas y minúsculas?

No se acepta el correo electrónico.

en el inicio de sesión de inicio de sesión, sólo mi inicio de sesión es torcida inicialmente, con puntos dr.mr.mom, tengo hace mucho tiempo, ¿puede cambiar el inicio de sesión?

 

Lanzada la beta 3589, en la que se puede probar el funcionamiento de los modelos ONNX.

Pasos:

  1. Actualice a 3589 a través de Ayuda -> Comprobar actualizaciones del escritorio -> Última versión beta

  2. Active MQL5 Storage especificando el login MQL5 correcto (no el email) en mayúsculas y minúsculas:






  3. Si tiene una configuración corrupta y MQL5 Storage no funciona, abra el Explorador a través de Archivo -> Abrir carpeta de datos, vaya al directorio MQL5 y elimine los siguientes archivos:


    . A continuación, vaya al paso 2.

  4. Únase al proyecto ONNX.Price.Prediction desde el menú contextual utilizando el comando Join.



  5. Abre el Navegador, abre la sección de Proyectos Compartidos y en el proyecto ONNX.Price.Prediction llama a Actualizar desde Storage desde el menú contextual:



    El proyecto se descargará desde MQL5 Storage (Subversion).

  6. Abra el proyecto y haga clic en ONNX.Price.Prediction.mqproj - este es el archivo del proyecto



  7. Copie el proyecto y ejecútelo en EURUSD, H1.

  8. Obtenga el resultado:
    2023.02.28 21:54:43.316 Scripts script ONNX.Price.Prediction (EURUSD,H1) loaded successfully
    2023.02.28 21:54:43.348 ONNX    initialized [API version 1.14.0]
    
    в журнале Experts: важны две последние строки, а остальное - специально включенные отладочные логи по флагу ONNX_DEBUG_LOGS
    
    2023.02.28 22:11:53.441 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Creating and using per session threadpools since use_per_session_threads_ is true
    2023.02.28 22:11:53.441 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Dynamic block base set to 0
    2023.02.28 22:11:53.442 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Initializing session.
    2023.02.28 22:11:53.442 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Adding default CPU execution provider.
    2023.02.28 22:11:53.442 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Total shared scalar initializer count: 0
    2023.02.28 22:11:53.443 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Total fused reshape node count: 0
    2023.02.28 22:11:53.443 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Total shared scalar initializer count: 0
    2023.02.28 22:11:53.443 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Total fused reshape node count: 0
    2023.02.28 22:11:53.444 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Use DeviceBasedPartition as default
    2023.02.28 22:11:53.444 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Saving initialized tensors.
    2023.02.28 22:11:53.444 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Done saving initialized tensors
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Session successfully initialized.
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Number of streams: 1
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: Begin execution
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 0
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 1 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 1
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 2 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 3
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 6 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 4
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 8 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 5
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 9 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 6
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 7
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 2
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 3 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 11 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 8
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 9
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 16 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 10
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 11
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 22 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 12
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 25 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 13
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 27 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 27
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 17
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 18
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 28 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 28
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: ort value 30 released
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       ONNX: stream 0 launch kernel with idx 26
    
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       [-1.5921557]
    2023.02.28 22:11:53.445 ONNX.Price.Prediction (EURUSD,H1)       predicted 1.0591759612759748
    
  9. Si no funciona, significa que la versión de ONNX Runtime es antigua o que falta

    En este caso, descarga el archivo ONNX Runtime 1.14, firmado por Microsoft, expándelo al directorio raíz del terminal junto a terminal64.exe y reinicia el terminal:

En el proyecto se adjunta inmediatamente el model.onnx más sencillo entrenado a modo de ejemplo para que pueda ver la demostración.



Para entrenar el modelo usted mismo, necesita utilizar los scripts de python incluidos en el proyecto:

  1. Instalar Python 3 (por ejemplo Python 3.10) y entregar/actualizar los paquetes:
    python.exe -m pip install --upgrade pip
    pip install --upgrade tensorflow
    pip install --upgrade pandas
    pip install --upgrade scikit-learn
    pip install --upgrade matplotlib
    pip install --upgrade tqdm
    pip install --upgrade metatrader5
    pip install --upgrade onnx==1.12
    pip install --upgrade tf2onnx
    El paquete onnx con indicar explícitamente la versión 1.12 para no entrar en conflicto con los requisitos de tensorflow.

  2. Ejecute MetaEditor y asegúrese de que Python es reconocido en Herramientas -> Opciones -> Compiladores:



    Si es necesario, especifique la ruta usted mismo, si el editor no puede detectarlo por sí mismo.

  3. El terminal comercial debe estar conectado a un servidor con EURUSD (por ejemplo, MetaQuotes-Demo)

    Asegúrese de que la integración con Python está activada en la configuración del terminal. Si estaba desactivada, actívela y reinicie el terminal:




  4. Vaya al proyecto ONNX.Price.Prediction en el navegador y abra el archivo PricePredictionTraning.py


  5. Ejecute el script para la compilación, que para un script Python significa iniciar.

    El script se conectará al terminal con la ayuda del paquete MetaTrader5 (si está apagado, se iniciará automáticamente) y empezará a entrenar sobre EURUSD, H1:


    Cuando termine, el editor de Journal contendrá:
    .
    2023.02.28 22:24:16.876 Python  107/107 [==============================] - 0 s 1 ms/step - loss: 1.9167 - mae: 0.8553
    2023.02.28 22:24:16.876 Python  test_loss=1.917
    2023.02.28 22:24:16.876 Python  test_mae=0.855
    2023.02.28 22:24:17.179 Python  saved model to C:\Users\sys\AppData\Roaming\MetaQuotes\Terminal\8 D1E0A7047FFD62A8C00B09AEC1F3004\MQL5\Shared Projects\ONNX.Price.Prediction\Python\model.onnx
    2023.02.28 22:24:17.291 Storage modify MQL5\Shared Projects\ONNX.Price.Prediction\Python\model.onnx to base
    
    El nuevo model.onnx se guardará/actualizará en el proyecto. Ya se puede utilizar.

  6. Ejecute el script PricePrediction.py para asegurarse de que el modelo funciona:
    .
    2023.02.28 22:27:46.078 Python  data path to load onnx model C:\Users\sys\AppData\Roaming\MetaQuotes\Terminal\8 D1E0A7047FFD62A8C00B09AEC1F3004\MQL5\Shared Projects\ONNX.Price.Prediction\Python\
    2023.02.28 22:27:46.078 Python  [[[1.061412 1.062328 1.060358 1.061169]]]
    2023.02.28 22:27:46.078 Python  [[[0.00105361 0.00119785 0.00074662 0.00125179]]]
    2023.02.28 22:27:46.078 Python  [[[ 0.18792516  0.17698306  0.01607251 -0.45455042]
    2023.02.28 22:27:46.078 Python    [-0.77068297 -0.50757406  0.2839477   0.36827372]
    2023.02.28 22:27:46.078 Python    [ 0.21639867 -0.3823502   0.48485409 -0.19891574]
    2023.02.28 22:27:46.078 Python    [-0.46696554 -0.31556414  0.33752274  0.48011389]
    2023.02.28 22:27:46.078 Python    [ 0.3302927   0.7196198   1.36884221  1.56656129]
    2023.02.28 22:27:46.078 Python    [ 1.63058293  1.46261473  1.39562973  1.74231014]
    2023.02.28 22:27:46.078 Python    [ 1.82040632  1.84663458 -0.26519644 -0.52644768]
    2023.02.28 22:27:46.078 Python    [-0.84661232 -0.50757406 -0.45270907 -0.86995678]
    2023.02.28 22:27:46.078 Python    [-1.27371495 -1.11699687 -1.10900328 -0.48650476]
    2023.02.28 22:27:46.078 Python    [-0.82762998 -1.37579285 -2.0599602  -1.62088366]]]
    2023.02.28 22:27:46.094 Python  [[-1.6349795]]
    2023.02.28 22:27:46.094 Python  predict:  [1.05912]
    
  7. ¡El ejemplo de prueba ha funcionado!


Este es un ejemplo especialmente creado para demostrar tanto el entrenamiento como la ejecución de los modelos.

Puedes convertir tus propios modelos TensorFlow al formato ONNX utilizando los paquetes de python onnx y tf2onnx:

import tf2onnx
...
onnx_model = tf2onnx.convert.from_keras(model, output_path=output_path)

ps: utiliza la última versión del proyecto, ya que los prototipos de las funciones han cambiado en la versión antigua.
 

Funcionó.

2023.03.01 06:54:34.987 ONNX.Price.Prediction (EURUSD,H1)       [-0.20001383]
2023.03.01 06:54:34.988 ONNX.Price.Prediction (EURUSD,H1)       predicted 1.0581684510582798
 
Renat Fatkhullin #:
  1. Poner en Python 3 (por ejemplo Python 3.10) y entregar/actualizar paquetes:
    Paquete onnx con una mención explícita de la versión 1.12 para no entrar en conflicto con los requisitos de tensorflow.

No se pudo instalar este paquete. Primero requería CMake para ser instalado. Ahora requiere la instalación de Visual Studio.

CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
 
Aleksey Nikolayev #:

No se pudo instalar este paquete. Primero exigían instalar CMake. ¿Y ahora exigen que se instale Visual Studio?

Aún estás al principio del camino de luchar contra el infierno de las incompatibilidades mutuas y crear entornos separados para las tareas en Python.

Algunos paquetes requieren compiladores para la compilación de destino.

 
Renat Fatkhullin #:

Tú eres el que todavía está al principio del viaje de lidiar con el infierno de las incompatibilidades mutuas y crear entornos separados para tareas en Python.

Algunos paquetes requieren compiladores para la compilación de destino.

Totalmente de acuerdo. Es mucho trabajo. Dos preguntas a este respecto:

1. ¿Pueden convertirse a ONNX los modelos creados con GPU?

2. No necesitamos Python para obtener la predicción del modelo en ONNX en el MQL5 Expert Advisor, ¿verdad? ¿Los cálculos los realizará el entorno onnxruntime?

 
Vladimir Perervenko #:

Estoy totalmente de acuerdo. Es mucho trabajo. Dos preguntas:

1. ¿Pueden convertirse a ONNX los modelos creados con GPU?

2. Para obtener la predicción del modelo en ONNX en el MQL5 Expert Advisor, no necesitamos Python, ¿verdad? ¿Los cálculos los realizará el entorno onnxruntime?

En teoría, esto es probablemente así. Pero puede resultar en la práctica que sólo los modelos entrenados en Python son adecuados, y sólo en algún entorno único de paquetes, utilidades y compiladores (teniendo en cuenta sus números de versión). Al menos así es como he entendido la sugerencia de Renate.