Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 590

 

¡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?

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

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?

 
Roman Sharanov:

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.

 
Artyom Trishkin:

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

 
Roman Sharanov:

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?

 
Artyom Trishkin:

¿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

 
Roman Sharanov:

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ó).

 
Artyom Trishkin:

¿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.

 
¿Cuál es la fórmula universal para calcular el precio de equilibrio si hay comisiones y swaps en la operación?

Hay una fórmula sencilla que funciona para las cotizaciones con 5 dígitos y el depósito en usd

Lote x beneficio en pips = beneficio en $.

Si se trata de una compra, y hay swaps y comisiones en la operación, entonces el precio de equilibrio será un poco más alto que el precio de apertura
(Si no hay swaps ni comisiones, el umbral de rentabilidad es el precio de apertura)

Pero si el instrumento es exótico o la cotización es de 4 o 2 dígitos o la moneda del depósito es la libra. La fórmula anterior no es útil.
¿Existe una fórmula universal?
 
Roman Sharanov:

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()