OBJ_VLINE - 페이지 3

 

도움을 주신 Marco에게 감사합니다. 어떤 이유로 작동합니다.

D' 형식으로 시간을 구성한 다음 해당 정보를 경고로 표시했지만 화살표 시간과 일치하는 것을 볼 수 있습니다.

V-Line은 여전히 현재 촛불에 생성됩니다 .. 스크린 샷 참조


이것은 내가 사용한 코드입니다

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


 
다음은 관련 주제입니다. 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 :
다음은 관련 주제입니다. https://www.mql5.com/en/forum/233876

나는 shift를 알고 있었기 때문에 차트에 이미 v-lines가 있습니다. 링크의 주제에서 shift를 사용하여 v-lines를 그렸습니다.

이전 게시물에서 VPS가 다시 시작될 때 또는 주말 동안 또는 때때로 MT4를 재부팅할 때 생성한 v-라인이 손실된다고 언급했습니다. 그래서 v-라인이 손실된 경우 나중에 다시 생성하기 위해 v-라인의 날짜를 저장합니다. .

MT4에는 텍스트 날짜에서 v-라인을 생성하는 기능이 없거나 아무도 아직 어떻게 완료되었는지 파악하지 못한 것 같습니다.

 
Alpha Beta :

이전 게시물에서 VPS가 다시 시작될 때 또는 주말 동안 또는 때때로 MT4를 재부팅할 때 생성한 v-라인이 손실된다고 언급했습니다. 그래서 v-라인이 손실된 경우 나중에 다시 생성하기 위해 v-라인의 날짜를 저장합니다. .

날짜를 다음과 같이 저장한 경우:

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

여기에서 v-라인을 재생성하기 위해 TimeExit_SymSymbol에서 초 숫자를 분할할 필요가 없습니다. 작업은 ObjectCreate() 자체에 의해 수행됩니다. 왜냐하면 몇 초를 고려하지 않기 때문입니다.

다음과 같이 코드를 단순화할 수 있습니다.

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

글쎄, 나는 재빨리 스크립트를 시도했고 그것은 확실히 미래로 선을 그었다.

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

글쎄, 나는 재빨리 스크립트를 시도했고 그것은 확실히 미래로 선을 그었다.

친애하는 마르코,

현재 막대와 관련된 시프트를 사용하고 있습니다. 이는 제가 차트의 V-Line을 생성하는 데 사용한 것과 동일한 방법이지만 문제는 시프트를 모르고현재 시간/막대 를 참조하지 않고 V-Line을 생성하는 것입니다. , 문제는 시간/날짜 아는 V-Line을 만드는 것입니다.

VPS가 다시 시작될 때와 주말에 다른 시간에 때때로 v-라인을 잃기 때문에 내가 찾은 유일한 옵션은 차트에 있는 라인의 시간/날짜를 저장한 다음 다시 생성하여 저장하는 것입니다. 막대가 진행되고 주말 막대가 있기 때문에 교대는 도움이 되지 않습니다.

MT4( https://www.mql5.com/en/docs/objects/objectcreate )에 따르면 V-Line은 시간/날짜만 사용하여 생성할 수 있습니다. 어디든지 난 운이 없어 지쳤어

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

마침내 나는 그것이 어떻게 이루어 졌는지 알아 냈습니다.

누군가가 시간/날짜만을 사용하여 V-Line을 그리고 싶다면 코드가 있습니다.

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

마침내 나는 그것이 어떻게 이루어 졌는지 알아 냈습니다.

누군가가 시간/날짜만 사용하여 V-Line을 그리기를 원하는 경우 코드가 있습니다.

  1. 그렇게 하는 것이 아닙니다. 당신이 한 모든 것은
    1. datetime 을 가져와서 struct 로 변환합니다.
    2. 구조체 를 가져와 문자열 로 변환합니다( 제외).
    3. 문자열을 가져와 원래 날짜/시간(초 제외)으로 다시 변환합니다.
     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. 원하는 것이 초를 제거 하는 것이라면 이것이 완료되는 방법입니다.
     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. 그렇게 하는 것이 아닙니다. 당신이 한 모든 것은
    1. datetime 을 가져와서 struct 로 변환합니다.
    2. 구조체 를 가져와 문자열 로 변환합니다( 제외).
    3. 문자열을 가져와 원래 날짜/시간(초 제외)으로 다시 변환합니다.

  2. 원하는 것이 초를 제거하는 것이라면 이것이 완료되는 방법입니다.

내 이전 게시물을 보면 초를 제거 하는 데 지쳤지만 작동하지 않았다는 것을 알 수 있습니다. 그러나 변환 후 코드가 작동하면 무엇이 잘못되었는지 확실하지 않습니다.

귀하의 코드 버전이 간단하고 우아하며 잘 작동합니다. 감사합니다.

 
포인터에서 그래픽 기사를 사용한 것은 이번이 처음입니다. 평소에는 "22:00"에 수직선 을 그어야 하는데, 답변을 부탁드려도 될까요?