Я у мамы алготрейдер: ищем бесплатные фреймворки для тестирования гипотез и запуска в боевом режиме (Python)

    Допустим, вы имели какое-то отношение к фондовому рынку раньше. Или, не имея такового, увлеклись горячей (но в последние месяцы уже заметно похолодевшей....) темой криптовалют. Также предположим, что вы пошли еще дальше и решили, что «ручное управление» полетами уже неэффективно и надо бы автоматизировать свои светлые идеи и превратить мартышкин труд в нечто более технологичное. Ровно на этом моменте начинаются вопросы, которые я хотел бы обсудить в статье, а именно: есть ли готовое решение для бэктестинга торговых идей (бесплатное желательно), где взять исторические данные (в идеале бесплатно), а также что с этим всем потом делать, т.е. какие существуют решения для боевого запуска автоматизированных торговых систем, успешно проверенных на бэктесте? Примечание первое и второе: статья написана для 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 — и тут начинаются миллион дополнительных деталей, которые в режиме „песочницы“ не учтешь — а как исполняются ордеры, а как ваша система отрабатывает в разных режимах торгов, а если случается гэп / послеторговая суперволитальная сессия после квартального отчета и так далее… Поэтому, на мой субъективный взгляд, важно подбирать такую сборку, чтобы код был рабочий и для бэктеста, и для реализации торговой системы в бою, тогда получится отработать недоработки, что повысит качество и того и другого.
    Share post

    Comments 8

      0
      & в заголовке случайно?
        0
        Да, спасибо, ночная опечатка))
        0
        Я, если честно, думал что будет о чем-то другом, например о bayesloop.
        Вот здесь пример применения даже из трейдинга.

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

          Приветствую, спасибо за отзыв!
          Об этом тоже обязательно будет, но какой бы конкретный кейс не хотелось рассмотреть, сначала необходимо разобраться с «инфраструктурой»: где тестировать, на каких данных и так далее, иначе прикладные вещи не проверить.

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

          github.com/Closius/crypto_trader
            0
            Какие успехи у описанной вами стратегии?
            0
            Отвечаю на вопросы автора:

            1. Готовое решение для бэктестинга идей есть. К сожалению платить придётся: или своим временем на освоение, или денежными знаками. Навскидку, приходит в голову штуки три программы. Первая — TSLab, версия Lite стоит 1000 р./мес. Для криптобирж — бесплатно. Вторая — Multicharts Special Edition. Была у них такая бесплатная версия с ограничением на количество тикеров, не помню точно, на один или два. И третий продукт — S#. Тоже бесплатно, но у них как-то всё по сравнению с предыдущими двумя не очень очевидно внутри, что и как делать. Поэтому они продавали обучение для тех, кто хочет освоить их продукт. Было так примерно год-два назад для S#. Ну и, наконец, не забывайте про самописное, своё, используя свой любимый язык программирования. Хотя это не совсем укладывается в запрос.
            2. Исторические данные для фондового рынка есть. И для Америки, и для России. Можно поискать на всем известном форуме. Для России — сайт Финама, МФД. Для криптобирж — не в курсе.
            3. Решения для боевого запуска те же, что и в п. 1.
            4. У IB есть алготорговля прямо в терминале. Можете демку скачать и посмотреть.
              0
              Добрый день, и спасибо за развёрнутый комментарий.
              Абсолютно согласен с возможностью алготрейдига с помощью указанных программных решений, которые на рынке известны и широко используются. Ключевым отличием является их поставка «под ключ», т.е. это не самостоятельная работа (DIU) на бесплатных библиотеках и python’e (о чем я упоминал до ката как о вводной для статьи), а готовые коробочные решения с интерфейсами и своими наборами возможностей, ограничений и тарифов. Безусловно, если убрать привязку к DIY и Python, а также расширить бюджет с 0 рублей в месяц до ***, то их нужно включать в обзор и говорить как о наиболее распространённом софте для алготрейдинга. Ещё раз спасибо!
              Ну и по поводу IB — их терминал мне хорошо известен и, конечно, там есть определенный функционал для алго (не супер удобный, но всё же), просто к нему применяются те же ограничения и невыполняются условия, которые были мною обозначены в прошлом абзаце и в качестве исходных вводных.

            Only users with full accounts can post comments. Log in, please.