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

 

¿Cómo puedo saber por qué esta construcción no funciona?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
Informa de un error de matriz fuera de rango en '**.mq5' (13,10)
Si sustituyo la cadena double buf[]; por double buf[10]; entonces no hay salida fuera del array.
 
ivanivan_11:

¿Puede decirme por qué esta construcción no funciona?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
informa de un error array out of range en '**.mq5' (13,10)
si sustituyo la cadena double buf[]; por double buf[10]; entonces no hay salida de array.

O bien doble buf[10];

O doble buf[];, pero entonces necesariamente ArrayResize(buf,10);

 
Artyom Trishkin:

O bien doble buf[10];

O doble buf[];, pero entonces tengo que hacer ArrayResize(buf,10);

Gracias.

¿puedo explicar algo más?

Es decir, si inicializo un array y luego lo lleno en el bucle, su tamaño crecerá con cada iteración, y tendré que redefinir su tamaño... Pensaba que esto se hace automáticamente, sin importar cuántos elementos le añada.

Si lo lleno inmediatamente con un número determinado de elementos, no tengo que hacer este procedimiento.

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   int closed1=CopyClose("EURUSD",NULL,0,3,buf);
  
  }
 
ivanivan_11:

Gracias.

¿Puedo hacerlo más claro?

Es decir, si inicializo un array y luego lo lleno en el bucle, su tamaño crecerá con cada iteración, y tendré que redefinir su tamaño... Pensaba que eso se hace automáticamente, sin importar cuántos elementos le añada.

y si lo lleno inmediatamente con un cierto número de elementos, no tengo que hacer tal procedimiento.

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   int closed1=CopyClose("EURUSD",NULL,0,3,buf);
  
  }

La función CopyXXXX() anula automáticamente el tamaño de la matriz que se le pasa.

Si rellenas el array tú mismo, si es dinámico, entonces depende del programador asegurarse de que tiene el tamaño adecuado.

Puedes, cuando declares una matriz, hacerla

  • un array dinámico, en cuyo caso es necesario redefinir su tamaño.
  • no dinámico: buff[5] - en ese caso hay que inicializarlo con los valores correctos
  • no dinámico: buff[]={10,20,30,40,50}; - en este caso se inicializa con valores en la declaración
 
Artyom Trishkin:

La función CopyXXXX() anula automáticamente el tamaño de la matriz que se le pasa.

Si usted mismo está llenando el array, si es dinámico, es el programador quien debe asegurarse de que tiene el tamaño adecuado.

Puedes, cuando declares una matriz, hacerla

  • un array dinámico, en cuyo caso es necesario redefinir su tamaño.
  • no dinámico: buff[5] - en este caso hay que inicializarlo con los valores correctos
  • no dinámico: buff[]={10,20,30,40,50}; - en este caso se inicializará con los valores que declare
gracias por la aclaración
 
¿Quién sabe qué significan los números del gráfico de ejecución en la optimización genética? Hay dos números, por ejemplo 0,637 o 7,27. Y cómo elegir la carrera correcta. Por ejemplo, estoy interesado en la tirada número 5381. ¿Cómo elegirlo?
 
¿quién sabe cuál es el signo entre los paréntesis?GHPR=(BalanceClose/BalanceOpen)^(1/N)
 
Roma Ivanov:
¿quién sabe cuál es el signo entre los paréntesis?GHPR=(BalanceClose/BalanceOpen)^(1/N)
Operación OR exclusiva a nivel de bits
 

¿De verdad? ¿De verdad?

Siempre pensé que(^) era una exponenciación.

 
Roma Ivanov:
¿quién sabe cuál es el signo entre los paréntesis?GHPR=(BalanceClose/BalanceOpen)^(1/N)
Conversión de títulos.
Razón de la queja: