Errores, fallos, preguntas - página 3079

 
La captura de pantalla no se carga en el mercado. Lo he probado desde dos navegadores.
 
Dmitry Fedoseev #:
El mercado no carga una captura de pantalla. Probado desde dos navegadores.

Yo también...

 

Buenas tardes, ¿cuál puede ser el problema? Utilizo la dll para escribir en SQL Server (ejemplo del artículo https://www.mql5.com/ru/articles/2895 ).

Si utilizo hasta 5 hilos, los datos se escriben correctamente. Si utilizo más hilos, se produce un error "Unhandled exception 0xE0434352".

Интеграция эксперта на MQL и базы данных (SQL Server, .NET и C#)
Интеграция эксперта на MQL и базы данных (SQL Server, .NET и C#)
  • www.mql5.com
Статья описывает, как добавить в экспертов на MQL5 возможность работы с сервером баз данных Microsoft SQL Server. Используется импорт функций из DLL. Для создания DLL применяется платформа Microsoft .NET и язык C#. Используемые в статье методы с незначительными изменениями подходят и для экспертов, написанных на MQL4.
Archivos adjuntos:
SQL.mqh  19 kb
OHLC_1.mq5  5 kb
 
SEM #:

Buenas tardes, ¿cuál puede ser el problema? Utilizo la dll para escribir en SQL Server (ejemplo del artículo https://www.mql5.com/ru/articles/2895 ).

Si utilizo hasta 5 hilos, los datos se escriben correctamente. Si utilizo más hilos se produce el error "Unhandled exception 0xE0434352".

En todas las funciones de la interfaz DLL debemos usar try catch, atrapar la "excepción no manejada" y escribirla en el registro...

Es una buena idea atrapar todas las excepciones y probar todas las llamadas a los pluses. Incluso en la documentación de MQL está claramente escrito - las DLL no deben lanzar excepciones, no C++.

en particular en el artículo conn.Close y new SqlConnection no entran en la "captura de excepciones" y pueden potencialmente lanzar excepciones

 
Dmitry Fedoseev #:
La captura de pantalla no se carga en el Mercado. Lo he probado con dos navegadores.
Yury Emeliyanov #:

Yo también...

¿Has probado a arrastrar y soltar la imagen?

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Mercado y matemáticas

Alexey Viktorov, 2021.08.19 21:01

Intenta insertar una imagen simplemente arrastrándola y soltándola sobre el texto.

Ahora he intentado hacer cambios en el Expert Advisor oculto y he arrastrado la primera imagen que he visto.



 
Alexey Viktorov #:

¿Has probado a arrastrar y soltar la imagen?


de 5 fotos sólo se añade una

 
Andrei Trukhanovich #:

A las cadenas de mql no les gustan los caracteres nulos dentro de una cadena y en los literales, también en las funciones.

La única forma normal es convertir tres cadenas en una matriz con un cero final.

Es decir, este comportamiento, tal y como es ahora, se hizo deliberadamente hace algunos años. No sé las razones.

Hay enemigos por todas partes

 
Maxim Kuznetsov #:

En todas las funciones de la interfaz DLL, envuelva todo en try catch, atrape la "excepción no manejada" y regístrela...

Es una buena idea atrapar todas las excepciones y envolver todas las llamadas a los pluses en try. Incluso en la documentación de MQL está claramente escrito - las DLL no deben lanzar excepciones, no C++.

particularmente conn.Close y new SqlConnection no lanzan excepciones y potencialmente podrían lanzar una

Gracias. Lo he comprobado, error de acceso a la variable compartida. El autor también escribió sobre ello.

Hay que tener en cuenta que el proyecto de demostración tiene una limitación muy importante: sólo permite ejecutar un Asesor Experto trabajando con DB en un terminal de MetaTrader. La cuestión es que todos los EAs utilizan una instancia de una DLL cargada. Como nuestra clase se hace estática, será la misma para todos los Asesores Expertos que se ejecuten. Las variables también serán comunes. Si ejecuta varios expertos, todos ellos utilizarán la misma conexión y un objeto de comando para todos. Si varios expertos intentan acceder a estos objetos al mismo tiempo, pueden producirse problemas.


P: ¿Cómo puedo implementar el acceso multihilo a la dll (instancia separada para cada llamada de función y variables locales para cada llamada)?

 
2020.08.17 01:22:44   9842:0.8953065>0.92137
2020.08.17 01:22:44   9843:0.8953065>0.92106
2020.08.17 01:22:44   9844:0.8953065>0.92075
2020.08.17 01:22:44   9845:0.8953065>0.92045
2020.08.17 01:22:44   9846:0.8953065>0.92014
2020.08.17 01:22:44   9847:0.8953065>0.91983
        

2020.08.17 01:22:48   9842:0.8953065>0.92137
2020.08.17 01:22:48   9843:0.8953065>0.92106
2020.08.17 01:22:48   9844:1.7189865>0.92075
2020.08.17 01:22:48   Create GlobalVariables for SELL 1.7189865>0.92075
2020.08.17 01:22:48   9845:0.8953065>0.92045
2020.08.17 01:22:48   9846:0.8953065>0.92014
2020.08.17 01:22:48   9847:0.8953065>0.91983

Estoy experimentando este problema en el probador de MT5.

Al trabajar con varias monedas, los datos se intercambian ocasionalmente desde otra moneda. Comprueba el comprobador. Por favor, corríjalo.

El primer valor esSymbolInfoDouble(symbol,SYMBOL_BID);

2020.08.17 01:11:38   9877(EURGBP):0.8952471000000001>0.91079
2020.08.17 01:11:38   9878(EURGBP):0.8952471000000001>0.91048
2020.08.17 01:11:38   9879(EURGBP):0.8952471000000001>0.91017
2020.08.17 01:11:38   9880(EURGBP):1.7184123>0.90987
2020.08.17 01:11:38   Create GlobalVariables for SELL 1.7184123>0.90987
2020.08.17 01:11:38   9881(EURGBP):0.8952471000000001>0.90956
2020.08.17 01:11:38   9882(EURGBP):0.8952471000000001>0.90925
2020.08.17 01:11:38   9883(EURGBP):0.8952471000000001>0.90894
2020.08.17 01:11:38   9884(EURGBP):0.8952471000000001>0.90864

Como si no pudiera recibir preciosSymbolInfoDouble(EURGBP,SYMBOL_BID); y toma el valor de otro par que está en funcionamiento. ¿Hay alguna forma de comprobar si la cotización es correcta?

 
SEM #:

Gracias. Lo he comprobado, error de acceso a la variable compartida. El autor también escribió al respecto

Hay que tener en cuenta que el proyecto de demostración tiene una limitación muy importante: sólo permite ejecutar un Asesor Experto trabajando con DB en un terminal de MetaTrader. La cuestión es que todos los EAs utilizan una instancia de una DLL cargada. Como nuestra clase se hace estática, será la misma para todos los Asesores Expertos que se ejecuten. Las variables también serán comunes. Si ejecuta varios expertos, todos ellos utilizarán la misma conexión y un objeto de comando para todos. Si varios expertos intentan acceder a estos objetos a la vez, pueden producirse problemas.


P: ¿Cómo puedo implementar el acceso multihilo a la dll (instancia separada para cada llamada de función y variables locales para cada llamada)?

Casi no hay forma de hacer esto en .NET. La clase se hace estática no porque el autor del artículo sea malvado, sino porque así es como se importan las clases agudas.

Veo dos maneras: 1) (mucho tiempo para escribir, funciona rápido) reescribir en C++ y no tocar más .NET 2) (más bien mecánicamente, pero la velocidad bajará y podría haber efectos secundarios) envolver cuidadosamente las llamadas en la Sección Crítica para evitar que dos hilos accedan simultáneamente

si el sharping es importante, otra opción - reescribir el control de pooling de conexiones a nivel de DLL para recordar el mapeo de EA<->connection_id y que cada EA trabaje con su conexión;
no puedo decir sobre .net - es posible obtener y almacenar la referencia al objeto de sharp en alguna estructura MQL o escalar y pasarla de un lado a otro. Es decir, operar como con un puntero normal de C++. Si es posible, todo se simplifica.