[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 720

 
artmedia70:
Je vois que vous êtes déjà en train de prendre une décision vous-même.
J'en viens à la décision... Mais c'est comme un chien : je comprends ce que je comprends, mais je ne peux pas le dire, c'est-à-dire que je ne peux pas le représenter dans le code).
Peut-être que c'est la chaleur qui fait fondre mon cerveau).
 
Shuba:
Je m'approche de la solution... C'est comme un chien : je comprends ce que je comprends, mais je ne peux pas le dire, c'est-à-dire que je ne peux pas le représenter dans le code).
Peut-être que c'est la chaleur qui fait fondre mon cerveau).
Comment cherchez-vous les fractales ?
 
artmedia70:
Comment rechercher des fractales ?

Je recherche les fractales en utilisant l'indicateur ZIGZAG-FRACTALS avec cette fonction :

void GetSignal()
  {
  int UpCount = 0, DnCount = 0;                                        // счетчик пиков ЗЗ
  int i = 0;                                                              // счетчик баров
  double ZZFirst = 0;                            // Значение первого найденного экстремума
  ArrayInitialize(ZZVUp, 0);                       // Значения верхних экстремумов зигзага
  ArrayInitialize(ZZVDn, 0);                         //Значения нижних экстремумов зигзага
  
  while(i < Bars && (UpCount < 2 || DnCount < 2))
    {
    double ZZCur = iCustom(NULL,0,"BW ZIGZAG-FRACTALS_2",0,i);
    if(ZZCur != 0)                                                   // найден экстремум
      {
      if(ZZFirst != 0)                             // Это не первый найденный экстремум
        {
        if(ZZCur == High[i] && UpCount < 2)
          {
          ZZVUp[UpCount] = ZZCur;
          ZZNUp[UpCount] = i;
          UpCount++;
          }         
          if(ZZCur == Low[i] && DnCount < 2)
            {
            ZZVDn[DnCount] = ZZCur;
            ZZNDn[DnCount] = i;
            DnCount++;
            }         
        }
      else
        ZZFirst = ZZCur; 
      }
    i++;
    } 
  if(i == Bars) return;                           // Последний посчитанный бар запоминаем
  
  }
 

Maintenant j'ai ajouté aux lignes : if(ZZCur == High[i] && UpCount < 2) et if(ZZCur == Low[i] && DnCount < 2) vérifiant la prochaine fractale plus haute ou plus basse que la première trouvée.

Nous avons les lignes suivantes

if(ZZCur == High[i] && ZZCur > ZZFirst && UpCount < 2) and

if(ZZCur == Low[i] && ZZCur < ZZFirst && DnCount < 2)

Mais en fin de compte, la recherche est en quelque sorte inadéquate :(

Dans l'image, une ligne blanche épaisse montre comment cela devrait être et une ligne verte fine montre comment c'est fait...


 
Shuba:

Je recherche les fractales en utilisant l'indicateur ZIGZAG-FRACTALS avec cette fonction :

Essayez de faire une recherche avec cette fonction :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.08.2008                                                     |
//|  Описание : Возвращает номер бара фрактала по его номеру.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
int GetFractalBar(string sy="0", int tf=0, int nf=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;

  for (i=2; i<k; i++) {
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}

Cette fonction renvoie le numéro de barre de la fractale. D'abord vous l'appelez avec le paramètre nf = 0 - la dernière fractale sera trouvée, et ensuite vous appelez cette fonction dans la boucle, où nf = compteur de cycles de 1 à ... aussi longtemps que nécessaire. Dans le corps de la boucle, vérifiez si la prochaine fractale trouvée correspond aux critères dont vous avez besoin et si c'est le cas, quittez la boucle. Après l'analyse, vous aurez les numéros de barre de deux fractales dont vous avez besoin et vous pourrez en faire ce que vous voulez.

 
artmedia70:

Essayez de faire une recherche avec cette fonction :

La fonction renvoie le numéro de barre de la fractale. D'abord vous l'appelez avec le paramètre nf = 0 - la dernière fractale sera trouvée, et ensuite vous appelez cette fonction dans la boucle, où nf = compteur de cycles de 1 à ... aussi longtemps que nécessaire. Dans le corps de la boucle, vérifiez si la prochaine fractale trouvée correspond aux critères dont vous avez besoin et si c'est le cas, quittez la boucle. Après l'analyse, vous aurez les numéros de barre de deux fractales dont vous avez besoin et vous pourrez en faire ce que vous voulez.


Merci) Je vais l'essayer maintenant.
 
Vinin:


Dans le testeur ou sur la démo ?

Dans le testeur le point sur les autres instruments sera 0


C'était dans le testeur,... Je n'ai pas eu d'informations à ce sujet, mais je suis sûr que cela me sera utile. Par conséquent, j'ai fait beaucoup de difficultés avec mon code de chalutage et j'ai pris la fonction de surveillance des paires de chaluts de KimIV. Maintenant, tout fonctionne sur la démo ;)

Merci à tous pour votre aide, vos explications sont très utiles.

 

Il semble avoir résolu le problème, mais la question demeure...

Comment désinitialiser une variable pour la réutiliser ?

 

Vous ne pouvez pas, quand vous initialisez une variable, cela alloue juste une zone de RAM, alors pourquoi la réaffecter ? Il suffit de remettre la variable à zéro, et de l'utiliser autant de fois que vous le souhaitez. En fait, quel est le problème ? Pourquoi désinitialiser une variable ? Ça n'a pas de sens.

 
ToLik_SRGV:

Pourquoi désinitialiser une variable ?



Condition si

for(int a=0;a<8;a++)

ici nous faisons quelque chose

sinon si une autre condition

for(int a=0;a<8;a++)

faire autre chose.

Il ne s'agit pas de multiplier les variables, les conditions et les compteurs.