Bares de recuento incluidos los fines de semana - página 4

 

¡¡¡Muchas gracias a todos por vuestra ayuda y participación!!!

Las versiones 1,2 y 4 son más correctas, pero tienen errores, en alguna parte es correcta (día a día) y en otra falta 2-3 días

La versión 3 ve el número de barras del periodo que ya se han calculado.

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

Aunque cuenta 1, 2 y 4 correctamente.
No he tenido en cuenta que el segundo punto se desplaza luego a las barras recibidas +n
y también hay fines de semana y como resultado me faltan 2-3 barras para llegar al lugar correcto

¿Es posible identificar las barras visibles?
Es decir, tenemos el primer precio y le añadimos las barras visibles en el gráfico
. De lo contrario, tenemos el primer punto el día 5 del mes + 12 barras = el 17 del mes + 4 días de descanso = el 21 del mes y nos faltan un par de días más para el punto final

 
forex2030:

¿Es posibleidentificar exactamente las barras visibles?

Sí, no hay problema. Y esta respuesta en particular fue la primera en el hilo. Simple, rápido y elegante.

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

¿Incluyendo los fines de semana?

Escribe 12 meses, es decir, 12 variables con el número de días en ellas, todo en un array

en una matriz de años, con el número de días en febrero, o calcular un año con un bisiesto en febrero.

en un bucle:

sumar los días completos y restantes en los meses de inicio y fin del período requerido

 
¿Cómo se escapan las vacaciones? ¿O no cuentan como vacaciones?)
 
Aleksey Nikolayev:
¿Cómo se escapan las vacaciones? ¿O no cuentan como vacaciones?)
calcula el número total de días y resta el número de días del historial de cotizaciones
 
Renat Akhtyamov:
Calculará el número total de días y restará el número de días del historial de cotizaciones

Puede hacerlo si está seguro de que no hay otros motivos para faltar a la cita.

También es posible perder sólo una parte del día, lo que también puede tener un impacto negativo en los cálculos

 
Aleksey Nikolayev:

También es posible saltarse sólo una parte del día, lo que también puede tener un efecto negativo en los cálculos

En este caso, la barra diaria seguirá estando presente en el gráfico

 
Aleksey Nikolayev:

Puede hacerlo si está seguro de que no hay otros motivos para faltar a la cita.

También es posible perder sólo una parte del día, lo que también puede tener un impacto negativo en los cálculos

Tienes que usar el TF diario y nada más
 
Igor Makanu:

en cuyo caso la barra diaria seguirá estando presente en el gráfico

Lo hará, por supuesto. Pero, por ejemplo, su alta-baja destacará sobre el resto y siempre habrá una pregunta: ¿es un día festivo o se han bajado las barras de los minutos? No está muy claro cómo automatizar estas comprobaciones.