Допустим, вы имели какое-то отношение к фондовому рынку раньше. Или, не имея такового, увлеклись горячей (но в последние месяцы уже заметно похолодевшей....) темой криптовалют. Также предположим, что вы пошли еще дальше и решили, что «ручное управление» полетами уже неэффективно и надо бы автоматизировать свои светлые идеи и превратить мартышкин труд в нечто более технологичное. Ровно на этом моменте начинаются вопросы, которые я хотел бы обсудить в статье, а именно: есть ли готовое решение для бэктестинга торговых идей (бесплатное желательно), где взять исторические данные (в идеале бесплатно), а также что с этим всем потом делать, т.е. какие существуют решения для боевого запуска автоматизированных торговых систем, успешно проверенных на бэктесте? Примечание первое и второе: статья написана для Python-based библиотек и систем, как дела с доступностью для других языков судить не могу; в приоритете — зарубежные рынки и/или криптовалюты, относительно применимости к фондовому рынку РФ судить также не берусь.

image

Этот материал — не исчерпывающее руководство или обзор, а скорей — предложение обменяться рабочими идеями по итогам практического поиска нормальной рабочей сборки для личного использования. Столкнувшись с необходимостью автоматизировать даже незамысловатые торговые стратегии (momentum trade, trend following и т.д.) сразу возник ряд проблем. Давайте обозначим по пунктам — что нам нужно, чтобы:

  • Сформулировать гипотезу и алгоритмизировать ее
  • Проверить гипотезу на исторических данных. Супер важное замечание: необходимо также понимать какие исторические данные попадают в категорию «подходящих» для использования в бэктесте торговых систем. Я не возьмусь сейчас писать об этом отдельный пост (хотя это требует того, но в открытом доступе есть много материалов на эту тему), обозначу некоторые ключевые проблемы с историческими данными: учтены ли компании, выпавшие из индексов или обанкротившиеся, учтены ли сплиты акций, а также как считается доходность — с учетом дивидендов (total return) или нет. Очень извиняюсь за краткость, но данный пост пока не об этом, и это не исчерпывающий набор требований к данным.
  • В случае успешности проверки — как перенести гипотезу на реальный торговый счет, дополнив системой риск-менеджмента, управления ордерами, ребалансировки и оценки результата.

Сейчас самое время сделать два важных отступления, касающихся «вводных», с которыми мы работаем в данной статье. Первое — выбор языка: многие скажут что C# для создания торговых роботов / автоматизированных торговых систем гораздо более распространен и быстрей, чем Python. Не могу не согласиться, но надо учитывать и второе важное замечание — на разницу между алгоритмической торговлей и автоматизацией торговых систем. Из бесед с практиками количественной торговли и просто из найденных теоретических материалов можно сделать вывод, что алгоритмическая торговля (часто используется как синоним «High-Frequency Trading (HFT)) — это тактики работы с ордерами, с потоками данных на разные биржи, основанные на скорости доступа к ним (и зависящие от миллисекунд), и там исключительно C# может справиться с поставленными задачами. В то же время для задач, которые преследует „домашний“ алготрейдер — скорей всего подойдет и Python, потому как мы ставим целью автоматизацию кратко- и среднесрочных спекулятивных торговых систем, оборачиваемость портфелей в которых не достигает 100% в день, а количество ордеров и требования к скорости их исполнения не превышают какого-то разумного порога, разделяющего высокочастотный трейдинг и кратко/среднесрочную автоматизированную торговлю.

Как оцениваются торговые системы, как пишутся торговые алгоритмы и прочее — это все сейчас за рамками, иначе в статью не уместить. Давайте рассмотрим конкретный пример — у меня есть торговая система, основанная на описанной в книге „Stocks on the Move: Beating the Market with Hedge Fund Momentum Strategies“. Торговая стратегия написана на Python и не включает в себя какие-то сверхсложные элементы. Первое, что нужно — возможность протестировать стратегию на исторических данных. У меня нет задачи обсуждать выбор брокера, я пользуюсь услугами Interactive brokers и у них уже есть нативное API для Python. Тем ни менее, возможности бэктеста даже при оплаченных подписках на данные там не предусмотрено. Вот что мне удалось найти для бэктеста:

1) У всех на слуху — Quantopian.com

Поддерживается только Python 2.7, есть возможность бесплатного построения и тестирования торговых систем, есть бесплатные исторические данные для использования (US equity & futures), доступно он-лайн, локальная установка невозможна. Писать долгий обзор я не буду, сразу обозначу проблемные места, которые удалось найти даже на базовом уровне: поскольку возможность привязки к брокерскому аккаунту они убрали, нет возможности использовать разработанные и проверенные торговые системы для живой торговли. Это сразу накладывает ограничения (часть из них поможет решить zipline-live, об этом ниже), т.к. в основе Quantopian лежит библиотека zipline и, более того, есть некоторые функции, которые работают только внутри их системы, так что когда вы захотите свою самописную и проверенную систему перенести на тот же нативный API от брокера — половину придется переписать заново, чтобы заработало, а также решить что делать с zipline-основанными фрагментами кода. Минусом (для некоторых систем) может также считаться запрет динамических тикеров, но этот тезис пока оставим без деталей.

Главный плюс Quantopian (IMHO) (помимо бесплатной системы для тестов и исторических данных) — очень активное сообщество, очень много постов и по аналитике, и по нюансам построения систем. Важно: исторические данные, доступные там, учитывают некоторые из проблем (можно работать не только с живыми компаниями, но и получать списки индексов прошлых лет, чтобы учитывать выпавших, обанкротившихся и т.д.), также учтены сплиты и есть даже (!) датасеты Total Return, то есть можно использовать показатели доходности с учетом дивидендов.

2) Очень хочет быть у всех на слуху, но пока не выходит — Backtrader.com

Поддерживается Python 2.7, 3.2-3.6, доступен только для использования на локальной машине.
Вроде как есть интеграция с брокерами и можно будет системы, обкатанные с использованием этой библиотеки, пускать в бой с минимальными усилиями по интеграции. Скажу честно — очень сомнительно, примеров живых не встречал, сообщество почти мертвое — на форуме тишина. Автор библиотеки ее пиарит на Quora и других ресурсах активно. Исторических данных нет, так что придется либо покупать, либо искать бесплатные источники — но там начинаются проблемы „выживших“, дивидендов (учтены или нет в данных), сплитов и прочего прочего. Буду рад реальным отзывам о практике использования этой библиотеки.

3) QuantConnect — quantconnect.com

Это онлайн-платформа (поддерживающая Python соответственно), предлагающая и данные, и возможность бэктеста и интеграцию с популярными брокерами. Но при этом, допустим, чтобы иметь возможность live трейдинга через Interactive Brokers минимум надо платить 20$ в месяц за подписку на QuantConnect, и это не учитывая подписок на данные от брокера и тд.
Мое субъективное мнение — платформа не очень удобная для постоянного использования, как-то все чересчур нагромождено и неудобно, плюс платно, плюс изначально это все написано на C# и просто сделана обёртка, чтобы можно было использовать Python. Так что, попробовав потестить там несколько стратегий, я отказался от её дальнейшего использования. Хотя надо отдать должное — сообщество там более менее активное, материала на форумах много, а проблемы можно оперативно решить. Буду рад если поделитесь реальными отзывами — может быть, у меня просто пользовательский опыт не сложился.

4) QuantRocket — quantrocket.com

Судя по описанию — это просто „песня“. Есть всё — и онлайн и локальная установка, и бэктестинг, и исторические данные которые помогут собрать от брокера или предоставят сами (за 9$ в мес.), и сразу интеграция с брокерами, причем интеграция настолько хорошая, что обещают что и переписывать ничего не придется… И даже обещают, что если вы раньше увлекались Quantopian и у вас на zipline написаны какие-то вещи, они помогут с переходом на их платформу и на внутреннюю библиотеку (Moonshot), которая позволит live трейдинг через брокера воплотить с минимальными усилиями… Все звучит идеально, если бы не одно „но“ — минимум 30$ в месяц за возможность потестить как все на самом деле. Я не решился, потому что есть месяцы, которые не требуют твоего участия в рынке (допустим, все фильтры входа в рынок показывают „сидеть спокойно“) и тогда плата в 30$ за возможность потестить гипотезы кажется слишком уж неоправданной. Но я буду признателен за реальные отзывы — кто пробовал, какие плюсы и минусы и так далее. Еще один смущающий момент — привязка к платформе и библиотеки, которая используется только на ней, чревато потом повышением „costs of switching“, т.е. завтра они вместо 30$ поставят за простой тариф все 150$, а у вас подвязано на их уникальную Moonshot библиотеку и развернуто через их платформу… Как говорится, ваши яица в одной корзине...)

5) Zipline & Zipline-live (http://www.zipline.io, www.zipline-live.io)

Ставится локально, работает с Python 2.7 и 3.5 для Zipline и только 2.7 для zipline-live.
Мы добрались до заветной связки, которая, по моим наблюдениям, активнее всего используется в сообществе любителей автоматизированных торговых систем в домашних условиях.
Что у нас имеется: библиотека zipline, стоящая в основе движка Quantopian (см п.1) и ее младший брат — zipline-live, которая поддерживает интеграцию с Interactive Brokers и позволяет запускать алгоритмы, созданные с использованием zipline, в продакшн с минимальными доработками. Коротко об истории вопроса — когда пару лет назад на Quantopian решили отказаться от live-трейдинга, сообщество заволновалось, воды вспенились, и на свет появился плод коллективных усилий (в том числе и команды Quantopian, пообещавшей поддерживать разработку live библиотеки на бескорыстной основе). После чего Zipline-live стала, по сути, единственным (?) удобным способом бесплатно (и без регистрации:) адаптировать системы, проверенные на Quantopian (или локально на zipline) к реальной торговле через Interactive brokers (с которым есть интеграция, но без ряда некоторых важных и не очень функций zipline). Что можно сказать об этой связке:

  • zipline локально подходит вам, если есть надежный источник исторических данных или вам достаточно датасетов от quandl, которые в библиотеку бесплатно встроены. При этом надо учитывать, что библиотека не поддерживает онлайн трансляции данных, и вам придется скачивать их и потом делать аплоад для бэктеста (здесь об этом всем подробней)
  • zipline-live в теории подходит, если интеграция с IB реализована нормально, а перенесенные из Quantopian алгоритмы не будут нуждаться в существенной переработке и обрезаниях из-за нереализованных в zipline-live функций.

6) QsTrader — github.com/mhallsmoore/qstrader

Это библиотека от создателей портала quantstart, некоего сообщества и набором образовательных материалов, проводящимися лекциями и так далее. Устанавливается локально, используется Python 3 и выше. Возможности реальной торговли через брокера нет, но обещают добавить. Во многом опирается на обычный Data Science стек Python — pandas, numpy, scipy и т.д., поэтому ставить придется все сразу. Мне не удалось получить объективные оценки распространенности этой библиотеки и скажу откровенно — не пробовал ее на практике, так как судя по истории обновлений, работа над ней ведется неактивно, функции не добавляются, а значит для полноценной, пусть даже и „домашней“ системы она не подходит, но если есть результаты ее использования и сформировано личное мнение — поделитесь, вдруг это решение лучше других.

7) Далее я перечислю библиотеки, которые мне удалось найти, но о них многого сказать не могу. Чаще всего они поддерживаются исключительно авторами блогов, их создавших, и у них отсутствует возможность интеграции с брокером, а значит — это просто бэктестинг без возможности для использования в бою, без сообщества и с медленным темпом развития, т.е. не отвечает всем поставленным задачам.

bt (Backtesting for Python)
pysystem trade

Подводя промежуточные итоги, делюсь субъективными выводами:

  • Если вы не возражаете против использования онлайн-платформ, устаревающего Python 2.7 и вашими целевыми инструментами в стратегиях являются акции/фьючерсы на площадках США (а брокером IB), то возможно удобным и точно бесплатным (!) будет сочетание Quantopian + zipline-live, используя которое вы получите бесплатные исторические данные (±соответствующие критериям качества), бесплатный IDE для тестирования гипотез, а также локальную библиотеку, позволяющую интегрировать с брокерским счетом ваши наработки и запустить систему в боевой полет с учетом всех оговорок и ограничений данного сочетания, которые были раскрыты выше по тексту. Лично я выбрал для тебя такой вариант в силу удобства, бесплатности базового функционала, и очень активного сообщества. В следующем посте я расскажу насколько легко (или нелегко) оказалось тестирование и перенос momentum stocks strategy с Quantopian в онлайне на zipline-live на локальной машине, а также насколько проработана интеграция с брокерским счетом в IB в данной библиотеки, а также поделюсь деталями использования нативного Python API от IB.
  • Если в приоритете локальная установка, полный контроль над системой и не смущает необходимость загрузки исторических данных в виде data bundle's для тестирования гипотез, а также есть источник этих данных или устраивает бесплатный от quandl, то возможным решением станет связка Zipline + Zipline-live, которая позволит вам протестированные на локальной машине на исторических данных (своих или бесплатных) стратегии реализовать через IB и все это — бесплатно в рамках функционала обозначенных библиотек и Python API брокера.

  • Если счет у Interactive brokers открыть не можете или не хотите, то подойдет по большему счету многое из указанного выше перечня, т.к. QuantConnect, например, работает с другими брокерами, также поддерживающими FX / Крипто трейдинг, и так далее. А если задачи в принципе live-трейдинг через брокера осуществлять не стоит, то можно попробовать и все описанные библиотеки/платформы для бэктестинга и выбрать ту, что отвечает вашим задач наиболее полно.

P.S. В заключении хочу отметить, что важность выбора платформы/библиотеки — это не только удобство, но и „масштабируемость“ систем. Допустим, я разработал нечто вразумительное и протестировал на zipline. Потом решил это воплотить в жизнь без бэктеста у какого-либо брокера через его API — и тут начинаются миллион дополнительных деталей, которые в режиме „песочницы“ не учтешь — а как исполняются ордеры, а как ваша система отрабатывает в разных режимах торгов, а если случается гэп / послеторговая суперволитальная сессия после квартального отчета и так далее… Поэтому, на мой субъективный взгляд, важно подбирать такую сборку, чтобы код был рабочий и для бэктеста, и для реализации торговой системы в бою, тогда получится отработать недоработки, что повысит качество и того и другого.

Комментарии (4)


  1. maxzhurkin
    25.12.2018 08:35

    & в заголовке случайно?


    1. 1appleapple0 Автор
      25.12.2018 10:12

      Да, спасибо, ночная опечатка))


  1. S_A
    25.12.2018 16:24

    Я, если честно, думал что будет о чем-то другом, например о bayesloop.
    Вот здесь пример применения даже из трейдинга.

    Но, поскольку я не в теме, тоже было интересно почитать про то, как люди живут в отрасли.


  1. Closius
    26.12.2018 20:20

    Я вот тоже запили свой трейдер с возможность писать и интегрировать свои стратегии. Буду рад если кому-то будет интересно

    github.com/Closius/crypto_trader