[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 174

 
Qui sait, est-il possible en faisant des variables globales Hour(), Minute() et Seconds() de contrôler à minuit (0.00) le changement de l'indicateur DailyPivotPoints vers de nouveaux niveaux PP et d'autres lignes de l'EA ? J'avais l'habitude de le faire directement dans l'indicateur avec Hour(), Minute(), Seconds(), et cela fonctionnait sans avoir besoin de compiler chaque nuit. Mais récemment, il a cessé de se modifier, peut-être à cause du changement de l'image ? Merci !
 
borilunad:
Qui sait, est-il possible en faisant des variables globales Hour(), Minute() et Seconds() de contrôler à minuit (0.00) le changement de l'indicateur DailyPivotPoints vers de nouveaux niveaux PP et d'autres lignes de l'EA ? J'avais l'habitude de le faire directement dans l'indicateur avec Hour(), Minute(), Seconds(), et cela fonctionnait sans avoir besoin de compiler chaque nuit. Mais récemment, il a cessé de se modifier, peut-être à cause du changement de l'image ? Merci !

Cela devrait fonctionner sur le premier tick du nouveau jour.
 
borilunad:

Merci, Victor ! Ma version courte a-t-elle fonctionné pour vous ?


Oui, Boris, c'est très bien, d'ailleurs ! Merci beaucoup. C'est ce que je voulais. Je me suis tordu... Je me suis tordu... Je n'ai pas bien compris. Je n'ai pas encore beaucoup d'expérience, et mon cerveau ne pense pas comme un pro. C'est un peu une impasse, n'est-ce pas ? :(

Je ne voulais pas demander, mais je devais le faire. Parce que je ne pouvais pas le faire plus court moi-même.

 
Pouvez-vous me dire comment construire un canal qui passe par les fractales, mais qui est limité à 0 barre et redessine plus loin quand une nouvelle barre apparaît. C'est la limitation qui est le problème.
 
beginner:
Pouvez-vous me dire comment construire un canal qui passe par les fractales, mais qui est limité à 0 barre et redessine plus loin quand une nouvelle barre apparaît. C'est la limitation qui est le problème.

Expliquez le concept de "limité par 0 bar".
 

Voici la fonction :

bool IsUpFractal(int index)
{
   double centerHigh = High[index + g_center];     // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск максимумов справа от центрального бара ================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh <= High[i])                   // ..максимумом. Не позволяется..
         return (false);                           // ..наличие баров с большим или..
      cnt++;                                       // ..равным максимумом.
   }
   
   if (i < 0)                                      // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск максимумов слева от центрального бара =================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh == High[i])                   // ..максимумом. Не позволяется..
         continue;                                 // ..наличие баров с большим..
      if (centerHigh < High[i])                    // ..максимумом. Равный - позволяется
         return (false);
      cnt++;                                    
   }
   
   if (i >= total)                                 // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}
//+-------------------------------------------------------------------------------------+
//| Определение наличия нижнего фрактала на указанном баре                              |
//+-------------------------------------------------------------------------------------+
bool IsDnFractal(int index)
{
   double centerLow = Low[index + g_center];       // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск минимумов справа от центрального бара =================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с большим..
      if (centerLow >= Low[i])                     // ..минимумом. Не позволяется..
         return (false);                           // ..наличие баров с меньшим или..
      cnt++;                                       // .. равным минимумом
   }
   
   if (i < 0)                                      // g_center-1 больших минимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск минимумов слева от центрального бара ==================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с большим..
      if (centerLow == Low[i])                     // ..минимумом. Не позволяется..
         continue;                                 // ..наличие баров с меньшим минимумом
      if (centerLow > Low[i])                      // ..Равный минимум - разрешается
         return (false);
      cnt++;   
   }
   
   if (i >= total)                                 // g_center-1 больших минимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}

La fonction reçoit la valeur de l'index qui a une valeur de barre pour calculer 0 ou 1. C'est ici que la boucle est écrite d'une manière intéressante.. :

for (; i >= 0 && cnt < g_center; i--)

C'est-à-dire qu'il n'y a pas de valeur variable à partir de laquelle commencer le calcul. Selon la logique de la machine, à partir de quelle barre le calcul commencera-t-il dans ce cas ? S'il y a une décrémentation de i-- alors du maximum ?

Là encore, i = index + g_center - 1, mais il ya un point. Quellevaleurd'indice viendra icien premier? Maximum ou minimum ?

 
hoz:

C'est-à-dire qu'il n'y a pas de valeur variable à partir de laquelle commencer le calcul. Selon la logique de la machine, à partir de quelle barre le calcul commencera-t-il ? S'il y a une décrémentation de i, est-ce le maximum ?


Non, de la valeur de la variable que j'avais avant le cycle. L'entrée

   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)

est identique à

   int cnt,i;
   for (cnt = 0, i = index + g_center - 1; i >= 0 && cnt < g_center; i--)
 
En d'autres termes, la première expression de la boucle for peut être écrite soit à sa place, soit avant la boucle, et le résultat est le même.
 
hoz:

Encore une fois, i = index + g_center - 1, mais c'estlà que réside le problème. Quelle est lapremière valeur de l'indice qui arrive ici ? Maximum ou minimum ?


L'index sera la valeur passée à la fonction comme paramètre.
 
alsu:

Non, de la variable que j'avais avant le cycle. Écrire à

est identique à

   int cnt,i;
for (cnt = 0, i = index + g_center - 1; i >= 0 && cnt < g_center; i--) 

Maintenant je comprends. Merci. Je cherchais... il n'y avait pas de point de référence. Maintenant, c'est 0.


Hmm. Eh bien, par exemple, l'indice est passé à 1. Regardons ce morceau de code :

 int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с большим..
      if (centerLow >= Low[i])                     // ..минимумом. Не позволяется..
         return (false);                           // ..наличие баров с меньшим или..
      cnt++;                                       // .. равным минимумом
   }
   

immédiatement à l'arrivée, ce sera :cnt = 0, i = index + g_center - 1 = 1(valeur de l'index) +2(valeur deg_center) - 1 = 2

Mais selon la condition de la boucle, elle continuera jusqu'à ce que i soit égal à 0. Comment cela va-t-il se passer ?

La condition dit que si i a une valeur comprise entre 2(si index = 1), et i >= 0 etcnt a une valeur comprise entre 0, etcnt < g_center, alors les conditions imbriquées sont remplies.

Il s'avère que si la variable ici est 1, alors nous n'aurons qu'une seule itération dans la boucle, n'est-ce pas ?