OBJ_VLINE - page 3

 

Merci beaucoup Marco pour votre aide, pour une raison quelconque, cela fonctionne.

J'ai configuré l'heure au format 'D', puis j'ai affiché cette information sous forme d'alerte, ce qui correspond à l'heure de la flèche.

la ligne en V est toujours créée sur la bougie actuelle ... voir la capture d'écran.


Voici le code que j'ai utilisé

ObjectDelete(0,"v_line1");
         ObjectDelete(0,"v_line2");
        
        
         datetime TimeExit_SymSymbol = (datetime) ObjectGetInteger(0, Exit_SymSymbol, OBJPROP_TIME1);
         MqlDateTime str1;
         TimeToStruct(TimeExit_SymSymbol,str1);
         int Year = str1.year;
         int Month = str1.mon;
         int Day = str1.day;
         int Hour = str1.hour;
         int Minutes = str1.min;
         int Seconds = str1.sec;
        
         string V1DateString= "D'"+str1.year+"."+str1.mon+"."+str1.day+" "+ str1.hour+":" + str1.min+"'";//+":"+str1.sec+"'";
         
         ObjectCreate(0, "v_line1", OBJ_VLINE, 0, V1DateString, High[0]);
         ObjectCreate(0, "v_line2", OBJ_VLINE, 0, StringToTime(V1DateString), High[0]);
         Alert(V1DateString);


 
Vline 50 bars after the current time/bar
Vline 50 bars after the current time/bar
  • 2018.03.31
  • www.mql5.com
Hi there, I come to you to ask you : How can i draw a VLINE on the 50th (or Xth) bar in the future...
 
Marco vd Heijden:
Voici un sujet connexe: https://www.mql5.com/en/forum/233876

J'ai déjà des lignes en V sur le graphique depuis que je connais le décalage, dans le sujet du lien, ils ont dessiné les lignes en V en utilisant le décalage.

Dans mes messages précédents, j'ai mentionné que je perdais les lignes en V que j'avais créées lors du redémarrage du VPS ou pendant les week-ends ou parfois lors du redémarrage de MT4, alors je sauvegarde les dates des lignes en V pour tenter de les recréer plus tard si elles ont été perdues.

Il semble que MT4 n'ait pas la possibilité de créer des lignes de v à partir de dates de texte ou que personne n'ait encore trouvé comment faire.

 
Alpha Beta:

Dans mes messages précédents, j'ai mentionné que je perdais les lignes de vente que j'avais créées lors du redémarrage du VPS ou pendant les week-ends ou parfois lors du redémarrage de MT4, donc je sauvegarde les dates des lignes de vente pour essayer de les recréer plus tard si elles ont été perdues.

Si vous avez enregistré les dates comme :

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

Ici, pour recréer les v-lines, vous n'avez pas besoin de séparer les chiffres des secondes deTimeExit_SymSymbol ... letravail est fait parObjectCreate() lui-même, car il ne prend pas en compte les secondes.

Vous pouvez simplifier vos codes en :

ObjectDelete(0,"v_line1");
ObjectCreate(0, "v_line1", OBJ_VLINE, 0, TimeExit_SymSymbol, 0);
 

Eh bien, j'ai rapidement essayé un script et cela dessine certainement la ligne dans l'avenir.

//+------------------------------------------------------------------+
//|                                                        Vline.mq4 |
//|        Copyright 2019, MarcovdHeijden, MetaQuotes Software Corp. |
//|                   https://www.mql5.com/en/users/thecreator1/news |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MarcovdHeijden, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/en/users/thecreator1/news"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- assemble time parameter
   datetime time=Time[0]+50*PeriodSeconds();
//--- create v line
   VLineCreate(0,"V-Line-"+TimeToString(time,TIME_DATE),0,time);
//---   
  }
//+------------------------------------------------------------------+ 
//| Create the vertical line                                         | 
//+------------------------------------------------------------------+ 
bool VLineCreate(const long            chart_ID=0,// chart's ID 
                 const string          name="VLine",      // line name 
                 const int             sub_window=0,      // subwindow index 
                 datetime              _time=0,// line time 
                 const color           clr=clrRed,        // line color 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // line style 
                 const int             width=1,           // line width 
                 const bool            back=false,        // in the background 
                 const bool            selection=false,// highlight to move 
                 const bool            ray=true,          // line's continuation down 
                 const bool            hidden=true,       // hidden in the object list 
                 const long            z_order=0)         // priority for mouse click 
  {
//--- if the line time is not set, draw it via the last bar 
   if(!_time)
      _time=TimeCurrent();
//--- reset the error value 
   ResetLastError();
//--- create a vertical line 
   if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,_time,0))
     {
      Print(__FUNCTION__,
            ": failed to create a vertical line! Error code = ",GetLastError());
      return(false);
     }
//--- set line color 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line display style 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true) 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the line by mouse 
//--- when creating a graphical object using ObjectCreate function, the object cannot be 
//--- highlighted and moved by default. Inside this method, selection parameter 
//--- is true by default making it possible to highlight and move the object 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of displaying the line in the chart subwindows 
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY,ray);
//--- hide (true) or display (false) graphical object name in the object list 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution 
   return(true);
  }
//+------------------------------------------------------------------+ 
//| Move the vertical line                                           | 
//+------------------------------------------------------------------+ 
bool VLineMove(const long   chart_ID=0,// chart's ID 
               const string name="VLine",// line name 
               datetime     _time=0) // line time 
  {
//--- if line time is not set, move the line to the last bar 
   if(!_time)
      _time=TimeCurrent();
//--- reset the error value 
   ResetLastError();
//--- move the vertical line 
   if(!ObjectMove(chart_ID,name,0,_time,0))
     {
      Print(__FUNCTION__,
            ": failed to move the vertical line! Error code = ",GetLastError());
      return(false);
     }
//--- successful execution 
   return(true);
  }
//+------------------------------------------------------------------+ 
//| Delete the vertical line                                         | 
//+------------------------------------------------------------------+ 
bool VLineDelete(const long   chart_ID=0,// chart's ID 
                 const string name="VLine") // line name 
  {
//--- reset the error value 
   ResetLastError();
//--- delete the vertical line 
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": failed to delete the vertical line! Error code = ",GetLastError());
      return(false);
     }
//--- successful execution 
   return(true);
  }
//+------------------------------------------------------------------+ 
 
Marco vd Heijden:

Eh bien, j'ai rapidement essayé un script et cela dessine certainement la ligne dans l'avenir.

Cher Marco,

Vous utilisez le décalage relatif à la barre actuelle, ce qui est la même méthode que j'ai utilisée pour créer les lignes en V pour mes graphiques, cependant le problème est de créer la ligne en V sans connaître le décalage et sans se référer à l'heure/barre actuelle, le problème est de créer les lignes en V en connaissant UNIQUEMENT l'heure/la date.

Etant donné que je perds les V-Lines parfois lorsque le VPS redémarre et d'autres fois pendant le week-end, c'est pourquoi la seule option que j'ai trouvée est de sauvegarder l'heure/la date des lignes sur le graphique puis d'essayer de les recréer à nouveau, sauvegarder le décalage ne sera pas d'une grande aide au fur et à mesure que les barres progressent et il y a aussi les barres du week-end .

Selon le MT4 (https://www.mql5.com/en/docs/objects/objectcreate), la ligne V peut être créée en utilisant uniquement l'heure et la date. J'aimerais voir comment cela se fait car je ne l'ai vu nulle part et je me suis fatigué sans succès.

Documentation on MQL5: Object Functions / ObjectCreate
Documentation on MQL5: Object Functions / ObjectCreate
  • www.mql5.com
The function creates an object with the specified name, type, and the initial coordinates in the specified chart subwindow. During creation up to 30 coordinates can be specified. The function returns true if the command has been successfully added to the queue of the specified chart, or false otherwise. If an object has already been created, an...
 

J'ai enfin compris comment faire

Voici le code si quelqu'un veut dessiner une ligne en V en utilisant uniquement l'heure et la date.

         // InputDateTime= is the time you want to use to draw the VLine
       
         datetime TimeVLineFile = (datetime) ObjectGetInteger(0, InputDateTime, OBJPROP_TIME1);
         MqlDateTime str1;
         TimeToStruct(TimeVLineFile ,str1);
         int Year = str1.year;
         int Month = str1.mon;
         int Day = str1.day;
         int Hour = str1.hour;
         int Minutes = str1.min;
         int Seconds = str1.sec;
        
      
   
         string VLineDateFormat= str1.year+"."+str1.mon+"."+str1.day+" "+ str1.hour+":" + str1.min; 
         
         
         ObjectCreate(0, "L3", OBJ_VLINE, 0, StringToTime(VLineDateFormat), High[0]);
 
Alpha Beta:

J'ai enfin compris comment faire

Voici le code si quelqu'un veut dessiner une ligne en V en utilisant uniquement l'heure et la date.

  1. Ce n'est pas comme ça que ça se passe. Tout ce que vous avez fait, c'est
    1. Prenez une date et convertissez-la en structure.
    2. Prenez le struct et convertissez-le en une chaîne de caractères (sans les secondes).
    3. Prenez la chaîne et reconvertissez-la en date d'origine (sans les secondes).
    datetime TimeVLineFile = (datetime) ObjectGetInteger(0, InputDateTime, OBJPROP_TIME1);
    MqlDateTime str1;
    TimeToStruct(TimeVLineFile ,str1);
    int Year = str1.year;
    int Month = str1.mon;
    int Day = str1.day;
    int Hour = str1.hour;
    int Minutes = str1.min;
    int Seconds = str1.sec;
    
    string VLineDateFormat= str1.year+"."+str1.mon+"."+str1.day+" "+ str1.hour+":" + str1.min;   
    
    ObjectCreate(0, "L3", OBJ_VLINE, 0, StringToTime(VLineDateFormat), High[0]);

  2. Si tout ce que vous vouliez était de supprimer les secondes, voici comment faire :
    datetime  TimeVLineFile = (datetime) ObjectGetInteger(0, InputDateTime, OBJPROP_TIME1);
    datetime TimeVLineSansSeconds = TimeVlineFile - TimeVlineFile % 60;
    
    ObjectCreate(0, "L3", OBJ_VLINE, 0, TimeVLineSansSeconds, High[0]);
 
William Roeder:
  1. Ce n'est pas comme ça que ça se passe. Tout ce que vous avez fait est
    1. Prenez une date et convertissez-la en structure.
    2. Prenez le struct et convertissez-le en une chaîne de caractères (sans les secondes).
    3. Prenez la chaîne et reconvertissez-la en date d'origine (sans les secondes).

  2. Si tout ce que vous vouliez était de supprimer les secondes, voici comment faire :

Si vous avez regardé mes messages précédents, vous verrez que j'ai essayé d'enlever les secondes, mais cela n'a pas fonctionné, cependant après la conversion le code a fonctionné, je ne suis pas sûr de ce qui n'allait pas,

J'aime votre version du code, elle est simple, élégante et fonctionne bien, merci.

 
C'est la première fois que j'utilise des articles graphiques dans un pointeur. J'aurais besoin de tracer une ligne verticale ordinairement dans l'intervalle "22:00". Pourriez-vous m'orienter vers une réponse ?