Errores, fallos, preguntas - página 2654
![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
¿Puede alguien aclararnos la siguiente cuestión?
Tener una dll escrita en C# pero compilada:
- para MT5 proyecto habitual de C# - Net Framework dll - 64 bit
- MT4 - Net Framework dll - 32 bits, pero envuelto en llamadas C gestionadas
Las fuentes dll son 100% idénticas, excepto la envoltura MT4, por supuesto,
Sistema operativo Win10-64
Bueno, la pregunta es por qué MT4 llama a las funciones exactamente 4 veces más rápido, las cifras son aproximadamente 100 000 llamadas dll en MT4 durante 7,5 segundos, MT5 durante 30 segundos
¿Puede alguien aclararnos la siguiente cuestión?
Tener una dll escrita en C# pero compilada:
- para MT5 proyecto habitual de C# - Net Framework dll - 64 bit
- MT4 - Net Framework dll - 32 bits, pero envuelto en llamadas C gestionadas
Las fuentes dll son 100% idénticas, excepto la envoltura MT4, por supuesto,
Sistema operativo Win10-64
Bueno, la pregunta es por qué MT4 llama a las funciones exactamente 4 veces más rápido, las cifras son aproximadamente 100 000 llamadas dll en MT4 durante 7,5 segundos, MT5 durante 30 segundos
EN MI OPINIÓN. C-runtime en un caso y una máquina virtual en el otro.
En el Asesor Experto se implementa una interfaz gráfica. También se implementan eventos de usuario (por ejemplo, eventos de cambio de la interfaz gráfica de usuario). Realizo la depuración en datos reales (F5). Tan pronto como pongo un punto de interrupción en un evento de usuario - el depurador se detiene, pero la posterior pulsación de F5 (continuando la depuración) no conduce a cambios en la propia GUI. Pregunta: ¿debería ser así o es un error del depurador?
Si elimino el punto de interrupción (la depuración continúa), los cambios en la interfaz gráfica de usuario son normales.
MT5, build 2340.
EN MI OPINIÓN. C-runtime en un caso y una máquina virtual en el otro.
hay un .Net virtual en ambos dlls
Encontré la diferencia en el código, incluso tiré la clase base de 32 bits en un hilo separado, porque no tiene otra forma de funcionar
Hice las mismas manipulaciones para MT5, los resultados son más o menos los mismos (tres pruebas cada uno):
MT5: ciclo 100000 , tiempo 8.482981 seg , ciclo 100000 , tiempo 8.638789 seg , ciclo 100000 , tiempo 8.390046 seg
MT4: ciclo 100000 , tiempo 7.128857 seg , ciclo 100000 , tiempo 7.176361 seg , ciclo 100000 , tiempo 7.205439 seg
Saludos. ¡¡¡¡Felices fiestas a todos los hombres !!!!
No entiendo a qué se debe el extraño error de visualización en zigzag de la equidad en el probador. No entiendo el extraño error con la visualización de las acciones en zigzag en el probador. Si cambio la configuración del "Método de liquidación" de "Exchanging Stoks" a "Forex", la equidad se muestra normalmente. A mí me pasó lo mismo hace unos años, quise intentar conectar MT5 a un fondo, lo probé, me asusté y desistí. Ahora lo he vuelto a intentar y lo mismo. ¿Es extraño?
El problema se puede resolver para los métodos de las clases contenedoras "tipificadas", pero no para las funciones normales.
La principal contradicción es que para transferir estructuras es necesario utilizar la transferencia por referencia, y para los literales y las variables temporales - la transferencia por valor.
Como resultado, obtenemos un error de compilación para los tipos lvalue normales porque ambas funciones sobrecargadas son adecuadas para la llamada.
Como solución parcial y sólo para los tipos "primitivos", se pueden construir 12 funciones sobrecargadas:
Pero si una función debe aceptar dos argumentos "universales", sólo se necesitan 144 funciones sobrecargadas para implementarla, mientras que en el caso de tres de esos argumentos, se necesitan las 1728 funciones sobrecargadas.
Sugerencia:
Por último, permite a los usuarios pasar literales y variables temporales como argumentos de funciones const ref.
Que sea una directiva # separada - lo que sea...
Defectos en el funcionamiento de la caché de la función/clase de la plantilla:
(no se ha solucionado con MT5(build 2340)) ** Comportamiento indefinido, creas un objeto complejo envuelto con el tipo interno "C" varias veces y resulta ser un tipo de datos completamente diferente, quizás "B", quizás "int", lo que quieras...
(no se ha solucionado con MT5(build 2340)) * Error de compilación, error al pasar un puntero de función como un argumento de plantilla const ref.
(no solucionado por MT5(build 2340)) * Error de compilación, el objeto B<int> puede ser creado después del objeto de clase B<void*>, pero si se hace antes, se produce un error de compilación.
Defectos en el trabajo de la función/clase de la plantilla:
(no se ha solucionado con MT5(build 2340)) ** Error de compilación, error dentro de la función de plantilla, el puntero pasado dentro de la operación deconversión de tipo explícito se comporta como una clase, de lo contrario como un puntero.
(no se ha solucionado con MT5(build 2340)) ** Error de compilación, error con la generación de código de la clase de la plantilla mientras se utiliza la clase interna.
(no se ha solucionado con MT5(build 2340)) ** Error de compilación, error al intentar acceder a la clase interna para el parámetro de plantilla de la función de plantilla.
(no se ha solucionado con MT5(build 2340)) ** Error de compilación, error en la generación del método/clase de la plantilla, el proceso de "auto-reemplazo" del parámetro de la plantilla se sale del ámbito en el código del programa principal.
(no se ha solucionado con MT5(build 2340)) * Error de compilación, el error con la clase de la plantilla no generar código automáticamente cuando la clase de la plantilla actúa como un valor de retorno para el método de la plantilla.
(no se ha solucionado con MT5(build 2340)) * Error de compilación, error en la definición de la clase interna - no hay posibilidad de referirse al espacio de nombres global explícitamente cuando se especifica la clase base.
Defectos en las llamadas a funciones sobrecargadas desajuste de prioridad en MQL en comparación con C++:
(no se ha solucionado con MT5(build 2340)) *** Error de compilación cuando hay herencia de clases A <= B <= C <= D y se implementan dos funciones de sobrecarga, por ejemplo, una con parámetro A* y otra con parámetro B*, entonces al pasar en dicha función un objeto C* o D* en MQL se produce un error de compilación "llamada ambigua a función sobrecargada".
(no se ha solucionado con MT5(build 2340)) ** Tiempo de ejecución, desajuste de prioridades en las llamadas a funciones de plantilla sobrecargadas.
Sugerencias:
link- sobre la posibilidad de pasar literales y variables temporales como argumentos de funciones const ref.
enlace- almover los archivos del proyecto en la pestaña Proyecto, para los archivos movidos que están abiertos y ubicados en las pestañas ME, para actualizar automáticamente su ruta de ubicación.
link- para introducir la funcionalidad de la declaración typedef en MQL.
link- sobre la posibilidad de forzar la generación de constructores de copia y operadores de asignación por defecto.
Pido ayuda, estoy completamente fuera de onda.
En OnChartEvent, pulsando `C` cancelo/restauro el gráfico de precios.
Y todo estaría bien, pero si la disposición del teclado no se selecciona Inglés - no funciona.
¿Cómo hacer que la detección de la pulsación de `C` sea independiente del diseño seleccionado?
Pido ayuda, estoy completamente fuera de onda.
En OnChartEvent, pulsando `C` cancelo/restauro el gráfico de precios.
Y todo estaría bien, pero si la disposición del teclado no se selecciona Inglés - no funciona.
¿Cómo hacer que la detección de la pulsación de `C` sea independiente del diseño seleccionado?
Necesidad de comprobarlparam
Para las distribuciones de teclado ru y en (tanto en minúsculas como en mayúsculas) lparam será 67: