OBJ_VLINE - Seite 3

 

Vielen Dank Marco für die Hilfe, aus irgendeinem Grund funktioniert es.

Ich habe die Zeit im D'-Format konfiguriert, dann diese Information als Alarm angezeigt, der mit den Pfeilzeiten übereinstimmt.

die V-Linie wird immer noch auf der aktuellen Kerze erstellt .. siehe Screenshot


Dies ist der Code, den ich verwendet habe

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);


 
Hier ist ein verwandtes Thema:https://www.mql5.com/en/forum/233876
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:
Hier ist ein verwandtes Thema:https://www.mql5.com/en/forum/233876

Ich habe bereits v-Linien auf dem Chart, da ich wusste, dass die Verschiebung, in das Thema in den Link, den sie zog die v-Linien mit der Verschiebung

In meinen früheren Beiträgen habe ich erwähnt, dass ich die v-Linien, die ich erstellt habe, verliere, wenn der VPS neu startet oder am Wochenende oder manchmal beim Neustart von MT4, so dass ich die Daten der v-Linien speichere, um zu versuchen, sie später neu zu erstellen, wenn sie verloren gingen.

Es scheint, dass MT4 nicht die Möglichkeit hat, v-Zeilen aus Textdaten zu erstellen, oder niemand hat herausgefunden, wie das bisher gemacht wurde.

 
Alpha Beta:

In meinen früheren Beiträgen habe ich erwähnt, dass ich die v-Zeilen, die ich erstellt habe, verliere, wenn der VPS neu gestartet wird oder am Wochenende oder manchmal beim Neustart von MT4, so dass ich die Daten der v-Zeilen speichere, um sie später wieder zu erstellen, wenn sie verloren gegangen sind.

Wenn Sie die Daten gespeichert haben als :

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

Um die v-Zeilen wiederherzustellen, müssen Sie die Sekunden nicht vonTimeExit_SymSymbol abspalten.Diese Aufgabe wird vonObjectCreate() selbsterledigt, da es die Sekunden nicht berücksichtigt.

Sie können Ihre Codes vereinfachen durch:

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

Nun, ich habe schnell ein Skript ausprobiert, und das zieht sicherlich die Linie in die Zukunft.

//+------------------------------------------------------------------+
//|                                                        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:

Nun, ich habe schnell ein Skript ausprobiert und das zieht sicherlich die Linie in die Zukunft.

Lieber Marco,

Du verwendest die Verschiebung, die sich auf den aktuellen Balken bezieht, was die gleiche Methode ist, die ich zur Erstellung der V-Linien für meine Charts verwendet habe. Das Problem ist jedoch, die V-Linien zu erstellen, ohne die Verschiebung zu kennen und ohne sich auf den aktuellen Zeitpunkt/Balken zu beziehen, das Problem ist, die V-Linien zu erstellen, wenn man NUR die Uhrzeit/das Datum kennt

Da ich die V-Linien manchmal verliere, wenn der VPS neu startet und andere Male über das Wochenende, deshalb ist die einzige Option, die ich gefunden habe, die Zeit/Datum der Linien auf dem Chart zu speichern und dann zu versuchen, sie wieder neu zu erstellen, die Verschiebung zu speichern hilft nicht viel, da die Balken fortschreiten und es auch die Wochenendbalken gibt.

Laut MT4 (https://www.mql5.com/en/docs/objects/objectcreate) kann die V-Linie nur mit der Zeit/Datum erstellt werden. Ich würde gerne sehen, wie es gemacht wird, da ich es nirgends gesehen habe und ich müde bin, ohne Glück zu haben

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...
 

Endlich habe ich herausgefunden, wie es geht

hier ist der Code, falls jemand eine V-Linie nur mit Uhrzeit/Datum zeichnen möchte

         // 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:

Endlich habe ich herausgefunden, wie es geht

hier ist der Code, falls jemand jemals eine V-Linie nur mit der Zeit/Datum zeichnen wollte

  1. Das ist nicht die richtige Vorgehensweise. Alles, was Sie getan haben, war
    1. Nimm eine datetime und konvertiere sie in eine struct.
    2. Nehmen Sie die Struktur und konvertieren Sie sie in einen String (ohne die Sekunden).
    3. Nehmen Sie den String und konvertieren Sie ihn zurück in die ursprüngliche Datetime (ohne die Sekunden).
    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. Wenn Sie nur die Sekundenentfernen wollten, geht das so:
    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. So ist es nicht gemacht. Alles, was Sie getan haben, war
    1. Nehmen Sie eine Datetime und konvertieren Sie sie in eine struct.
    2. Nehmen Sie die Struktur und konvertieren Sie sie in einen String (ohne die Sekunden).
    3. Nehmen Sie den String und konvertieren Sie ihn zurück in die ursprüngliche Datetime (ohne die Sekunden.)

  2. Wenn Sie nur die Sekunden entfernen wollten, können Sie das folgendermaßen tun:

Wenn Sie sich meine früheren Beiträge angesehen haben, werden Sie sehen, dass ich die Sekunden entfernen wollte, aber es hat nicht funktioniert, aber nach der Konvertierung funktionierte der Code nicht sicher, was falsch war,

Ich mag deine Version des Codes, sie ist einfach, elegant und funktioniert gut, danke.

 
Dies ist mein erstes Mal, dass ich grafische Artikel in einem Zeiger verwende. Ich müsste normalerweise eine vertikale Linie in der Zwischenzeit "22:00" zeichnen, könnten Sie mich bitte zu einer Antwort führen?