OBJ_VLINE - sayfa 2

 
Ayrıca, nesneyi her tikte yeniden oluşturmanız gerekmez, bu, hata günlüğünü zaten var olan bir 4200 Nesnesi ile doldurur, bu nedenle, bunun yerine nesneyi on init işlevinde bir kez oluşturun ve daha sonra istediğiniz tarihe taşıyabilirsiniz.
 
Marco vd Heijden :
Ayrıca, nesneyi her tikte yeniden oluşturmanız gerekmez, bu, hata günlüğünü zaten var olan bir 4200 Nesnesi ile doldurur, bu nedenle, bunun yerine nesneyi on init işlevinde bir kez oluşturun ve daha sonra istediğiniz tarihe taşıyabilirsiniz.

bu sorunu önlemek için:

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

Veya ek olarak, nesnenin zaten var olup olmadığını görmek için önden kontrol edebilirsiniz:

 ObjectFind (...
 

Marco, Paul

cevap ve yardım için çok teşekkürler

Ancak şu anda karşılaştığım sorun, dosyadan aldığım bilgileri (tarihi) dönüştürmek ve satırları çizmek için kullanmak.

Kodda MT4 dosyaları bölümünde dosya #Satır olarak kaydediliyor ve kayıt tarihi örneğin 2019.05.18 05:30:00 , ilk adım olarak kaldırıyorum

tarihten itibaren son 3 hane ve 2019.05.18 05:30'a dönüştürün .. şimdi bir sonraki adım, zamanı D' biçiminde yapmak için başaramadığım şey

aşağıdakini denedim

 ObjectCreate ( 0 , "v_line" , OBJ_VLINE , 0 , "D'" + 2019.05 . 18 05 : 30 + "'" , 0 );

ama bu işe yaramadı, bu yüzden dizeyi zamana dönüştürüyorum

 ObjectCreate ( 0 , "v_line" , OBJ_VLINE , 0 , StringToTime ( "D'" + 2019.05 . 18 05 : 30 + "'" ), 0 );

Her iki durumda da satır 1970.01.01 00:00'da oluşturulur, bu nedenle sorun, tarihi dosyadan anlamlı bir şeye dönüştürmektir, MT4'ün v-satırını oluşturmak için kullanabileceği

Kodu ekliyorum belki hatamı anlarsınız.. kodda iki satır oluşturdum ama dosyadan aldığım tarihte satırların hiçbiri oluşturulmuyor

Dosyalar:
TestDates.mq4  9 kb
 

tırnak arasına tarih yazarak yanlış yapıyorsun

olduğu gibi :

D'2019.05.18 05:30'


 ObjectCreate ( 0 , "v_line" , OBJ_VLINE , 0 , D'2019.05.18 05:30' , 0 );
 
StringToTime ( " 2019.05 . 18 05 : 30 " ) == D'2019.05.18 05:30'

Her ikisi de datetime s'dir. Tıpkı

 StringToDouble ( "1.234" ) == 1.234
ikisi de çifttir.
 
paul selvan :

tırnak arasına tarih yazarak yanlış yapıyorsun

olduğu gibi :

D'2019.05.18 05:30'


Bunu yapıyorum çünkü metni yukarıda William Roeder'ın gösterdiği gibi bir tarih-saat formatına dönüştürüyorum .. Tarihi doğru kaydedip D' formatına çevirdiğim için hatam nerede olduğundan emin değilim ama yine de satırı oluşturamıyorum, ancak tarihi dosyadan kopyalarsam ve manuel olarak bir satır oluşturursam, doğru tarihe gider

 
Bu dizeden tarih saatine dönüşümler yerine, Epoch'tan bu yana saniye gibi uzun tamsayı değerleri kadar tasarruf etme ve okuma süresi konusunda daha fazla şansınız olacağını düşünüyorum.
 
Marco vd Heijden :
Bu dizeden tarih saatine dönüşümler yerine, Epoch'tan bu yana saniye gibi uzun tamsayı değerleri kadar tasarruf etme ve okuma süresi konusunda daha fazla şansınız olacağını düşünüyorum.

Tarih saniyeler dahil kaydedilir, örneğin bu 2019.05.19 15:00:00 dosyasından alınan zamandır.

Ancak testlerim sırasında, tarihi saniyelerle kullanırsam 1970.01.01'de satırı oluşturacağını öğrendim , bu nedenle saniyeleri kaldırıyorum, ancak yine de tarihin doğru konumunda dosyayı oluşturamıyorum.

 

Bu durumda, zaman yapısına da bakabileceğinizi düşünüyorum:

 struct MqlDateTime 
  { 
   int year;           // Year 
   int mon;             // Month 
   int day;             // Day 
   int hour;           // Hour 
   int min;             // Minutes 
   int sec;             // Seconds 
   int day_of_week;     // Day of week (0-Sunday, 1-Monday, ... ,6-Saturday) 
   int day_of_year;     // Day number of the year (January 1st is assigned the number value of zero) 
  };

Kullanabilirsiniz

 TimeToStruct ()

Aşağıdaki gibi işlev :

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

MqlDateTime str1;

TimeToStruct (TimeExit_SymSymbol,str1); 

Daha sonra bundan istediğiniz tüm değerleri çıkarabilirsiniz.

 int Year = str1.year;
int Month = str1.mon;
int Day = str1.day;
int Hour = str1.hour;
int Minutes = str1.min;
int Seconds = str1.sec;
Bunlar tamsayı değerlerdir, bu nedenle uğraşılacak dizeler yoktur.
Neden: