Особенности языка mql5, тонкости и приёмы работы - страница 244

 
Alexey Viktorov #:

Что значит «на каком периоде»? Функция всего лишь возвращает день недели. При каких делах тут период? Любое время ставите и получите день недели.

Поставьте дату вашего рождения и получите день недели вашего рождения.

Или вот день недели по времени свечи


Период != таймфрейм. Какой-то диапазон дат указанная выше функция возвращает правильный день недели, а потом - неправильный. В вышеприведенной функции действительно потеряны скобки - тщательнЕе надо...    ))))))))
 
Alexey Viktorov #:

Ну так и я тоже показал полный код функции. Повторно:

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

Хотя, по хорошему соглашусь с вами. Возможно и Николай писал по памяти и допустил неточность. Но говорить о том, что это не работает не совсем правильно.

Семён Семёныч!..   Ну как же так?..   Хорошо, работает, но не совсем всегда...   ))))))))

 
Mikola_2 #:

Не-а, не работает.    (((

Да, сорян. Сам не понимаю, как так лажанулся. Спасибо.

Конечно же правильный вариант такой:

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

Ну так и я тоже показал полный код функции. Повторно:

Хотя, по хорошему соглашусь с вами. Возможно и Николай писал по памяти и допустил неточность. Но говорить о том, что это не работает не совсем правильно.

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

Не всегда работает, это тестовый код. Результат:

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

Там везде четвёрки должны быть

Повторюсь, на скрине всё правильно :)
 
(uchar)((t/86400+4)%7)
 
amrali #
(uchar)((t/86400+4)%7)
😂
Компилятор 24*60*60 преобразует в 86400 ещё на этапе прекомпиляции.
Поэтому это не влияет на производительность.
Просто запись 24*60*60 более читабельна с точки зрения понятия логики.
 

Forum on trading, automated trading systems and testing trading strategies

Features of the mql5 language, subtleties and methods of work

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

It is regarding the cast, not about 2 * 2 = 4 😉

uchar cast is modulo 256.

The above means (a % 256) % 7, which is different from (a % 7) % 256 
 
amrali #:

It is regarding the cast, not about 2 * 2 = 4 😉

uchar cast is modulo 256.

The above means (a % 256) % 7, which is different from (a % 7) % 256 
https://www.mql5.com/ru/forum/170952/page243#comment_52244665
Что здесь не так?
Вы наверное смотрите старые сообщения и поленились заглянуть вперёд.
 
Nikolai Semko #:
Что здесь не так?

Про это:

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

Про это:

Ох беда

Смотрим сообщения выше 


Причина обращения: