OBJ_VLINE - página 3

 

Muito obrigado Marco pela ajuda, por alguma razão seu trabalho

Configurei a hora no formato D' , depois exibi essa informação como um alerta , que no entanto você pode ver que corresponde aos tempos das setas

a Linha V ainda é criada na vela atual ... ver foto da tela


Este é o código que eu usei

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


 
Aqui está um tópico relacionado: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:
Aqui está um tópico relacionado:https://www.mql5.com/en/forum/233876

Já tenho linhas v na tabela desde que conheci o turno, no tópico no link eles desenharam as linhas v usando o turno.

Em meus cargos anteriores mencionei que perdi as linhas v que criei quando o VPS reiniciou ou durante os fins de semana ou às vezes ao reiniciar o MT4 , então guardo as datas das linhas v na tentativa de recriá-las mais tarde se elas fossem perdidas.

Parece que o MT4 não tem a capacidade de criar linhas v a partir de datas de texto ou ninguém descobriu como foi feito ainda.

 
Alpha Beta:

Em meus cargos anteriores mencionei que perdi as linhas v que criei quando o VPS reiniciou ou durante os fins de semana ou às vezes ao reiniciar o MT4 , então guardo as datas das linhas v na tentativa de recriá-las mais tarde se elas fossem perdidas.

Se você salvou as datas como :

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

Aqui para recriar as linhas v você não precisa dividir os dígitos de segundos doTimeExit_SymSymbol ...o trabalho é feito pelo próprioObjectCreate(), porque não leva segundos em conta.

Você pode simplificar seus códigos por:

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

Bem, eu tentei rapidamente um roteiro e isso certamente atrai a linha para o futuro.

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

Bem, eu tentei rapidamente um roteiro e isso certamente atrai a linha para o futuro.

Caro Marco,

Você está usando o turno relevante para a barra atual, que é o mesmo método que usei para criar as Linhas V para meus gráficos, entretanto o problema é criar a Linha V sem saber o turno e sem se referir à hora/barra atual, o problema é criar as Linhas V sabendo APENAS a hora/data

Como às vezes perco as linhas v quando o VPS reinicia e outras vezes durante o fim de semana, é por isso que a única opção que encontrei foi salvar o tempo/data das linhas no gráfico e depois tentar recriá-las novamente, salvar o turno não vai ajudar muito à medida que as barras progridem e também há as barras de fim de semana.

De acordo com o MT4 (https://www.mql5.com/en/docs/objects/objectcreate) a Linha V pode ser criada usando apenas a hora/data ... Gostaria de ver como ela é feita, pois não a vi em lugar algum e me cansei sem sorte.

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

Finalmente descobri como é feito

aqui está o código se alguém quisesse desenhar a Linha V usando apenas a hora/data

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

Finalmente descobri como é feito

aqui está o código se alguém quisesse desenhar a Linha V usando apenas a hora/data

  1. Não é assim que se faz. Tudo o que você fez foi
    1. Pegue uma data e converta-a para a estrutura.
    2. Pegue a estrutura e converta-a de forma a ter um fio (sem os segundos.)
    3. Pegue a corda e converta-a de volta para a data original (sem os segundos.)
    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. Se tudo o que você queria era remover os segundos, é assim que isso é feito:
    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. Não é assim que se faz. Tudo o que você fez foi
    1. Pegue uma data e converta-a para a estrutura.
    2. Pegue a estrutura e converta-a de forma a ter um fio (sem os segundos.)
    3. Pegue a corda e converta-a de volta para a data original (sem os segundos.)

  2. Se tudo o que você queria era remover os segundos, é assim que isso é feito:

Se você olhar para meus posts anteriores, verá que eu me cansei de remover os segundos, mas não funcionou, entretanto, após a conversão o código não funcionou com certeza do que estava errado,

Gosto de sua versão do código que é simples, elegante e funciona bem, obrigado

 
Esta é minha primeira vez utilizando artigos gráficos em um ponteiro. Eu precisaria traçar uma linha vertical normalmente, enquanto isso "22:00", você poderia, por favor, me direcionar para uma resposta?