Что не так с тиковой историей на MetaQuotes-Demo - страница 3

 
Dmitry Fedoseev:
Не должны, но не обязаны.

Получается что? Получается все индикаторы и советники, которые тестируются (или используют данные ) на исторических тиках начиная с периода ранее 2018-го года не могут претендовать на "достоверные"!

Ну разве не так? Если даже "граальный" советник основывается на заведомо не корректных данных, то он окажется "граальным сливатором"...

Я у своих брокеров не могу получить тики ранее 2019-го. Поэтому решил (многие тут пишут, что тестируют всё чуть ли не за 20 лет) проверить свой индикатор на MQL-DEMO. И всё бы ничего... Индикатор учитывает гэпы. Но ТАКИЕ!!! Чисто случайно обратил на это внимание... Что ж - теперь никому не верить? По 100 раз перепроверять данные, которые должны быть как "аксиома"?

Да и у кого их перепроверять?

.....

 
Этих пропусков не так уж и много, пара сотен за неделю. 
 
Dmitry Fedoseev:
Этих пропусков не так уж и много, пара сотен за неделю. 

Угу... Только почему то за 3,5 последних года их нет... А остальное? Что не так? И ПОЧЕМУ?

 
Сергей Таболин:

Спасибо, парни, за ответы, но! 

Вопрос то не в том, что не работает определение начала цикла, а в том, что не смотря на проверку > 0.0 цены тиков оказываются нулевыми! Я прекрасно понимаю, что если и в этом месте применить нормализацию, то, возможно, ошибок станет меньше. Тем не менее вопрос остаётся: почему в истории тиков значение может быть, например, 0.00000000001 ???

   for(int i = 0; i < ticks_size; i++)
   {
      bid_last = NormalizeDouble(ticks[i].bid, Digits());
      ask_last = NormalizeDouble(ticks[i].ask, Digits());

Результат остался прежним.


По EURUSD 17-й тоже не катит...

2021.06.22 10:43:09.586 testNC (EURUSD,H1)      Скачок цены более допустимого: 12000
2021.06.22 10:43:09.586 testNC (EURUSD,H1)      >>>>> 0.00000 :: 1.12563 ::: 112562
2021.06.22 10:43:09.586 testNC (EURUSD,H1)      >>>>> 0.00000 :: 1.12578 ::: 112577
2021.06.22 10:43:09.586 testNC (EURUSD,H1)      День недели = 4 >>> 0:2:50 >>> 2017-6-8
2021.06.22 10:43:09.586 testNC (EURUSD,H1)      =========
2021.06.22 10:43:09.586 testNC (EURUSD,H1)      Скачок цены более допустимого: 12000
2021.06.22 10:43:09.586 testNC (EURUSD,H1)      >>>>> 0.00000 :: 1.12563 ::: 112562
2021.06.22 10:43:09.586 testNC (EURUSD,H1)      >>>>> 0.00000 :: 1.12578 ::: 112577
2021.06.22 10:43:09.586 testNC (EURUSD,H1)      День недели = 4 >>> 0:3:25 >>> 2017-6-8
2021.06.22 10:43:09.586 testNC (EURUSD,H1)      =========
2021.06.22 10:43:26.801 testNC (EURUSD,H1)      <<< END >>> 2021.06.28 00:00
 
Сергей Таболин:

Результат остался прежним.


По EURUSD 17-й тоже не катит...

А если в самом начале цикла for, когда тик равен нулю, просто не брать его в расчет и через continue пропустить?

 
Vasiliy Pushkaryov:

А если в самом начале цикла for, когда тик равен нулю, просто не брать его в расчет и через continue пропустить?

Не совсем понял... 

  1. Читаем первый тик.
  2. Условия не срабатывают.
  3. Если тик (бид или аск) имеют цену ( > 0 ), то присваиваем их значение "предыдущему".
  4. начиная со второго тика уже сравниваем разницу.

Беда в том, что при всех этих манипуляциях всё-равно пишется, что последний тик == 0 !!!

И вот тут я впадаю в ступор )))) Как так? Если тик несёт 0, то присваивания не может быть по определению. Если он чутка больше, то нормализация должна этот "чуток" убрать! Далее, я сделал проверку тика на 16-и знаках после запятой. НОЛЬ! А присваивание происходит...

 

Сергей Таболин:

Если тик несёт 0, то присваивания не может быть по определению. Если он чутка больше, то нормализация должна этот "чуток" убрать! Далее, я сделал проверку тика на 16-и знаках после запятой. НОЛЬ! А присваивание происходит...

Если тик несет 0, то у вас нет присвоения переменным _prev. В распечатках и не видно, чтобы потом bid_prev, ask_prev были равны 0.

Я предлагал типа такого сделать:

   bid_last = ticks[i].bid;
   ask_last = ticks[i].ask;
   
   if(NormalizeDouble(bid_last, _Digits) == 0  ||  NormalizeDouble(ask_last, _Digits) == 0) continue;
 

Здравствуйте, уважаемые.

Я уже было склонился к мысли, что это в реализации моей логики есть косяки, но некоторые моменты не позволяют это принять.

Давайте с самого начала. Логика индикатора:

//--- цены формирующейся свечи
double   candle_Open       = -1.0;
double   candle_High       = -1.0;
double   candle_Low        = -1.0;
double   candle_Close      = -1.0;
int      candle_Ticks      = -1.0;
datetime candle_Time       = -1.0;
int      candle_DayW_Open  = -1.0;
int      candle_DayW_Close = -1.0;
int      candle_Hour_Open  = -1.0;
int      candle_Hour_Close = -1.0;

int      tick_count     = 0;
datetime tick_time_prev = 0;
datetime tick_time_last = 0;
int      start_day      = -1;
bool     new_period     = true;
int      t  = 0;
MqlTick  ticks[];
input int      in_Candle_Size_Point = 200;            // Размер свечей в пунктах
input datetime in_Start_Time        = D'2015.01.07';  // Дата начала формирования свечей
input bool     in_check_gap         = false;          // Обрабатывать ГЭПы
input bool     in_save_file         = false;          // Сохранять свечи в файл

..........
         // если первый запуск
         if(candle_Open < 0.0) if(!buildCandles()) return(0);
..........

//+------------------------------------------------------------------+
bool  buildCandles(void)
{
   ArrayFree(_Candles_Open);
   ArrayFree(_Candles_High);
   ArrayFree(_Candles_Low);
   ArrayFree(_Candles_Close);
   ArrayFree(_Candles_Ticks);
   ArrayFree(_Candles_Time);
   ArrayFree(_Candles_DayW_Open);
   ArrayFree(_Candles_DayW_Close);
   ArrayFree(_Candles_Hour_Open);
   ArrayFree(_Candles_Hour_Close);
   
   //Print("~~~~ Предварительный расчёт индикатора.");
   ulong _Start_Time = (ulong)in_Start_Time;
   ulong _Period_CP  = (ulong)PeriodSeconds(PERIOD_W1);
   
   while(t > -10)
   {
      ResetLastError();
      ArrayFree(ticks);
      t = CopyTicksRange(Symbol(),ticks,COPY_TICKS_ALL,_Start_Time*1000,(_Start_Time+_Period_CP)*1000);
      if(t <= 0)  // Если скопированных тиков нет или ошибка
      {
         if(t < 0)   // Если ошибка
         {
            Print("LastError = ",GetLastError());
            return(false);
         }
         else  Print(TimeToString(_Start_Time)," >>> Нет тиков...");
      }
      else        // Если тики есть
      {
         new_period = true;
         buildCandlesT(t);
      }
//+---------------------
      _Start_Time += _Period_CP;    // Следующий период
      if(_Start_Time >= (ulong)TimeCurrent()) break;
   }
   
   Print("Время подготовки  >>> ", TimeToString(TimeLocal() - start_time, TIME_MINUTES|TIME_SECONDS));
   Print("Свечей в ", in_Candle_Size_Point,"п. на истории >>> ", newCandles_index + 1);
   return(true);
}
//+------------------------------------------------------------------+
void  buildCandlesT(int ticks_size)
{
   MqlDateTime    tm;
   
   for(int i = 0; i < ticks_size; i++)
   {
      // если самый первый тик в массиве
      if(new_period)
      {
         // вообще самый первый тик
         if(candle_Open < 0.0) Print("Первый тик >>> ",TimeToString(ticks[0].time,TIME_DATE|TIME_MINUTES));
         candle_Open = 0.0;
         
         // если в тике нет цен
         if(ticks[0].bid <= 0.0 && ticks[0].ask <= 0.0) continue;
         
         // если есть хоть одна из цен
         candle_Open       = (ticks[0].bid > 0.0 ? ticks[0].bid : (ticks[0].ask > 0.0 ? ticks[0].ask : 0.0));
         // на всякий случай
         if(candle_Open <= 0.0) continue;

         candle_High       = candle_Open;
         candle_Low        = candle_Open;
         candle_Close      = candle_Open;
         //candle_Ticks      = 1;
         candle_Time       = ticks[0].time;
         tick_time_prev    = candle_Time;
         tick_time_last    = candle_Time;
         
         TimeToStruct(ticks[0].time,tm);
         candle_DayW_Open  = tm.day_of_week;
         candle_Hour_Open  = tm.hour;
         tick_count        = 1;
         
         if(start_day < 0) start_day = candle_DayW_Open;
         
         new_period = false;
      }
      // иначе считаем рост свечи
      else
      {
         tick_count  += 1;
         
         if(ticks[i].bid > 0.0 && ticks[i].bid > candle_High)   candle_High = ticks[i].bid;
         if(ticks[i].ask > 0.0 && ticks[i].ask < candle_Low)    candle_Low  = ticks[i].ask;
         tick_time_prev = tick_time_last;
         tick_time_last = ticks[i].time;
         datetime pt = tick_time_last - tick_time_prev;
         if(pt >= PeriodSeconds(PERIOD_H8)) candle_Time += pt - 7;
         candle_Ticks   = tick_count;
         
         // проверяем свечу на заданный размер
         checkBody("ticks", ticks_size, i);
         //if(body != 0) buildBuffers("ticks", body, i);
      }
   }
   //new_period = true;
}
//+------------------------------------------------------------------+
int   checkBody(string time, int ticks_size = 0, int i = 0)
{
   MqlDateTime    tm;
   
   // размер свечи
   int   bodyUP   = int((candle_High - candle_Open) / Point());
   int   bodyDN   = int((candle_Open - candle_Low)  / Point());
   
   if(bodyDN > in_Candle_Size_Point && bodyUP > in_Candle_Size_Point) Print("...... Косяк с размерами тела свечи ...... ", bodyUP, "<>", bodyDN);
   
   // если последний тик в массиве периода
   if(i == ticks_size - 1)
   {
      TimeToStruct(ticks[i].time, tm);
      Print("Конец периода... ", bodyUP, " <=> ", bodyDN, " День недели = ", tm.day_of_week, " >>> ", tm.hour, ":", tm.min, ":", tm.sec, " >>> ", tm.year, "-", tm.mon, "-", tm.day);
      if(tm.day_of_week < 5) Print(">>>>>>>> Размер недельных тиков = ", ticks_size);
      
      // задаём направление заключительной свечи
      if(bodyUP >= bodyDN)
      {
         bodyUP = in_Candle_Size_Point;
         bodyDN = 0;
      }
      else
      {
         bodyDN = in_Candle_Size_Point;
         bodyUP = 0;
      }
   }
   
   // оставляем только больший размер
   if(bodyUP >= bodyDN) bodyDN = 0;
   else                 bodyUP = 0;
   
   // если размер соответствует, рисуем свечу
   if(bodyUP == in_Candle_Size_Point)
   {
      candle_Close   = candle_High;
      buildBuffers(time,i);
      return(1);
   }
   if(bodyDN == in_Candle_Size_Point)
   {
      candle_Close   = candle_Low;
      buildBuffers(time,i);
      return(-1);
   }
   
   // если не проверяем на гэп
   if(!in_check_gap)
   {
      if(bodyUP > in_Candle_Size_Point)
      {
         candle_Close   = candle_High;
         buildBuffers(time,i);
         return(1);
      }
      if(bodyDN > in_Candle_Size_Point)
      {
         candle_Close   = candle_Low;
         buildBuffers(time,i);
         return(-1);
      }
   }
   
   double   c_cl = candle_Close;
   datetime c_tm = candle_Time;
   
   // размер гэпа
   int gap = (bodyUP > in_Candle_Size_Point ? bodyUP - in_Candle_Size_Point : bodyDN - in_Candle_Size_Point);
   
   if(bodyUP > in_Candle_Size_Point)
   {
      while(gap >= in_Candle_Size_Point * 2)
      {
         candle_Close   = NormalizeDouble(candle_Open + (in_Candle_Size_Point * Point()), Digits());
         candle_High    = candle_Close;
         buildBuffers(time,i);
         gap -= in_Candle_Size_Point;
      }
      
      if(gap > 0)
      {
         candle_Close   = candle_High;
         buildBuffers(time,i);
      }
      candle_High = c_cl;
      
      return(1);
   }
   
   if(bodyDN >= in_Candle_Size_Point)
   {
      while(gap >= in_Candle_Size_Point * 2)
      {
         candle_Close   = NormalizeDouble(candle_Open - (in_Candle_Size_Point * Point()), Digits());
         candle_Low     = candle_Close;
         buildBuffers(time,i);
         gap -= in_Candle_Size_Point;
      }
      
      if(gap > 0)
      {
         candle_Close   = candle_Low;
         buildBuffers(time,i);
      }
      candle_Low  = c_cl;
      
      return(-1);
   }
   
   return(0);
}

Подскажите, где хромает логика?

 

Ну и сразу вопрос, который к логике не имеет прямого отношения.

Индикатор строит свечи на тиках за неделю.

   ulong _Start_Time = (ulong)in_Start_Time;
   ulong _Period_CP  = (ulong)PeriodSeconds(PERIOD_W1);
   
   while(t > -10)
   {
      ResetLastError();
      ArrayFree(ticks);
      t = CopyTicksRange(Symbol(),ticks,COPY_TICKS_ALL,_Start_Time*1000,(_Start_Time+_Period_CP)*1000);
      if(t <= 0)  // Если скопированных тиков нет или ошибка
      {
         if(t < 0)   // Если ошибка
         {
            Print("LastError = ",GetLastError());
            return(false);
         }
         else  Print(TimeToString(_Start_Time)," >>> Нет тиков...");
      }
      else        // Если тики есть
      {
         //Print(TimeToString(_Start_Time)," Тиков >>> ",t);
         new_period = true;
         buildCandlesT(t);
      }

Я запустил индикатор от даты 2015.01.07 (среда, день недели - №3)

Ожидалось, что последний тик должен быть во вторник, день недели №2.

Но распечатка показывает, что 

CH      0       11:01:45.618    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Первый тик >>> 2015.01.07 00:00
CR      0       11:01:45.631    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 145 <=> 178 День недели = 3 >>> 0:0:0 >>> 2015-1-14
RS      0       11:01:45.631    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 513768
KF      0       11:01:45.707    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 115 <=> 60 День недели = 2 >>> 23:59:57 >>> 2015-1-20
JG      0       11:01:45.707    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 459349
DI      0       11:01:45.762    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 66 <=> 72 День недели = 2 >>> 23:59:58 >>> 2015-1-27
GJ      0       11:01:45.762    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 285654
IL      0       11:01:45.827    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 196 <=> 18 День недели = 2 >>> 23:59:58 >>> 2015-2-3
NN      0       11:01:45.827    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 341014
HS      0       11:01:45.891    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 103 <=> 48 День недели = 2 >>> 23:59:57 >>> 2015-2-10
CR      0       11:01:45.891    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 373170
JD      0       11:01:45.953    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 112 <=> 148 День недели = 2 >>> 23:59:58 >>> 2015-2-17

последний тик в недельном контейнере был не 13-го, а 14-го. Почему? Хотя в дальнейшем всё как и ожидалось... Почти.

FH      0       11:01:50.361    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 5 <=> 170 День недели = 2 >>> 23:59:59 >>> 2015-10-27
QJ      0       11:01:50.361    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1116749
HO      0       11:01:50.516    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 76 <=> 97 День недели = 2 >>> 23:59:10 >>> 2015-11-3
KO      0       11:01:50.516    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1079608
LQ      0       11:01:51.398    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 181 <=> 177 День недели = 2 >>> 23:59:57 >>> 2015-12-15
HS      0       11:01:51.398    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1248716
JG      0       11:01:51.568    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 35 <=> 177 День недели = 2 >>> 23:59:10 >>> 2015-12-22
FG      0       11:01:51.568    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1205701
DK      0       11:01:51.684    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 35 <=> 110 День недели = 2 >>> 23:59:59 >>> 2015-12-29
HH      0       11:01:51.685    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 638946
NM      0       11:01:52.312    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 51 <=> 188 День недели = 2 >>> 23:59:59 >>> 2016-1-26
RO      0       11:01:52.312    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1409914
QQ      0       11:01:52.527    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 197 <=> 8 День недели = 2 >>> 23:59:59 >>> 2016-2-2
RS      0       11:01:52.527    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1507278
NE      0       11:01:52.951    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 22 <=> 0 День недели = 2 >>> 23:59:59 >>> 2016-2-16
NH      0       11:01:52.951    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1709714
JI      0       11:01:53.373    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 0 <=> 143 День недели = 2 >>> 23:59:59 >>> 2016-3-1
CL      0       11:01:53.373    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1673338
HR      0       11:01:54.030    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 184 <=> 39 День недели = 2 >>> 23:59:59 >>> 2016-3-29
MS      0       11:01:54.030    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 910631
OE      0       11:01:55.761    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 90 <=> 0 День недели = 2 >>> 23:59:59 >>> 2016-6-7
KE      0       11:01:55.761    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1456022
JK      0       11:01:57.329    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 154 <=> 51 День недели = 2 >>> 23:59:8 >>> 2016-8-9
NI      0       11:01:57.329    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1022433
JO      0       11:01:59.277    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 191 <=> 7 День недели = 2 >>> 23:59:9 >>> 2016-11-8
MM      0       11:01:59.277    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1236819
FS      0       11:02:00.139    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 158 <=> 180 День недели = 2 >>> 23:59:56 >>> 2016-12-13
RR      0       11:02:00.139    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 988842
LG      0       11:02:02.292    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 147 <=> 69 День недели = 2 >>> 23:59:54 >>> 2017-3-21
JF      0       11:02:02.292    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 1230715
RH      0       11:02:03.947    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 59 <=> 52 День недели = 2 >>> 23:58:51 >>> 2017-6-20
OI      0       11:02:03.947    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 489975
QL      0       11:02:04.022    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 17 <=> 181 День недели = 2 >>> 23:59:10 >>> 2017-6-27

Куда пропали недельные тики между этими датами?

А тут пропали уже месяцы!

И ни одного сообщения об ошибке или отсутствии тиков!

Я совершенно не понимаю, что происходит.

 

Главное - СПРОСИТЬ!!! )))

После заданных вопросов, уже сам увидел, что у меня строго прописан индекс 0. А приказ "продолжить" никак его не изменяет. Поправил. Не, конечно пересмотрю внимательно все логи, но, по предварительной оценке, глобальное непонимание исчезло!

Остался самый первый вопрос: почему контейнер с тиками содержит в себе тик из следующего контейнера??? 

FQ      0       14:56:01.977    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Первый тик >>> 2015.01.07 00:00
RJ      0       14:56:01.992    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 145 <=> 178 День недели = 3 >>> 0:0:0 >>> 2015-1-14
CJ      0       14:56:01.992    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 513768
QO      0       14:56:02.084    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 115 <=> 60 День недели = 2 >>> 23:59:57 >>> 2015-1-20
LN      0       14:56:02.084    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 459349
HP      0       14:56:02.140    nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 66 <=> 72 День недели = 2 >>> 23:59:58 >>> 2015-1-27
2021.07.12 09:58:32.375 nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 46 <=> 93 День недели = 5 >>> 23:54:59 >>> 2021-7-2
2021.07.12 09:58:32.478 nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 258 <=> 4 День недели = 5 >>> 23:54:59 >>> 2021-7-9
2021.07.12 09:58:32.482 nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     Конец периода... 214 <=> 72 День недели = 1 >>> 10:0:28 >>> 2021-7-12
2021.07.12 09:58:32.482 nCandles_FgAMAp_1W_1.03 (GBPUSD,H1)     >>>>>>>> Размер недельных тиков = 23404

Как попадают "лишние" тики в заказанный контейнер? И как с этим бороться?