Оптимизация расчета средних

17 Мая 2017, 21:02, Рубрики: Алготрейдинг, Индикаторы, Исследования, Статьи, Торговая платформа

При разработке торговых алгоритмов и индикаторов, например таких как Simple Moving Average или SMA, зачастую требуется выполнить расчет среднего значения некоторого показателя, например цены, за некоторый период времени. При этом количество значений, которые участвуют в расчете, может варьироваться от нескольких единиц до нескольких сотен или даже тысяч. Более того, часто нужно рассчитывать среднее не по одному такому ряду, а по нескольким, к тому же сразу в нескольких стратегиях. Дело усложняется еще и тем, что эти расчеты чаще всего требуется проводить в режиме реального времени при поступлении новых данных о цене в моменты рыночных сделок или при обновлении данных в стаканах. А уж если говорить о тестировании стратегий, а тем более об их оптимизации, то скорость расчетов становится критически важной.

(далее…)

boost::circular_buffer как более быстрый контейнер для входных данных

3 Мая 2017, 21:19, Рубрики: Библиотека Boost, Исследования, Статьи, Торговая платформа

У любой торговой платформы существует потребность в специальных структурах, позволяющих хранить оперативно поступающие данные в определенной последовательности. По сути, это очереди FIFO (first in, first out) с заранее определенным размером и доступом по индексу. По мере поступления новых данных они записываются в конец очереди, а если очередь уже заполнена, старые данные удаляются. Такие очереди, например, используются для хранения временных баров, данных для индикаторов, графиков и т.д.

В настоящее время в нашей торговой платформе QuantPro Studio для этих целей используется std::deque, имеющий всю необходимую функциональность — запись в начало или в конец, доступ по индексу, последовательная итерация. Для возможности контроля наполнения очереди до заданного предела мы реализовали свой класс-обертку, который в общем виде выглядит примерно так (большинство методов опущены для краткости):

(далее…)

Переход с boost::unordered_map и boost::unordered_set на std::unordered_map и std::unordered_set

27 Марта 2017, 19:42, Рубрики: Библиотека Boost, Исследования, Статьи, Торговая платформа

С того времени, как мы перешли на Visual C++ 2015, прошло больше года. До сих пор мы использовали  boost::unordered_map и boost::unordered_set, и они себя вполне хорошо зарекомендовали. Однако, наконец-то, дошли руки протестировать их реализацию из стандартной библиотеки нового компилятора.

(далее…)

Анализ рыночной ситуации с начала 2016 года

17 Ноября 2016, 10:05, Рубрики: Исследования, Статьи

Если попытаться провести анализ, для поиска объективных причин, которые не дают показать устойчивую положительную динамику доходности, при торговле нашего алгоритмического портфеля, то самой очевидной идеей скорей всего станет, просто посмотреть на графики движения индексов ММВБ и РТС, но на месячном интервале.

Также, для упрощения анализа, нанесем на графики, индикатор под названием Average True Range (Индикатор торгового диапазона), который показывает средний размер свечи, за последние двенадцать месяцев.

(далее…)