Zählleisten einschließlich Wochenenden - Seite 3

 
Igor Makanu:

kompliziert, es ist eine Zeit zwischen den Daten in Sekunden (datetime) - das ist genug, um die Anzahl der ganzen Tage, in denen 24 Stunden, 60 Minuten in jeder Stunde und 60 Sekunden in einer Minute zu berechnen.... google zu helfen

Wenn es sich um eine verdrehte Art des Zählens handelt, kann man es so machen:

Sie können, wie Sie vorschlagen, jeden Balken zählen und herausfinden, ob es ein Wochenende zwischen dem aktuellen und dem vorherigen Balken gab.... im Allgemeinen ist hier nur die Möglichkeit, die Aufgabe zu verkomplizieren, durch den Wunsch begrenzt ))))

Wir sollten zunächst davon ausgehen, dass Zeitintervalle bei 0:0 beginnen und enden.

 
Dmitry Fedoseev:

Wir müssen zunächst davon ausgehen, dass die Zeitintervalle bei 0:0 beginnen und enden.

in meinem Beispiel ist diese Annahme nicht erforderlich, aber wir müssen davon ausgehen, dass die Berechnung innerhalb eines Kalenderjahres erfolgt

es gab eine Lösung im ersten Beitrag, alternativ sollte es eine weitere Lösung im Thema Nur nützliche Codes von kimiw geben, ich glaube ich habe gesehen

 
Igor Makanu:

in meinem Beispiel ist diese Annahme nicht erforderlich, aber wir müssen davon ausgehen, dass die Berechnung innerhalb eines Kalenderjahres erfolgt

im ersten Beitrag war die Lösung, als Option - es sollte eine andere Lösung im Thread Nur nützliche Codes von KimIV geben, ich glaube, ich habe gesehen

Es müssen nicht nur Tage gezählt werden, sondern auch Arbeitstage oder Wochenenden.

 
Dmitry Fedoseev:

Es müssen nicht nur Tage gezählt werden, sondern auch Wochentage und Wochenenden.

Das ist schwer zu sagen, der Wortlaut des Problems ist zweideutig:

forex2030:

Woher wissen Sie, wie viele Wochenenden zwischen den Punkten, z. B. auf D1, lagen, und wie können Sie diese zu den erforderlichen Balken addieren?

wenn nach Ihrem Wortlaut, dann kopieren SieCopyTime() die Tagesbalken und analysieren Sie die Wochenendbalken in der Schleife, aber was mit den Wochenendbalken zu tun? - er sagt, dass er sie hinzufügen möchte?
 
Igor Makanu:

Das ist schwer zu sagen, der Wortlaut des Problems ist zweideutig:

...

Wo liegt die Unklarheit: "Woher wissen Sie, wie viele Ausgänge es zwischen den Punkten auf z. B. D1 gab, damit Sie sie zu den gewünschten Balken addieren können? "

Warum dies notwendig ist, ist eine andere Frage.

 
int WorkingDays(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];
}

Scheint geprüft zu haben, scheint in Ordnung zu sein. Prüfen Sie, ob Sie nicht zu faul sind.

 
Dmitry Fedoseev:

Wo ist die Zweideutigkeit: " Woher wissen Sie, wie viele Ausgänge es zwischen den Punkten auf z. B. D1 gab, damit Sie sie zu den gewünschten Balken addieren können? "

Und warum dies notwendig ist, ist eine andere Frage.

Ich denke, wenn wir noch ein paar Stunden plaudern, werden wir anfangen, das Problem zu bewerten, und wie viele Ausgänge zwischen zwei Bars liegen können.... und sicher gibt es immer eine Korrespondenz, dass vor dem Montag der Sonntag kommt?

)))))

mit der Korrektur der Berechnung der Tage durch Subtraktion des Datums, denke ich, dass dieser Code für alle Fälle funktionieren wird

input datetime d_start = D'2020.01.01 12:30:27';
input datetime d_stop  = D'2020.02.01';

//+------------------------------------------------------------------+
void OnStart()
{
   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);
   printf("всего %i дней ", result);
}
//+------------------------------------------------------------------+
 
forex2030:

Nach Datum

Zum ersten Punkt füge ich Balken hinzu

Zählen Sie dann die Anzahl der Balken zwischen diesen Daten.

int  Bars( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   datetime         stop_time        // по какую дату 
   );
Sie erhalten weniger als die von Ihnen eingestellte Anzahl von Balken. Der Unterschied zwischen der Anzahl der eingestellten Balken und der Anzahl der erhaltenen Balken ist die Anzahl der freien Tage. Auf diese Weise erhält man die Anzahl der Takte einer beliebigen Periode, auch einer Minutenperiode. Prüfen Sie sorgfältig, wie viele Balken diese Funktion zurückgibt. Es werden entweder die beiden äußeren Balken oder einer der beiden Balken berücksichtigt. Ich weiß es nicht mehr genau, aber es scheint, dass beide in Frage kommen.
 
Alexey Viktorov:

Zählen Sie dann die Anzahl der Balken zwischen diesen Daten.

Sie erhalten weniger als die angegebene Anzahl von Balken. Die Differenz zwischen der angegebenen Anzahl von Balken und der erhaltenen Anzahl von Balken ist die Anzahl der freien Tage. Auf diese Weise erhält man die Anzahl der Takte einer beliebigen Periode, auch einer Minutenperiode. Prüfen Sie sorgfältig, wie viele Balken diese Funktion zurückgibt. Es werden entweder die beiden äußeren Balken oder einer der beiden Balken berücksichtigt. Ich weiß es nicht mehr genau, aber es scheint, dass beide in Frage kommen.

Sprechen Sie über die Daten, für die es noch keine Balken gibt.

 

Für alle Fälle füge ich ein Beispiel hinzu - es zählt, wie viele Balken fehlen

input datetime d_start = D'2020.01.01 12:30:27';
input datetime d_stop  = D'2020.02.01';

//+------------------------------------------------------------------+
void OnStart()
{
   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);
   printf("всего %i дней ", result);
   datetime t_arr[];
   int allbarD1 = CopyTime(_Symbol, PERIOD_D1, d_start, d_stop, t_arr);
   if(allbarD1 < 0)
   {
      printf("Error CopyTime() func № %i", GetLastError());
      return;
   }
   printf("Всего выходных % i дней", result - allbarD1);
}
//+------------------------------------------------------------------+
Grund der Beschwerde: