Errores, fallos, preguntas - página 1733

 
Комбинатор:

La referencia para los arrays es una muleta en el lenguaje MQL, no una referencia.

Y si [] es un modificador de tipo como *, debería tener su propia const! y no una referencia.

Sólo sé escribir algo en MQL.
 
A100:
El error está justificado - estos identificadores están listados como ReadOnly en la ayuda (no combinados con ChartSetInteger)https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property
Ya lo he descubierto, pero gracias de todos modos :)
 
coderex:
¿Serviría de algo?

Léalo con atención. C++ es mucho más difícil de entender que MQL. No entiendo mucho del artículo. Y no entiendo en absoluto qué relación tiene con lo que se está discutiendo aquí.

Sin embargo, me ha gustado la función,

perfectforwarding

Antes de describir lo que es, volvamos a la norma anterior y describamos el problema existente. Supongamos que tenemos una función de plantilla foo que toma un parámetro y lo pasa a la función bar(T& algo):

template <typename T>
void foo(T& Object)
{
    bar(Object);
}

Entonces, todo está bien. ¿Pero qué pasa si queremos pasar, por ejemplo, el número 100 como argumento a una función?

No te preocupes, lo escribiremos así:

template <typename T>
void foo(const T& Object)
{
    bar(Object);//Ooops
}

Pero en este caso habrá un error de compilación porque bar toma una referencia no constante. Por lo tanto, tenemos que proporcionar 2 funciones bar - constante y no constante. Y ahora imaginemos que no hay un solo parámetro sino 2, 3 o 5. Resulta que esta tarea es muy difícil de implementar, ya que tenemos (2^n - 1) funciones sobrecargadas donde n es el número de argumentos de la función. Si crees que tal número de parámetros es un mal estilo y que nadie escribe de esta manera, entonces mira std::bind, std::make_shared etc.


Ahora vamos a ver qué solución nos proporciona la nueva norma:

template <typename T>
void foo(T&& Object)
{
    bar(std::forward<T>(Object));
}

Usando el código anterior, el problema del paso de parámetros está completamente resuelto, esto se llama paso perfecto, porque el tipo de argumento se conserva entre las llamadas a la función externa foo y a la función interna bar. Ya no es necesario sobrecargar un montón de funciones: los desarrolladores de código genérico pueden estar satisfechos.


Esta solución es posible porque si el parámetro de la plantilla es T&, el tipo pasado se guardará a sí mismo, y std::forward es necesario porque cualquier tipo con nombre dentro de la función foo se convierte en un lvalue y necesitamos el tipo original - para eso está std::forward - guarda el tipo original y despoja al argumento de su nombre (resultando T&&), lo que permite pasarlo a la función bar exacta más tarde.

"(2^n - 1) funciones sobrecargadas, donde n es el número de argumentos de la función" - Me enfrenté a este inconveniente en MQL.
 
2016.10.15 09:48:01.820 MQL5    wrong type, loading of Test9 failed
¿Qué es?
 
1455 - La depuración de datos históricos (CTRL+F5) no funciona. Aparece la ventana del comprobador, la visualización no se inicia.
 
fxsaber:
1455 - La depuración de datos históricos (CTRL+F5) no funciona. Aparece la ventana del comprobador, la visualización no se inicia.
No es cierto. Además, no hay detalles técnicos ni descripción de sus acciones. Se trata de una rama especializada en la que hay que preparar y proporcionar información adicional antes de escribir sobre un supuesto fallo encontrado.
 
fxsaber:

Léalo con atención. C++ es mucho más difícil de entender que MQL. No entiendo mucho del artículo. Y no entiendo en absoluto qué relación tiene con lo que se está discutiendo aquí.

Sin embargo, esta característica me ha gustado,

Me he encontrado con funciones "(2^n - 1) sobrecargadas, donde n es el número de argumentos de la función" - esto es un inconveniente en MQL.

Se trata de entender rvalue / lvalue / prvalue / xvalue / gvalue, es decir, de lo que estabas hablando básicamente durante varias páginas :) Por lo que veo, MQ siguió los estándares de C++, tomando lo más valioso de allí, en su opinión, sin detenerse sólo en rvalue / lvalue.

Yo mismo todavía no soy plenamente consciente de estos conceptos, aunque los entiendo lógicamente :)

Por cierto, el gestor de memoria en MT5 funciona incomprensiblemente, si el programa utiliza la memoria al máximo. No lo he medido en tallas pequeñas.

Por ejemplo, tengo 4 gigas de RAM, 2 núcleos, MT5 v1455 x64 en máquina virtual.

Estoy cargando memoria con objetos y en el Administrador de Tareas veo que se utilizan 1,5 Gbytes de memoria por terminal y 1,5 Gbytes por memoria virtual.MQL_MEMORY_USED muestra 400 MB de memoria utilizable. Antes de empezar eran unos 140 mb para el terminal y 150 mb para la app virtual.

También me he dado cuenta de que en cuanto el uso de la memoria supera los 400 mb, el gestor de memoria puede fallar a la hora de liberarla por completo, aunque los objetos se borren realmente. Y el comportamiento del depurador es impredecible - llego a borrar objetos, espero a que se eliminen por completo y después de eso paro la depuración (con el botón STOP en el depurador), se para, el gestor de MT5 no ha asignado memoria al sistema, es decir, todavía hay 1,5 Gb colgando para el terminal y 1,5 Gb para la memoria virtual. El propio МТ5 no ha completado el proceso de depuración, aunque ME muestra que la depuración se ha completado. Si la memoria del objeto es inferior a 400 mb, todo va bien, excepto que se libera la memoria.

La memoria se libera sólo después de eliminar la tarea terminal de la lista de tareas en ejecución.

 
Karputov Vladimir:
No es así. Además, no hay detalles técnicos ni descripción de sus acciones. Se trata de una rama especializada en la que hay que preparar y proporcionar información adicional antes de escribir sobre un supuesto fallo encontrado.

Los desarrolladores del Service Desk ya han memorizado mi configuración varias veces.

Tomo cualquier Asesor Experto estándar y presiono CTRL+F5 en el MetaEditor. La ventana principal del Probador de Estrategias aparecerá con los ajustes especificados en el MetaEditor. Pero la visualización no se inicia.

El registro

2016.10.15 10:06:09     Tester  Leverage 1:100 set error
 
fxsaber:
Los desarrolladores del Service Desk ya han recordado mi configuración varias veces.

Ni siquiera te diste cuenta de lo que estaba hablando.

¿Qué hiciste antes de empezar a depurar la historia? ¿Has configurado el MetaEditor (pestaña "Herramientas" - "Configuración" - "Depuración")? Dar una captura de pantalla de MetaEditora (pestaña "Herramientas" - "Configuración" - "Depuración"), lo que está escrito en el probador en la pestaña "Log"? ¿Qué se escribe en el Visor en la pestaña "Registro"?

 
fxsaber:

Los desarrolladores del Service Desk ya han memorizado mi configuración varias veces.

Tomo cualquier Asesor Experto estándar y presiono CTRL+F5 en el MetaEditor. La ventana principal del Probador de Estrategias aparecerá con los ajustes especificados en el MetaEditor. La visualización no se inicia.

La muestra MACD se lanzará normalmente. ¿Tal vez algo está mal en la configuración?