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

 
Aleksei Stepanenko:

Vous devez vérifier, il n'est pas certain que vous ayez bars_quantity ici.

J'ai modifié le code, mais le tableau est toujours hors limites au même endroit.

double GetExtremumZigZagPriceHigh(string symbol="",ENUM_TIMEFRAMES timeframe=0,int extremum_number=0)//,int depth=12,int deviation=5,int backstep=3)
  {
   if(symbol=="") //Если symbol = "" , то..
      symbol=Symbol(); //Присвоить переменной symbol значение текущего символа на графике.

//Объявить необходимые переменные:
   double price[];                                                 //Цена экстремума выбранная из массива таймсерии.
//datetime time[];
   int    count;                                                   //Счетчик цикла.
int bars_quantity=1000; //Количество баров на графике.
int extremum_count=0;                                           //Счетчик экстремумов.

   ArraySetAsSeries(price,true);                   //Устанавить флаг, чтобы индексация массива производилась как в таймсериях.
  
   if(CopyBuffer(handle,1,0,bars_quantity,price)<=0) return(0);     //Скопировать в динамический массив price[] цены указанного количества баров.


   for(count=1; count<bars_quantity; count++) //Запустить цикл, который будет бежать по каждому бару.
     {
      if(price[count]!=0) //Если Цена Зигзага есть, то есть не равна нулю, то..
        {
         extremum_count++;        //Увеличить счетчик экстремумов на одну единицу.

         if(extremum_count>extremum_number) //Если счетчик экстремумов превысил значение указанного номера экстремума, то..
            return(price[count]);                 //Вернуть эту цену.
        }
     }
     
//Print("GetExtremumZigZagPrice(): Экстремум ЗигЗага ",extremum_number," не найден"); //А до тех пор, пока ЗигЗаг не показывает цену,
   return(0);                                                                          //Печатать Print, и возвращать ноль.
  }
 

S'il n'y a pas d'erreur, cela ne signifie pas que toute la quantité de données est présente. La quantité de barres est juste votre commande et ce qui va donner est une autre question.

int elements=CopyBuffer(handle,1,0,bars_quantity,price);
for(count=1; count<elements; count++) 
 
Aleksei Stepanenko:

S'il n'y a pas d'erreur, cela ne signifie pas que toute la quantité de données est présente. La quantité de barres est juste votre commande et ce qui va donner est une autre question.

Merci.
 

Bonne journée à vous tous !

Il existe un code simple dans MQL4 qui initialise chaque valeur d'un tableau et à chaque itération imprime la valeur de chaque élément du tableau dans la fonction Print(). A la fin de cette boucle, Print() s'imprimera 30 fois dans le journal.

int P1;
double LoY[31];
void OnTick()
{
if (P1==0)
{
for(int r=0; r<31;r++)
{
LoY[r]=1.6104+(r*2)*0.0001;
Print("-------------------------------------LoY[r]--------------=",  LoY[r]);
P1=1;
}
}
}

QUESTION .

Quelle construction de langage en MQL4 ou quelle fonction en MQL4 dans le code ci-dessus Print() imprimera() une seule fois à la fin du cycle avec tous les éléments du tableau remplis sur la même ligne, c'est-à-dire qu'il prendra la forme suivante

Print("---LoY[0]--", 1.6104, "---LoY[1]--". , 1.6106,"---LoY[2]--", 1.6108,"---LoY[3]--", 1.6110,"---LoY[4]--", 1.6112,................"---LoY[30]--", 1.6164) ;

Je vous serais très reconnaissant si vous pouviez écrire un exemple d'un tel code et pas seulement l'expliquer en mots.
Merci pour votre aide.

 
string str="";

for(int r=0; r<31;r++)
   {
   LoY[r]=1.6104+r*0.0001;
   str+="--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";
   }
Print(str);
 
ANDREY:

Bonne journée à vous tous !

Il existe un code simple dans MQL4 qui initialise chaque valeur d'un tableau et à chaque itération imprime la valeur de chaque élément du tableau dans la fonction Print(). A la fin de cette boucle, Print() s'imprimera 30 fois dans le journal.

QUESTION .

Quelle construction de langage en MQL4 ou fonction en MQL4 dans le code ci-dessus Print() imprimera() seulement 1 fois après la fin de la boucle avec tous les éléments du tableau remplis sur la même ligne, c'est-à-dire qu'il prendra la forme suivante

Print("---LoY[0]--", 1.6104, "---LoY[1]--". , 1.6106,"---LoY[2]--", 1.6108,"---LoY[3]--", 1.6110,"---LoY[4]--", 1.6112,................"---LoY[30]--", 1.6164) ;

Je vous serais très reconnaissant si vous pouviez écrire un exemple d'un tel code et ne pas vous contenter de l'expliquer en mots.
Merci pour votre aide.

int P1 = 0; // Несмотря ни на что не забывайте инициализировать переменные
string stroka = "";
double LoY[31];
void OnTick()
{
if (P1==0)
{
for(int r=0; r<31;r++)
{
LoY[r]=1.6104+r*0.0001;
stroka += "---LoY[r] = "+DoubleToString(LoY[r], 4);
//Print("-------------------------------------LoY[r]--------------=",  LoY[r]);
P1=1;
}
Print(stroka);
}
}
 
Aleksei Stepanenko:

Combien de secondes d'avance sur moi ? ))))

 
Plus d'aides aujourd'hui
 
Alexey Viktorov:

Merci pour votre aide

 
Aleksei Stepanenko:

Merci pour votre aide.

Raison: