Errores, fallos, preguntas - página 2753
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
En C# el especificador const se usa sólo para expresiones constantes calculadas en la etapa de compilación, mientras que C++ tiene un análogo para él: constexpr,y MQL no lo tiene.
sí
en general se trata de construcciones sintácticas de las lenguas
en un lenguaje natural (en matemáticas) una constante es... Bueno, es una especie de constante. ))
En C++ una constante es una comprobación de la máquina por parte del compilador de una constante en el ámbito (o tiempo de vida) de una variable
En C# una constante tiene un significado sintáctico que se acerca más a las reglas de un lenguaje natural
Y de eso se trata esta discusión:
En mi opinión, esta construcción cumple plenamente con la sintaxis de C++, o al menos MQL4 tenía Bid y Ask y nadie dudaba de si estaba justificado
El perfilador muestra que el acceso permanente a SymbolInfoDouble() y SymbolInfoTick() disminuye la velocidad de optimización
¿Cómo puedo cambiar el compilador?
He descubierto que el compilador está integrado en MetaEditor desde la compilación 900:https://www.mql5.com/ru/forum/21374
Entonces, ¿por qué hay una ventana con una línea que lleva al directorio donde está instalado VS?
El perfilador muestra que las llamadas constantes a SymbolInfoDouble() y SymbolInfoTick() reducen la velocidad de optimización
Bueno, aquí es donde se sugirió antes añadir la capacidad de pasar NULL en lugar del nombre del símbolo actual. Esto podría agilizar el trabajo en casos especiales. En general, necesitamos el acceso a través de asas, no de los valores de texto de los símbolos. Pero creo que es poco probable que los desarrolladores se decanten por tal complicación, ya que el problema parece ser exagerado.
En las mediciones mencionadas, el coste fue de sólo el 6% de la ejecución en vacío del probador (sin carga). Y en el código de trabajo será un orden de magnitud menor. No vale la pena prestar atención a estas nimiedades, y llamar a estas funciones más de una vez en un manejador es una decisión incorrecta en sí misma.
Bueno, antes se sugirió añadir la posibilidad de pasar NULL en lugar del nombre del símbolo actual. Esto podría agilizar el trabajo en casos especiales. Pero en general necesitamos el acceso a través de asas, no de valores de texto de los caracteres. Pero creo que es poco probable que los desarrolladores opten por tal complicación. Y no vale la pena, me parece, el problema es bastante rebuscado.
Ya funciona, pero no hay aceleración (lo he comprobado) - aparentemente todo está ya acelerado al máximo o viceversa - para la aceleración aún falta mucho (por favor, pide a los desarrolladores que lo subrayen)
Por lo tanto, en aras de la rigurosidad, debemos utilizar Digits() en lugar de _Digits. Entonces, formalmente y sin que se produzca ninguna contradicción lógica, Digits() no está ligado al modificador const.
Por lo que entendí _Digits era necesario para la compatibilidad con MT4 - nada más.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Bichos, errores, preguntas
Ilyas, 2020.05.20 15:39
La llamada a Symbol() accede SIEMPRE a la variable global _Symbol, así como a Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()
Durante la depuración y cuando el indicador está funcionando por sí mismo, en el registro, de repente escribe Stack overflow. Cuando se depura, aparece el mensaje "Se ha producido un error crítico, la depuración se ha detenido". Aquí está mi hilo similar:https://www.mql5.com/ru/forum/338301. Pero durante la compilación el compilador no regaña y todo va bien. Al depurar, es imposible determinar en qué momento el programa se bloquea.
¿Tal vez sea el compilador? No me interesa mucho el compilador que estoy usando, pero en mi configuración se ve así:
Tengo instalado VS, por lo que tengo este enlace en la configuración. ¿Así que el compilador también es apropiado...? Pero que compilador había cuando no tenía VS, sinceramente no me metí en ello. ¿Tal vez debería intentar volver a ese compilador e intentar compilar el proyecto con él?
Mientras buscaba la forma de solucionar el problema, con la llegada de otra actualización del terminal la depuración funcionó correctamente. Me las arreglé para encontrar errores. Algunos métodos estaban en bucle y se llamaban a sí mismos. Por eso el programa se bloqueó con el mensaje "Stack overflow". Pero con la ayuda de un depurador que funciona he conseguido encontrar todas las líneas problemáticas y arreglarlas. ¡Expreso mi agradecimiento a los Desarrolladores por la rápida solución del error con la depuración!
в естественном языке (в математике) константа это... ну как бы константа! ))
En C++, una constante es una comprobación de la máquina por parte del compilador sobre la constancia en el ámbito (o tiempo de vida) de una variable.
Tanto en C++ como en MQL, una constante puede definirse una vez al crearla y no volver a modificarse. Los visores no tienen nada que ver.
No es muy diferente de las matemáticas.
He descubierto que el compilador está integrado en MetaEditor desde la compilación 900:https://www.mql5.com/ru/forum/21374
Entonces, ¿por qué esta ventana con una línea que lleva al directorio donde está instalado VS?
El compilador VS se utiliza si se escribe una DLL.
Lo que confirma una vez más que no tiene sentidoutilizar directamente _Digits,_Point , _Period, _LastError, etc. (e incluso _Symbol puede ser sustituido por NULL). De hecho, deben ser declarados como volátiles const
Y usted, por el contrario, está sugiriendo añadir
Lo que confirma una vez más que no tiene sentidoutilizar directamente _Digits,_Point , _Period, _LastError, etc. E incluso _Symbol puede ser sustituido por NULL.
Y usted, por el contrario, se ofrece a complementar esta serie.
El punto está en la posibilidad de pasar por referencia.