Ошибки, баги, вопросы - страница 1807

[Удален]  

@Slawa, синхронизация распространяется на TimeCurrent()? Сейчас получаю такую картину: вчера вечером в 22.45 выключил терминал. Сегодня утром включил. Рынок еще закрыт. ФОРТС. До открытия рынка в 10:00 мск приходят тики. У меня обрабатывается информация с каждого пришедшего тика в OnBookEvent(). Проблема в том, что несмотря на избыточную проверку синхронизации:

bool GetRatesTotal( int& rates_total )                          // Количество просчитанных баров (out)
        {
         //--- Проверка переданного значения
         if( rates_total > 0 )                                                          // Если передано корректное значение
                 return( true );                                                                        // Возвращаем истину
         //--- Проверка синхронизации
         bool isSync = SymbolIsSynchronized( _Symbol );
         bool sync = (bool)SeriesInfoInteger( _Symbol, _Period, SERIES_SYNCHRONIZED );
         //---
    if( !isSync || !sync )                                                              // Если история не синхронизирована
        {
         Print( __FUNCTION__,": ОШИБКА РАССИНХРОНИЗАЦИИ! isSync = ",isSync,", sync = ",sync,", rt = ",rates_total );
         return( false );                                                                       // Выходим с ошибкой
        }
    //--- Определим число просчитанных баров
         rates_total = Bars( _Symbol, _Period );                // Определяем число баров
         if( rates_total <= 0 )                                                         // Если синхронизация не произведена
                {
                 Print( __FUNCTION__,": ОШИБКА #",GetLastError(),": Синхронизация по Bars() не пройдена!" );
                 return( false );                                                                       // Возвращаем ложь
                }
         else                                                                                                   // Если значение получено
                 return( true );                                                                        // Возвращаем истину
        }

после которой идет запрос времени и текущего SYMBOL_SESSION_... значения - ВРЕМЯ ПРИХОДИТ НЕ КОРРЕКТНОЕ = ВРЕМЕНИ ЗАКРЫТИЯ ТЕРМИНАЛА, т.е. 22:45! Соответственно, запись в файл идет кривая и показания сбиваются. Проверьте, пожалуйста, работу функции TimeCurrent() на синхронизацию!
 

Добавлено:

Значение аргумента rates_total, передаваемое в функцию всегда = 0! Т.е. синхронизация проверяется!

 
Alexey Kozitsyn:

ВРЕМЯ ПРИХОДИТ НЕ КОРРЕКТНОЕ = ВРЕМЕНИ ЗАКРЫТИЯ ТЕРМИНАЛА, т.е. 22:45

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.02.14 15:40

Если на Metaquotes-Demo оставить в Обзоре рынка только MOEX-символы, то TimeCurrent будет отставать на 15 минут. Стоит только добавить один FOREX-символ, как TimeCurrent разом прыгает вперед на 15 минут.
[Удален]  
fxsaber:

Тут реал открытия, врят ли туда можно добавить FOREX-символы... Но раз так, видимо, TimeCurrent() реально кривое сейчас, и даже синхронизовать его нельзя всеми доступными средствами!

Опять таки, если бы к SYMBOL_SESSION_... данным дописывалось бы их реальное время прихода, такой проблемы бы не было! И не нужно было бы городить костыли через TimeCurrent().

[Удален]  
fxsaber:

Кстати, описанный Вами случай вполне логичен, т.к. задержка котировок с биржи идет 15-минутная. А с форекса задержки нет, так что время подтягивается по форексному. Но, это, конечно, ошибка. Т.е. TimeCurrent() "не ориентируется" между разными рынками.

А, еще возможно, что TimeCurrent() идет от поставщика ликвидности. А ликвидность собирается из разных мест. 

 
Alexey Kozitsyn:

Кстати, описанный Вами случай вполне логичен, т.к. задержка котировок с биржи идет 15-минутная. А с форекса задержки нет, так что время подтягивается по форексному. Но, это, конечно, ошибка. Т.е. TimeCurrent() "не ориентируется" между разными рынками.

А, еще возможно, что TimeCurrent() идет от поставщика ликвидности. А ликвидность собирается из разных мест. 

_TimeCurrent = MathMax(SymbolInfoInteger(Symbol1, SYMBOL_TIME), SymbolInfoInteger(Symbol2, SYMBOL_TIME), ...);
[Удален]  
fxsaber:
_TimeCurrent = MathMax(SymbolInfoInteger(Symbol1, SYMBOL_TIME), SymbolInfoInteger(Symbol2, SYMBOL_TIME), ...);
Спасибо за идею, надо будет сравнить SYMBOL_TIME и TimeCurrent(). Возможно будут отличия...
[Удален]  
Alexey Kozitsyn:
Спасибо за идею, надо будет сравнить SYMBOL_TIME и TimeCurrent(). Возможно будут отличия...

Ууу... не думал, что так быстро все произойдет:

2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:37.575 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:35 2017.02.16 10:47:36)
2017.02.16 12:47:52.889 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:47:52.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:47:52.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:47:52.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:47:52.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:47:52.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:47:51 2017.02.16 10:47:52)
2017.02.16 12:48:06.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)
2017.02.16 12:48:06.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)
2017.02.16 12:48:06.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)
2017.02.16 12:48:06.890 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)
2017.02.16 12:48:06.891 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)
2017.02.16 12:48:06.891 GetTimeCurrent: ВНИМАНИЕ! timeCurrent < timeSymbol (2017.02.16 10:48:05 2017.02.16 10:48:06)

При включении терминала, слету. Явная ошибка TimeCurrent()!

[Удален]  
fxsaber:
_TimeCurrent = MathMax(SymbolInfoInteger(Symbol1, SYMBOL_TIME), SymbolInfoInteger(Symbol2, SYMBOL_TIME), ...);
Тут, действительно, пока только так обойти. Выбором наибольшего времени. Но это дополнительные затраты на получении на каждом OnBookEvent() двух значений времени...
 
Alexey Kozitsyn:
Тут, действительно, пока только так обойти. Выбором наибольшего времени. Но это дополнительные затраты на получении на каждом OnBookEvent() двух значений времени...
Сделайте эмуляцию TimeTradeServer через GetMicrosecondCount. Либо в 99% BookEvent добавляйте разность между TimeTradeServer и TimeCurrent.
[Удален]  

Заявка в СД #1674783

Пожалуйста, решите как можно скорее!