Errores, fallos, preguntas - página 1124
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
Aunque ambas estructuras tienen el mismo tamaño y se copian la una a la otra sin pérdida, seguimos recibiendo un aviso.
Así que eso es genial. No es tan difícil hacer una casta evidente. Y averiguar dónde asignar cada cosa cuando empiezan a aparecer los fallos no es muy agradable.
Copia de la aplicación al SR:
Versión y bit del terminal
910 32 bits
Descripción del problema
¡Hola, queridos desarrolladores!
En MQL5 una serie de funciones del sistema comoCopyRates,CopyTime,CopyOpen, etc. están destinadas a recibir datos de series temporales.
Cuando se llama a cualquiera de estas funciones, la serie temporal solicitada se carga en la memoria RAM dentro del parámetro "Max bars in chart".
Sin embargo, la combinación de factores como:
1. Historial suficientemente profundo disponible en el símbolo o completamente cargado desde el servidor.
2. El parámetro "Max bars in chart" es "Unlimited".
3. Se solicitan datos de la franja temporal más pequeña M1.
Se está consumiendo una gran cantidad de memoria.
El problema se agrava por el hecho de que la lógica del programa que ejecuta MQL5 (por ejemplo, si es un Asesor Experto multidivisa o un indicador)
puede establecerse para el acceso alternativo a los datos de las franjas horarias de bajo nivel de varios símbolos (por ejemplo, la búsqueda individual).
Como resultado, el consumo de RAM se multiplica.
Получение данных нужного таймфрейма из промежуточных данных
Los archivos de servicios en el formato HCC desempeñan el papel de fuente de datos para construir los datos de precios por los plazos solicitados en el formato HC. Los datos en el formato HC son series temporales que están preparadas al máximo para un acceso rápido. Se crean sólo a petición de un gráfico o programa mql5 en el volumen que no exceda el parámetro "Barras máximas en los gráficos", y se guardan para su posterior uso en archivos con la extensión hc.
Para ahorrar recursos, los datos del marco temporal se cargan y almacenan en la RAM sólo cuando se necesitan.En caso de ausencia prolongada de solicitudes, los datos se descargan de la RAM guardándolos en un archivo. Los datos de cada marco temporal se preparan independientemente de los datos listos para otros marcos temporales. Las normas de preparación y disponibilidad de los datos son las mismas para todos los plazos. Es decir, a pesar de que la unidad de almacenamiento de datos en el formato HCC es la barra de minutos, la disponibilidad de los datos en el formato HCC no significa la disponibilidad y accesibilidad de los datos en formato HC para el marco temporal M1 en el mismo volumen.
La recepción de nuevos datos del servidor provoca la actualización automática de los datos de precios utilizados en formato HC para todos los plazos y el recálculo de todos los indicadores, que los utilizan explícitamente como datos de entrada para el cálculo.
El tiempo del proceso resaltado en amarillo en la cita de la documentación es bastante grande: alrededor de media hora (según mis observaciones).
Como resultado, todas las series temporales solicitadas están "sentadas" en la "RAM" sin ninguna razón.
Si la "RAM" no es de "goma Y el "voraz" Asesor Experto/indicador demanda más y más series de tiempo, el terminal no tiene otra cosa que hacer
excepto para un "volcado" urgente del exceso de series temporales al archivo (caché). Así, en este reinicio de emergencia, el terminal puede restablecer las series de tiempo a
un "caché roto", es decir, perderá "una buena mitad" de los datos. Y la próxima vez que se acceda a esta serie de tiempo, el terminal carga esta "caché rota" como una normal.
Como resultado, el gráfico del terminal muestra las series temporales necesarias con un enorme agujero en el historial.
Resultado esperado
El lenguaje MQL5 tiende a ahorrar recursos del entorno de ejecución. Un ejemplo de ello es el siguiente:
1. la funciónArrayFree
2. funciónresourceFree
3.borrar el operador
4. Parámetro"Barras máximas en los gráficos
¿Es posible añadir una función del sistema a la funcionalidad del lenguaje MQL5 que obligue al terminal a realizar operaciones con las series de tiempo que ya no se utilizan?
¿Si no hay un gráfico abierto con esta serie temporal, al final de la temporización?
Por ejemplo, una función:
bool SeriesFlush(
string symbol_name, // имя символа
ENUM_TIMEFRAMES timeframe, // период
);
Esto permitiría:
1. No preocuparse por el desbordamiento de la RAM.
2. no te preocupes por los "cachés rotos" de los que sólo puedes deshacerte borrando manualmente los archivos *.hc cuando el terminal está apagado.
3. No tienes que depender del modo de bits de tu sistema operativo ni del tamaño de la RAM.
4. Cuando desarrolle un producto de software, no utilice "muletas" que traten de eludir las desventajas descritas anteriormente.
Copia de la aplicación al SR:
¿Puedes decirme cómo obtener los datos del indicador con un desplazamiento positivo? Me interesan los datos de la barra -1?
Para ello, es necesario conocer la configuración del desplazamiento de la línea indicadora de interés. Este es un ejemplo del indicador técnicoiAlligator
Se trata de una compensación, no de un cálculo de indicadores para el futuro.
Copiar de la aplicación a la SD:
Versión del terminal y modo de bits
910 32 bits
Descripción del problema
¡Hola, queridos desarrolladores!
Una de las recomendaciones para mejorar la calidad del código cuando se diseñan bucles con un gran número de iteraciones
es incorporar la verificación de una parada forzada de un programa MQL5 utilizando el sistema
Función del sistemaIsStopped();
Sin embargo, en la práctica, esta comprobación no funciona en los indicadores (sí en los scripts y en los Asesores Expertos)
Aquí está el código corto del indicador que muestra la esencia del problema:
Si intenta eliminar este indicador del gráfico, el proceso de "cálculo del indicador" no se detendrá como tal,
aunque debería, debido a la comprobación de la bandera de parada del programa.
Puede averiguarlo fácilmente supervisando el proceso terminal.exe en el Administrador de tareas. En un procesador de cuatro núcleos
es alrededor del 25% de la carga de la CPU. Además, la carga terminal no disminuye en absoluto con el tiempo hasta que el
cierre de la terminal. E incluso después de cerrar el terminal, el proceso terminal.exe sigue colgado en el gestor. Y, se siente como,
que es descargado por el sistema operativo como "colgado".
Resultado esperado
Por favor, arreglen este problema.
Para ello, es necesario conocer la configuración del desplazamiento de la línea indicadora de interés. Este es un ejemplo del indicador técnicoiAlligator
Se trata de una compensación, no del cálculo del indicador para el futuro.
Tengo un cálculo de futuro, pero utilizo un desplazamiento para rendirlo, ¿cómo calculo -1 barra del Asesor Experto?
Si alguien lo necesita, utilice CopyBuffer(Handle_original,0,-2,10,Data_Ind )
Exactamente, tengo un cálculo en el futuro, pero para dibujar un desplazamiento, ¿cómo puedo leer -1 bar del Asesor de Expertos?