Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 445

 
Artyom Trishkin:

Donc, lisez iCustom() à droite de l'index de la première boucle.

Une autre question est que vous avez besoin des données de la barre actuelle vers la gauche. C'est pourquoi je dis - lisez de zéro à la valeur trouvée, mais pas plus que rates_total-1.

Lecture uniquement lorsque la limite>1

D'autres fois, il n'y a pas de nouvelles données, et l'indice de la barre dont vous avez besoin ne changera pas.

Ce n'est pas le cas, mais les numéros de barre des flèches les plus proches dans le commentaire sont corrects.

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<1) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) 
     {
      limit=rates_total-1;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--) 
     {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,i),Digits)!=EMPTY_VALUE)
           {
            num_buy=i;

           }
//
      if(num_buy==10)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",1,i),Digits)!=EMPTY_VALUE
            )
           {
            num_sell=i;

           }
      if(num_sell==10)
        {
         BufferDN[i+1]=high[i+1]+distance*MyPoint;

        }
     
      Comment(num_buy,"num_sell",num_sell);
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
 
mila.com:

Il ne veut pas.

Lisez-vous ce que j'écris ?

L'autre question est que vous voulez les données de la barre actuelle vers la gauche. C'est pourquoi je dis - lisez de zéro à la valeur trouvée, mais pas plus que rates_total-1.

Lecture seulement à la limite>1

 
Artyom Trishkin:

Lisez-vous ce que j'écris ?

L'autre question est que vous avez besoin des données de la barre actuelle vers la gauche. C'est pourquoi je dis - lisez de zéro à la valeur trouvée, mais pas plus que rates_total-1.

Lecture seulement à la limite>1

N'est-ce pas moi qui l'ai fait ?
si(limite>1)
{
limit=rates_total-1 ;

 
mila.com:

N'est-ce pas ce que j'ai fait ?
si(limite>1)
{
limit=rates_total-1 ;

C'est ce que vous avez fait ensuite :

for(int i=limit; i>=0; i--) 

De quoi je parlais ?

 
Artyom Trishkin:

Voici ce que vous avez fait ensuite :

Qu'est-ce que je disais ?

Lecture à la limite>1

for(int i=limit; i>1; i--) 

Je ne sais pas comment le faire correctement ?

 
mila.com:

Lecture à la limite>1

Je ne sais pas comment le faire correctement ?

C'est pourquoi je dis - lisez de zéro à la valeur trouvée, mais pas plus que rates_total-1.
 
Artyom Trishkin:
C'est pourquoi je dis de lire à partir de zéro pour trouver le bon, mais pas plus que rates_total-1.

Je te le dis, je ne sais pas comment faire. Montrez-moi, s'il vous plaît.)

 
mila.com:

Je vous l'ai dit, je ne sais pas comment faire. Montrez-moi, s'il vous plaît.)

if(limit>1)
  {
   for(int i=0; i<limit; i++) 
     { 
      // тут поиск до нужного вам бара. Нашли - запомнили бар или поставили точку куда нужно и break;
     }
  }

Ce cycle n'ira que jusqu'à la barre que vous voulez (si elle a été trouvée), ou toute l'histoire ira jusqu'à la limite.

 
Artyom Trishkin:

Ce cycle sera seulement jusqu'à la barre que vous voulez (si elle est trouvée), ou pour l'ensemble de l'histoire, jusqu'à la limite.

moi, assez mauvais, ne montre rien.

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<1) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) 
     {
      limit=rates_total-1;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
  if(limit>1)
  {
   for(int i=0; i<limit; i++) 
     { 
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,i),Digits)!=EMPTY_VALUE)
           {
            num_buy=i;

           }
//
      if(num_buy==10)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",1,i),Digits)!=EMPTY_VALUE
            )
           {
            num_sell=i;

           }
      if(num_sell==10)
        {
         BufferDN[i+1]=high[i+1]+distance*MyPoint;

        }
     
      Comment(num_buy,"num_sell",num_sell);
     }
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
 
mila.com:

Je suis vraiment mauvais, ça ne montre rien.

Je ne comprends toujours pas : que voulez-vous trouver et afficher ? Juste en mots - sans code.

Vous êtes en train d'écrire :

Bonjour, aidez-moi, s'il vous plaît.

Je veux, à tout moment, connaître le numéro de la barre où se trouve la flèche indicatrice.

Dans l'exemple, j'ai essayé de remplir le tampon si la flèche se trouve sur la dixième barre.

Voici la question qui se pose d'emblée : pourquoi la cherchez-vous à la dixième barre ? Et d'une manière générale, sur quelle barre voulez-vous vous placer ? Et quelle flèche ? Le tout dernier ? Ou les deux derniers - le supérieur et l'inférieur ? Ou connaître la barre de la flèche souhaitée par son numéro de droite à gauche ?

Ce n'est pas clair.

Et attachez l'indicateur entier, pas OnCalculate()