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

 
mila.com:

Bonjour.

Veuillez m'aider à afficher les données d'un fichier sous forme d'histogramme.

Dans le fichier "file.txt", une date correspond à un numéro, comme ceci :

29.03.2017. 574391

30.03.2017. 741308

31.03.2017. 614367

Je récupère les données du fichier et les imprime, comme ceci :


Histogramme par taille de barre pour le faire ressembler à un indicateur )

Vous mettez donc les données dans le tampon graphique, et non sur l'impression. Déterminez la date à partir de laquelle l'histogramme doit être établi et placez-y les données.
 
-Aleks-:

Ainsi, vous mettez les données dans le tampon graphique, pas sur l'impression. Déterminez la date à partir de laquelle vous souhaitez que l'histogramme soit tracé et placez-y les données.

C'est là toute la difficulté.

Je l'ai imprimé pour qu'il soit clair que je récupère les données du fichier en général.

Je n'arrive pas à trouver comment les affecter aux dates correspondantes.

 
mila.com:

C'est là toute la difficulté.

Je l'ai imprimé pour qu'il soit clair que je récupère les données du fichier en général.

Je n'arrive pas à trouver comment les affecter aux dates correspondantes.

Prenez la date du dossier, trouvez le numéro de barre de la date et dessinez...
 
Alexey Viktorov:
Prenez la date du dossier, trouvez le numéro de barre de la date et dessinez dessus...

Comment faites-vous exactement ?

Montrez-moi s'il vous plaît.

 
mila.com:

Comment faites-vous exactement ?

Montrez-moi, s'il vous plaît.

Utilisez les fonctions de chaîne de caractères. En particulier

string  StringSubstr(
   string  string_value,     // строка
   int     start_pos,        // с какой позиции начать
   int     length=0          // длина извлекаемой строки
   );

extrait 10 caractères de la position zéro et convertit la chaîne en date.

Mais s'il n'y a pas d'heure d'ouverture de barre dans la chaîne, les histogrammes ne seront pas sur chaque barre si nous l'exécutons sur un graphique autre que D1.

Строковые функции - Справочник MQL4
Строковые функции - Справочник MQL4
  • docs.mql4.com
Строковые функции - Справочник MQL4
 

Mes amis, s'il vous plaît aidez-moi à écrire une fonction pour calculer le nombre de barres à partir de la barre où l'ordre a été ouvert.

Par exemple : si nous avons un ordre ouvert sur la barre 5, la fonction doit retourner 5.

 
Bek001:

Veuillez m'aider à écrire une fonction permettant de calculer le nombre de barres à partir de la barre où l'ordre a été ouvert.

Par exemple : si nous avons un ordre ouvert sur la barre 5, la fonction doit retourner 5.

int shift=iBarShift(NULL,PERIOD_СURRENT,OrderOpenTime());
 
Alexey Viktorov:

Utilisez les fonctions de chaîne de caractères. En particulier

extrait 10 caractères de la position zéro et convertit la chaîne en date.

Mais s'il n'y a pas d'heure d'ouverture de barre dans la chaîne, l'histogramme ne sera pas sur chaque barre si je l'exécute sur un graphique autre que D1.

Merci, j'extrais la date et la valeur séparément.

Maintenant, comment je remplis le tampon avec ça ?

 for(int i=0; i<limit;i++){

string InpFileName="file.txt";
 ResetLastError(); 
  int file_handle=FileOpen(InpFileName,FILE_TXT|FILE_READ);
   
   if(file_handle!=INVALID_HANDLE) 
     { 
      PrintFormat("Файл %s открыт для чтения",InpFileName); 
      PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 
      //--- вспомогательные переменные 
      int    str_size; 
      string str,str_b1,str_dat1; 
      //--- прочитаем данные из файла 
      while(!FileIsEnding(file_handle)) 
        { 
         //--- узнаем сколько символов использовано для записи времени 
         str_size=FileReadInteger(file_handle,INT_VALUE); 
         //--- прочитаем строку 
         str=FileReadString(file_handle,str_size); 
         str_dat1= StringSubstr(str,0,10);
         str_b1= StringSubstr(str,12,6);
         //--- распечатаем строку 
         PrintFormat(str_dat1); 
         PrintFormat(str_b1);
        } 
      //--- закроем файл 
      FileClose(file_handle); 
      PrintFormat("Данные прочитаны, файл %s закрыт",InpFileName); 
     } 
   else 
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError()); 
    //}
   
      Range_Buffer[i]=//???
      }
 
mila.com:

Merci, j'extrais la date et la valeur séparément.

Maintenant, comment je remplis le tampon avec ça ?

Range_Buffer[i]=значение//???

Il faut que ce soit en boucle. La boucle while dans la boucle for est une perte de temps. Nous devons lire une ligne, en extraire la date et la valeur et travailler avec elles. Trouver le nombre de barres par heure et y mettre la valeur. Et seulement après cela, passez à l'entrée suivante.

 
mila.com:

C'est là toute la difficulté.

Je l'ai imprimé pour qu'il soit clair que je récupère les données du fichier en général.

Je n'arrive pas à trouver comment les affecter aux dates correspondantes.

Un enregistrement correspond-il à une barre ou non ?