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

 
-Aleks-:

Avez-vous une entrée correspondant à une barre ou pas ?

Oui, ce sera une barre de l'histogramme sur PERIOD_D1 sur la barre du vingt-neuf mars.

29.03.2017. 574391

 

Le graphique à barres est correctement configuré si la date est écrite comme ceci

int shift=iBarShift(Symbol(),PERIOD_D1,"29.03.2017");
Range_Buffer[shift]= str_b1;

mais il n'est pas défini si je l'écris comme ceci

str_dat1= StringSubstr(str,0,10);//

int shift=iBarShift(Symbol(),PERIOD_D1,str_dat1);

Range_Buffer[shift]= str_b1;

La date(str_dat1) est imprimée correctement.

Quelle en est laraison?



 
mila.com:

En supprimant la boucle while, j'obtiens la première ligne comme ceci

S'il vous plaît, dites-moi ce qui ne va pas.

Nous devons vérifier ce que nous obtenons dans la variable str_dat1

En fait, le iBarShift devrait passer une date de type datetime, et non une chaîne. Peut-être qu'il accepte une chaîne propre comme date, alors qu'il n'accepte pas une variable ?

Il est préférable de convertir la chaîne reçue en un type de date.


ps Et une idée complètement folle pour le tester en écrivant

int shift=iBarShift(Symbol(),PERIOD_D1, (string)str_dat1);

Mais cela ne tient compte que de l'optionalité de mql4.

 
mila.com:

Le graphique à barres est correctement configuré si la date est écrite comme ceci

mais il n'est pas fixé si je l'écris comme ceci

La date(str_dat1) est imprimée correctement.

Quelle en est laraison?




La raison en est que la fonction iBarShift() doit transmettre le type de variable datetime, alors que vous transmettez un type String.

datetime  str_dat1=StringToTime(StringSubstr(str,0,10));// это дата
double str_b1=StringToDouble(StringSubstr(str,12,6)); // это значение

int shift=iBarShift(Symbol(),PERIOD_D1,str_dat1);

Range_Buffer[shift]=str_b1;

...

 
Alexey Viktorov:
Il est préférable de convertir la ligne reçue en type datetime.

Merci, met en place un graphique à barres.

J'ai une question : comment construire un histogramme sur toutes les lignes du fichier ?

J'ai trouvé dans l'aide, que le saut à la ligne suivante est FileSeek()

Mais je ne sais pas comment passer à la ligne suivante.

 
mila.com:

Merci, met en place un graphique à barres.

J'ai une question : comment construire un histogramme sur toutes les lignes du fichier ?

J'ai trouvé dans l'aide, que le saut à la ligne suivante est FileSeek()

Mais je ne sais pas comment passer à la ligne suivante.

Jusqu'à présent, ne met qu'une seule colonne


Aide )

Si vous ouvrez le fichier avant la boucle et ne le fermez pas avant la fin, à chaque itération de la boucle, la ligne suivante sera lue. Et vous pouvez fermer le fichier après la fin de la boucle.

FileSeek() déplace un pointeur non pas à la ligne suivante mais du nombre d'octets spécifié à partir du début, de la fin du fichier ou de la position actuelle du pointeur.

Pour le déplacer correctement, vous devez savoir combien d'octets une ligne occupe dans le fichier écrit.

 
mila.com:

Merci, met en place un graphique à barres.

J'ai une question : comment construire un histogramme sur toutes les lignes du fichier ?

J'ai trouvé dans l'aide, que le saut à la ligne suivante est FileSeek()

Mais je ne sais pas comment passer à la ligne suivante.

Jusqu'à présent, ne met qu'une seule colonne


Aide )

Je vous ai donné un lien vers un article décrivant tout cela avec des exemples. Il n'a pas semblé le lire...
 
Sergey Gritsay:


La raison est que la fonction iBarShift() a besoin de passer le type de variable datetime, alors que vous passez le type chaîne, essayez ceci

...

Merci, je vais le faire.

 
Alexey Viktorov:

Si vous ouvrez le fichier avant la boucle et ne le fermez pas, la ligne suivante sera lue à chaque itération de la boucle. Et vous pouvez fermer le fichier après la fin de la boucle.


Ça marche, merci.

 
Artyom Trishkin:
Je vous ai donné un lien vers un article qui décrit tout cela avec des exemples. Il n'a pas semblé le lire...

Je l'ai lu, mais je n'aurais jamais deviné qu'il fallait ouvrir le fichier avant la boucle ;)

Je ne l'ai probablement pas lu attentivement.)
Raison: