собираю тики, 32 терминала MT4, все ок, но во время новостей (типа NFP) лаги и теряются тики, ресурсы CPU и RAM <10%. - страница 2

 
fxsaber #:

Желательно не просто писать пачками, а записывать пачку только при низких тиковых объемах. Так вероятность потерять тик будет еще меньше.

Хорошая идея, возьму на заметку!

 
Может уже есть какое-то готовое решение, проверенное? Я наверное зря велосипед изобретаю)
 
Dimon1000000 #:
Может уже есть какое-то готовое решение, проверенное? Я наверное зря велосипед изобретаю)

https://www.mql5.com/ru/code/20298

HistoryTicks
HistoryTicks
  • www.mql5.com
Библиотека доступа советников к прошедшим тикам.
 
Dimon1000000 #:

Понял, спасибо! Я так понял что более одного таймера на MT4 ставить нельзя, или есть какой-то способ?

Таймер инициализируется периодом, который является наименьшим из всех предполагаемых таймеров. Если он не кратен периоду одного из таймеров, то период основного таймера уменьшается до тех пор, пока станет кратным всем остальным. А внутри OnTimer() проверяется, какой из таймеров нужно запустить. 

input int    i_nTimer2Period = 10;
input int    i_nTimer3Period = 20;

datetime   g_dtLastProcessedTimer2 = 0,
                g_dtLastProcessedTimer3 = 0;

void OnTimer()
{
        // Выполнение таймера с наименьшим периодом
       ....

       // Выполнение таймера №2
       if (TimeLocal() - g_dtLastProcessedTimer2 >= i_nTimer2Period)
       {
             g_dtLastProcessedTimer2 = TimeLocal();
             ...
       }

       // Выполнение таймера №3
       if (TimeLocal() - g_dtLastProcessedTimer3 >= i_nTimer3Period)
       {
             g_dtLastProcessedTimer3 = TimeLocal();
             ...
       }
}
 

Спасибо, как-то не обращал внимания. Неужели есть кто-то, кто в режиме реального времени поддерживает историю тиков? Получается, что вот тут  https://rannforex.com/rannforex/api/ticks/ история и лежит? В наше время никак иначе, кроме как меценатством это не назвать. Замечательно, что такое существует.

 
Ihor Herasko #:

Неужели есть кто-то, кто в режиме реального времени поддерживает историю тиков?

Когда очень нужно скальпировать на MT4, пользуюсь только этим инструментарием. Советник получает тики почти так, как если бы был CopyTicks в MT4.
 
fxsaber #:
Когда очень нужно скальпировать на MT4, пользуюсь только этим инструментарием. Советник получает тики почти так, как если бы был CopyTicks в MT4.

Да, это очень удобно, не нужно постоянно держать запущенным терминал.

 

Спасибо за помощь!

Есть еще что-то, что стоит знать об оптимизации скорости записи? Я записываю как FILE_CSV, будет ли FILE_BIN быстрее?

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

 
Правильно ли я понимаю, что в этом коде идет запись пачки тиков , но при этом запись все равно идет по 1 тику?

      for (int i = 0; i < Size; i++)
        if (!FileWrite(handle, TickToString(Ticks[i])))
        {
          ALERT(FileWrite(handle, TickToString(Ticks[i])));

          break;
        }

То есть сначала собирается в массиве  n кол-во тиков, а затем каждый тик по очереди записывается в файл.
Я почему-то подумал, что нужно как-то собирать какой-то текст целиком и отправлять его весь на запись, избегая записи построчно.
 
FILE_BIN быстрее, массив надо записывать целиком: