Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2701

 
lynxntech #:

https://www.mql5.com/ru/forum/170952/page272#comment_55231147

в этих страницах смотрите было обсуждение, там разные быстрые варианты вычисления времени и т.д. есть

Спасибо

 
void OnStart(void)
  {
   datetime time = TimeCurrent();
int hour = (int)(time / 3600) % 24;
int min = (int)(time / 60) % 60;
int sec = (int)(time % 60);
int xday= (int)((time/86400+4)%7); // день недели, 4 это Четверг
PrintFormat("hour:%d min:%d sec:%d dayofweek:%d \n",hour, min, sec, xday);
  }
 
ANDREY #:
Спасибо большое. А можете написать формулы Семко для вычисления текущего часа, минуты,секунды.

https://www.mql5.com/ru/users/amrali

Смотрите здесь. Этот прогер собрал/создал много быстрых функций.

amrali - Профиль трейдера
amrali - Профиль трейдера
  • 2025.10.20
  • www.mql5.com
Профиль трейдера
 
ANDREY #:
Буду очень признателен, если подскажете, что означает в формуле Семко константа 4 ?   И для чего она нужна. И еще буду Вам признателен если напишете формулы Семко для вычисления текущего часа, минуты, секунды.
Спасибо.
.
 
Alexey Viktorov #:
.
Спасибо. Все понял кроме одного момента.... 
4(или 3) - это четверг. Как я понял это день недели в который  программа вычислила формулу Семко. Но, как мне кажется, этот параметр в данной формуле не может быть константой, то есть не может задаваться явно. Этот параметр, как мне кажется, должен задаваться или переменной значение которой должно меняться вместе со днем недели, или значением возвращаемым функцией. Если функцией... то получается какой то замкнутый круг и бессмыслица.... формула для вычисления дня недели использует функцию для вычисления дня недели!!! Зачем же тогда нужна формула???
Как же должна выглядеть формула Семко с параметром в котором день недели будет  обновляться программно?
Спасибо
 

 


 
Artyom Trishkin #:
Сложить во временный массив всё найденное по ключевым словам
Теперь я прочитал и ничего не понял. Как таким образом в исходнике искать?
 
Vitaly Muzichenko #:

 



Как мне кажется... кто то кого то недопонял.... У меня вопрос вот по этой части формулы (t/86400+4) Если я правильно понял, 4 - это четверг. А четверг - это день в который программа вычислила данную формулу. А следующий день - 5(пятница). Неужели в пятницу я должен буду в данной формуле вручную!!!!! менять значение 4 на значение 5? Очевидно же, что значение с 4 на 5 должна менять программа. Вот я и ломаю голову... каким образом программа поменяет это значение?
 
ANDREY #:

Как мне кажется... кто то кого то недопонял.... У меня вопрос вот по этой части формулы (t/86400+4) Если я правильно понял, 4 - это четверг. А четверг - это день в который программа вычислила данную формулу. А следующий день - 5(пятница). Неужели в пятницу я должен буду в данной формуле вручную!!!!! менять значение 4 на значение 5? Очевидно же, что значение с 4 на 5 должна менять программа. Вот я и ломаю голову... каким образом программа поменяет это значение?

я же дал вам готовый скрипт для проверки!!!!! этой цифрой он тупо добил до понедельника и начал на стандартные 7 дней делить, Вам думать или работать тут?


если так много времени, вот думайте

bool TimeToCalendar(datetime time, MqlDateTime& dt_struct)
  {
   uint  K = 536895458;
   uint  L = 1468000  ;
   uint  m = 146097   ;
   uint  q = 2939745  ;
   uint  r = 2141     ;
   uint  p = 197913   ;
   ulong t = (ulong)time;
   int   n = (int)(t / 86400)                   ;  // Unix day
   uint  N = ((uint)n) + K                      ;  // Computational calendar day
   uint  a = 4 * N + 3                          ;
   uint  c = a / m                              ;
   uint  e = a % m / 4                          ;
   uint  b = 4 * e + 3                          ;
   ulong f = ((ulong)q) * b                     ;
   uint  z = (uint)(f >> 32)                    ;
   uint  h = ((uint)f) / q / 4                  ;
   uint  d = r * h + p                          ;
   uint  Y = 100 * c + z                        ;
   uint  M = d >> 16                            ;
   uint  D = ((ushort)d) / r                    ;
   uint  J = h >= 306                           ;  // Map from Computational to Gregorian calendar
   int Y_G = int((Y - L) + J)                   ;
   int M_G = int(J ? M - 12 : M)                ;
   int D_G = int(D + 1)                         ;
   int HH  = (int)((t / 3600) % 24)             ;
   int MM  = (int)((t / 60) % 60)               ;
   int SS  = (int)(t % 60)                      ;
   int dow = (n + 4) % 7                        ;
   int doy = n - ((Y_G * 5844 - 11512676) >> 4) ;
//int doy = (((n << 2) + 2) % 1461) / 4;  // slower here!
   dt_struct.year           = Y_G;
   dt_struct.mon            = M_G;
   dt_struct.day            = D_G;
   dt_struct.hour           = HH;
   dt_struct.min            = MM;
   dt_struct.sec            = SS;
   dt_struct.day_of_week    = dow;
   dt_struct.day_of_year    = doy;
   return (true);
  }
 
ANDREY #:
Спасибо. Все понял кроме одного момента.... 
4(или 3) - это четверг. Как я понял это день недели в который  программа вычислила формулу Семко. Но, как мне кажется, этот параметр в данной формуле не может быть константой, то есть не может задаваться явно. Этот параметр, как мне кажется, должен задаваться или переменной значение которой должно меняться вместе со днем недели, или значением возвращаемым функцией. Если функцией... то получается какой то замкнутый круг и бессмыслица.... формула для вычисления дня недели использует функцию для вычисления дня недели!!! Зачем же тогда нужна формула???
Как же должна выглядеть формула Семко с параметром в котором день недели будет  обновляться программно?
Спасибо

В неделе СЕМЬ дней.

Если t/86400 равно 0, то остаток от деления будет 0, а это не четверг. А нам нужен четверг…

Если t/86400 равно 1 и +4 то остаток от деления 5 на 7 получим 5. То-есть пятница.