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

 
Vitalii Ananev:
Entonces sólo tiene que tomar el valor de iHigh(Symbol(),PERIOD_D1,0), después de un cierto período de tiempo. Esto sólo tiene sentido para la vela del día actual, que aún no está completamente formada. Pero si se toman los valores de los días pasados, serán los mismos en cualquier momento.
Ese es el problema, tengo que mirarlo retrospectivamente....
 
-Aleks-:
Ese es el problema, tengo que mirarlo retrospectivamente....

Ya veo. Hay que fijar todos los extremos de los precios intradía. No puedo pensar con la suficiente rapidez cómo hacer eso en los datos históricos.

Lo primero que se nos ocurre es analizar los fractales que se forman en los marcos temporales intradía.

 

No sé cómo decirlo más claramente, en general, ¿cómo poner el nombre del array como variable?

Por ejemplo, hay 2 arrays Masa1 y Masa2, hay que hacer que se ejecute la misma función, pero por condición con dos arrays diferentes:

if(условие==true)

	И мя_массива=Mass1

else 

	 Имя_массива=Mass2

y el tipo de función:

A=Имя_массива[123];
 
VANDER:

No sé cómo decirlo más claramente, en general, ¿cómo poner el nombre del array como variable?

Por ejemplo, hay 2 arrays Masa1 y Masa2, hay que hacer que se ejecute la misma función, pero por condición con dos arrays diferentes:

y el tipo de función:

Y sólo declarar dos matrices, ¿qué creencias están impidiendo?
 
VANDER:

No sé cómo decirlo más claramente, en general, ¿cómo poner el nombre del array como variable?

Por ejemplo, hay 2 arrays Masa1 y Masa2, hay que hacer que se ejecute la misma función, pero por condición con dos arrays diferentes:

Función de pozo y de tipo:

De ninguna manera. Porqueun array es un conjunto numerado de variables.

 
VANDER:

No sé cómo decirlo más claramente, en general, ¿cómo poner el nombre del array como variable?

Por ejemplo, hay 2 arrays Masa1 y Masa2, hay que hacer que se ejecute la misma función, pero por condición con dos arrays diferentes:

Bien y escribe una función:

Haz una función dentro de la cual realices operaciones sobre el array. Y por condición, pasar diferentes arrays a la función:

//+------------------------------------------------------------------+
double massive_a[];
int a, massive_b[];
//+------------------------------------------------------------------+
void OnTick() {
   if(a==1) WorkWithMassive(massive_a);
   else WorkWithMassive(massive_b);
}
//+------------------------------------------------------------------+
void WorkWithMassive(double &massive[]) {
   // работаем с массивом а
   }
//+------------------------------------------------------------------+
void WorkWithMassive(int &massive[]) {
   // работаем с массивом b
   }
//+------------------------------------------------------------------+
 
Vitalie Postolache:
¿Y el simple hecho de declarar dos matrices evita qué creencias?
ambos están declarados, es sólo que la función es grande y la misma para todos los arrays por lo que hay que elegir
 
Artyom Trishkin:

Haz una función dentro de la cual realices operaciones sobre un array. Y pasar diferentes arrays a la función por condición:

oops, pero dentro de la funciónWorkWithMassive, ¿cómo se hace referencia a este array?
 
VANDER:
oops, pero dentro de la funciónWorkWithMassive, ¿cómo se hace referencia a este array?

Un array se pasa por referencia y se refiere al array exacto que se pasa a la función a través de los parámetros de entrada. Por ejemplo (puramente hipotético)

//+------------------------------------------------------------------+
void WorkWithMassive(double &massive[]) {
   int a=20;
   ArrayResize(massive,a);
   for(int i=a-1; i>=0; i--) {
      massive[i]=iOpen(Symbol(),Period(),a);
      }
   }
//+------------------------------------------------------------------+

Por supuesto, es mejor pasar todos los parámetros necesarios a la función:

//+------------------------------------------------------------------+
void WorkWithMassive(string symbol, int timeframe, double &massive[]) {
   int a=20;
   ArrayResize(massive,a);
   for(int i=a; i>=0; i--) {
      massive[i]=iOpen(symbol,timeframe,a);
      }
   }
//+------------------------------------------------------------------+

y puedes utilizar la sobrecarga de funciones - una función con el mismo nombre hace cosas diferentes dependiendo de los parámetros de entrada y del tipo:

//+------------------------------------------------------------------+
void WorkWithMassive(string symbol, int timeframe, double &massive[]) {
   int a=20;
   ArrayResize(massive,a);
   for(int i=a; i>=0; i--) massive[i]=iOpen(symbol,timeframe,a);
   }
//+------------------------------------------------------------------+
int WorkWithMassive(int inp_value, int array_size, int &massive[]) {
   ArrayResize(massive,array_size);
   massive[array_size-1]=inp_value*2;
   return(massive[array_size-1]+massive[0]);
   }
//+------------------------------------------------------------------+
 
-Aleks-:
Sí.

1. Determine la hora de apertura de la vela diaria;

Determine el número de barras num en el TF que desea (si quiere comprobar el extremo del día cada 15 minutos - M15 barras);

3. Recibir los datos altos para las barras de número;

3. En el bucle, compara todos los valores de las barras altas con la variable dayHigh para la vela del día deseado (inicialmente dayHigh = 0);

4. Si high > dayHigh, se almacena el nuevo valor en la variable dayHigh;