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

 
Можно просто сбрасывать данные в файл раз в минуту, сами тики собирать в массивы. Остальные советы уже даны
 
Aliaksandr Hryshyn #:
FILE_BIN быстрее, массив надо записывать целиком:

Спасибо! Похоже, что это то, что нужно. Буду пробовать

 
Всем большое спасибо за ответы, набрался мудрости, ушел дорабатывать свой код.
 
такой еще вопрос: стоит ли постоянно открывать-закрывать файл?

Раньше я открывал файл на инициализации, и закрывал при инициализации.

А вот в описании FileWriteArray  есть пример, где открытие и закрытие происходит каждый раз когда ты обращаешься к функции для записи.

//+------------------------------------------------------------------+
//| Запись n элементов массива в файл                                |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- откроем файл
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- запишем данные массива в конец файла
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- закрываем файл
      FileClose(handle);
     }
   else
      Print("Failed to open the file, error ",GetLastError());
  }

Вот мне интересно, есть ли какая-то разница? чисто интуитивно я полагаю, что открывать-закрывать при каждой записи это лишнее и наверное будет тратить больше времени.

Но может все не так просто и есть что-то такое, почему держать файл постоянно открытым вредно?
 
Dimon1000000 #:
Но может все не так просто и есть что-то такое, почему держать файл постоянно открытым вредно?

Замерьте через микросекунды разные варианты дозаписи в файл (не тиков, а любых данных). Их точно меньше, чем пальцев одной руки. Эти ответы будут наиболее точны для вашей конфигурации.

 

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

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

Dimon1000000, 2023.08.12 11:52

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

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

          break;
        }

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

Да, здесь построчно. Без аргументов, это не то место, где стал бы ускорять. Но вопрос, как минимум, нужно изучить, стоит ли построчно писать мелкие строки или лучше один раз большую строку.


Соображения следующие.

Во время выхода новостей получаем в среднем 200 тиков в минуту по каждому символу. Если символов 50, то это 10 000 тиков в минуту. И это только один терминал, а их 30! Итого 300К записей в минуту. Если это не RAM-drive, то износ приличный, не говоря про тормоза.


Сделайте замеры, в общем.

 
Еще по теме.
 
Dimon1000000:
Выделенный сервер, Проц AMD Ryzen 7 7700 8-Core Processor 3.80 GHz, оператива 64 GB.

Запустил 32 MT4, разные брокеры. Собирает тики вообще без проблем, просто песня.
Выходят новости - тики по ряду брокеров не пишутся, жоские лаги, терминалы висят и т.д. Спустя пару минут опять все ок.

Не могу понять, почему так может быть? Может кто знает сколько терминалов максимум держать надо чтобы не было лаг этих, и почему во время новостей?

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

 
Nikolay Moskalev #:

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

пруф с тиковым графиком, конечно может не самый показательный, то что было сегодня на ставке NZD. 

то же самое у другого честного брокера


 
Dimon1000000 #:

Вот мне интересно, есть ли какая-то разница? чисто интуитивно я полагаю, что открывать-закрывать при каждой записи это лишнее и наверное будет тратить больше времени.

   Если я не ошибаюсь один советник на mt5 не может открыть одновременно более 50 файлов . Вроде наступал на эти грабли. Могу обманывать.

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