Обсуждение статьи "Основы программирования на MQL5 - Время" - страница 3

 
Maxim Kuznetsov:

вредная на самом деле статья, потому-что 1 к 1-му переизлагает документацию MQL5 и ничего не говорит про практику работу со временем.

а за подобный код в продакшн

программистов лишают премий.

PS. Наиболее востребованные вопросы - "а сколько сейчас времени в Гринвиче", "как давно сгенерён полученный только что тик", "не пора-ли отложить вычисления чтобы не пропустить чего" отчего-то остуствуют.

Вас персонально научит читать, чтобы вы увидели в статье про практику?

aStartDay*86400+3600*aStartHour+60*aStartMinute; - это не продакшн, а учебный код к учебной статье, для быстрого наглядного понимания.

 
Vasyl Nosal:

1 секунда не имеет продолжительности?

Больше вопросов нету:)))))))))))))))))))))))))))))) 

Момент не имеет, а момент это не секунда. Это у вас момент равен секунде. 
 
Dmitry Fedoseev:

Вас персонально научит читать, чтобы вы увидели в статье про практику?

aStartDay*86400+3600*aStartHour+60*aStartMinute; - это не продакшн, а учебный код к учебной статье, для быстрого наглядного понимания.

Эээх.. вы даже не понимаете чем плох этот "учебный код" :-(

PS. персонально учить вас писать я не буду

 
Maxim Kuznetsov:

Эээх.. вы даже не понимаете чем плох этот "учебный код" :-(

PS. персонально учить вас писать я не буду

Тогда себя научи читать.
 

Темы от которых калбасит пипл:

1. Бог.

2. Бесконечность.

3. Отсутствии толщины линии и размера точки в геометрии.

4. Отсутствие продолжительности у момента времени.

5. Когда кто-то делает что-то лучше тебя. 

6. Когда кто-то просто что-то умеет делать. 

7. Когда кто-то что-то сделал. 

 
Dmitry Fedoseev:
Момент не имеет, а момент это не секунда. Это у вас момент равен секунде. 

Угу угу.

В твоём примере код выполняется в определённую секунду, но никак не момент.

 
Vasyl Nosal:

Угу угу.

В твоём примере код выполняется в определённую секунду, но никак не момент.

Время момента указано с точностью до секунды. Но сам момент продолжительности не имеет. 

Допустим тики идут с частотой 10 раз в сек. Если использовать код для промежутка, то будет пропущено несколько тиков. Если же использовать код для момента, произойдет только одно срабатывание, с какой бы частотой не шли тики. Проверятся что один тик был до указанного времени, а второй в то время или позже. Пересечение временной границы. 

 
Dmitry Fedoseev:

Были они. Отвалились куда-то. Наверно при каком-нибудь обновлении сервера. 

Сейчас поищу у себя, если найду, прикреплю сюда. 

Нашли и вернули исходники на место. Причина пропажи пока необъяснима.
 

Вопрос такой в контексте темы...

Нужен аналог TimeCurrent() с точностью до миллисекунды, что-то такого вида TimeCurrentMsс().

 
Dennis Kirichenko:

Нужен аналог TimeCurrent() с точностью до миллисекунды, что-то такого вида TimeCurrentMsс().

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Market closed

fxsaber, 2017.09.22 09:45

// Время последнего тика символа
long GetSymbolTime( const string Symb )
{
  MqlTick Tick;
  
  return(SymbolInfoTick(Symb, Tick) ? Tick.time_msc : 0);
}

// Время последнего тика Обзора рынка
long GetMarketWatchTime( void )
{
  long Res = 0;
  
  for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
  {
    const long TmpTime = GetSymbolTime(SymbolName(i, true));
    
    if (TmpTime > Res)
      Res = TmpTime;
  }
  
  return(Res);
}

// Текущее время на торговом сервере без учета пинга
long GetCurrenTime( void )
{
  static ulong StartTime = GetMicrosecondCount();
  static long PrevTime = 0;
  
  const long TmpTime = GetMarketWatchTime();
  
  if (TmpTime > PrevTime)
  {
    PrevTime = TmpTime;
    
    StartTime = GetMicrosecondCount();
  }
  
  return(PrevTime + (long)((GetMicrosecondCount() - StartTime) / 1000));
}

void OnInit()
{
  MarketBookAdd(_Symbol);
}

void OnDeinit( const int )
{
  MarketBookRelease(_Symbol);
}

string TimeToString( const long Value )
{
  return((string)(datetime)(Value / 1000) + "." + (string)IntegerToString(Value % 1000, 3, '0'));
}

void OnBookEvent( const string& )
{
  Comment(TimeToString(GetCurrenTime()));
}

Не идеально, конечно.