![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
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.
Establece el tamaño del array. ArrayResize
Según tengo entendido, si defino el tamaño, por ejemplo
:) 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.
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.
Esta es una cita de la ayuda.
Swan, Yedelkin gracias por una respuesta tan rápida.
Según tengo entendido, si defino un tamaño, por ejemplo
Sí.
MqlRates AdaptedRates[];//dejar el array dinámico
ArrayResize(AdaptedRates,302);//y establecer el tamaño correcto
:) No se establece un array estático, sino que se establece uno dinámico utilizando ArrayResize().
Bueno, como ArrayResize(AdaptedRates,302); etc.
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?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.
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.