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--)
}
Yardım!
Teşekkürler :)
Lütfen kodu göndermek için bunu kullanın. . . okumayı kolaylaştırır.
Ş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?
- Bir dahaki sefere orijinal sorunuzla daha kesin olun.
datetime now = Time[ 0 ], bod = now - now % 86400 , // Beginning of the day Hr22= bod + 22 * 3600 ; // 2200 VLine( "2200" , Hr22, Red );
- Bir dahaki sefere orijinal sorunuzla daha kesin olun.
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 ); } //+------------------------------------------------------------------+
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 ); } //+------------------------------------------------------------------+
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 );

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
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