週末を含むカウントバー - ページ 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は正しくカウントされますが。
2点目がその後、受信した+n本の棒に移動することを考慮していない
と、週末もあり、結果的に2-3小節分足りません。

可視光バーの 識別は可能ですか?
つまり、最初の価格があり、それに目に見えるバーをチャート上に追加します。
。さもなければ、最初のポイントが月5日+12バー=月17日+4日休み=月21日となり、終了ポイントまであと数日足りないことになります。

 
forex2030:

見えるバーを正確に特定 することは可能でしょうか?

はい、問題ありません。そして、この特別な回答は、このスレッドの一番最初の ものでした。シンプル、クイック、エレガント。

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

週末も含めて?

12ヶ月、つまり12個の変数に日数を入れて、すべて配列に書き込む

を、2月の日数で、年の配列に変換するか、2月に閏年がある年を計算します。

をループで表示します。

必要な期間の開始月と終了月の満日数と残日数を足し合わせます。

 
休日はどのように過ごすか?それとも休日としてカウントされないのでしょうか?)
 
Aleksey Nikolayev:
休日はどのように過ごすか?それとも休日にはカウントされないのでしょうか)
は、合計日数を計算し、見積もり履歴の日数を差し引きます。
 
Renat Akhtyamov:
合計日数を計算し、見積もり履歴の日数を差し引くことになります

他に欠席する理由がないことが確認できれば可能です。

また、一日のうちの一部だけを欠席することも可能で、この場合も計算に悪影響を及ぼす可能性があります

 
Aleksey Nikolayev:

また、一日のうち一部だけをスキップすることも可能ですが、これも計算に悪い影響を及ぼします

この場合、日足はチャート上に表示されたままです。

 
Aleksey Nikolayev:

他に欠席する理由がないことが確認できれば可能です。

また、一日のうちの一部だけを欠席することも可能で、この場合も計算に悪影響を及ぼすことがあります

デイリー TFを使用 し、それ以外のものは使用しないこと
 
Igor Makanu:

この場合、日足バーがチャートに表示されたままになります。

もちろん、そうなります。しかし、例えば、そのハイ・ローは他と一線を画しており、常に疑問がつきまとう。休日なのか、それともドロップしたミニッツバーなのか?このようなチェックを自動化する方法は、あまり明確ではありません。