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

 
Vitaly Muzichenko :

Danışmanı Cumartesi günü çizelgeye asıyorum, ancak danışman son tik saatini alabilir, örneğin, Piyasa İzleme 23:58'de ve yerel saatim 04:45'te. Sunucu Saati bilmiyorum.

Soru: Sunucu (terminal) zamanındaki son işaretten bu yana ne kadar zaman geçti

biraz düşündüm. Danışman grafiğe eklendiğinde hiçbir fark olmadığı ortaya çıkıyor. Gerçek bir onay işareti olmadığı sürece, program algoritmasının sunucunun gerçek zamanını kullanan kısmını çalıştıramazsınız.

Kene gelmeden önce hesaplamalar gerekiyorsa, kullanıcıdan ServerGMTOffset'i isteyin.

Böylece problem ServerTradeTime() olmadan da çözülmüş olur.

 
Ihor Herasko :

biraz düşündüm. Danışman çizelgeye eklendiğinde hiçbir fark olmadığı ortaya çıktı. Gerçek bir onay işareti olmadığı sürece, sunucunun gerçek zamanını kullanan program algoritmasının o kısmını yürütmek imkansızdır.

Kene gelmeden önce hesaplamalar gerekiyorsa, kullanıcıdan ServerGMTOffset'i isteyin.

Böylece problem ServerTradeTime() olmadan da çözülmüş olur.

Kullanıcı sunucunun Ofsetini bilmiyor, bunu bilmiyor.

Sadece iki değer biliniyor ve bu veri hesaplamak için yeterli değil: " Sunucu (terminal) zamanındaki son tıklamadan bu yana ne kadar zaman geçti"

Görev belirli ve henüz sizin gibi bir çözüm görmüyorum.

 
Vitaly Muzichenko :

Danışmanı Cumartesi günü çizelgeye asıyorum, ancak danışman son tik saatini alabilir, örneğin, Piyasa İzleme 23:58'de ve yerel saatim 04:45'te. Sunucu Saati bilmiyorum.

Soru: Sunucu (terminal) zamanındaki son işaretten bu yana ne kadar zaman geçti

Her ikisi de sadece saat değil, tarih saattir. Yani hem tarih hem de saat. Dolayısıyla bu verilerle yapılan aritmetik işlem, gün, saat, dakika ve saniyeye çevrilmesi zor olmayan zaman farkını saniye cinsinden verecektir.

Ayrıca, TimeTradeServer'ın ne göstereceğini hafta sonu da kontrol etmeniz gerekiyor, ancak şimdilik böyle görünüyor

 2018.03 . 29 15 : 00 : 03.640 00 (EURUSD,H1)   TimeCurrent () = 2018.03 . 29 14 : 59 : 54
2018.03 . 29 15 : 00 : 03.640 00 (EURUSD,H1)   TimeLocal () = 2018.03 . 29 15 : 00 : 03
2018.03 . 29 15 : 00 : 03.640 00 (EURUSD,H1)   TimeGMT () = 2018.03 . 29 12 : 00 : 03
2018.03 . 29 15 : 00 : 03.640 00 (EURUSD,H1)   TimeGMTOffset () = - 10800
2018.03 . 29 15 : 00 : 03.640 00 (EURUSD,H1)   TimeTradeServer () = 2018.03 . 29 15 : 00 : 03
Sunucu saatinin saniyeleri ile yerel saat arasındaki farka ve ardından yerel ve tahmini sunucu saatinin tam eşleşmesine dikkat edin.
 
Forex için bu kodu dört

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

Mql4 dilinin özellikleri, incelikleri ve çalışma yöntemleri

fxsaber , 2018.03.29 14:32

 #property strict

#define HOUR 3600
#define DAY ( 24 * HOUR)
#define WEEK 7

datetime GetBarTime( const datetime time, const bool NextBar = false , string Symb = NULL , const ENUM_TIMEFRAMES TimeFrame = PERIOD_M1 )
{
   if (Symb == NULL )
    Symb = _Symbol ;
    
   return ( iTime (Symb, TimeFrame, iBarShift (Symb, TimeFrame, time) - (NextBar ? 1 : 0 )));
}

datetime GetTimeDayOfWeek( const int Shift = 0 , const ENUM_DAY_OF_WEEK Day = SUNDAY )
{
   const datetime Res = TimeCurrent () / DAY * DAY;
  
   return (Res - (((WEEK + ( TimeDayOfWeek (Res) - Day )) % WEEK) + Shift * WEEK) * DAY);
}

// Аналог по серверному времени - https://www.mql5.com/ru/docs/dateandtime/timegmtoffset
// Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю
int TimeServerGMTOffset( void )
{
   const datetime Sunday = GetTimeDayOfWeek();
  
   return ((( int ) MathRound (( double ) MathMin (Sunday - DAY - GetBarTime(Sunday), Sunday + DAY - GetBarTime(Sunday, true )) / HOUR) - 3 ) * HOUR);
}

// Аналог по серверному времени - https://www.mql5.com/ru/docs/dateandtime/timegmt
// Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю
datetime TimeServerGMT( void )
{
   return ( TimeCurrent () + TimeServerGMTOffset());
}
 
fxsaber :
Forex için bu kodu dört

Teşekkürler, bir bakacağım. Ama yine, forex olmayan semboller var.

Mevcut sunucu saatini herhangi bir zamanda basitçe ve kısaca alamamanız uygun değildir.

Alexey Viktorov :

Her ikisi de sadece saat değil, tarih saattir. Yani hem tarih hem de saat. Dolayısıyla bu verilerle yapılan aritmetik işlem, gün, saat, dakika ve saniyeye çevrilmesi zor olmayan zaman farkını saniye cinsinden verecektir.

Ayrıca, TimeTradeServer'ın ne göstereceğini hafta sonu da kontrol etmeniz gerekiyor, ancak şimdilik böyle görünüyor

Sunucu saatinin saniyeleri ile yerel saat arasındaki farka ve ardından yerel ve tahmini sunucu saatinin tam eşleşmesine dikkat edin.

Ben de kendim yazdırdım ama hafta sonu nasıl kullanılır. Genel olarak, sağlanan bilgileri kontrol etmeniz gerekir.

Görev minimumdur: " Sunucu (terminal) zamanındaki son tıklamadan bu yana ne kadar zaman geçti"

 if ( TimeCurrent ()<TimeServer()- 60 ) Alert( "нет котировок более 1-й минуты" );
 
Vitaly Muzichenko :

Teşekkürler, bir bakacağım. Ama yine, forex olmayan semboller var.

Aracının en az bir forex sembolü varsa, diğerleri için çalışacaktır.

Aracının tek bir forex sembolü yoksa, uygunluk sorunu ortaya çıkar.

 
Vitaly Muzichenko :

Teşekkürler, bir bakacağım. Ama yine, forex olmayan semboller var.

Mevcut sunucu saatini herhangi bir zamanda basitçe ve kısaca alamamanız uygun değildir.

Ben de kendim yazdırdım ama hafta sonu nasıl kullanılır. Genel olarak, sağlanan bilgileri kontrol etmeniz gerekir.

Görev minimumdur: " Sunucu (terminal) zamanındaki son tıklamadan bu yana ne kadar zaman geçti"

Elbette kontrol etmek gerekiyor ama TimeCurrent ile TimeTradeServer arasındaki farka bakılırsa farkın artacağını varsayabiliriz.

Ve lütfen söyle bana, MQ-demo sunucu saatim Moskova ile aynı, bu da sunucu saatinin yerel saatle uyuşup uyuşmadığını gösteriyor.

 
Alexey Viktorov :

Elbette kontrol etmek gerekiyor ama TimeCurrent ile TimeTradeServer arasındaki farka bakılırsa farkın artacağını varsayabiliriz.

Ve lütfen söyle bana, MQ-demo sunucu saatim Moskova ile aynı, bu da sunucu saatinin yerel saatle eşleşmediğini gösteriyor.

robot

Yerelim 17:17:13 idi

 

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

Hatalar, hatalar, sorular

fxsaber , 2017.05.19 22:35

TimeTradeServer her türlü saçmalığı döndürebilir. Örneğin, değer TimeCurrent'tan küçüktür. Bu, pratik uygulamasını tamamen geçersiz kılar.

Fikri doğru anlarsam, TimeTradeServer, terminal çalışırken, TimeCurrent'i aldıktan sonra geçen süreyi hesaplamalı ve bu farkı, gelecekteki TimeCurrent değerlerini taklit ederek eklemeliydi.

Şimdi danışmanı başlatıyorum

 #define TOSTRING(A) #A + " = " + ( string )(A) + "\n"

void OnInit ()
{
   EventSetTimer ( 1 );
}

void OnTimer ()
{
   Comment (TOSTRING( TimeTradeServer ()) + TOSTRING( TimeCurrent ()));
}

herhangi bir saçmalık görebilirsin

Tarihlere dikkat edin.

 
fxsaber :

Ve bunun için kim suçlu, terminal mi yoksa çarpık ayarlara sahip DC mi?