Questions des débutants MQL5 MT5 MetaTrader 5 - page 374

 
Vitalii Ananev:
Il suffit alors de prendre la valeur de iHigh(Symbol(),PERIOD_D1,0), après une certaine période de temps. Cela n'a de sens que pour la bougie du jour, qui n'est pas encore complètement formée. Mais si vous prenez les valeurs des jours passés, elles seront les mêmes à tout moment.
C'est le problème, je dois le regarder rétrospectivement. ....
 
-Aleks-:
C'est le problème, j'ai besoin de regarder rétrospectivement. ....

Je vois. Vous devez fixer tous les extrêmes de prix intraday. Je n'arrive pas à réfléchir assez vite à la façon de faire cela sur des données historiques.

La première chose qui me vient à l'esprit est d'analyser les fractales formées sur les échelles de temps intrajournalières.

 

Je ne sais pas comment le dire plus clairement, en général, comment définir le nom du tableau comme une variable ?

Par exemple, il y a 2 tableaux Mass1 et Mass2, vous devez faire exécuter la même fonction, mais par condition avec deux tableaux différents :

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

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

else 

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

et le type de fonction :

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

Je ne sais pas comment le dire plus clairement, en général, comment définir le nom du tableau comme une variable ?

Par exemple, il y a 2 tableaux Mass1 et Mass2, vous devez faire exécuter la même fonction, mais par condition avec deux tableaux différents :

et le type de fonction :

Et juste déclarer deux tableaux, quelles croyances empêchent ?
 
VANDER:

Je ne sais pas comment le dire plus clairement, en général, comment définir le nom du tableau comme une variable ?

Par exemple, il y a 2 tableaux Mass1 et Mass2, vous devez faire exécuter la même fonction, mais par condition avec deux tableaux différents :

Fonction de puits et de type :

Pas du tout. Parce qu'un tableau est un ensemble numéroté de variables.

 
VANDER:

Je ne sais pas comment le dire plus clairement, en général, comment définir le nom du tableau comme une variable ?

Par exemple, il y a 2 tableaux Mass1 et Mass2, vous devez faire exécuter la même fonction, mais par condition avec deux tableaux différents :

Puits et type de fonction :

Créez une fonction à l'intérieur de laquelle vous effectuez des opérations sur le tableau. Et par condition, passer différents tableaux à la fonction :

//+------------------------------------------------------------------+
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:
Et le fait de déclarer simplement deux tableaux empêche quelles croyances ?
ils sont tous deux déclarés, c'est juste que la fonction est grande et la même pour tous les tableaux, il est donc nécessaire de choisir
 
Artyom Trishkin:

Créez une fonction à l'intérieur de laquelle vous effectuez des opérations sur un tableau. Et passer différents tableaux dans la fonction par condition :

oops, mais dans la fonctionWorkWithMassive, comment faites-vous référence à ce tableau ?
 
VANDER:
oops, mais dans la fonctionWorkWithMassive, comment faites-vous référence à ce tableau ?

Un tableau est passé par référence et vous vous référez au tableau exact que vous passez à la fonction via les paramètres d'entrée. Par exemple (purement hypothétique)

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

Il est préférable, bien sûr, de passer tous les paramètres nécessaires à la fonction :

//+------------------------------------------------------------------+
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);
      }
   }
//+------------------------------------------------------------------+

et vous pouvez utiliser la surcharge de fonction - une fonction avec le même nom fait différentes choses selon les paramètres d'entrée et le type :

//+------------------------------------------------------------------+
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-:
Bien.

1) Déterminer l'heure d'ouverture de la bougie quotidienne ;

Déterminez le nombre de barres num sur le TF que vous voulez (si vous voulez vérifier l'extremum du jour toutes les 15 minutes - M15 barres) ;

3. Recevoir les données en haut pour les barres numériques ;

3. Dans la boucle, on compare toutes les valeurs des barres hautes avec la variable dayHigh pour la bougie du jour souhaité (initialement dayHigh = 0) ;

4. Si high > dayHigh, vous enregistrez la nouvelle valeur dans la variable dayHigh ;

Raison: