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

 
Tapochun:

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 ;

C'est compréhensible, merci. Mais pour l'instant c'est compliqué pour moi... ou plutôt point 2, il faut le calculer pour chaque TF et le mettre dans des fourchettes pour trouver le nombre de chandeliers ?

Ne peut-on pas simplement trouver la date de l'horizon temporel actuel et examiner toutes les valeurs pour la date, sans compter le nombre de bougies qui se sont écoulées ?

 
-Aleks-:

C'est compréhensible, merci. Mais pour l'instant c'est compliqué pour moi... ou plus précisément le point 2, est-ce qu'il faut faire un calcul pour chaque TF et le mettre dans des fourchettes pour trouver le nombre de chandeliers ?

Ne peut-on pas se contenter de trouver la date de l'horizon temporel actuel et de regarder toutes les valeurs de cette date, sans déterminer le nombre de bougies qui se sont écoulées ?

Il est facile de déterminerle nombre de barres dans la journée. Par exemple, pour un graphique en 15 minutes. Diviser le nombre de minutes d'une journée par 15 (1440 / 15 = 96 barres ou autre PERIOD_D1/PERIOD_M15 = 96)
 
Vitalii Ananev:
Le nombre de barres intraday est simple à déterminer. Par exemple pour un graphique de 15 minutes. Diviser le nombre de minutes d'un jour par 15 (1440 / 15 = 96 barres ou autre PERIOD_D1/PERIOD_M15 = 96)
Vous ne devriez pas faire ça ! Ne jamais accepter comme un fait que le nombre de barres d'un jour donné sur le TF sera le même !
 
Vitalii Ananev:
Il est facile de déterminer le nombre de barres dans une journée. Par exemple, pour un graphique de 15 minutes. Divisez le nombre de minutes d'un jour par 15 (1440 / 15 = 96 barres ou autre PERIOD_D1/PERIOD_M15 = 96).

Je comprends cela mathématiquement, mais comment le faire avec des fonctions - c'est la question ! Supposons que j'obtienne l'heure actuelle en utilisant Time, et ensuite comment

Je pense faire un compteur pour chaque TF, avec une nouvelle barre, qui sera remis à zéro au début d'un nouveau jour, et remis à zéro pour un jour maximum, et avant cela faire une comparaison de chaque barre, mais comment le programmer ?

 
Tapochun:
Vous ne devriez pas faire ça ! Il ne faut jamais considérer comme un fait que le nombre de barres d'un jour donné par TF sera le même !

Oui, par exemple, il peut y avoir une heure de fermeture précoce le vendredi...

Il faut donc définir un jour, et prendre un tableau pour trouver le maximum du jour sans tenir compte du nombre de chandeliers, comment faire ?

 
-Aleks-:

Je comprends cela mathématiquement, mais comment le faire avec des fonctions - c'est la question ! Supposons que j'obtienne l'heure actuelle en utilisant Time, et ensuite comment

Je pense que je devrais faire un compteur pour chaque TF, avec une nouvelle barre, qui sera remis à zéro en cas de nouveau jour. Je veux le remettre à zéro pour un jour maximum et comparer chaque barre avant cela ; mais comment dois-je le programmer ?

C'est à peu près ainsi que nous pouvons trouver la première barre correspondant au début de la journée.

 datetime BeginDay = iTime(Symbol(), PERIOD_D1, iBarShift(Symbol(), PERIOD_D1, Time[NumberBar]));  

 int StartBar = iBarShift(Symbol(), 0, BeginDay);
 
Vitalii Ananev:

Voici en gros comment trouver la première barre correspondant au début de la journée.

Par exemple, nous avons cet algorithme.

Nous avons trouvé la première barre - au moment où elle se formera, cette barre sera le sommet de la journée. Ensuite, nous récupérons la barre suivante et vérifions son maximum, s'il est plus élevé que le précédent, cela signifie qu'il s'agit d'un nouveau sommet du jour. Et ainsi de suite jusqu'au dernier bar de la journée.

 
#property script_show_inputs
#property strict
//+------------------------------------------------------------------+
//| Входные параметры                                                |
//+------------------------------------------------------------------+
input ENUM_TIMEFRAMES inpUserTimeframe=PERIOD_M15;   // Пользовательский ТФ
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
// Определяем время открытия текущего дня
   datetime open_D1=iTime(_Symbol,PERIOD_D1,0);

// Определяем номер первого сформированного бара по пользовательскому ТФ за текущий день
   int last_utf = iBarShift( _Symbol, inpUserTimeframe, open_D1, true );
   if( last_utf == -1 )
     {
      Alert(EnumToString(inpUserTimeframe)+" ОШИБКА #",GetLastError(),": номер бара не определен! "+TimeToStr(open_D1));
      return;
     }

// Определяем максимум дня
   double dayHigh=0;
   double high;
   int highNum=0;

   for(int i=1; i<=last_utf; i++) // Цикл по сформированным свечам за текущий день
     {
      high = iHigh( _Symbol, inpUserTimeframe, i );   // Максимум на i свече
      if( high > dayHigh )                            // Если максимум дня превышен
        {
         dayHigh = high;                              // Запоминаем новый максимум
         highNum = i;                                 // Запоминаем номер свечи
        }
     }

   Alert(EnumToString(inpUserTimeframe)+": максимум дня = ",DoubleToString(dayHigh,_Digits)," обнаружен на свече #",highNum);
  }
Dossiers :
toAleks.mq4  3 kb
 
Tapochun, Vitalii Ananev- Merci ! Je vais maintenant essayer d'appliquer ce que j'ai appris.
 
Tapochun:
Puis-je voir un indicateur au lieu d'un script ? J'ai juste du mal avec tous ces tableaux temporels... J'aimerais apprendre d'un exemple.
Raison: