Caractéristiques du langage mql5, subtilités et techniques - page 244

 
Alexey Viktorov #:

Que voulez-vous dire par"à quelle période" ? La fonction renvoie simplement le jour de la semaine. Quel est le rapport avec la période ? Mettez n'importe quelle heure et vous obtiendrez le jour de la semaine.

Mettez la date de votre naissance et vous obtiendrez le jour de la semaine de votre naissance.

Ou voici le jour de la semaine à l'heure de la bougie


Period != timeframe. La fonction ci-dessus renvoie le bon jour de la semaine pour une certaine plage de dates, puis le mauvais. Les parenthèses sont vraiment perdues dans la fonction ci-dessus - vous devriez faire plus attention... ))))))))
 
Alexey Viktorov #:

J'ai également montré le code complet de la fonction. Encore une fois :

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

Bien que je sois d'accord avec vous sur un point important. Peut-être que Nikolaï a écrit de mémoire et qu'il a fait une erreur. Mais dire que cela ne fonctionne pas n'est pas tout à fait juste.

Semyon Semyonych !... Eh bien, comment cela ?... Eh bien, cela fonctionne, mais pas toujours... ))))))))

 
Mikola_2 #:

Non, ça ne marche pas. ((()

Oui, désolé. Je ne sais pas comment j'ai fait pour me tromper. Je vous remercie.

Bien sûr que c'est la bonne façon de faire :

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

J'ai également montré le code complet de la fonction. Encore une fois :

Je suis d'accord avec vous sur un point important. Peut-être que Nikolaï a écrit de mémoire et qu'il a fait une erreur. Mais il n'est pas tout à fait juste de dire que cela ne fonctionne pas.

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;
  }

Cela ne fonctionne pas toujours, il s'agit d'un code de test. C'est un code de test :

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
...

Il devrait y avoir des quatre partout

Encore une fois, l'écran est correct :)
 
(uchar)((t/86400+4)%7)
 
amrali #
(uchar)((t/86400+4)%7)
😂
Le compilateur 24*60*60 convertit 24*60*60 en 86400 même au stade de la précompilation.
Cela n'affecte donc pas les performances.
L'enregistrement 24*60*60 est simplement plus lisible du point de vue du concept logique.
 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Caractéristiques du langage mql5, subtilités et méthodes de travail

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  ; 
  } 

C'est à propos du cast, pas à propos de 2 * 2 = 4 😉

Le cast d'uchar est modulo 256.

Ce qui précède signifie (a % 256) % 7, ce qui est différent de (a % 7) % 256.
 
amrali #:

Il s'agit de la distribution, pas de 2 * 2 = 4 😉

La conversion d'un uchar est modulo 256.

Ce qui précède signifie (a % 256) % 7, ce qui est différent de (a % 7) % 256.
h ttps://www.mql5.com/ru/forum/170952/page243#comment_52244665
Qu'est-ce qui ne va pas ici ?
Vous devez consulter d'anciens messages et vous avez été trop paresseux pour regarder en avant.
 
Nikolai Semko #:
Quel est le problème ?

A propos de ça :

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

A ce propos :

Oh trouble

Voir les messages ci-dessus