Contagem de barras, incluindo fins de semana - página 4

 

Muito obrigado a todos por sua ajuda e participação!!!

As versões 1, 2 e 4 são mais corretas, mas têm erros, em algum lugar está correto (dia a dia) e em algum lugar está faltando 2-3 dias

A versão 3 vê o número de barras para o período que já foram calculadas.

//+------------------------------------------------------------------------+ 
//| ВЕРСИЯ 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]);}
 

Embora conte 1, 2 e 4 corretamente.
Eu não levei em conta que o segundo ponto passa então para as barras +n recebidas
e também há fins de semana e como resultado tenho 2-3 barras a menos no lugar certo

É possível identificar as barras visíveis?
Isto é, temos o primeiro preço e adicionamos as barras visíveis no gráfico
. Caso contrário, temos o primeiro ponto no dia 5 do mês + 12 barras = o dia 17 do mês + 4 dias de folga = o dia 21 do mês e nos faltam mais alguns dias para o ponto final

 
forex2030:

É possível identificar exatamente as barras visíveis?

Sim, sem problemas. E esta resposta em particular foi a primeira na linha. Simples, rápido, elegante.

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

Incluindo fins de semana?

Escreva 12 meses, ou seja, 12 variáveis com o número de dias nelas, todas em uma matriz

em uma série de anos, com o número de dias em fevereiro, ou calcular um ano com um salto em fevereiro.

em um loop:

somar os dias completos e restantes nos meses iniciais e finais do período requerido

 
Como as férias escapam? Ou eles não contam como férias?)
 
Aleksey Nikolayev:
Como as férias escapam? Ou eles não contam como férias?)
calcula o número total de dias e subtrai o número de dias no histórico de cotações
 
Renat Akhtyamov:
Ele calculará o número total de dias e subtrairá o número de dias no histórico de cotações

Você pode, se tiver certeza de que não há outras razões para faltar o dia.

Também é possível perder apenas parte do dia - isto também pode ter um impacto negativo nos cálculos

 
Aleksey Nikolayev:

Também é possível saltar apenas parte do dia - isto também pode ter um efeito negativo nos cálculos

Neste caso, a barra diária ainda estará presente no gráfico

 
Aleksey Nikolayev:

Você pode, se tiver certeza de que não há outras razões para faltar o dia.

Também é possível perder apenas parte do dia - isto também pode ter um impacto negativo nos cálculos

Você tem que usar o TF diário e nada mais
 
Igor Makanu:

neste caso, a barra diária ainda estará presente no gráfico

É claro que sim. Mas, por exemplo, seu alto-baixo se destacará do resto e sempre haverá uma pergunta - é um feriado ou barras de minutos largadas? Não está muito claro como automatizar tais verificações.