MT5 서버와 Windows 현지 시간 동기화 - 페이지 17

 

세레자!

내 버전(거래당 동기화) 또는 귀하의 버전이 마음에 들지 않습니다.

"24시간 내내" Windows를 망치고 거의 지속적 으로 시간을 조정하기 때문에

시간 은 세션 전후에만 조정하면 됩니다.

우리는 우리 버전의 하이브리드를 만드는 방법에 대해 생각할 필요가 있습니다.

보고 어떻게 생각하는지 말해줘

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

_SYSTEMTIME loc_time;

#import "kernel32.dll"
//void GetLocalTime(_SYSTEMTIME &sys_time);
bool SetLocalTime(_SYSTEMTIME &sys_time);
#import
//
input ENUM_DAY_OF_WEEK FirstDay  = SATURDAY ;         //Первый выходной
input ENUM_DAY_OF_WEEK SecondDay = SUNDAY ;           //Второй выходной
//
MqlTick tick;
MqlDateTime sv_time, tts_time;
int st_st_mon   = 35100 ; //09-45
int end_st_mon  = 36000 ; //10-00
int st_end_mon  = 50280 ; //13-58
int end_end_mon = 50400 ; //14-00
int st_st_day   = 50460 ; //14-01
int end_st_day  = 50700 ; //14-05
int st_end_day  = 67380 ; //18-43
int end_end_day = 67500 ; //18-45
int st_st_evn   = 67560 ; //18-46
int end_st_evn  = 68400; //19-00
int st_end_evn  = 85680 ; //23-48
int end_end_evn = 85800 ; //23-50
//---
bool   is_sync;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
  is_sync = true ;
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert Convert To Time function                                  |
//+------------------------------------------------------------------+
bool ConvertToTime( const ulong n_value,_SYSTEMTIME  &a_time)
  {
   MqlDateTime cur_time={ 0 };
   TimeToStruct ( datetime (n_value/ 1000 ),cur_time);
   if (cur_time.year> 0 )
     {
      a_time.wDay= short (cur_time.day);
      a_time.wDayOfWeek= short (cur_time.day_of_week);
      a_time.wHour= short (cur_time.hour);
      a_time.wMinute= short (cur_time.min);
      a_time.wMonth = short (cur_time.mon);
      a_time.wSecond= short (cur_time.sec);
      a_time.wYear= short (cur_time.year);
      a_time.wMilliseconds= short (n_value% 1000 );
       return ( true );
     }
   return ( false );
  }
//+------------------------------------------------------------------+
//| Expert On Tick function                                          |
//+------------------------------------------------------------------+
void OnTick ()
{
  tts_time.year = 0 ;
   TimeTradeServer (tts_time);
   if (tts_time.year > 0 )
  {
     if ((tts_time.day_of_week == int (FirstDay)) ||
       (tts_time.day_of_week == int (SecondDay))) return ;
     int cur_time = tts_time.hour * 3600 + tts_time.min * 60 + tts_time.sec;
     if (((cur_time >= st_st_mon) && (cur_time < end_st_mon)) ||
       ((cur_time >= st_end_mon) && (cur_time < end_end_mon)) ||
       ((cur_time >= st_st_day) && (cur_time < end_st_day)) ||
       ((cur_time >= st_end_day) && (cur_time < end_end_day)) ||
       ((cur_time >= st_st_evn) && (cur_time < end_st_evn)) ||
       ((cur_time >= st_end_evn) && (cur_time < end_end_evn)))
    {
       if (!is_sync)
      {
         if (! SymbolInfoTick ( Symbol (), tick))
        {
           Print ( "Error SymbolInfoTick" , GetLastError ());
           return ;
        }
        sv_time.year = 0 ;
         TimeToStruct (tick.time, sv_time);
         if (sv_time.year> 0 )
        {
           ulong last_ping= ulong ( NormalizeDouble ( double ( TerminalInfoInteger ( TERMINAL_PING_LAST ))/ 2000 , 0 ));
           ulong mls_time= ulong (tick.time_msc% 1000 );
           if ((mls_time+last_ping)> 999 )
          {
            mls_time=tick.time_msc+last_ping;
             if (!ConvertToTime(mls_time, loc_time)) return ;
          }
           else
          {
            loc_time.wYear = short (sv_time.year);
            loc_time.wMonth = short (sv_time.mon);
            loc_time.wDay = short (sv_time.day);
            loc_time.wDayOfWeek = short (sv_time.day_of_week);
            loc_time.wHour = short (sv_time.hour);
            loc_time.wMinute = short (sv_time.min);
            loc_time.wSecond = short (sv_time.sec);
            loc_time.wMilliseconds= short (mls_time+last_ping);
          }
           if (SetLocalTime(loc_time))
          {
            is_sync= true ;
             Print ( "Local time sync is done. Symbol = " , Symbol (), " Sync hour = " ,loc_time.wHour, " Sync min = " ,loc_time.wMinute,
                   " Sync sec = " ,loc_time.wSecond, " Sync ms = " ,loc_time.wMilliseconds);
          }
        }
      }
    }
     else is_sync = false ;
  }
}  
//+------------------------------------------------------------------+

추가됨

그리고 나는 또한 ping이 터미널에서 거의 변경되지 않는 것을 좋아하지 않습니다.

 

새로운 Expert Advisor의 첫 번째 결과

2017.02 . 06 09 : 45 : 04.524 Net_switcher (Si- 3.17 ,M1)       Local time sync is done. Symbol = Si- 3.17 Sync hour = 9 Sync min = 45 Sync sec = 4 Sync ms = 524

2017.02 . 06 10 : 33 : 04.922 Delta_time (BR- 3.17 ,M1) ping : 5 | time current: 2017.02 . 06 10 : 33 : 04 | time server: 10 : 33 : 4 , 710 | time local: 10 : 33 : 4 , 922 | delta ms: - 21 | min max delta: 0 : - 212
2017.02 . 06 10 : 33 : 08.424 Delta_time (BR- 3.17 ,M1) ping : 5 | time current: 2017.02 . 06 10 : 33 : 08 | time server: 10 : 33 : 8 , 407 | time local: 10 : 33 : 8 , 424 | delta ms: - 22 | min max delta: 0 : - 212
2017.02 . 06 10 : 33 : 11.244 Delta_time (BR- 3.17 ,M1) ping : 5 | time current: 2017.02 . 06 10 : 33 : 11 | time server: 10 : 33 : 11 , 221 | time local: 10 : 33 : 11 , 244 | delta ms: - 25 | min max delta: 0 : - 212
2017.02 . 06 10 : 33 : 11.830 Delta_time (BR- 3.17 ,M1) ping : 5 | time current: 2017.02 . 06 10 : 33 : 11 | time server: 10 : 33 : 11 , 806 | time local: 10 : 33 : 11 , 830 | delta ms: - 27 | min max delta: 0 : - 212
2017.02 . 06 10 : 33 : 11.837 Delta_time (BR- 3.17 ,M1) ping : 5 | time current: 2017.02 . 06 10 : 33 : 11 | time server: 10 : 33 : 11 , 806 | time local: 10 : 33 : 11 , 837 | delta ms: - 30 | min max delta: 0 : - 212
2017.02 . 06 10 : 33 : 12.026 Delta_time (BR- 3.17 ,M1) ping : 5 | time current: 2017.02 . 06 10 : 33 : 11 | time server: 10 : 33 : 11 , 958 | time local: 10 : 33 : 12 , 26 | delta ms: - 37 | min max delta: 0 : - 212
 

오전 세션이 끝나기 전에 시간이 동기화되었지만 14-01 - 14-04에는 동기화되지 않았습니다. :(

분명히 이것은 응용 프로그램이 촬영되었다는 사실 때문입니다.

하지만 여전히 동기화 중입니다. :)

2017.02 . 06 13 : 57 : 59.794 Net_switcher (Si- 3.17 ,M1)       Local time sync is done. Sync hour = 13 Sync min = 57 Sync sec = 59 Sync ms = 794

2017.02 . 06 14 : 23 : 10.145 Delta_time (BR- 3.17 ,M1) ping : 7 | time current: 2017.02 . 06 14 : 23 : 10 | time server: 14 : 23 : 10 , 121 | time local: 14 : 23 : 10 , 145 | delta ms: - 2 | min max delta: 0 : - 24
2017.02 . 06 14 : 23 : 10.158 Delta_time (BR- 3.17 ,M1) ping : 7 | time current: 2017.02 . 06 14 : 23 : 10 | time server: 14 : 23 : 10 , 144 | time local: 14 : 23 : 10 , 158 | delta ms: - 3 | min max delta: 0 : - 24
2017.02 . 06 14 : 23 : 12.188 Delta_time (BR- 3.17 ,M1) ping : 7 | time current: 2017.02 . 06 14 : 23 : 12 | time server: 14 : 23 : 12 , 168 | time local: 14 : 23 : 12 , 188 | delta ms: - 5 | min max delta: 0 : - 24
2017.02 . 06 14 : 23 : 12.188 Delta_time (BR- 3.17 ,M1) ping : 7 | time current: 2017.02 . 06 14 : 23 : 12 | time server: 14 : 23 : 12 , 168 | time local: 14 : 23 : 12 , 188 | delta ms: - 7 | min max delta: 0 : - 24
2017.02 . 06 14 : 23 : 14.590 Delta_time (BR- 3.17 ,M1) ping : 7 | time current: 2017.02 . 06 14 : 23 : 14 | time server: 14 : 23 : 14 , 569 | time local: 14 : 23 : 14 , 590 | delta ms: - 9 | min max delta: 0 : - 24
2017.02 . 06 14 : 23 : 14.725 Delta_time (BR- 3.17 ,M1) ping : 7 | time current: 2017.02 . 06 14 : 23 : 14 | time server: 14 : 23 : 14 , 694 | time local: 14 : 23 : 14 , 725 | delta ms: - 13 | min max delta: 0 : - 31
2017.02 . 06 14 : 23 : 14.727 Delta_time (BR- 3.17 ,M1) ping : 7 | time current: 2017.02 . 06 14 : 23 : 14 | time server: 14 : 23 : 14 , 699 | time local: 14 : 23 : 14 , 727 | delta ms: - 15 | min max delta: 0 : - 31
 

다음에 정차하기로 결정

int st_st_mon   = 35100 ; //09-45
int end_st_mon  = 36000 ; //10-00
int st_tr_mon   = 36060 ; //10-01
int end_tr_mon  = 36120 ; //10-02
int st_end_mon  = 50280 ; //13-58
int end_end_mon = 50400 ; //14-00
int st_st_day   = 50700 ; //14-05
int end_st_day  = 50760 ; //14-06
int st_end_day  = 67380 ; //18-43
int end_end_day = 67500 ; //18-45
int st_st_evn   = 68700 ; //19-05
int end_st_evn  = 68760 ; //19-06
int st_end_evn  = 85680 ; //23-48
int end_end_evn = 85800 ; //23-50


주제가 끝났다고 생각합니다.

최신 버전은 여기

https://www.mql5.com/ru/forum/167309#comment_4065302

Советники: Time sync FORTS
Советники: Time sync FORTS
  • www.mql5.com
Форум алго-трейдеров MQL5
 

개발자는 "작은 피"가 안경에 시간을 추가할 수 있습니다.

Spectra 5.3 릴리스부터

4. 기술적 변화.

  • 거래 및 청산 구성 요소 분리

시스템 안정화를 목표로 하는 TCS의 핵심 및 위험 모듈 현대화.

  • SPECTRA TCS 코어 에서 트랜잭션 흐름 제한기 구현 변경

버전 5.3에서는 클라이언트의 트랜잭션에 대한 게이트웨이 흐름 제한기가 단일 지점으로 대체되었습니다. 이전 버전은 게이트웨이당 제한기를 사용했습니다.

  • 나노초 정확도로 트랜잭션 등록 시간 고정

거래 및 주문을 브로드캐스트하는 스트림 테이블에 대해 새로운 필드 moment_ns가 추가되었습니다.

으아아아아아아아!

추가됨

Spectra 5.3은 2017년 2월 27일에 교환 작업을 시작합니다.

추가됨

struct MqlBookInfo
  {
   ENUM_BOOK_TYPE    type;       // тип заявки из перечисления ENUM_BOOK_TYPE
   double            price;       // цена
   long              volume;     // объем
   ulong             moment_ns;   //ООООООООО-ЧЕНЬ ЖДЁМ  
  };
 
prostotrader :

추가됨

struct MqlBookInfo
  {
   ENUM_BOOK_TYPE    type;       // тип заявки из перечисления ENUM_BOOK_TYPE
   double            price;       // цена
   long              volume;     // объем
   ulong             moment_ns;   //ООООООООО-ЧЕНЬ ЖДЁМ  
  };

그리고 여전히 감정에 대한 것입니다(내가 이해하는 한, OI, 주문 등에 대한 정보를 그렇게 부릅니다). 밀리초가 충분할 것입니다. 일반적으로 정확할수록 좋지만 가능한 모든 정보에 대해 하나의 정확도를 원합니다.
 
Alexey Kozitsyn :
그리고 여전히 감정에 대한 것입니다(내가 이해하는 한, OI, 주문 등에 대한 정보를 그렇게 부릅니다). 밀리초가 충분할 것입니다. 일반적으로 정확할수록 좋지만 가능한 모든 정보에 대해 하나의 정확도를 원합니다.

NONOseconds가 ULONG에 맞습니까?

추가됨

거래소가 moment_ns 를 어떻게 발표했는지 확인해야 합니다.

20일 후에는 이미 전투 모드에서 작동하며,

문서가 아직 게시되지 않았습니다(항상 그렇듯이) :(

 
prostotrader :

NONOseconds가 ULONG에 맞습니까?

추가됨

거래소가 moment_ns 를 어떻게 발표했는지 확인해야 합니다.

20일 후에는 이미 전투 모드에서 작동하며,

문서가 아직 게시되지 않았습니다(항상 그렇듯이) :(

들어가서 머물게 됩니다. 그러나 우리가 그러한 정확성을 취한다면 제공된 모든 정보에 대해 이 정확성이 필요합니다. 물론 비현실적으로 멋지지만 최소한 밀리초 단위로 모든 곳에 시간을 추가할 수 있습니다.
 
Обращаем ваше внимание, что новый релиз Spectra 5.3 состоится 27 февраля 2017 г.,
вечерняя дополнительная торговая сессия на срочном рынке 24 февраля 2017 г.
(является торговым днем на срочном рынке) будет отменена.
우리는 개발자의 유리에서 시간을 기다리고 있습니다 ....
사유: