Тестер генерирует разные тики для разных параметров?

 

Столкнулся с проблемой. Есть многовалютный эксперт. Вешаем его, например, на GBPUSD M15 в модели по открытию бара. Один из параметров - перечень инструментов для работы. Делаем два запуска эксперта, сперва для набора "GBPUSD,EURUSD", потом в обратном порядке - "EURUSD,GBPUSD". Получаем какие-то непонятные расхождения в логах. Вплоть до того, что при заданном тестировании от 1 января 2010 года один из прогонов начинается почему-то на последнем баре 2009-го (!). Прикладываю два фрагмента логов от описанных прогонов - легко сравнить контекстно и увидеть различия. Поясните плиз, почему в первом случае есть строки, например,

QN    0    TesterAgent    17:16:33    Intel Core2 Duo  P8600 @ 2.40GHz, 4095 MB, PR69
OD    0    Symbols    17:16:33    GBPUSD: symbol synchronized, 2904 bytes of symbol info received
LI    0    History    17:16:33    GBPUSD: load 27 bytes of history data to synchronize
QR    0    History    17:16:33    GBPUSD: history synchronized from 2007.01.02 to 2010.11.29
RG    0    History    17:16:34    GBPUSD: contains 348044 M1 records of beginning data from 2009.01.02 10:00 to 2009.12.31 18:59
HJ    0    History    17:16:34    GBPUSD,M15: history cache reserved for estimated 25440 bars
MR    0    History    17:16:34    GBPUSD,M15: history begins from 2009.01.02 10:00

а во втором таких строк - нет.

Аналогично, есть другие фрагменты (вроде этого):

LN    0    Symbols    17:16:35    EURUSD: symbol synchronized, 2904 bytes of symbol info received
JP    0    History    17:16:36    EURUSD: load 27 bytes of history data to synchronize
FH    0    History    17:16:36    EURUSD: history synchronized from 2007.01.01 to 2010.11.29

которые встречаются только в прогоне, когда GBPUSD упомянут в параметрах первым. Порядок выполнения самих прогонов не играет роли (если вообразить влияние некоторого кеширования), логи всегда различаются указанным образом.

В коде есть кусок, который проверяет синхронизацию символов следующим образом (обращение к символам идет в порядке их указания в строке параметров; пробовал синхронизировать и относительно _Symbol, и относительно EURUSD - проблемы одинаковы):

bool Sync = false;

bool Synchronization()
{
  string StrUnsync;
  int u = 0;

  datetime dt0 = SeriesInfoInteger("EURUSD"/*_Symbol*/, Period(), SERIES_LASTBAR_DATE);
  
  datetime dates[];
  ArrayResize(dates, SymbolCount);
  for(int j = 0; j < SymbolCount; j++)
  {
    RefreshRates(Instruments[j]);
    datetime dt = SeriesInfoInteger(Instruments[j], Period(), SERIES_LASTBAR_DATE);
    dates[j] = dt;
    if(dt != dt0)
    {
      StrUnsync = StrUnsync + Instruments[j] + " ";
      u++;
    }
  }
  if(u > 0)
  {
    Print("Some symbols are unsynchonized:", StrUnsync);
    Sync = false;
    return(false);
  }
  else
  {
    if(!Sync)
    {
      Print("Synchronization done");
    }
    Sync = true;
  }
  return(true);
}

void OnTick()
{
  if(!Synchronization()) return;
  //ExpertLibStart();
}

void RefreshRates(string symbol)
{
  MqlTick tick;
  SymbolInfoTick(symbol, tick);
  SymbolInfoDouble(symbol, SYMBOL_BID);
}

Вопросы: каким образом параметры влияют на "залезание" в 2009 год? почему смена порядка обращения к символьным базам влияет на генерацию тиков по каждому из символов? По идее, тики каждого символа должны генериться независимо от последовательности запросов этих инструментов.

Заранее спасибо.

Файлы:
logs.zip  3 kb
 

Будем разбираться. Такого быть не должно

 
Маленькое уточнение. В модели по всем тикам картина получше. Но начало по-прежнему в 2009-м.

 
marketeer:
Но начало по-прежнему в 2009-м.

Именно этого быть не должно. Разбираемся.
 

Я решил эту проблему таким костылем :


   static bool firstPass;
   if(!firstPass) // пропускаем первый тик для старта всех символов
     {
      firstPass=true;
      return;
     }

 


 
BoraBo:

Я решил эту проблему таким костылем :

 Если бы Вы раньше обратились в сервис-деск, то мы бы эту проблему решили бы раньше. 

 

А он все равно не помогает. На разных чартах абсолютно разные результаты :

Создание эксперта, торгующего на разных инструментах


Обсуждение статьи




 
stringo:
Именно этого быть не должно. Разбираемся.
marketeer, попробуйте с новым билдом. Это место исправили