Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 244

 
Alexey Viktorov #:

Cosa significa"in quale periodo"? La funzione restituisce semplicemente il giorno della settimana. Cosa c'entra il periodo? Basta mettere un'ora qualsiasi e si ottiene il giorno della settimana.

Mettete la data di nascita e otterrete il giorno della settimana della vostra nascita.

Oppure ecco il giorno della settimana in base all'ora della candela


Periodo != timeframe. La funzione precedente restituisce il giorno della settimana corretto per un certo intervallo di date e poi restituisce quello sbagliato. Le parentesi sono davvero perse nella funzione di cui sopra - dovreste fare più attenzione... ))))))))
 
Alexey Viktorov #:

Ho mostrato anche il codice completo della funzione. Di nuovo:

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

Anche se sono d'accordo con te su un punto importante. Forse Nikolai ha scritto a memoria e ha fatto un'imprecisione. Ma dire che non funziona non è del tutto corretto.

Semyon Semyonych!... Beh, come mai?... Beh, funziona, ma non sempre... ))))))))

 
Mikola_2 #:

No, non funziona. ((((

Sì, mi dispiace. Non so come ho fatto a sbagliare. Grazie.

Certo che è il modo giusto di farlo:

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

Ho mostrato anche il codice completo della funzione. Di nuovo:

Anche se sono d'accordo con te su un punto importante. Forse Nikolai ha scritto a memoria e ha fatto un'imprecisione. Ma non è del tutto corretto dire che non funziona.

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

Non funziona sempre, questo è un codice di prova. Risultato:

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

Dovrebbero esserci quattro ovunque

Anche in questo caso, la schermata è corretta :)
 
(uchar)((t/86400+4)%7)
 
amrali #
(uchar)((t/86400+4)%7)
😂
Il compilatore 24*60*60 converte 24*60*60 in 86400 anche in fase di precompilazione.
Quindi non influisce sulle prestazioni.
Il record 24*60*60 è solo più leggibile dal punto di vista del concetto logico.
 

Forum sul trading, sui sistemi di trading automatico e sulla verifica delle strategie di trading

Caratteristiche del linguaggio mql5, sottigliezze e metodi di lavoro

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

E 'per quanto riguarda il cast, non circa 2 * 2 = 4 😉

Il cast di uchar è modulo 256.

Quanto sopra significa (a % 256) % 7, che è diverso da (a % 7) % 256
 
amrali #:

Si tratta del cast, non di 2 * 2 = 4 😉

Il cast degli uchar è modulo 256.

Quanto sopra significa (a % 256) % 7, che è diverso da (a % 7) % 256
h ttps://www.mql5.com/ru/forum/170952/page243#comment_52244665
Cosa c'è di sbagliato qui?
Devi aver guardato i vecchi post e sei stato troppo pigro per guardare avanti.
 
Nikolai Semko #:
Cosa c'è di sbagliato in questo?

A proposito di questo:

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

A questo proposito:

Oh guai

Vedi i post sopra


Motivazione: