Windows yerel saatinin MT5 sunucusuyla senkronizasyonu

 

Tünaydın!

Bilgisayarın mevcut yerel saatini MQL5'ten ayarlamak mümkün müdür?

GetLocalTime() ve SetLocalTime() işlevleri çalışacak mı?

 
prostotrader :

Tünaydın!

Bilgisayarın mevcut yerel saatini MQL5'ten ayarlamak mümkün müdür?

GetLocalTime() ve SetLocalTime() işlevleri çalışacak mı?

Çalıştığını kontrol ettim

//+------------------------------------------------------------------+
//|                                                     TimeTest.mq5 |
//|                                      Copyright 2016 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
struct _SYSTEMTIME {
   ushort wYear;
   ushort wMonth;
   ushort wDayOfWeek;
   ushort wDay;
   ushort wHour;
   ushort wMinute;
   ushort wSecond;
   ushort wMilliseconds;
};

_SYSTEMTIME loc_time;

#import "kernel32.dll"
void GetLocalTime(_SYSTEMTIME &sys_time);
bool SetLocalTime(_SYSTEMTIME &sys_time);
#import
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
    GetLocalTime(loc_time);
     if (loc_time.wYear > 0 )
    {
      loc_time.wSecond = 55 ;
       if (SetLocalTime(loc_time))
      {
         if (loc_time.wYear > 0 )
        {
        }
      }
    }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
  
  }
//+------------------------------------------------------------------+
 

Şimdi yerel saatin nasıl doğru bir şekilde senkronize edileceğini anlamaya devam ediyor

TimeCurrent()'in takas ve ticaret dışı süre (FORTS) sırasında güncellenmediği göz önüne alındığında, MT5 sunucu saatine sahip bilgisayar.

Herhangi bir fikir?

 
prostotrader :

Şimdi yerel saatin nasıl doğru bir şekilde senkronize edileceğini anlamaya devam ediyor

FORTS'ta takas ve ticaret dışı süre sırasında TimeCurrent()'in güncellenmediği göz önüne alındığında, MT5 sunucu saatine sahip bilgisayar.

Herhangi bir fikir?

MT4'teki gibi keneler üretilsin mi?
Dosyalar:
zSendTick.mq4  2 kb
 
prostotrader :

Şimdi yerel saatin nasıl doğru bir şekilde senkronize edileceğini anlamaya devam ediyor

FORTS'ta takas ve ticaret dışı süre sırasında TimeCurrent()'in güncellenmediği göz önüne alındığında, MT5 sunucu saatine sahip bilgisayar.

Herhangi bir fikir?

Bu nedenle, güncelleme yalnızca kene geldiğinde gereklidir. Bu nedenle yalnızca OnTick'te arama yapmak için. Çok akıllı, efendim.
 
fxsaber :
Bu nedenle, güncelleme yalnızca kene geldiğinde gereklidir. Bu nedenle yalnızca OnTick'te arama yapmak için. Çok akıllı, efendim.

Hiçbir şeyi atlamadı...

Tekliflerin cama geldiği bir ön market var, bu nedenle 9-50'den 10-00'e kadar zamanı sunucu zamanı ile senkronize edebilirsiniz.

Katma

Herhangi bir sembol için sersemletme eklerseniz, filtreleme yapmadan tüm sembollerden gelen olaylar oraya gelir,

Piyasa İzleme'de seçildi. Ardından, CopyTicks()'i alın ve senkronizasyon zamanını görün....

Bunun gibi bir şey.

Katma

Aklıma bir şey gelmediyse düzeltin.

//+------------------------------------------------------------------+
//|                                              Time_sync_forts.mq5 |
//|                                      Copyright 2017 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
struct _SYSTEMTIME
  {
   ushort             wYear;
   ushort             wMonth;
   ushort             wDayOfWeek;
   ushort             wDay;
   ushort             wHour;
   ushort             wMinute;
   ushort             wSecond;
   ushort             wMilliseconds;
  };

_SYSTEMTIME loc_time;

#import "kernel32.dll"
void GetLocalTime(_SYSTEMTIME &sys_time);
bool SetLocalTime(_SYSTEMTIME &sys_time);
#import
//---
bool is_sync;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   is_sync= false ;
   MarketBookAdd ( Symbol ());
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   MarketBookRelease ( Symbol ());
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
  {
   loc_time.wYear= 0 ;
   GetLocalTime(loc_time);
   if (loc_time.wYear> 0 )
     {
       if ((loc_time.wHour== 9 ) && (loc_time.wMinute>= 50 ) && (loc_time.wMinute<= 59 ))
        {
         MqlTick curr_tick[ 1 ];
         if ( CopyTicks (symbol,curr_tick, COPY_TICKS_ALL , 0 , 1 )== 1 )
           {
             MqlDateTime sv_time;
             TimeToStruct (curr_tick[ 0 ].time,sv_time);
             if (!is_sync)
              {
               loc_time.wHour= ushort (sv_time.hour);
               loc_time.wMinute = ushort (sv_time.min);
               loc_time.wSecond = ushort (sv_time.sec);
               loc_time.wMilliseconds= ushort ( ulong (curr_tick[ 0 ].time_msc)- ulong (curr_tick[ 0 ].time)* 1000 );
               if (SetLocalTime(loc_time))
                {
                 is_sync= true ;
                 Print ( "Local time sync is done." );
                }
              }
           }
        }
       else is_sync= false ;
     }
  }
//+------------------------------------------------------------------+
 

Her ihtimale karşı, "tazelik" için teklifin kontrol edilmesi

               if (!is_sync)
              {
                 if ((loc_time.wDayOfWeek == ushort (sv_time.day_of_week)) &&
                   (loc_time.wHour == ushort (sv_time.hour)))
                {
                   loc_time.wMinute = ushort (sv_time.min);
                 loc_time.wSecond = ushort (sv_time.sec);
                 loc_time.wMilliseconds= ushort ( ulong (curr_tick[ 0 ].time_msc)- ulong (curr_tick[ 0 ].time)* 1000 );
                 if (SetLocalTime(loc_time))
                 {
                  is_sync= true ;
                   Print ( "Local time sync is done." );
                 }
                }
              }
 
prostotrader :

Şimdi yerel saatin nasıl doğru bir şekilde senkronize edileceğini anlamaya devam ediyor

TimeCurrent()'in takas ve ticaret dışı süre (FORTS) sırasında güncellenmediği göz önüne alındığında, MT5 sunucu saatine sahip bilgisayar.

Herhangi bir fikir?

Belki orijinaliyle senkronize etmek daha kolaydır? Borsada meydana gelen herhangi bir olay, zaman damgasını alır. Borsadaki zamanın kendisi, astronomik ile milisaniyelik bir hatayla senkronize edilir. Bildirimlerin MT5 sunucusuna (brokerde) varış zamanı zaten farklıyken, paketin terminale gönderilme zamanı üçüncü, terminale varış zamanı dördüncü. Sistem saatini yerel bilgisayarda astronomik saatle senkronize ederseniz, her zaman çalışır ve yerel saat , santrallerdeki saatle çakışır. Birkaç yüz genel (ücretsiz) NTP zaman sunucusu vardır. Şimdi canlı ve çalışıyor, örneğin şunlar:

195.234.155.123;ntp.dvconsulting.dk
85.17.207.62;ntp.edge.tillo.ch
195.34.89.227;ntp.favey.ch
195.234.155.124;ntp.gal.dk
193.226.65.36;ntp.idsi.md

 
CopyTicks[0]'e ping ekleyin.
 
Vladimir :

Belki orijinaliyle senkronize etmek daha kolaydır? Borsada meydana gelen herhangi bir olay, zaman damgasını alır. Borsadaki zamanın kendisi, astronomik ile milisaniyelik bir hatayla senkronize edilir. Bildirimlerin MT5 sunucusuna (brokerde) varış zamanı zaten farklıyken, paketin terminale gönderilme zamanı üçüncü, terminale varış zamanı dördüncü. Sistem saatini yerel bilgisayarda astronomik saatle senkronize ederseniz, her zaman çalışır ve yerel saat, santrallerdeki saatle çakışır. Birkaç yüz genel (ücretsiz) NTP zaman sunucusu vardır. Şimdi canlı ve çalışıyor, örneğin şunlar:

195.234.155.123;ntp.dvconsulting.dk
85.17.207.62;ntp.edge.tillo.ch
195.34.89.227;ntp.favey.ch
195.234.155.124;ntp.gal.dk
193.226.65.36;ntp.idsi.md

CopyTicks()'ten alınan zaman değişim zamanıdır, teslimat gecikmeleri olduğu açıktır.

bilgisayarıma paket, ancak oldukça küçük 4-6 ms.

Kesin zaman hiçbir şey vermeyecektir, çünkü Borsa zamanı onunla çakışmayabilir ve tam olarak Borsaya göre ticaret yapıyoruz.

zaman ve MT5'ten

 
fxsaber :
CopyTicks[0]'e ping ekleyin.
Önemsiz (milisaniye) ve yüzüyor, "hava durumu" yaratmayacağını düşünüyorum.