주말을 포함한 막대 계산 - 페이지 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개의 변수, 모두 배열에 있습니다.

2월의 일 수를 사용하여 연도의 배열로 변환하거나 윤년으로 연도를 계산합니다.

루프에서:

필요한 기간의 시작과 끝 달의 전체 일수와 남은 일수를 합산합니다.

 
휴일을 청소하는 방법? 아니면 주말로 간주되지 않습니까?
 
Aleksey Nikolayev :
휴일을 청소하는 방법? 아니면 주말로 간주되지 않습니까?
총 일수를 계산하고 견적 내역에서 일수를 뺍니다.
 
Renat Akhtyamov :
총 일수를 계산하고 견적 내역에서 일수를 뺍니다.

다른 이유로 패스가 없다고 확신하는 경우 가능합니다.

하루 중 일부만 건너 뛰는 경우도 발생합니다. 계산에 나쁜 영향을 줄 수도 있습니다.

 
Aleksey Nikolayev :

하루 중 일부만 건너 뛰는 경우도 발생합니다. 계산에 나쁜 영향을 줄 수도 있습니다.

이 경우 일일 막대는 여전히 차트에 표시됩니다.

 
Aleksey Nikolayev :

다른 이유로 패스가 없다고 확신하는 경우 가능합니다.

하루 중 일부만 건너 뛰는 경우도 발생합니다. 계산에 나쁜 영향을 줄 수도 있습니다.

매일의 TFME와 다른 어떤 것도 믿을 필요가 없습니다.
 
Igor Makanu :

이 경우 일일 막대는 여전히 차트에 표시됩니다.

물론 그럴 것이다. 그러나 예를 들어, 그것의 고저가 나머지 부분에서 두드러지고 항상 질문이 있을 것입니다. 휴일 또는 하락한 분봉입니까? 이러한 검사를 자동화하는 방법은 명확하지 않습니다.