Бэктестер на Python

Решил заоупенсорсить свой бэктестер.
Освновные достоинства, как я их вижу — простой в использовании одноинструментный тестинг, а также модуль расчета эквити, который можно использовать отдельно от остального кода.
Из интересного — есть модуль для расчета E-ratio входов-выходов без реализации полной
Читать дальше →

Сравнение тестирования WLD & JForex

Тестируя свои стратегии в JForex, я всегда сталкивался с тем, что процесс оптимизации в этой платформе занимает довольно продолжительное время (что, собственно, вызвано использованием потиковых данных). С одной стороны потиковость — это очень хорошо, но с другой стороны я начал задаваться вопросом: как этот процесс ускорить? Есть ли инструменты, способные хотя бы примерно (но быстро) провести оценку ТС, результаты которой нужно будет лишь немного уточнить в узком диапазоне значений, используя медленный но верный потиковый JForex?

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

Наколенная утилитка для конвертирования ASCII-файлов с котирами под WLD 5.4

Рассмотренная здесь проблемка привела к необходимости корректировки котировок из ДукасКопи для импорта в WLD 5.4.


Наколенное решение привожу под катом.


(Есть Update.)



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

Python: формула оценки последовательности убыточных сделок (часть 2)

Как мы выяснили здесь и здесь ubertrader в оригинальном посте-исследовании сравнивал результат формулы для MaxLoosingStreak, которая выдает результат с определенной степенью достоверности, зависящей от числа проведенных трейдов, c AvgStreak (среднее значение всех испытаний Монте-Карло). Т.е. брал среднее значение распределения длины убыточных серий.

Математически это не совсем корректно. И в данном посте мы подкорректируем методологию и скрипт на Python чтобы сравнивалась одна и та же величина, вычисленная по аналитической формуле, и численным методом.

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

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

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

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


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

Erlang и FIX

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

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

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


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

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

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

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

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

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


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

Python: формула оценки последовательности убыточных сделок

Риск системы, и ее просадка во многом зависит от последовательности нескольких убыточных сделок. Как правило MaxDD возникает как серия из нескольких убытков, а не как один большой лось.

Существует аналитическая формула, которая позволяет оценить ожидаемое количество убытков подряд, на основе количества сделок в системе и вероятности выигрыша.

LoosingStreak = LN(1 / nTradesCount)/LN(1 — WinProbability)

FYI: Логарифмы натуральные. WinProbability — проценты в долях единицы, 0.6 = 60%

Я решил эту формулу численно перепроверить и написал простенький скрипт на Python.

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

Erlang и трейдинг

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

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

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

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

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

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

Python: код для генерации баров из тиков

Еще один простенький скрипт на питоне для генерации баров из тиков.

Какие примеры дает этот код:
1. Чтение/запись файлов
2. Работа с CSV
3. Парсинг даты/времени
4. Good Practice создания ООП кода

Спойлер!
Содержимое спойлера вам недоступно:
  • Для просмотра содержимого спойлера нужна регистрация на сайте.