Errores, fallos, preguntas - página 3079
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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".
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
La captura de pantalla no se carga en el Mercado. Lo he probado con dos navegadores.
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.
¿Has probado a arrastrar y soltar la imagen?
de 5 fotos sólo se añade una
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
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)?
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);
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?
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.