Оптимизация памяти по неиспользуемым данным

В работе на долгий срок не оставлял, но на тестах оперативы хватает на 1 прогон данных

  1. soundchaser

    Регистрация:
    05.04.18
    Сообщения:
    20
    Был на сайте:
    01.04.23

    Здравствуйте Алексей, подскажите в какую сторону копать, пишу робота с использованием тиковых данных от 3 таймфрэймов(обдновременно),

    понимаю что данные при этом сильно плодятся( например сделки расползаются по всем свечкам 3 раза)

    пробовал в коллекции сделок проставлять null вместо trade, но похоже при этом оперативная память не высвобождается

    по факту получается что прогон данных за 4 месяца отъедает 4 гига оперативной памяти, прбовал удалять первые элементы коллекций по привышению заданного размера, но тогда начинают сыпать ошибками остальные модули =(

    Есть ли мысли в какую сторону искать выход по оптимизации?

    soundchaser
    22.04.2019 16:06
    #1
  2. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    1172
    Был на сайте:
    18.04.24
    Цитата: soundchaser

    Здравствуйте Алексей, подскажите в какую сторону копать, пишу робота с использованием тиковых данных от 3 таймфрэймов(обдновременно),

    понимаю что данные при этом сильно плодятся( например сделки расползаются по всем свечкам 3 раза)

    пробовал в коллекции сделок проставлять null вместо trade, но похоже при этом оперативная память не высвобождается

    по факту получается что прогон данных за 4 месяца отъедает 4 гига оперативной памяти, прбовал удалять первые элементы коллекций по привышению заданного размера, но тогда начинают сыпать ошибками остальные модули =(

    Есть ли мысли в какую сторону искать выход по оптимизации?

    Заблокируйте в CandleSeries процесс сохранения трейдов внутри свечи. Метод UpdateTrade кажется. Что-то такое.

    Однако, это всё равно может не помочь. Это же как включить робота и четыре месяца торговать без перерыва. Понятное дело количество трейдов все мыслимые пределы превысит.

    Это связано с архитектурой тестера нашего. Он эмулирует работу биржи в прямом смысле. И это не так быстро как в ВелсЛаб или ТсЛаб. Но зато ближе к реальности.

    Алексей Ван
    23.04.2019 08:17
    #2
  3. karuzzo

    Регистрация:
    16.08.19
    Сообщения:
    99
    Был на сайте:
    05.01.23

    А еще можно сменить базовый тип данных с decimal на double.

    Вот плюсы:

    • Double в памяти занимает 64 бита, а decimal - 128 бит, но выигрышь в свободной памяти будет более чем в 2 раза из-за особенности хранения таких значений в памяти.
    • У double больший диапазон чисел: http://www.cyberforum.ru/cgi-bin/latex.cgi?\pm (~{10}^{-324};{10}^{308)} против http://www.cyberforum.ru/cgi-bin/latex.cgi?\pm (~{10}^{-28};{10}^{28}) у decimal.
    • У double есть особые значения: +0, -0, плюс\минус бесконечность, NaN. У decimal ничего подобного нет, а это необходимо гораздо больше чем свободная память, мне на пямять вообще чхать у меня ее куры не клюют, а вот индикатор зигзаг без этих значений строить только через костыли.
    • Double - нативный тип для процессора. Decimal - нет, потому операции с ним где-то в десять раз медленнее, чем с double,  это необходимо гораздо больше чем свободная память, память сейчас копейки 900р за 8 гигов с бэушек серверов на ебэе, а вот десяти процессовый системник не у каждого есть (впрочем я о таких вообще не слышал)
    karuzzo
    23.10.2019 20:58
    #3
  4. karuzzo

    Регистрация:
    16.08.19
    Сообщения:
    99
    Был на сайте:
    05.01.23

    Я перевел весь терминал на double с целью увеличения производительности и имения возможности использовать не числовое значение в перечислениях. Итог по пямяти: снизилась процентов на 20 - 30 с 5 гигов выборки сбера до примерно 3.5 скорость обработки увеличилась не экспоненциально а линейно на те же 20 - 30 процентов на глаз. В общем тут я был не прав и овчинка стоит выделки только если ради уникальных значений nan и тд.

    karuzzo
    24.10.2019 02:48
    #4