Eugene777
Eugene777 личный блог
06 ноября 2014, 10:07

Оптимизация оптимизации в торговом роботе.

Медленно но верно, мой алгодвижок становится многопоточным. 

Что это значит на практике? Одной из фишек моего движка — тестер-оптимизатор с визуальным представлением всех кривых эквити. Один год минутных данных на 80 инструментах робот считал примерно пять минут, пятиминутки считались около минуты. Это было сопоставимо с производительностью Wealth-Lab, и в общем, приемелемо, однако задача стоит более глобальная, и она потребует много исторических расчетов. 
В связи с тем, что мне пришлось работать с многопоточностью для Takion, я решил попробовать использовать подобную технику для оптимизатора, и результаты меня порадовали. 
После добавления многопоточности и небольшой оптимизации алгоритмов скорость на i7-3770K увеличилась в десять раз и стала более чем приемлема. Минутки — 30 секунд, пятиминутки — 6. 

На этом я не успокоился и собрал сервер с двумя Xeon X5650 2.6GHz, 6 ядер в каждом. Итого у меня появилась возможность запускать сразу 24 потока. 

Прирост скорости не впечатлил, если честно. Вместо планируемого ускорения в два с лишним раза я получил прирост в районе 20%.  Думаю, надо лучше работать с данными, на картинке внизу видно, что процессоры загружены не полностью, и в какие-то моменты, очевидно, находятся в режиме ожидания очереди. В общем, есть над чем работать.



В планах, если когда-нибудь возникнет потребность работать с большим количеством тиковых данных, я хочу попробовать поработать с технологией обсчета на видеокартах NVidia. Например, за 5 тысяч долларов можно купить NVidia Tesla K40 и получить маленький атомный реактор, но пока это не актуально, загрузка роботом CPU в режиме торговли у меня сейчас в районе 1%, терминалы же успешно грузят один поток.

Оптимизация оптимизации в торговом роботе. 
 
11 Комментариев
  • Deamoniy Steslavovich
    06 ноября 2014, 10:33
    Крутяк! Я в своем оптимизаторе сразу многопоточность добавил, это действительно помогает. Но с расчетами на видюхе проблем много.
  • vfreeman
    06 ноября 2014, 10:40
    а вы торгуете своими роботами или только оптимизируете?
  • Роман Frank_Cowperwood
    06 ноября 2014, 13:52
    а по какому алгоритму у вас происходит оптимизация?
      • Deamoniy Steslavovich
        06 ноября 2014, 14:24
        Eugene777, брутфорс??? Я тоже этим грешил))) Это же просто убийство времени) Думаю, с многопоточностью ты поспешил. В первую очередь надо алгоритм нормальный применить, это даст намного больше ускорения, чем распараллеливание брутфорса.

        И еще, я заметил справа графики загрузки проца. Там хоть и написано 100%, но судя по графику, загрузка не полная…
          • Deamoniy Steslavovich
            06 ноября 2014, 16:53
            Eugene777, я у себя сделал методом покоординатного спуска. Почти как у тебя, но берется только один параметр, перебираются его значения в указанных пределах и из них выбирается лучшее. Затем берется следующий параметр, он прогоняется так же. И все повторяется снова с первого параметра.

            Мне интересно, по какому признаку ты выбираешь из нескольких эквити лучшую?
              • Deamoniy Steslavovich
                06 ноября 2014, 16:58
                Eugene777, то есть каких-то формальных параметров оценки эквити нет?
                П.С. Заходи в чат, у меня в профиле ссылка есть. Там проще обсуждать.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн