현지 시간과 신선한 틱 시간 사이에는 1분 30초의 차이가 있습니다. 할 일. - 페이지 5

 
pivomoe :
알아요. 왜 이런 짓을하는?

한 사람에게:

피보모에 :

시장 시계 "Volume" "Last Traded"에도 열 이 있습니다. 이 함수가 단순히 마지막 틱의 .time을 반환한다는 의혹이 있습니다.

함수 SymbolInfoInteger ( _Symbol , SYMBOL_TIME )   마지막 틱의 시간만 반환합니다. 견적이 변경되면 새로운 정보 표시가 나타납니다.

마지막 견적 도착과 마지막 틱 시간 사이의 시간을 측정하려고 합니다. 몇 초 후에는 항상 0인 것처럼 보입니다. 따라서 터미널은 모든 것을 즉시 반환합니다.

 
Alexey Kozitsyn :

한 사람에게:

함수 SymbolInfoInteger ( _Symbol , SYMBOL_TIME )   마지막 틱의 시간만 반환합니다. 견적이 변경되면 새로운 정보 표시가 나타납니다.

마지막 견적 도착과 마지막 틱 시간 사이의 시간을 측정하려고 합니다. 몇 초 후에는 항상 0인 것처럼 보입니다. 따라서 터미널은 모든 것을 즉시 반환합니다.

다시 한 번, 문제는 어디에서 볼 수 있습니까?

주어진:

현지 시간과 서버 시간은 다소 동기화됩니다. 즉, 새로운 틱의 .time_msc와 현지 시간의 차이는 몇 초입니다.

18:00:00 컴퓨터 시간에 SymbolInfoTick을 사용하여 SBER 기호에 대한 새 틱을 얻으려고 하면 17:57:00 시간의 틱이 제공됩니다.

18:00:01 컴퓨터 시간에 SymbolInfoTick을 사용하여 SBER 기호에 대한 새 틱을 다시 얻으려고 시도합니다. 17:58:30 시간 틱이 제공됩니다.

작동하지 않는 것 같아요.

이제 컴퓨터의 현지 시간 에서 벗어나 시장 시계의 모든 기호 중 마지막 눈금의 최대 시간을 사용합니다.

 
pivomoe :

다시 한 번, 문제는 어디에서 볼 수 있습니까?

주어진:

현지 시간과 서버 시간은 다소 동기화됩니다. 즉, 새로운 틱의 .time_msc와 현지 시간의 차이는 몇 초입니다.

18:00:00 컴퓨터 시간에 SymbolInfoTick을 사용하여 SBER 기호에 대한 새 틱을 얻으려고 하면 17:57:00 시간의 틱이 제공됩니다.

18:00:01 컴퓨터 시간에 SymbolInfoTick을 사용하여 SBER 기호에 대한 새 틱을 다시 얻으려고 시도합니다. 17:58:30 시간 틱이 제공됩니다.

작동하지 않는 것 같아요.

이제 컴퓨터의 현지 시간에서 벗어나 시장 시계의 모든 기호 중 마지막 눈금의 최대 시간을 사용합니다.

컴퓨터의 시간을 아무데나 설정할 수 있다는 사실을 알고 계십니까? 당신은 그에게 붙어있을 수 없습니다. 당신은 이미 이것을 들었습니다. 처음입니다.

둘째, Market Watch의 모든 기호 중 마지막 틱의 최대 시간도 사용할 수 없습니다. SBER 기호(SymbolInfoInteger) 의 마지막 인용 시간 부터 SBER 기호(SymbolInfoTick)의 마지막 틱의 시간 지연을 찾고 싶습니다. 저것들. 내가 쓴 것과 같은 작업을 수행해야 합니다.

셋째, 여기 있습니다:

В 18 : 00 : 00 по времени компа  пытаемся получить новый тик по символу SBER с помощью SymbolInfoTick , нам отдают тик со временем 17 : 57 : 00

В 18 : 00 : 01 по времени компа опять пытаемся получить новый тик по символу SBER с помощью SymbolInfoTick , нам отдают тик со временем 17 : 58 : 30

증거 없이 주장했다. 코드가 증거라고 생각한다면 "두 번째"를 참조하십시오.

 
Alexey Kozitsyn :

컴퓨터의 시간을 아무데나 설정할 수 있다는 사실을 알고 계십니까? 당신은 그에게 붙어있을 수 없습니다. 당신은 이미 이것을 들었습니다. 처음입니다.


밀리초 또는 초에 대해 이야기하면 바인딩할 수 없습니다. 몇 분 안에 지연에 대해 말하는 것은 꽤 가능합니다. 지금은 그 차이가 아니라 시장 시계의 모든 기호에 대한 마지막 틱의 최대 시간 .time_msc를 사용하여 차이를 측정하고 있습니다.

알렉세이 코지친 :

SBER 기호(SymbolInfoInteger) 의 마지막 인용 시간 부터 SBER 기호(SymbolInfoTick)의 마지막 틱의 시간 지연을 찾고 싶습니다.

하고 싶지 않다.

알렉세이 코지친 :

둘째, Market Watch의 모든 기호 중 마지막 틱의 최대 시간도 사용할 수 없습니다.

왜요 ? 나는 (컴퓨터에 따라) 마지막 틱을 얻는 시간이 아닙니다. 즉, .time_msc를 비교합니다.

알렉세이 코지친 :

증거 없이 주장했다. 코드를 증거로 생각한다면 "두 번째"를 참조하십시오.

일반적으로 개발자는 문제를 재현하기 위해 코드를 요청합니다. 다음은 최근에 포착된 2초 지연입니다.

 14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)  РЕКОРДная  Разница между временем последенго тика по ВСЕМ символам Минус только, что полученный новый тик по символу 2057 милесекундa.
14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)   Получен НОВЫЙ тик по символу                     GAZR- 3.19 time_msc= 2019.03 . 20 14 : 53 : 11.638
14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)   ХОТЯ до этого был получeн тик                        RTS- 3.19 time_msc 2019.03 . 20 14 : 53 : 13.695
14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)   Локальное время получения нового тика по символу.                                   2019.03 . 20 14 : 53 : 10.277
14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)   Предпоследние Локальное время попытки получить новый тик по символу     2019.03 . 20 14 : 53 : 10.259
알렉세이 코지친 :

(대략 더 높은 정확도를 위해 조언한 대로 유리를 사용해야 하기 때문입니다).

OnTimer 대신 OnBookEvent를 사용하는 것이 좋습니다. 나는 그것을 구현했다. 틱이 수신되는 설정에서 OnTimer 또는 OnBookEvent를 선택할 수 있습니다. OnBookEvent를 사용하면 더 나빠지며 새로운 틱 이벤트의 70%만 포착합니다.
 

pivomoe :

 14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)  РЕКОРДная  Разница между временем последенго тика по ВСЕМ символам Минус только, что полученный новый тик по символу 2057 милесекундa.
14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)   Получен НОВЫЙ тик по символу                     GAZR- 3.19 time_msc= 2019.03 . 20 14 : 53 : 11.638
14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)   ХОТЯ до этого был получeн тик                        RTS- 3.19 time_msc 2019.03 . 20 14 : 53 : 13.695
14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)   Локальное время получения нового тика по символу.                                   2019.03 . 20 14 : 53 : 10.277
14 : 53 : 10.277     ProverkaAktyalnostiTikov (RTS- 3.19 ,H1)   Предпоследние Локальное время попытки получить новый тик по символу     2019.03 . 20 14 : 53 : 10.259

다음은 몇 줄입니다. 원하는 것이 분명한 것 같습니다. 기호 간 동기화와 같은 것에 관심이 있습니다. 저것들. 필요한 도구에 대한 데이터의 일반적인 관련성.

현재로서는 도와드릴 수 없는 것이 없으며 해당 문제를 처리하지 않았습니다. 개발자에게 문의하세요.

 
Alexey Kozitsyn :

다음은 몇 줄입니다. 원하는 것이 분명한 것 같습니다. 기호 간 동기화와 같은 것에 관심이 있습니다. 저것들. 필요한 도구에 대한 데이터의 일반적인 관련성.

현재로서는 도와드릴 수 없는 것이 없으며 해당 문제를 처리하지 않았습니다. 개발자에게 문의하세요.

Alexey(참여하고 싶지 않았지만...).

이것은 이 주제의 2페이지에 있는 "관련성"(NEW_TICK) 코드가 아닙니까?

 //+------------------------------------------------------------------+
//|                                                         Time.mq5 |
//|                                                   Copyright 2019 |
//|                                                                  |
//+------------------------------------------------------------------+
enum FRESH_TICK
{
  UNKNOWN_TICK,
  NEW_TICK,
  CUR_TICK
};
//
int is_book;
ulong last_tick_time; //Время последнего тика
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
  last_tick_time = 0 ;
  is_book = MarketBookAdd ( Symbol ());
   if (is_book == false ) return ( INIT_FAILED );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   if (is_book == true ) MarketBookRelease ( Symbol ()); 
}
//+------------------------------------------------------------------+
// Expert Book event function                                        |
//+------------------------------------------------------------------+  
void OnBookEvent ( const string &symbol)
{
   if (symbol == Symbol ())
  {
     MqlTick a_ticks[];
     int result = CopyTicks (symbol, a_ticks, COPY_TICKS_ALL , 0 , 1 );
     if (result > 0 )
    {
      FRESH_TICK tick_state = CheckTickTime(a_ticks[ 0 ]);
       switch (tick_state)
      {
       case UNKNOWN_TICK:; //Тик не определен
       break ;
       case NEW_TICK:;     //Торговое время, можно отсылать ордера;
       break ;
       case CUR_TICK:;     //По усмотрению разработчика;
       break ;
      }
    }  
  }
}
//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
FRESH_TICK CheckTickTime( MqlTick &a_tick)
{
   MqlDateTime cur_time, tick_time;
  cur_time.year = 0 ;
   TimeTradeServer (cur_time); //Возвращает расчетное текущее время торгового сервера.
   if (cur_time.year > 0 )
  {
     if ( TimeToStruct (a_tick.time, tick_time) == true )
    {
       if (tick_time.day_of_year == cur_time.day_of_year)       //Проверка, что это сегодняшний тик
      {
         double t_msc = double (a_tick.time_msc - ulong (a_tick.time) * 1000 )/ 1000 ;
         double tr_time = double (tick_time.hour * 3600 + tick_time.min * 60 + tick_time.sec) + t_msc;
         if (((tr_time >= 36000 ) && (tr_time < 50370 )) ||   //10:00:00 - 13:59:30
           ((tr_time >= 50700 ) && (tr_time < 67470 )) ||   //14:05:00 - 19:44:30 
           ((tr_time >= 68700 ) && (tr_time < 85770 )))     //19:05:00 - 23:49:30
        {
           if ( ulong (a_tick.time_msc) > last_tick_time)
          {
            last_tick_time = ulong (a_tick.time_msc);
             return (NEW_TICK);
          } else return (CUR_TICK);  
        }
      }
    }
  }   
   return (UNKNOWN_TICK);
} 

추가됨

CUR_TICK를 사용하면 이것이 이전과 동일한 틱인지 확인할 수도 있습니다.

새 틱 패키지에는 이전 패키지에서 전송되지 않은 틱이 포함되어 있습니다.

 
prostotrader :

Alexey(참여하고 싶지 않았지만...).

이것은 이 주제의 2페이지에 있는 "관련성"(NEW_TICK) 코드가 아닙니까?

아닌 것 같습니다. 왜냐하면:

타임트레이드서버

거래 서버의 예상 현재 시간을 반환합니다. TimeCurrent() 함수와 달리 시간 값은 클라이언트 터미널에서 계산되며 사용자 컴퓨터의 시간 설정에 따라 달라집니다.

저것들. 다시 말하지만 컴퓨터의 시간에 따라 다릅니다(측정의 정확성을 위한 것이 아님).

물론 여기에서 피 보모 코드의 정확성을 확인하고 실제로 문제가 있는 경우 개발자에게 문의해야 합니다.

 
prostotrader :

확인은 TimeGMTOffset 을 통해 수행해야 하는 것 같습니다. 나중에 예시를 올리겠습니다.

 
Alexey Kozitsyn :

아닌 것 같습니다. 왜냐하면:


코드 를 잘 보세요!

TimeTradeServer()날짜와 모든 것을 결정하는 데만 사용됩니다(이 검사는 "만일을 대비하여" 수행됨)!

TimeTradeServer() 는 모두 생략할 수 있습니다!

추가됨

반복합니다

" CUR_TICK를 사용하면 이것이 이전과 동일한 틱인지 확인할 수도 있습니다.

새로운 틱 패킷에는 이전 패킷에서 전송되지 않은 틱이 포함되며 패킷은 1개의 틱("old")으로 구성됩니다 .

 if ( ulong (a_tick.time_msc) > last_tick_time)
{
  last_tick_time = ulong (a_tick.time_msc);
   return (NEW_TICK);
}
 else
{
   //Дополнительные проверки 
}
 
Alexey Kozitsyn :

물론 여기에서 피 보모 코드의 정확성을 확인하고 실제로 문제가 있는 경우 개발자에게 문의해야 합니다.

시장 개요에 수십 개의 기호가 있거나 개요에 여러 기호가 열려 있지만 오페라 브라우저에 수십 개의 예금이 있는 경우 캔트가 나타납니다. 나는 개인 메시지 를 통해 개발자들에게 편지를 썼다.

앞서 쓴 것처럼 문제는 호출 사이에 충분히 큰 Sleep으로 처리되며 sleep(10)은 40자에 충분합니다. 캐릭터의 수가 증가함에 따라 스모크 브레이크가 점점 더 필요한 것은 사실입니다.
사유: