Características da linguagem mql5, subtilezas e técnicas - página 244

 
Alexey Viktorov #:

O que você quer dizer com"em que período"? A função retorna apenas o dia da semana. O que o período tem a ver com isso? Coloque qualquer hora e você obterá o dia da semana.

Coloque a data de seu nascimento e obterá o dia da semana de seu nascimento.

Ou aqui está o dia da semana por hora da vela


Período != timeframe. A função acima retorna o dia da semana correto para algum intervalo de datas e, em seguida, retorna o dia errado. Os colchetes estão realmente perdidos na função acima - você deve ser mais cuidadoso... ))))))))
 
Alexey Viktorov #:

Bem, também mostrei o código completo da função. Mais uma vez:

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

Embora eu concorde com você em um bom ponto. Talvez Nikolai tenha escrito de memória e tenha cometido uma imprecisão. Mas dizer que não funciona não é muito correto.

Semyon Semyonych!... Bem, como assim?... Bem, funciona, mas nem sempre... ))))))))

 
Mikola_2 #:

Não, não está funcionando. ((((

Sim, desculpe. Não sei como fiz besteira. Obrigado.

É claro que essa é a maneira correta de fazer isso:

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

Bem, também mostrei o código completo da função. Mais uma vez:

Embora eu concorde com você em um bom ponto. Talvez Nikolai tenha escrito de memória e tenha cometido uma imprecisão. Mas não é correto dizer que ela não funciona.

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

Nem sempre funciona, este é um código de teste. Resultado:

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

Deve haver quatro em todos os lugares

Novamente, a tela está correta :)
 
(uchar)((t/86400+4)%7)
 
amrali #
(uchar)((t/86400+4)%7)
😂
O compilador 24*60*60 converte 24*60*60 para 86400 mesmo no estágio de pré-compilação.
Portanto, isso não afeta o desempenho.
O registro 24*60*60 é apenas mais legível do ponto de vista do conceito lógico.
 

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Recursos da linguagem mql5, sutilezas e métodos de trabalho

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

A questão é sobre a conversão, não sobre 2 * 2 = 4 😉

A conversão de uchar é o módulo 256.

O que foi dito acima significa (a % 256) % 7, que é diferente de (a % 7) % 256
 
amrali #:

A questão é sobre a conversão, não sobre 2 * 2 = 4 😉

A conversão de uchar é o módulo 256.

O que foi dito acima significa (a % 256) % 7, que é diferente de (a % 7) % 256
h ttps://www.mql5.com/ru/forum/170952/page243#comment_52244665
O que há de errado aqui?
Você deve estar vendo postagens antigas e teve preguiça de olhar para frente.
 
Nikolai Semko #:
O que há de errado com isso?

Sobre isso:

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

Sobre isso:

Oh, problemas

Veja as postagens acima