OBJ_VLINE - page 2

 
Il n'est pas non plus nécessaire de recréer l'objet à chaque tic-tac, ce qui inonderait le journal des erreurs d'un message 4200 "Object already exists" (objet déjà existant). Il est donc préférable de créer l'objet une fois dans la fonction "on init", puis de le déplacer ultérieurement à la date souhaitée.
 
Marco vd Heijden:
De plus, il n'est pas nécessaire de recréer l'objet à chaque tick, ce qui inonderait le journal d'erreurs avec un 4200 Object already exists, donc à la place, créez l'objet dans la fonction on init une fois et ensuite vous pouvez le déplacer à la date désirée plus tard.

pour éviter ce problème :

ObjectDelete(0,"v_line");
ObjectCreate(0,"v_line",OBJ_VLINE,0,D'2019.06.04 16:00',0);
 

Vous pouvez également vérifier en amont si l'objet existe déjà :

ObjectFind(...
 

Marco, Paul

Merci beaucoup pour votre réponse et votre aide.

Cependant, le problème que je rencontre actuellement est de convertir l'information (date) que je récupère du fichier et de l'utiliser pour dessiner les lignes.

Dans le code, le fichier est enregistré sous # Lines dans la section des fichiers MT4 et la date enregistrée est par exemple 2019.05.18 05:30:00.

première étape, j'enlève les 3 derniers chiffres de la date et je la convertis en 2019.05.18 05:30 ... maintenant, l'étape suivante est ce que je ne parviens pas à faire pour que l'heure soit au format 'D'.

J'ai essayé ce qui suit

 ObjectCreate(0,"v_line",OBJ_VLINE,0,"D'"+2019.05.18 05:30+"'",0);

mais cela n'a pas fonctionné, j'ai donc converti la chaîne de caractères en heure.

ObjectCreate(0,"v_line",OBJ_VLINE,0,StringToTime("D'"+2019.05.18 05:30+"'"),0);

Dans les deux cas, la ligne est créée à 1970.01.01 00:00. Le problème est donc de convertir la date du fichier en quelque chose de significatif que MT4 peut utiliser pour créer la ligne V.

Je joins le code, peut-être pouvez-vous repérer mon erreur ... dans le code, j'ai créé deux lignes mais aucune des lignes n'est créée à la date que je récupère du fichier.

Dossiers :
TestDates.mq4  9 kb
 

vous faites cela mal en écrivant la date entre guillemets

comme elle l'est :

D'2019.05.18 05:30'


ObjectCreate(0,"v_line",OBJ_VLINE,0,D'2019.05.18 05:30',0);
 
StringToTime("2019.05.18 05:30") == D'2019.05.18 05:30'

Les deux sont des dates. Tout comme

StringToDouble("1.234") == 1.234
sont tous deux des doubles.
 
paul selvan:

vous faites cela mal en écrivant la date entre guillemets

comme elle l'est :

D'2019.05.18 05:30'


Je fais cela parce que je convertis le texte dans un format de date commeWilliam Roeder l'a illustré ci-dessus. Je ne suis pas sûr de l'erreur que j'ai commise puisque j'ai enregistré la date correctement et l'ai convertie au format 'D', mais je ne peux toujours pas créer la ligne, bien que si j'ai copié la date du fichier et créé manuellement une ligne, la date est correcte.

 
Je pense que vous aurez plus de chance de sauvegarder et de lire le temps sous forme de valeurs entières longues, comme les secondes depuis l'époque, au lieu de ces conversions de chaînes de caractères en dates.
 
Marco vd Heijden:
Je pense que vous aurez plus de chance de sauvegarder et de lire le temps en tant que valeurs entières longues comme les secondes depuis l'époque au lieu de ces conversions de chaîne de caractères en date.

La date est sauvegardée avec les secondes, par exemple c'est l'heure tirée du fichier 2019.05.19 15:00:00

Cependant, lors de mes tests, j'ai découvert que si j'utilisais la date avec les secondes, cela créerait la ligne en1970.01.01, c'est pourquoi j'ai supprimé les secondes, mais je n'ai toujours pas réussi à créer le fichier à l'emplacement correct de la date.

 

Dans ce cas, je pense que vous pouvez également examiner la structure temporelle :

struct MqlDateTime 
  { 
   int year;           // Year 
   int mon;            // Month 
   int day;            // Day 
   int hour;           // Hour 
   int min;            // Minutes 
   int sec;            // Seconds 
   int day_of_week;    // Day of week (0-Sunday, 1-Monday, ... ,6-Saturday) 
   int day_of_year;    // Day number of the year (January 1st is assigned the number value of zero) 
  };

Vous pouvez utiliser

TimeToStruct()

Fonction comme suit :

datetime TimeExit_SymSymbol = (datetime) ObjectGetInteger(0, Exit_SymSymbol, OBJPROP_TIME1);

MqlDateTime str1;

TimeToStruct(TimeExit_SymSymbol,str1); 

Ensuite, vous pouvez extraire toutes les valeurs souhaitées à partir de cela.

int Year = str1.year;
int Month = str1.mon;
int Day = str1.day;
int Hour = str1.hour;
int Minutes = str1.min;
int Seconds = str1.sec;
Il s'agit de valeurs entières, donc pas de chaînes de caractères à manipuler.