[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 322

 
hoz:

int signal = GetGeneralSignal();


vous pouvez le remplacer par

   if(GetMa(2)-GetMa(1)<σ) return; else int cross=MathAbs(GetMA(2)-GetMA(1))/(GetMA(2)-GetMA(1));
   for (int i=i_AnyBarsToHistory; i>=1; i--){
                if(cross*(Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) cnt++; else cnt=0;
   }
   if(cnt >= i_sequentBarsСount){
                switch(cross+1){
                        case 0: OpenBuy(); break;
                        case 2: OpenSell(); break;
                }
   }

Vérifiez si cross=+1 ou -1 correspond à OpenBuy() ou OpenSell() (et close-open ou open-close). σ On nous attribue ici une certaine valeur infinitésimale, analogue au zéro.

Tommy27:

Au secours, je n'arrive pas à comprendre comment faire pour qu'un indicateur compare le nombre de barres les plus récentes et calcule combien d'entre elles étaient à la hausse, combien étaient à la baisse et combien étaient des pinbars et qui avait quels prix de fermeture/ouverture, haut/bas et volumes ?

Nous devons faire cela exactement dans l'indicateur.


Définissez CountedBars à une certaine fenêtre de chandeliers (par exemple 30), et faites un cycle de CountedBars avec décrémentation. A la hausse ou à la baisse, haussier ou baissier, regardez la différence de deux Close adjacents. La Pinbar examine le haut ou le bas local, et l'écart de ce haut ou bas par rapport aux valeurs adjacentes. Si l'écart dépasse un certain pourcentage que vous avez spécifié, il s'agit d'une pinbar.

 
Bon après-midi. Pouvez-vous me dire comment déterminer le croisement de 38.2 sur un objet en arc de Fibonacci?
 

Bonjour,

Joyeuses fêtes à tous !

J'ai un terminal de trading OEC qui a besoin d'un indicateur de spread simple.

Peut-être que quelqu'un peut écrire, ou au moins m'aider avec quelque chose.

Cela ressemble à ceci sur mt4

Dossiers :
 
ADGgeek:

Bonjour,

Joyeuses fêtes à tous !

J'ai un terminal de trading OEC qui a besoin d'un indicateur de spread simple.

Peut-être que quelqu'un peut écrire, ou au moins m'aider avec quelque chose.

Cela ressemble à ceci sur mt4


Je peux vous conseiller de demander sur le Spider. En fait, je ne peux que citer :

GaryKa:
Ajoutez une description de la ponctuation, et une définition de vos concepts (par exemple "votre numéro") etici. Et dans cette branche, n'aident que ceux qui ont leurs propres mains (et alors dans l'humeur)

Cela s'applique à tous. Je ne sais pas comment l'utiliser, mais je suis sûr que ça va marcher.

 

C'est ce que je cherchais, merci Garyka ! Joyeuses fêtes passées et à venir !

 

Joyeuses fêtes à tous !

Pouvez-vous me dire ce que signifie le terminal lorsqu'il indique uninit reason 5 dans l'onglet "experts" ?

Merci.

 
CYBOPOB:

Joyeuses fêtes à tous !

Pouvez-vous me dire ce que signifie le terminal lorsqu'il indique uninit reason 5 dans l'onglet "experts" ?

Merci.


https://docs.mql4.com/ru/constants/uninit
 
hoz:

C'est aussi simple que cela.


D'après ce que j'ai compris en comparant votre description avec votre code, ils divergent, car dans votre code, la sortie précoce de la boucle se produit lorsquei_seqentBarsCont:

hoz:

for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if (directionMA == CROSS_UP)
      {
         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt)
             cntDn++;
         if ((Close[i] - Open[i]) >= i_sizeOfTrandBar * pt)
             cntDn = 0;
                                                                                        
         if (i == 1)
            Print(" directionMA ", directionMA, "; i = ", i, "; Open[i] - Close[i] = ", Open[i] - Close[i], "; cntDn = ", cntDn);

         if (cntDn == i_sequentBarsСount)            //<--
             return (REQUIRED_SEQUENTIAL_BEARS_GOT); //<--
      }

      if (directionMA == CROSS_DN)
      {
         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)
             cntUp++;
         if ((Open[i] - Close[i]) >= i_sizeOfTrandBar * pt)
             cntUp = 0;
         if (i == 1)
            Print(" directionMA ", directionMA, "; i = ", i, "; Close[i] - Open[i] = ", Close[i] - Open[i], "; cntUp = ", cntUp);

         if (cntUp == i_sequentBarsСount)            //<--
             return (REQUIRED_SEQUENTIAL_BULLS_GOT); //<--
   }
hoz:

Si le cycle est de 30 à 3, alors le calcul va de l'indice 30 à l'indice 3, respectivement, inclus.

Si la barre ne correspond pas à l'indice requis, alors le compteur est remis à zéro, puis on analyse la situation, c'est-à-dire qu'on continue à calculer par le cycle, jusqu'à atteindre la barre d'indice 3.

 
gyfto:


D'après ce que j'ai compris en comparant votre description avec votre code, il y a une divergence, car dans votre code il y a une sortie précoce de la boucle lorsquei_seqentBarstCont:



Je comprends que vous avez probablement besoin d'un compteur, qui sera incrémenté après chaque barre calculée et lorsque sa valeur sera égale à i_AnyBarsToHistory, alors il sortira ce qui a été sorti jusqu'à ce point.

Je vais dire ce que je pense, et je vous répondrai.

 

C'est ce qui se passe :

//+-------------------------------------------------------------------------------------+
//| Расчитываем количество идущих один за одним баров одного признака                   |
//+-------------------------------------------------------------------------------------+
int LastCandlesType(int directionMA)
{
   int cntUp,                                                                           // Счётчик идущих друг за другом свечей с..
       cntDn,                                                                           // .. требуемыми признаками
       t;                                                                               // Счётчик всех просчитанных баров
       
   for (int i=i_AnyBarsToHistory; i>=1; i--, t++)
   {
      if (directionMA == CROSS_UP)                                                      // Если машки направлены вверх
      {
         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt)              // Если бар соответствует требуемым признакам..
             cntDn++;                                                                   // .. прибавим 1 к счётчику
         if ((Close[i] - Open[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntDn = 0;                                                                 // .. счётчик обнуляем
                                                                                        
         if (i == 1)
            Print(" directionMA ", directionMA, "; i = ", i, "; Open[i] - Close[i] = ", Open[i] - Close[i], "; cntDn = ", cntDn);

         if (t == i_AnyBarsToHistory)
         {
             if (cntDn == i_sequentBarsСount)                                                // Если cnt баров в подряд медвежьи..
                 return (REQUIRED_SEQUENTIAL_BEARS_GOT);                                     // .. Выходим из функции
         }
      }

      if (directionMA == CROSS_DN)                                                      // Если машки направлены вниз
      {
         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)              // Если бар соответствует требуемым признакам..
             cntUp++;                                                                   // .. прибавим 1 к счётчику
         if ((Open[i] - Close[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntUp = 0;                                                                 // .. счётчик обнуляем
         if (i == 1)
            Print(" directionMA ", directionMA, "; i = ", i, "; Close[i] - Open[i] = ", Close[i] - Open[i], "; cntUp = ", cntUp);

         if (t == i_AnyBarsToHistory)
         {
             if (cntUp == i_sequentBarsСount)                                                // Если cnt баров в подряд бычьи..
                 return (REQUIRED_SEQUENTIAL_BULLS_GOT);                                     // .. Выходим из функции
         }
      }
      return (REQUIRED_SEQUENTIAL_MISS);
   }
}

En fait, pas même une ligne n'est imprimée :

Print(" directionMA ", directionMA, "; i = ", i, "; Close[i] - Open[i] = ", Close[i] - Open[i], "; cntUp = ", cntUp);

Il y a donc probablement une sorte de bug dans ce qui précède.

La chose la plus intéressante est qu'une fois que j'ai ajouté un retour par défaut ici, cela fonctionne en quelque sorte tout le temps. Je veux dire la ficelle :

return (REQUIRED_SEQUENTIAL_MISS);

Bien qu'il soit évident que le code est élémentaire, et qu'il ne peut y avoir aucune erreur.