Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 590
![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
¡Hola!
¿Puedes por favor mostrarme cómo un EA basado en la Media Exponencial Triple puede ser prohibidopara abrir una posición si la última operación es sacada en SL?
MQL5
No tengo problemas con él en modo normal, pero en cuanto empiezo la optimización se imprime el error en cada ejecución y no hay salida.
Pero la cosa es que ni siquiera ejecuta el código. He puesto Prints alrededor del programa, sin salida, sólo un error en cada ejecución que sale.
¿Por qué no funciona la impresión?
MQL5
El Asesor Experto funciona sin problemas en modo normal, pero en cuanto empiezo a optimizarlo, se queja en cada pasada de que ha entrado en los límites del array.
Pero la cosa es que ni siquiera ejecuta el código. He puesto Prints alrededor del programa, sin salida, sólo un error en cada ejecución que sale.
¿Por qué no funciona la impresión?
Tienes que comprobar el tamaño del array. Se muestra una línea en la que hay una salida fuera de la matriz. Aquí, debe insertar Print antes de esta línea, en la que se escribe la salida del tamaño del array y el índice, por el que se intenta acceder a los datos del array - el tamaño del array y el índice se imprimirán en el registro, y luego el programa saldrá con un error.
¡PERO! Haga todo esto en el probador en modo visual, no en el optimizador - en el optimizador (y en el probador en modo no visual) todas las impresoras están desactivadas para la aceleración.
Salir fuera del array antes de llegar a Print().
Comprueba el tamaño de la matriz. Se muestra una línea en la que la salida está fuera de la matriz. Antes de esta línea, debe insertar Print, en la que se escribe la salida del tamaño del array y el índice, por el que se intenta acceder a los datos del array - el tamaño del array y el índice se imprimirán en el registro, y entonces el programa se bloqueará.
¡PERO! Hazlo todo en el probador en modo visual, no en el optimizador - en el optimizador (y en el probador en modo no visual) las impresoras están todas apagadas para acelerar.
Ese es el problema, todo funciona con cualquier parámetro en la visual, pero con cualquier optimización se sale de los límites
Ese es el problema que con cualquier parámetro en la visual todo funciona, pero con cualquier optimización se sale de los límites
¿Qué hay en la matriz? Sólo puedo suponer que, o bien no hay datos en el array todavía, o bien es más pequeño de lo que crees. ¿Hay alguna comprobación en el programa para el tamaño de la matriz?
¿Qué hay en la matriz? Sólo puedo suponer que, o bien no hay datos en el array todavía, o bien es más pequeño de lo que crees. ¿Hay alguna comprobación en el programa del tamaño de la matriz?
La última N, tengo 500, los valores de macd, y los límites de los ciclos están estrictamente limitados y nunca pueden ser menores de 0 y mayores de N, lo he depurado y contado en papel
El último N, tengo 500, valores macd, y los límites del bucle están estrictamente limitados y nunca pueden ser menores que 0 y mayores que N, lo he depurado y contado en papel
¿Estás seguro de que el array está lleno de datos cuando accedes a él? ¿Existe una comprobación de la disponibilidad de los datos y de que la matriz tiene el valor correcto?
Que esté escrito y calculado en un papel no significa que coincida con lo que el EA recibió (no recibió).
¿Estás seguro de que el array está lleno de datos cuando accedes a él? ¿Se comprueba que los datos están disponibles y que el array tiene el tamaño adecuado?
Que esté escrito y calculado en un papel no significa que coincida con lo que el Asesor Experto recibió (no recibió).
Sí, al principio, antes de todas las operaciones, se copia del buffer.
Sí, al principio, antes de todas las operaciones, copiadas del buffer
Copiado. ¿Y cuánto se copia se comprueba?
Si está utilizando un indicador con suavizado, requiere unas cuantas barras más de las que espera. Por lo tanto, el hecho de haber copiado no significa que los datos se hayan copiado y estén disponibles en su tamaño completo.
Es más fácil que compruebe el tamaño del array y, si no tiene el tamaño requerido, salga de OnTick()