Errores, fallos, preguntas - página 512

 
Neofit:
Estableceel tamaño del array. ArrayResize
 
Neofit:

Por favor, indíquenos cómo trabajar correctamente con un array cuyos elementos son estructuras Mqlrates.

Esto es exactamente lo que quiero saber:

MqlRates AdaptedRates[];

ArraySetAsSeries(AdaptedRates,true); 

AdaptedRates[300].open=1;

El depurador da un error - Invalid array access.

Entiendo que utilizando esta forma de grabación, sólo podemos leer elementos de una estructura que sea un elemento de un array.

La cuestión es cómo escribir correctamente los elementos de la estructura. No me interesan todos, lo importante es el precio de .apertura .alta .baja .cierre.

Me disculpo de antemano por esta pregunta probablemente muy trivial (no soy el programador), pero la ayuda que no he encontrado la respuesta. Agradeceré cualquier ayuda.

Está utilizando un array dinámico AdaptedRates[]. Por lo que recuerdo, cuando se trabaja con arrays dinámicos, su tamaño debe establecerse mediante la función ArrayResize(). Pero hasta ahora el compilador se ha quejado del índice 300 especificado en la tercera línea.
 
Swan:
Establece el tamaño del array. ArrayResize
Según tengo entendido, si establezco el tamaño, por ejemplo
MqlRates AdaptedRates[302];  
no puedo establecer el tipo de indexación como serie.
 
Neofit:
Según tengo entendido, si defino el tamaño, por ejemplo
MqlRates AdaptedRates[302];  
no podré establecer el tipo de indexación como serie.

:) No se establece el array estático, sino que se establece el tamaño del array dinámico con ArrayResize().

Bueno, como: ArrayResize(AdaptedRates,302); etc.

 
Yedelkin:
Está utilizando un array dinámico AdaptedRates[]. Por lo que recuerdo, cuando se trabaja con arrays dinámicos se debe establecer su tamaño utilizando la función ArrayResize(). Y hasta ahora el compilador se bloquea en el índice 300 especificado en la tercera línea.
Las matrices estáticas no pueden representarse como series temporales, es decir, la función ArraySetAsSeries(), que establece el acceso a los elementos de la matriz desde el final de la matriz hasta su inicio, no es aplicable a ellas. Si quiere proporcionar acceso a un array como en las series temporales, utilice un objeto array dinámico.

Esta es una cita de la ayuda.

Swan, Yedelkin gracias por una respuesta tan rápida.

 
Neofit:
Según tengo entendido, si defino un tamaño, por ejemplo
MqlRates AdaptedRates[302];  
no puedo establecer el tipo de indexación como serie.

Sí.

MqlRates AdaptedRates[];//dejar el array dinámico

ArrayResize(AdaptedRates,302);//y establecer el tamaño correcto

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 
Yedelkin:

:) No se establece un array estático, sino que se establece uno dinámico utilizando ArrayResize().

Bueno, como ArrayResize(AdaptedRates,302); etc.

Gracias por la explicación popular, por lo que entiendo es aconsejableArrayResize a los límites correctos antes de cualquier referencia a una celda del array dinámico, lo probaré.
 
pusheax:

Un fallo en el probador de estrategias.

De repente se para y todos los agentes locales y remotos han terminado y se cuelga.

¿Me pueden decir cómo volver a iniciarlo, es una pena volver a empezar?
Lo hago regularmente :-) No puedo volver a arrancarlo, desactivo las nubes y vuelvo a lanzarlas. Es peor, cuando ocurre por la noche, se queda encendido hasta que me despierto :-)
 
Neofit:
Gracias por la explicación popular, por lo que entiendo es deseable ArrayResize a los límites requeridos antes de cualquier referencia a una celda de la matriz dinámica , voy a probarlo.

Nota. Sólo en el caso de los topes indicadores no será necesario hacerlo. El subsistema ejecutivo del terminal se encarga de ello por sí mismo.

Nota 2:ArrayResize() debe aplicarse preferentemente sólo cuando sea necesario cambiar el tamaño de un array dinámico, y no antes de cualquier acceso a sus elementos. Es muy posible que a un array dinámico se le dé un tamaño una vez, y luego el programa simplemente acceda a sus elementos.

 
Yedelkin:

Nota. Sólo en el caso de los topes indicadores no será necesario hacerlo. El subsistema ejecutivo del terminal se encarga de ello por sí mismo.

Nota 2:ArrayResize() debe aplicarse preferentemente sólo cuando sea necesario cambiar el tamaño de un array dinámico, y no antes de cualquier acceso a sus elementos. Es muy posible que un array dinámico se dimensione una vez y luego el programa simplemente acceda a sus elementos.

Bueno, estoy siendo tonto al decirlo, en realidad entiendo que si ya he expandido un array dinámico hasta el 302, puedo acceder a cualquier elemento del 0 al 301 sin ArrayResize.