Как мы бектестим роботов

Наш робот — это отдельный модуль в нашем приложении на эрланге. В него прилетают сообщения с котировками, он может попросить экзекьюшн сделать ордер и будет ждать исполнения этого ордера, попутно поглядывая на котировки: не опоздали ли мы с этим ордером.

Бектестинг стратегии и сам робот — это один и тот же код. Если роботу нужно два, три, пять инструментов, бектестинг сам подгрузит их из stockdb, смешает в порядке таймстемпов и скормит их роботу.


Читать дальше →

Erlang и FIX

Я подключаюсь к бирже по протоколу FIX и для него на эрланге не нашлось готовой опенсорсной реализации. Была какая-то одна закрытая (даже не получилось списаться с продавцами), есть всякие библиотеки типа QuickFIX, но они на С++.

Посмотрев детальнее на имеющиеся библиотеки, я понял, что они страдают неприятной проблемой: есть шанс вляпаться в написание адаптера, превращающего FIX сообщения в бизнес-объекты. Поэтому пришла в голову идея сделать FIX-сообщения генерируемыми по конфигу.

Сказано, сделано: github.com/maxlapshin/fix


Читать дальше →

Хранение тиковых данных на эрланге

Хранить исторические данные в CSV жестоко. Жестоко прежде всего потому, что в разжатом виде они занимают очень много места, а в сжатом gzip с ними очень неудобно работать.

Других вариантов не очень много. Хранить тики в SQL базе — невелика разница, потому что сжатия там тоже нет.

Было принято решение сделать свою базу для тиков с блекджеком компрессией, произвольным доступом и фильтрацией.

Сказано, сделано: github.com/maxlapshin/stockdb


Читать дальше →

Erlang и трейдинг

Хочется поделиться своим опытом написания роботов.

В отличие от многих других, я выбрал для разработки биржевого робота Erlang. Это язык и платформа, разработанные ещё в фирме Ericsson для того, что бы работали их АТС.

Это очень важно: Erlang дизайнили инженеры, которые отвечают деньгами за работу системы и каждый релиз проходит через тестирование в самом эриксоне.

За что же был выбран этот язык?

Главная причина — внутренняя система процессов.

Читать дальше →