Подсчёт баров с учётом выходных - страница 4

 

Всем спасибо большое за помощь и участие!!

Версия 1,2 и 4 более правильные, но имеют погрешности, где-то верно считает (день в день) а где-то не хватает 2-3 дня

Версия 3 видит кол-во баров за период которые уже рассчитаны.

//+------------------------------------------------------------------------+ 
//| ВЕРСИЯ 1 рассчитывает бары за период только выходных дней  12бар=3вых  | 
//+------------------------------------------------------------------------+ 
int NumData1(datetime d_start,datetime d_stop){
   const int day_in_sec = 24 * 60 * 60;
   datetime d_corect1 = d_start - d_start % day_in_sec;
   datetime d_corect2 = d_stop - d_stop % day_in_sec;
   int result = (int)((d_corect2 - d_corect1) / day_in_sec);
   datetime t_arr[];
   int allbarD1 = CopyTime(_Symbol, PERIOD_D1, d_start, d_stop, t_arr);
   if(allbarD1 < 0) return(0);
return(result-allbarD1);}
//+------------------------------------------------------------------------+ 
//| ВЕРСИЯ 2 рассчитывает бары за период только рабочих дней  12бар=9раб   | 
//+------------------------------------------------------------------------+ 
int NumData2(datetime d_start,datetime d_stop){
   int bar=Bars(Symbol(),0,d_start,d_stop);
return(bar);}
//+------------------------------------------------------------------------+ 
//| ВЕРСИЯ 3 рассчитывает бары за период                      12бар=12бар  | 
//+------------------------------------------------------------------------+ 
int NumData3(datetime d_start,datetime d_stop){
   MqlDateTime dts[2];
   TimeToStruct(d_start,dts[0]);
   TimeToStruct(d_stop,dts[1]);
return(dts[1].day_of_year - dts[0].day_of_year);}
//+------------------------------------------------------------------------+ 
//| ВЕРСИЯ 4 рассчитывает бары за период только рабочих дней  12бар=9раб   | 
//+------------------------------------------------------------------------+ 
int NumData4(datetime startDate,datetime endDate){
   int d=int((endDate-startDate)/86400);   
   int m[7,7]={
   {0, 0,1,2,3,4,5}, // воскр
   {0, 1,2,3,4,5,5}, // понед
   {0, 1,2,3,4,4,4}, // вторн
   {0, 1,2,3,3,3,4}, // среда
   {0, 1,2,2,2,3,4}, // четв
   {0, 1,1,1,2,3,4}, // пятн
   {0, 0,0,1,2,3,4}  // субб
   };
return((d/7)*5+m[(int)TimeDayOfWeek(startDate)][d%7]);}
 

Хотя всё верно считает 1,2 и 4
Я не учёл что вторая точка потом передвигается на полученные +n баров
а там тоже есть выходные и в итоге мне не хватает до нужного места 2-3 бара

Можно ли определить именно видимые бары?
Т.е. есть первая цена и к ней добавить именно видимые бары на графике
А то получается что имеем первую точку 5 число месяца + 12 баров = 17 число месяца + 4 выходных = 21 число месяца и не хватает ещё пару дней до конечной точки

 
forex2030:

Можно ли определить именно видимые бары?

Да, без проблем. Причем именно этот ответ был самым первым в теме. Просто, быстро, элегантно.

Подсчёт баров с учётом выходных
Подсчёт баров с учётом выходных
  • 2020.04.25
  • www.mql5.com
Есть две точки t1 и t2, между ними 25 баров, как узнать сколько было выходных между точками например на D1 чтобы потом их прибавить к нужным барам...
 

с учетом выходных?

прописываем 12 месяцев, т.е. 12 переменных с количеством в них дней, это все в массив

в массив года, с количеством дней февраля, либо рассчитать год с високосным февралем

в цикле:

суммируем полные и остатки дней в начальном и конечном месяце требуемого периода

 
Как праздничные дни убирать? Или они не считаются выходными?)
 
Aleksey Nikolayev:
Как праздничные дни убирать? Или они не считаются выходными?)
посчитает сколько всего дней и вычтет сколько дней в истории котировки
 
Renat Akhtyamov:
посчитает сколько всего дней и вычтет сколько дней в истории котировки

Можно, если есть уверенность, что нет пропусков по другим причинам.

Ещё бывает пропуск только части дня - тоже может плохо повлиять на расчёты

 
Aleksey Nikolayev:

Ещё бывает пропуск только части дня - тоже может плохо повлиять на расчёты

в этом случае дневной бар все равно будет присутствовать на графике

 
Aleksey Nikolayev:

Можно, если есть уверенность, что нет пропусков по другим причинам.

Ещё бывает пропуск только части дня - тоже может плохо повлиять на расчёты

считать нужно на дневном ТФме и больше никак
 
Igor Makanu:

в этом случае дневной бар все равно будет присутствовать на графике

Будет конечно. Но, например, его high-low будет выделяться на фоне остальных и всегда будет стоять вопрос - это праздник или выпавшие минутные бары? Не очень понятно, как автоматизировать подобные проверки.

Причина обращения: