Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 79

 
Alain Verleyen :

GMT'ye göre sunucu saatini almak istiyorum.

Komut dosyasını çalıştırdığınızda elde ettiğiniz şey budur. Özel olarak görüntülenen iki değer vardır: Eşleşip eşleşmediklerini kontrol edebilmeniz için TimeGMT ve TimeServerGMT.

Eşleşirse hata yoktur, aksi halde hata vardır.

 
fxsaber :

Komut dosyasını çalıştırdığınızda bunu alırsınız. Burada iki değer özel olarak çıktılanır: TimeGMT ve TimeServerGMT, böylece eşleştiklerini kontrol edebilirsiniz.

Eğer örtüşürlerse hata yoktur, aksi halde hata vardır.

Anladım.
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Kitaplıklar: TypeToBytes

fxsaber , 2018.03.31 09:24

 // Кроссплатформенный пример передачи произвольных данных через пользовательское событие

#include <fxsaber\HistoryTicks\Data_String.mqh> // https://www.mql5.com/ru/code/20298

// Печать произвольных данных
template < typename T>
bool MyPrint( const T &Value )
{
  T Array[ 1 ];
  
  Array[ 0 ] = Value;
  
   ArrayPrint (Array, _Digits , NULL , 0 , WHOLE_ARRAY , ARRAYPRINT_HEADER | ARRAYPRINT_ALIGN );
  
   return ( true );
}

void OnChartEvent ( const int id, const long &lparam, const double &, const string &sparam )
{
   // Распечатали полученные данные
   if ((id == CHARTEVENT_CUSTOM ) &&
      (lparam ?  MyPrint(DATA_STRING::FromString< MqlDateTime >(sparam)) // Получили MqlDateTime
              : !MyPrint(DATA_STRING::FromString< MqlTick >(sparam))))   // Получили MqlTick
     ExpertRemove (); // Вышли из примера
}

void OnInit ()
{
   MqlTick Tick;  
   MqlDateTime DateTime;
  
   // Заполнили значения
   SymbolInfoTick ( _Symbol , Tick);  
   TimeCurrent (DateTime);

   // Передали
   EventChartCustom ( 0 , 0 , 0 , 0 , DATA_STRING::ToString(Tick));     // Передали MqlTick
   EventChartCustom ( 0 , 0 , 1 , 0 , DATA_STRING::ToString(DateTime)); // Передали MqlDateTime
}
 
fxsaber :

sparam'ın bir uzunluk sınırı vardır. dikkate aldın mı

 
Andrey Barinov :

sparam'ın bir uzunluk sınırı vardır.

Evet, 128 bayt.

 const bool Init = EventChartCustom ( 0 , 0 , 0 , 0 , NULL );

void OnChartEvent ( const int id, const long &, const double &, const string &sparam )
{
   static int PrevLength = - 1 ;
  
   if (id == CHARTEVENT_CUSTOM )
  {
     const int Length = StringLen (sparam);

     bool Res = (Length != PrevLength);
    
     if (Res)
    {
       string Str;
            
       StringInit (Str, Length + 1 , 1 );
      
      Res = EventChartCustom ( 0 , 0 , 0 , 0 , Str);
    }
    
     if (!Res)
    {
       Print (PrevLength);
      
       ExpertRemove ();
    }
      
    PrevLength = Length;      
  }
}

dikkate aldın mı

Hayır, onun üzerinde görebilirsin. Dize depolamayı kullanma seçeneklerinden biri olarak bir sparam örneği sağlanmıştır.

Kodu karmaşıklaştırabilirsiniz (parçalar halinde gönderin), ancak görünürlük kaybolacaktır.

 
fxsaber :

Korkarım ki belirli bir örnek olmadan yapıcı çalışmayacak.

Aşağıdaki resmi verir:


   Print ( "TimeServer: ", TimeGMT ()-TimeServerGMTOffset() );
   Print ( "TimeServerGMT: ",TimeServerGMT() );
   Print ( " TimeCurrent : ", TimeCurrent () );
   Print ( " TimeLocal : ", TimeLocal () );
   Print ( " TimeGMT : ", TimeGMT () );
   Print ( " TimeGMTOffset : ",TimeServerGMTOffset() );
   Print ( "" );

Ve işte GMT +2 vardiyalı MT4 yükleyici

TimeServer = 2018.04.01 05:54:26 görülmesi bekleniyor

Dosyalar:
tw4setup.zip  522 kb
 
Vitaly Muzichenko :

Aşağıdaki resmi verir:

Her ihtimale karşı, Ticaret sunucusunun adını söyleyin.

PS TradersWay-Demo.

doğru çalışır

 2018.04 . 01 08 : 36 : 08.858 TimeServerGMT EURUSDi,M1: TimeServerGMT() = 2018.03 . 30 19 : 59 : 59

belki sende yoktur

 // Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю
 
fxsaber :

Her ihtimale karşı, Ticaret sunucusunun adını söyleyin.

PS TradersWay-Demo.

doğru çalışır

belki sende yoktur

Belki de değil. Muhtemelen herhangi bir terminalde yok, asla M15'in altındaki zamanı değiştirmem

Tamam, daha fazla inceleyeceğim.
 
Vitaly Muzichenko :

Belki de değil. Muhtemelen herhangi bir terminalde yok, asla M15'in altındaki zamanı değiştirmem

böyle yap

 datetime GetBarTime( const datetime time, const bool NextBar = false , string Symb = NULL , const ENUM_TIMEFRAMES TimeFrame = PERIOD_M15 )
 
fxsaber :

böyle yap

Yaptı, saçmalık göstermedi. Vardiyanın büyük olasılıkla -720 olması gerektiği konusunda kafa karıştırıyor



Not: Yine vardiyanın +2 saat olduğunu biliyorum - sitede yazıyor ama robot bunu bilmiyor.

Danışmanı grafikte olduğu gibi çalıştırırsanız, gerekli sonucu almamız pek olası değildir: " TimeServer() sunucusunun şu anki saatini öğrenin" Doğru anlamadım, belki ben yanlış yapma.

Burada, muhtemelen geliştiriciler, terminalde bir işlev tanıtmadan yapamazlar mı?