Яндекс.Метрика
ГлавнаяПостроение системы › Алгоритмический подход к созданию стратегий.Часть 2

Алгоритмический подход к созданию стратегий.Часть 2

Interview-with-a-Quant-Part-2-980x423

Первую часть интервью смотрите здесь.

Что нужно учесть при запуске стратегии в производство?

Новичкам нужно обратить внимание на соответствие "реальному миру" - на нюансы типа дней экспирации и праздников. Когда вы калибруете систему на исторических данных, можно допускать аппроксимацию без таких дней. Но когда вы переходите к реальной торговле, то не можете быть небрежным, все должно быть максимально точно.

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

Обычно создается исполнительный прототип, который делает все правильно, но не очень эффективно. Затем я поручаю моим сотрудникам-инженерам сделать производительную версию стратегии на языке Python или даже С, используя библиотеки для реального рынка, которые они создавали и совершенствовали годами. И эта версия подключается к  моей торговой системе, для запуска данной стратегии "в бой".

Далее я начинаю зарабытывать деньги на этом алгоритме.

Как много времени занимает весь этот процесс?

Обычно это месяцы работы для запуска новой стратегии - и это только для стратегий, которые действительно работают. Большинство не работает. И даже успешные стратегии имеют время жизни около пары лет, перед тем, как их будут арбитражить, в результате чего они перестанут приносить прибыль. Таким образом, весь процесс разработки повторяется все время. Приходится пересматривать подход к торговле каждые несколько лет.

Тревожит ли вас, что возможности торговли на основе моделей, которые вы пытаетесь реализовать, исчезнут навсегда? 

Конечно. По моему опыту любая такая возможность исчезает. Один из самых больших вызовов в моделировании - это определить, когда конкретная модель устарела. Любая модель может терять деньги в некоторые дни и даже недели. И очень сложно распознать, когда потери это часть стратегии, которая все еще работает, а когда они сигнализируют о смерти модели.

Где вы берете идеи для новых стратегий?

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

Во-первых, маркетдата. Если у вас есть новый или ранее неизвестный источник данных, который каким-либо образом предсказывает рынок, то это самый легкий путь для генерации идеи. Сегодня существует множество новых источников: стартапы, собирающие новые наборы данных; аналитические компании со своими индикаторами; большие корпорации, предоставляющие данные, которые мы можем исследовать; и такие аггрегаторы, как Quandl, чтобы собрать эти данные вместе. Я постоянно в поиске интересных, необычных и предсказывающих наборов данных.

Во-вторых, рынок сам по себе. Банкиры всегда заинтересованы в новых инструментах, и они обычно способствуют появлениям новых неэффективностей. Если вы держите палец на пульсе рынка, то легко найдете возможности для моделирования, которые менее обученные участники рынка могут упустить.

В-третьих - глобальные паттерны. История может не повторяться, но определенно идет в ногу. Например, если вы хотите торговать процентную кривую США,  японский рынок - богатый источник идей, Япония прошла через нулевые процентные ставки за годы до Америки. Фактически, я построил очень успешную модель  на американском рынке гособлигаций, основываясь чисто на поведении японских облигаций десятью годами ранее.

В-четвертых, аналогии. Некоторые лучшие сделки происходили, потому что я переключил мышление с режима А в режим Б.  Разные классы активов имеют разные степени сложности: вы можете арбитражить эту разницу.

В-пятых, держите глаза и уши открытыми. Мир - это очень неэффективное место: если вы любознательны и все время спрашиваете "почему/почему нет?", вы всегда обнаружите возможности.

Вы говорили, что используете множество инструментов - Mathematica, Matlab, Python, Excel, C. Это намеренный выбор?

Конечно. Разные стадии процесса требуют разных инструментов. Я буду идиотом, если построю реальную "боевую" систему в Excel, или символьные операции в Python. Не то что бы нельзя это сделать, но есть более лучшие инструменты для этих задач.

Как вы управляете потоком данных во всех  стадиях процесса и инструментах?

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

В следующей части мы опубликуем ответы на вопросы читателей.

1 Комментарии[ Ваш комментарий ]

  1. Спасибо за статью и за источник. Лично мне позволяет считать, что еще не все потеряно.

    Несколько комментариев, в общих целях.

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

    Положим, есть источники данных (подключения) - это же ведь сколько усилий надо потратить на подготовку и обработку в разных средах? Одна поддерживает чтение из HDF5, другая - нет. В одном есть (например, Mathlab) возможность сразу применить набор фильтров обработки сигналов, полученный на конференции) , а на Python нужно все равно импортировать библиотеку, написанную на с++, в которую надо портировать алгоритмы. Так-то разницы большой нет - все упомянутые средства анализа через стандартизованные библиотеки в состоянии решать набор всех всех известных подходов из стат./машинного обучения, обработки сигналов.

    Безусловно надо учитывать факт, что производительность многих вычислений в Mathlab очень высокая - например, Уотсон в матричном анализе постоянно предлагает посоревноваться и попробовать производительность кода Mathlab и на C++ в качестве тестов. По аналогии со старым русским анекдотом, когда прапорщик просит молодых бойцов приподнять 50-тонный танк.

    Но, как только речь доходит до прямого подключения - это что надо все дружно переписывать в C++? или в некие plugins, написанные наиболее вероятно на С++, которые будут в дальнейшем импортированы прикладной средой исполнения стратегий?. Хорошо, а где же их предварительно оттестировать?  И кстати, не проще ли сразу тестировать и одновременно отлаживать среду исполнения, в т.ч. решив в ней задачи линейной алгебы, онлайн обучения и т.д, 

     То есть либо работа ведется методом забивания шляпок в стену, либо в реалиях автор напоминает героя книги Flash Boys из Royal Bank of Canada, который 2 года понимал, что несет убытки, но все равно продолжал вести торговые операции, а руководство банка заодно терпело новое приобретение - компанию со спорными алгоритмами электронной торговли.

    Ну и заявление о "медленном градиентом спуске", конечно, либо вырывается из контекста, либо автор не туда заворачивает. Если он имеет в виду, что в отсутствие аналитически доступной символьной формулы производной, которую можно приравнять нулю, приходится пользоваться градинетным спуском, то да - безусловно это медленее.) Но при изучении комбинаций операторов или функций аналитической формулы не будет никогда. Зачем об этом говорить-то?

    Но в методах оптимизации и поиска - это базовый метод и совмещаемый с эвристиками тех же эволюционных алгоритмов может быть очень хорошим. 

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

    За публикацию статьи спасибо, а автору в реалиях, наверное либо просто везет, либо никто за эффективность труда давно не спрашивал.

Ответ на Alexey ¬
Отменить ответ

Обратите внимание: вы можете использоватьHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>