Новая версия платформы MetaTrader 5 build 5120: улучшения и исправления - страница 34
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А если еще float использовать, то больше истории влезет и быстрее чтение из памяти будет.
пс Перевод всех расчетов в float увеличит скорость расчетов в 2 раза, но муторно перед каждой переменной (float) писать.В кодобазу уже выложен "сжиматель" тиков на принципе использования float (правда не все инструменты "влезут" без потери точности - в частности, некоторая крипта). Но если уже хочется совсем убыстриться, то можно перейти на целочисленную математику с ulong (в "пунктах" денег, а-ля тип decimal, который присутствует во всех уважающих себя финансовых платформах и SQL-движках).
Но если уже хочется совсем убыстриться, то можно перейти на целочисленную математику с ulong (в "пунктах" денег, а-ля тип decimal, который присутствует во всех уважающих себя финансовых платформах и SQL-движках).
Можно использовать короткие целые из нескольких бит (в зависимости от нужного диапазона) и упаковывать в длинные целые. Я лет 30 назад так собирался делать, когда работал над собственным мобильным терминалом. Позже у меня появилось первое мобильное устройство (в 1999г.) А ещё раньше (в 1980х) изучал процессор Intel i432 (?), в котором не было разбиения на байты. Команды и данные были переменной ширины. Проц так и остался концептом.
И в архиваторах так же делается, вроде.
Т.е. не преобразовывать 1.12345 в 112345, это большие числа. А взять последовательность цен, укладывающихся в диапазон (например, 1.1-1.2), и сохранять значение 1.12345-1.1 = 2345, а в заголовке последовательности указать базу 1.1. Надо просчитать, какие минимальные последовательности (при сужении диапазона) допускать, чтобы не было слишком большого оверхеда из-за частых заголовков.
Рапаковка будет медленнее, зато будет плотная упаковка. Можно ещё что-нибудь придумать. Только не использовать алгоритмы сверхсжатия из архиваторов, это слишком медленно.
Вот ещё вариант, кажется его я когда-то планировал.
Последовательность тиков разбивается на блоки по минуткам. В заголовке - цена открытия и количество бит значения (ширина). Дальше идут значения изменения цены от предыдущей (в пипсах). Требуют по нескольку бит (необходимая ширина рассчитывается для каждого блока). Блоки получатся маленькие и по границам минут. Легко позиционировать. Не много памяти для хранения всего блока распакованным при доступе.
Но если уже хочется совсем убыстриться, то можно перейти на целочисленную математику с ulong (в "пунктах" денег, а-ля тип decimal, который присутствует во всех уважающих себя финансовых платформах и SQL-движках).
float в 2 раза меньше памяти занимает. С векторизацией целых чисел не знаю как дела
Хотелось бы иметь более наглядную визуализацию в 2D режиме тестера.
В кодобазу уже выложен "сжиматель" тиков на принципе использования float (правда не все инструменты "влезут" без потери точности - в частности, некоторая крипта). Но если уже хочется совсем убыстриться, то можно перейти на целочисленную математику с ulong (в "пунктах" денег, а-ля тип decimal, который присутствует во всех уважающих себя финансовых платформах и SQL-движках).
Встроил.
Слева без компрессии, справа - с компрессией (в прицепе).
Расход памяти ожидаемо снизился в три раза.
Встроил.
Слева без компрессии, справа - с компрессией (в прицепе).
Расход памяти ожидаемо снизился в три раза.
Попробуйте еще раз поиграть с блоками. Сейчас в кеш должно больше влезать данных
У всех разная конфигурация, поэтому объединил в одном советнике и RAMDrive-вариант и FileMap-вариант с возможностью включения/выключения компрессии тиков.
И вот такой результат получил.
Понятия не имею, почему FileMap+Compression стал столь бешено-быстро работать - в 20 раз быстрее режима по тикам, превысив 100 миллионов тиков в секунду.
Включение компрессии ускоряет оба варианта: RAMDrive и FileMap. Эксперименты с inBlocks и inBlockSize оставил желающим (инструкция, для FileMap желательно убедиться, что не будет использоваться своп-файл).
Эксперименты с inBlocks и inBlockSize оставил желающим (инструкция, для FileMap желательно убедиться, что не будет использоваться своп-файл).
150 миллионов тиков в секунду.
150 миллионов тиков в секунду.
Не пробовали вторую переменную адреса задействовать, может получится более 4Гб сохранять/читать?
Эти два параметра определяют 64-битное число размера памяти из старших и младших 32-х бит. То есть, размер памяти может быть больше 4 Гб.
Эту функцию сам не использовал, но по логике так.