Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 503

 
Vladimir Fionov:
Para los pares de divisas, si pones un límite, todo funciona, pero para el timeframe no funciona, incluso si lo pones en el indicador h1 no funciona

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes

Valor de retornoPeríodo del gráfico actual (en minutos).

if(Period() != 60)  return(-1); // для H1

Pruébalo, tal vez funcione.

if(Period() != PERIOD_H1)  return(-1);

O eliminar las comillas.

Period - Документация на MQL4
  • docs.mql4.com
Period - Документация на MQL4
 
Vladimir Zubov:

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes

Valor de retornoPeríodo del gráfico actual (en minutos).

Pruébalo y verás si funciona.

¡¡¡Muchas gracias, ha funcionado!!!
 
Otra pregunta, al añadir un #property strict al principio el indicador da un error array out of range en 'Indicator name' (100,41) cómo solucionar esto

 
Vladimir Fionov:
Otra pregunta, al añadir en el principio cuando el indicador #property strict da error array out of range en 'Indicator name' (100,41) cómo tratar con él

Tienes que arreglar el array fuera de rango. Localización del problema en su código: línea 100, carácter en la posición 42.
 
Vladimir Fionov:

¿Qué tiene de malo?

  1. Pegar correctamente el código en el foro
  2. Deberías arreglar el error de exceder los límites del array"ema[]". Probablemente estás calculando mal la variable"límite".
 
Karputov Vladimir:
  1. Insertar correctamente el código en el foro
  2. Deberías arreglar el error de exceder los límites del array"ema[]". Probablemente estás calculando mal la variable"límite".
Lo siento, no sabía lo de la inserción del código, pero sobre el código en sí, por qué ocurre esto cuando se inserta #property strict y todo funciona sin él
 
Vladimir Fionov:
Lo siento, no sabía lo de la inserción del código, pero en cuanto al código en sí, ¿por qué ocurre cuando se inserta #property strict y todo funciona sin él?

¿Has visto la ayuda del MetaEditor?

También ha cambiado el trabajo con las funciones, el ámbito de las variables y la liberación de memoria en las matrices locales. Dado que los cambios resultaron ser bastante significativos, se decidió introducir una nueva propiedad #property strict con el fin de maximizar la compatibilidad con el antiguo enfoque para escribir programas MQL4. Cuando se crea un nuevo programa MQL4 utilizando el Asistente MQL4, esta propiedad se añade siempre a la plantilla.

Y así sucesivamente:

Tabla de diferencias entre compiladores:

Antiguo compilador MQL4

Nuevo compilador MQL4

Nuevo compilador MQL4 con #property strict

Los puntos de entrada init(), start(), deinit() pueden tener cualquier parámetro y cualquier tipo de retorno

init(), start(), deinit() se mantienen por compatibilidad,

y los nuevosOnInit(),OnStart(),OnCalculate(),OnTick(),OnTimer(),OnChartEvent(),OnTester(),OnDeinit() deben coincidir exactamente con sus firmas

Mismo

El resultado de retorno de la función init() no es analizado de ninguna manera por el subsistema ejecutor

El resultado de retorno de las funciones init() y OnInit() no es analizado de ninguna manera por el subsistema ejecutor

Cuando se devuelve un valor distinto de cero desde OnInit(), el experto o indicador se detiene y el programa se descarga

Los nombres de las variables pueden ser casi todos (excepto las palabras reservadas), incluidos los caracteres especiales y los puntos.

Los nombres de las variables no pueden tener caracteres especiales ni puntos.

La listade palabras reservadas se amplía, por lo que no se pueden nombrar palabras comunes como corto, largo, const, etc.

Mismo

El ámbito de una variable es desde la declaración (incluso en un bloque anidado) hasta el final de la función.

Mismo

Rango de visibilidad de una variable: desde la declaración hasta el final del bloque en el que se declara la variable.

Inicialización implícita de todas las variables (tanto globales como locales) con ceros.

El mismo

Inicialización sólo de las variables globales. De las variables locales, sólo se inicializan implícitamente las cadenas

Las matrices locales no se liberan al salir de la función

Las matrices locales se liberan al salir de la función

Las matrices locales se liberan al salir {}

El error"Array out of range" no conduce a un error crítico*.

Lo mismo. Excepto en el caso de las matrices de estructuras y clases, para las que este error es crítico

"Array out of range" es un error crítico y hace que el programa se detenga

No hay estructuras ni clases

Hayestructuras y clases. Aparecen otros tipos de datos.

Mismo

Cadenas - de un solo byte.

datetime - Entero de 32 bits

La variable predefinida Volumen es de tipo doble

Cadenas - unicode.

datetime - Entero de 64 bits

El volumen es una variable predefinida de tipo largo.

Mismo

ArrayCopyRates() produce una copia virtual a la matriz double[][6]

ArrayCopyRates() produce una copia virtual al array MqlRates[]. Por compatibilidad, la copia al array double[][6] se mantiene, pero esta copia no es virtual sino real.

También.

Las funciones no pueden devolver valores aunque tengan un tipo. Para ello, el compilador inserta automáticamente return(0) al final de la función.

Lo mismo.

Las funciones de cualquier tipo deben devolver siempre un valor

Número de archivos abiertos simultáneamente - 32

Número de archivos que se abren simultáneamente - 64

Mismo

Los archivos se abren siempre en modo compartido **

El modo de compartición debe declararse explícitamente con FILE_SHARE_READ y/o FILE_SHARE_WRITE

Mismo

Los guiones de la ventana de entrada muestran los nombres de las variablesexternas

Los nombres de lasvariablesexternas y deentrada se muestran en la ventana de parámetros de entrada para los scripts en modo show_inputs.

Para los scripts en el modo show_inputs, los comentarios de cadena se muestran en la ventana de entrada en lugar de los nombres delas variablesexternas y deentrada

* Debe prestar especial atención al error "Array out of range" - muchos indicadores antiguos personalizados producirán este error en el nuevo compilador en modo estricto cuando se ejecutan en un gráfico. Es conveniente encontrar la causa y solucionarla.

** En el nuevo MQL4 y MQL5 las banderas FILE_SHARE_READ y FILE_SHARE_WRITE son responsables del modo de compartir archivos, no existían en el antiguo MQL4.

Препроцессор - Документация на MQL4
  • docs.mql4.com
Препроцессор - Документация на MQL4
 
Vladimir Fionov:
¿dime qué pasa?
  int idx;
  int counted = IndicatorCounted();
  if (counted < 0) return (-1);
  if (counted > 0) counted--;
  int limit = Bars - counted;
  if(counted == 0) limit-=1;
Intenta añadir una línea como esta.
 
Vladimir Fionov:

Perdona si te molesto, pero ahora aparece este error

39ª posición.

El mismo error, ¿array fuera de rango?
 
Vladimir Zubov:
El mismo error, ¿array fuera de rango?
SI