Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зачем продавать продукты в MetaTrader AppStore? Узнай из статьи!
Андрей
105
Андрей 2015.03.20 15:44 

Вот простейший код советника на таймере

uint _LastTickCount, _LastTickCountTick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(1);
   _LastTickCount=0;
   _LastTickCountTick=0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   uint TickCount, t;
    TickCount=GetTickCount();
    if(_LastTickCount==0)
      {
      _LastTickCount=TickCount;
      return;
      }
   t=TickCount-_LastTickCount;
   _LastTickCount=TickCount;
   Print("Таймер ",t," ms");
   Comment(t);
  }
//+------------------------------------------------------------------+

На VDS стоит win2008 r2 standart SP1, запускал от 1 до 9 терминалов. Файл отчёта прилагаю.

Начиная с 5 терминалов барахлить. На 9 это вообще не похоже на таймер. В диспетчере задач ресурсов вроде хватает. Скрин при работающих 9 терминалах


Файлы:
testtimer.txt 23 kb
MetaQuotes
Админ
24432
Renat Fatkhullin 2015.03.20 16:41  

Это закономерно.

На слабом и придушенном VPS запуск множества терминалов (как и любых других программ, требующих адекватной реакции) неминуемо приведет к задержкам даже в вызове системного таймера.

Обратите внимание, что такие тормоза (в сотни миллисекунд) и на банальном совершении сделок можно получить, используя такие VPS. Поэтому нужно реально оценивать последствия "экономии" из-за упаковки множества программ на одном VPS.

MetaQuotes
Админ
24432
Renat Fatkhullin 2015.03.20 16:45  

Для информации: в нашем сервисе MetaTrader Hosting Server мы все сделали, чтобы принципиально избежать задержек. Мы не тратим по 80% ресурсов на поддержание виртуализации сотни операционок для обеспечения VPS, у нас нулевой оверхед по затратам ресурсов.

Посмотрите мои объяснения: https://www.mql5.com/ru/forum/37453#comment_1161693

Андрей
105
Андрей 2015.03.20 18:28  

Что то именно с OnTimer().

Это VDS, а не VPS. И он вроде не слабый. Судя по диспетчеру задач, свободных ресурсов процессора и памяти достаточно. Тики идут в терминале нормально, даже когда с OnTimer клинит на минуты вместо 1 секунды. Попробовал цикл с Sleep(1000) внутри, стабильно выдаёт примерно 1014 ms, никаких тормозов.

Подскажите какие ресурсы винды использует именно  OnTimer. Может как то можно добавить силов именно этому ресурсу винды?

Или всё же не стоит надеяться на нормальную работу  OnTimer и делать по старинке цикл и  Sleep(1000) внутри?

MetaQuotes
Админ
24432
Renat Fatkhullin 2015.03.20 19:17  

OnTimer работает через обычную Windows очередь и обычный механизм Windows таймера.

Он напрямую зависит от нагрузки на операционку, причем ждать cpu = 100% как показатель загруженности компа нельзя. VDS - это маркетинговая перелицовка VPS, никакой разницы нет.

При работе VPS тормоз можно словить в любом месте и он зачастую (без мониторинга ресурсов) невидим. Например, простейшее чтение/запись десятка байт из-за загруженности хостовой машины тормозит процессы операционки на сотни миллисекунд. Это все обычно видно в мониторе ресурсов, где дисковая задержка не 0-5 мс, а 1500-2000 мс. Чуть меньше шансов, но аналогичное можно словить на сетевой карте. 

Причем в этот же самый момент системного тормоза, отдельно и независимо(никуда на диск или сеть не обращающийся) работающий поток может чувствовать себя нормально и правильно отрабатывать Sleep. До момента, пока не влезет в системный синхронный доступ к тормозящему ресурсу.

Про процессор тоже не забывайте. Обычно его 12-16-24 ядер разделяют сотня копий операционок, а видимые вам 2 ядра абсолютно виртуальные и хорошо придушены соседями.

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий