OBJ_VLINE

 

Merhaba,

Bu, bir göstergede grafik nesneleri ilk kez kullanıyorum. Her gün aynı saatte "22:00"de dikey bir çizgi çizmem gerekecek, lütfen beni bir çözüme yönlendirir misiniz?

teşekkürler

 
desert :

Merhaba,

Bu, bir göstergede grafik nesneleri ilk kez kullanıyorum. Her gün aynı saatte "22:00"de dikey bir çizgi çizmem gerekecek, lütfen beni bir çözüme yönlendirir misiniz?

teşekkürler

VLine yerine Döngüleri kullanın.

Saygılarımla, Luke

 
for (int shift22=0; shift22<Bars && TimeHour(Time[shift22])!=22; shift22++){}
VLine("2200", Time[shift22] %3600, Red); // %3600 needed for M30 and lower
===================================
void vLine(string name, datetime T0, color clr){        #define WINDOW_MAIN 0
    if (!Show.Objects)  return;
    /**/ if (ObjectMove( name, 0, T0, 0 )){}
    else if(!ObjectCreate( name, OBJ_VLINE, WINDOW_MAIN, T0, 0 ))
        Alert("ObjectCreate(",name,",VLINE) failed: ", GetLastError() );
    if (!ObjectSet(name, OBJPROP_COLOR, clr )) // Allow color change
        Alert("ObjectSet(", name, ",Color) [1] failed: ", GetLastError() );
    if (!ObjectSetText(name, TimeToStr(T0, TIME_MINUTES), 10))
        Alert("ObjectSetText(",name,") [1] failed: ", GetLastError());
}
 

Selam beyler,

Sorunu başka bir kodla çözebilirdim (aslında yukarıda verilen çözümleri uygulayamadım), ama hiç değil.

Şimdi önceki tüm 22:00 mumları için dikey çizgiler alıyorum, ancak fiyatın (gelecekteki) sağ tarafında gelecek 22:00 mumdaki çizgiye ihtiyacım var, bunu nasıl alabilirim?

Bu kod:

...

for (shift=NumBars;shift>=0;shift--)

{
if (TimeHour(Time[shift])== Offset && TimeDakika(Time[shift])==0)
{
if(ObjectFind("Offset"+shift) != 0)
{
ObjectCreate("Ofset"+shift, OBJ_VLINE, 0, Zaman[shift], 0);
ObjectSet("Ofset"+shift, OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("Ofset"+shift, OBJPROP_COLOR, Beyaz);
}
}

}

Yardım!

Teşekkürler :)

 

Lütfen kodu göndermek için bunu kullanın. . . okumayı kolaylaştırır.

 
desert :
Şimdi önceki tüm 22:00 mumları için dikey çizgiler alıyorum, ancak fiyatın (gelecekteki) sağ tarafında gelecek 22:00 mumdaki çizgiye ihtiyacım var, bunu nasıl alabilirim?
  1. Bir dahaki sefere orijinal sorunuzla daha kesin olun.
  2.  datetime now = Time[ 0 ],
             bod = now - now % 86400 ,   // Beginning of the day
             Hr22= bod + 22 * 3600 ;     // 2200
    VLine( "2200" , Hr22, Red );
 
WHRoeder :
  1. Bir dahaki sefere orijinal sorunuzla daha kesin olun.
Çok teşekkürler!
 

Sadece tarihi bilerek grafiğin sağ tarafında mevcut fiyattan uzağa dikey çizgiler çizmek mümkün müdür?

Örneğin, geçerli saatin 2019.05.17 00:00 olduğunu varsayalım ve gelecekte yalnızca tarih bilgisini kullanarak 2019.06.04 16:00'da dikey bir çizgi çizmek istiyorum?

 

Evet.

Use ObjectCreate ( and OBJ_VLINE

Veya örneğin bu işlevi kullanın:

 //+------------------------------------------------------------------+ 
//| 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= true ,     // 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 ); 
  } 
//+------------------------------------------------------------------+ 
 
Marco vd Heijden :

Evet.

Veya örneğin bu işlevi kullanın:

Teşekkürler Marco , işe yaramadı , kodun tamamını göndereceğim , uyarıda doğru tarihe sahip olduğumu göreceksiniz ama o tarihte satırı oluşturamıyorum

Elde etmeye çalıştığım şey, bazen piyasa kapandığında ve MT4'ün broker ile bağlantı olmadan VPS'de açıldığında kaybolması durumunda, grafikte sahip olduğum bilgileri kaydetmektir.
Hafta sonundan önce, grafiğin gelecekteki bölümünde (en sağda) olan satırlarımı tutmak istiyorum, bunu yapmak için grafikte bir sembol yarattım, o Sembolün tarihini kaydettim ve sonra o tarihi satırları yeniden oluşturmak için kullandım. .. çizgileri yeniden oluşturma kısmı dışında her şey yolunda ve merak ediyorum, birisi bu konuda yardımcı olabilir mi?

 //+------------------------------------------------------------------+
//|                                                    TestLines.mq4 |
//|                                             Copyright 2019, Alfa |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, Alpha"
#property version    "1.00"
#property strict


datetime PreTradeDOT, Symb_Chart_Dates, Exit_SymDOT;
string    Exit_SymSymbol = "Exit_Sym" , ExitLine = "Exit" ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
//---
     OnTick ();
//---
     return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
//---Object creation
     ObjectCreate ( 0 , Exit_SymSymbol, OBJ_ARROW_DOWN , 0 , Time[ 0 ] + Period () * 60 * 40 , High[ 0 ]);
    ObjectSet(Exit_SymSymbol, OBJPROP_COLOR , Red);
    ObjectSet(Exit_SymSymbol, OBJPROP_STYLE , STYLE_SOLID );
    ObjectSet(Exit_SymSymbol, OBJPROP_WIDTH , 3 );
    ObjectSet(Exit_SymSymbol, OBJPROP_RAY , false );
    ObjectSet(Exit_SymSymbol, OBJPROP_BACK , True);
    ObjectSet(Exit_SymSymbol, OBJPROP_NAME , True);
    ObjectSet(Exit_SymSymbol, OBJPROP_TEXT , True);
    ObjectSetText(Exit_SymSymbol, "Exit_SymSymbol" , 1 );


     datetime TimeExit_SymSymbol = ( datetime ) ObjectGetInteger ( 0 , Exit_SymSymbol, OBJPROP_TIME1);
     string    TxtExit_SymSymbol  = TimeToStr(TimeExit_SymSymbol, TIME_DATE | TIME_SECONDS );

//---
     if ( ObjectFind ( 0 , Exit_SymSymbol) == 0 ) // Object is found on main screen when its ==0
    {
        Exit_SymDOT = ( datetime ) ObjectGetInteger ( 0 , Exit_SymSymbol, 0 , 0 );
         //Alert(Exit_SymDOT );
        SaveDates();
    }
     if ( ObjectFind ( 0 , ExitLine) != 0 )
    {
        ReadDates();

         datetime Symb_Dates = StringToTime ( StringSubstr (Symb_Chart_Dates, 0 , 16 )); // OK
   



         Alert (Symb_Dates);

        VLineCreate( 0 , "VLine" , 0 , Symb_Dates, clrRed , STYLE_SOLID , 1 , false , true , true , true , 0 );


/*
       // ObjectCreate(0,ExitLine, OBJ_VLINE, 0, StringToTime(Symb_Dates), Low[0]);
        ObjectCreate(ExitLine, OBJ_VLINE, 0, StringToTime( Symb_Dates), Low[0]);

       // ObjectCreate(vLine, OBJ_VLINE, 0, Time[0] + (Symb_Dates-TimeCurrent()) , Low[0]);
        //ObjectCreate( ExitLine, OBJ_VLINE, 0, Symb_Dates, 0 );
        ObjectSet(ExitLine, OBJPROP_COLOR, Orange);
        ObjectSet(ExitLine, OBJPROP_STYLE, STYLE_SOLID);
        ObjectSet(ExitLine, OBJPROP_WIDTH, 3);
        ObjectSet(ExitLine, OBJPROP_RAY, false);
        ObjectSet(ExitLine, OBJPROP_BACK, True);

 */
    }
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//-- Function:  ReadSpread
//+------------------------------------------------------------------+
void ReadDates()
{
     string fileName = getFileName( 1 );
     int     file     = FileOpen (fileName, FILE_CSV | FILE_READ );
//--- This is a protection to avoid low spread and also for the expert
//--- if the file has not been created then create a new file

    Symb_Chart_Dates    = ( datetime ) ObjectGetInteger ( 0 , Exit_SymSymbol, OBJPROP_TIME1, 0 );
   
     int ShiftEntryBar = 10 , TradeExit_SymBar = 30 ;
     if (file <= - 1 )
    {
        Exit_SymDOT = Time[ 0 ] + Period () * 60 * TradeExit_SymBar;

        SaveDates();
    }
//--- If there is a file then save the spreads
     if (file > 0 )
    {
        Symb_Chart_Dates    = FileReadNumber (file);
         FileClose (file);
    }
}


//
//+------------------------------------------------------------------+
//-- Function:  saveSpread
//+------------------------------------------------------------------+
void SaveDates()
{
     string fileName = getFileName( 1 );
     int     file     = FileOpen (fileName, FILE_CSV | FILE_WRITE );
     if (file > 0 )
    {
         FileWrite (file, PreTradeDOT, Symb_Chart_Dates, Exit_SymDOT);
         FileClose (file);
    }
}



//+--------------------------------------------------------------------------------------------------+
//--                                   Function:  getFileName
//+--------------------------------------------------------------------------------------------------+
string getFileName( int FileNo)
{
     string filename;
//--- The spread file will be used for all time frames
     if (FileNo == 1 )
        filename = " # " + "Lines" + ".txt" ;   // spread file

     return (filename);
}





//+------------------------------------------------------------------+
//| 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 = true ,               // 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 );
}
//+------------------------------------------------------------------+
 
Alpha Beta :

Sadece tarihi bilerek grafiğin sağ tarafında mevcut fiyattan uzağa dikey çizgiler çizmek mümkün müdür?

Örneğin, geçerli saatin 2019.05.17 00:00 olduğunu varsayalım ve gelecekte yalnızca tarih bilgisini kullanarak 2019.06.04 16:00'da dikey bir çizgi çizmek istiyorum?

ObjectCreate() içinde istenen zamanı ayarlamak için D' biçimini kullanın

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