Новая версия платформы MetaTrader 5 build 5120: улучшения и исправления - страница 33

 
Forester #:

Думаю для больших блоков памяти > 4Гб можно их делить на куски по 2 Гб например и при запросе - выбирать нужный.

Да, это первое приходит на ум. Но я не уверен, что можно через данный механизм выделить порциями суммарно больше 4-х гигов.

Вот только задачка про своп -файл может быть сложной.

Гуглил, делают. Но ничего не понял. Нет фундаментальных знаний по теме.

 
Forester #:
Если главная задача - экономия памяти - то можно и через RAM диск работать, я себе 36 Гб выделал.

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

Новая версия платформы MetaTrader 5 build 5120: улучшения и исправления

Forester, 2025.06.29 09:21

При оптимизации через RAM диск. Лучший результат был при 3-х блоках памяти:

Agents = 36
Performance = 20.9 Ticks(millions)/sec.
Total time in sek: 16

Но он в 2 раза медленнее по Performance и на 20% по общему времени этого варианта работы непосредственно с памятью.

Да, такое можно терпеть, т.к. RAMDrive-реализация уж очень простая и надежная. 36 гигов - это на 10 лет тиков по три блока.
 
Можно прямо TKC файлы в отдельные блоки памяти и сохранять (если получится много разных адресов использовать). Размеры меньше 4 Гб и навигация/поиск просты.
 
fxsaber #:

Замер начинается после этого.

Для оценки общего времени думаю и подготовительные процессы надо учитывать.
 
fxsaber #:
Ну и переделать загрузку тиков в память. Сейчас тики помещаются в массив MqlTick[] и затем копируются в общую память. А это в моменте двойной расход RAM.

Тройной или больше: еще RAM диск фикс размера.

Использование только RAM диска, пока кажется лучшим вариантом.

 
Forester #:
Для оценки общего времени думаю и подготовительные процессы надо учитывать.
проверил - ничего особо не изменилось
 
Forester #:

Тройной или больше: еще RAM диск фикс размера.

RAM-диск не нужен для FileMap-варианта.

 
Forester #:
Можно прямо TKC файлы в отдельные блоки памяти и сохранять (если получится много разных адресов использовать). Размеры меньше 4 Гб и навигация/поиск просты.

TKC не раскрыт. Можно любой свой формат. Используется все равно только три поля: MqlTick.time_msc/bid/ask. Поэтому, возможно, 4 гига хватит и на долгую историю.

 
HANDLE  CreateFileMappingW(HANDLE hFile,PVOID lpFileMappingAttributes,uint flProtect,uint dwMaximumSizeHigh,uint dwMaximumSizeLow,const string lpName);
uint dwMaximumSizeHigh
uint dwMaximumSizeLow

Эти два параметра определяют 64-битное число размера памяти из старших и младших 32-х бит. То есть, размер памяти может быть больше 4 Гб.

Эту функцию сам не использовал, но по логике так.

 
fxsaber #:

TKC не раскрыт. Можно любой свой формат. Используется все равно только три поля: MqlTick.time_msc/bid/ask. Поэтому, возможно, 4 гига хватит и на долгую историю.

А если еще float использовать, то больше истории влезет и быстрее чтение из памяти будет.

пс Перевод всех расчетов в float увеличит скорость расчетов в 2 раза, но муторно перед каждой переменной (float) писать.