Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 244

 
Alexey Viktorov #:

Was meinen Sie mit"in welchem Zeitraum"? Die Funktion gibt nur den Wochentag zurück. Was hat die Periode damit zu tun? Geben Sie eine beliebige Zeit ein und Sie erhalten den Wochentag.

Geben Sie das Datum Ihrer Geburt ein und Sie erhalten den Wochentag Ihrer Geburt.

Oder hier ist der Wochentag nach Kerzenzeit


Zeitraum != Zeitrahmen. Die obige Funktion gibt den richtigen Wochentag für einen bestimmten Datumsbereich zurück, und dann den falschen. Die Klammern sind in der obigen Funktion wirklich verloren gegangen - Sie sollten vorsichtiger sein... ))))))))
 
Alexey Viktorov #:

Nun, ich habe auch den vollständigen Code der Funktion gezeigt. Nochmals:

uchar WhatWeekDay(datetime t)
 {
  return uchar(t/(PeriodSeconds(PERIOD_D1))+4)%7;
 }

Obwohl ich Ihnen in einem guten Punkt zustimme. Vielleicht hat Nikolai aus dem Gedächtnis geschrieben und eine Ungenauigkeit gemacht. Aber zu sagen, dass es nicht funktioniert, ist nicht ganz richtig.

Semyon Semyonych!... Nun, wie das?... Nun, es funktioniert, aber nicht immer... ))))))))

 
Mikola_2 #:

Nein, es funktioniert nicht. (((

Ja, tut mir leid. Ich weiß nicht, wie ich es vermasseln konnte. Ich danke dir.

Natürlich ist das der richtige Weg:

uchar WhatWeekDay(datetime t) {
   return uchar((t/(24*60*60)+4 )%7);
}
 
Alexey Viktorov #:

Nun, ich habe auch den vollständigen Code der Funktion gezeigt. Nochmals:

Obwohl ich Ihnen in einem guten Punkt zustimme. Vielleicht hat Nikolai aus dem Gedächtnis geschrieben und eine Ungenauigkeit gemacht. Aber es ist nicht ganz richtig zu sagen, dass es nicht funktioniert.

void OnStart()
  {
   for(int i1=0; i1<100; i1++)
      Print(WhatWeekDay(i1*7*24*60*60));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
uchar WhatWeekDay(datetime t)
  {
   return uchar(t/(PeriodSeconds(PERIOD_D1))+4)%7;
  }

Es funktioniert nicht immer, dies ist ein Testcode. Ergebnis:

2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4

... 
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0

... 
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   3
2024.02.10 17:51:47.584 2 (EURUSD,H1)   3
2024.02.10 17:51:47.584 2 (EURUSD,H1)   3
...

Es sollten überall Vieren sein

Auch hier ist der Bildschirm korrekt :)
 
(uchar)((t/86400+4)%7)
 
amrali #
(uchar)((t/86400+4)%7)
😂
Der 24*60*60-Compiler wandelt 24*60*60 bereits in der Vorkompilierungsphase in 86400 um.
Das hat also keine Auswirkungen auf die Leistung.
Der 24*60*60-Datensatz ist nur aus Sicht des Logikkonzepts besser lesbar.
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Eigenschaften der Sprache mql5, Feinheiten und Arbeitsmethoden

Aliaksandr Hryshyn , 2024.02.10 15:52

void  OnStart  () 
  { 
   for  ( int  i1= 0  ; i1< 100  ; i1++)
        Print  (WhatWeekDay(i1* 7  * 24  * 60  * 60  )); 
  } 
//+------------------------------------------------ - -------------------+ 
//| | 
//+------------------------------------------------ - -------------------+ 
uchar  WhatWeekDay( datetime  t) 
  { 
   return  uchar  (t/( PeriodSeconds  ( PERIOD_D1  )) + 4  )% 7  ; 
  } 

Es geht um den Cast, nicht um 2 * 2 = 4 😉 .

uchar cast ist modulo 256.

Das bedeutet (a % 256) % 7, was sich von (a % 7) % 256 unterscheidet.
 
amrali #:

Es geht um den Cast, nicht um 2 * 2 = 4 😉 .

uchar cast ist modulo 256.

Das bedeutet (a % 256) % 7, was sich von (a % 7) % 256 unterscheidet.
h ttps://www.mql5.com/ru/forum/170952/page243#comment_52244665
Was ist hier falsch?
Sie müssen sich alte Beiträge ansehen und waren zu faul, um nachzuschauen.
 
Nikolai Semko #:
Was ist daran falsch?

Darüber:

Print(uchar(257) % 7);   // 1
Print(257 % 7);          // 5
 
trader6_1 #:

Das ist es:

Oh Ärger

Siehe Beiträge oben