Блог им. uralpro
Статья с аггрегатора Quandl Resource Hub.
Quandl взял интервью у старшего менеджера по алгоритмическим стратегиям одного из больших хеджевых фондов. Мы говорили о создании торговых стратегий — от абстрактного представления рынка до конкретного воплощения в стратегию с оригинальной предсказательной способностью.
Можете вы рассказать, как создаются новые торговые стратегии?
Все начинается с гипотезы.Я предполагаю, что может существовать взаимоотношение между двумя инструментами, или появился новый инструмент на рынке, набирающий популярность, или возник необычный макроэкономический фактор, который влияет на микроструктурное поведение цены. Затем я записываю уравнение — или создаю модель, если вам угодно — с целью описания этого взаимоотношения. Обычно это некое уравнение процесса, показывающее изменение переменных во времени, со случайным (статистическим) компонентом.
Следующий шаг — это нахождение решения в закрытой форме для этой модели. Иногда это легко, иногда это требует дни и недели вычислений, иногда решения в закрытой форме не существует, и приходится прибегать к каким-либо методам аппроксимации. Я нахожу использование программного пакета Mathematica очень полезным на этой стадии процесса.
Итак, у нас есть рыночная модель. Сейчас необходимо протестировать, насколько она реалистична. На этой стадии я использую Matlab. Я назначаю некие наиболее разумные значения для различных параметров модели, и запускаю симуляцию. Выглядят ли результаты симуляции реалистичными? Отражают ли они реальную динамику рынка?
Если модель проходит такую проверку, то дальше переходим от чистой теории к формальным исследованиям.
Что имеется в виду под формальными исследованиями? И почему они необходимы?
Я имею в виду переход от абстрактного представления рыночной ситуации к чему-то конкретному, имеющему оригинальную предсказательную способность.
Сложно создать реально работающие модели. Но очень легко обманывать себя, что вы создали хорошую предсказательную модель, хотя на самом деле это всего лишь результат подгонки под историю, или использование тестирования на выборке in-sample, либо влияние внешнего фактора, искуственно внедренного в модель, и так далее. Большинство «систем» не работают в реальных условиях по этим причинам.
Я не хочу чтобы это случилось с моей моделью, ведь я рискую реальными деньгами. За годы мы создали и оптимизировали медленный, последовательный и систематический подход, который минимизирует риск «одурачивания» себя самих. Это я называю формальными исследованиями.
Из каких шагов состоит процесс формальных исследований?
Во-первых, мое самое большое опасение касается «загрязнения» рыночных данных. История это ограниченный ресурс: вы можете запускать тесты на имеющихся исторических данных, но вы не можете сгенерироввать новые. Я параноидально отношусь к необходимости наличия «чистых» исторических данных для тестирования «вне выборки».
Сначала я разделяю исторические данные на неперекрывающиеся интервалы. Затем я их премешиваю таким образом, чтобы не знать, какой интервал куда относится на временной шкале ( это предупреждает подсознательную подгонку: например под обвал в 2008 году, или восстановление в 2009).
Я беру один из интервалов как калибровочный набор. Обычно используется Python для калибровки: встроенные библиотеки для оптимизации, а также написанные самостоятельно. Пусть, для примера, наши параметры ограниченны и коррелированы. Тогда я использую двухшаговый оптимизационный процесс, известный как ЕМ-алгоритм. Оптимизаторы могут быть чуствительны к начальным условиям, поэтому используется метод Монте-Карло для выбора множества начальных точек в пространстве решений. Все это делается очень легко в языке програмрования Python.
Результатом калибровки должен являться набор параметров модели — численные значения — который может быть скомбинирован с реальными рыночными наблюдениями для предсказания будущих цен.
После калибровки модели, я тестирую ее на выборке «out-of-sample». Получились ли стабильные предсказания и имеют ли случайные отклонения модели характер возврата к среднему? Если нет — модель не работает, все очень просто. Я пробую различные хитрости, чтобы «сломать» модель. Например, я калибрую модель на месячных данных, а тестирую на дневных. Или я тестирую параметры американского рынка на рыночных данных Канады. Если модель действительно отражает экономическую реальность, она должна быть устойчива к такого рода «атакам» (экономика не меняется при пересечении границ).
Таким образом, вы четко разделяете выборки «in-sample» и «out-of-sample», «вслепую» перемешиваете интервалы, используете Монте-Карло для исключения подгонки под начальные условия и используете различные трюки для проверки устойчивости. Что вы делаете еще для уверенности в «реальности» модели?
Я предаю высокое значение простоте. Если модель требует множества параметров или имеет много степеней свободы, то это скорее всего подгонка, а вовсе не модель. Таким образом, я постоянно стремлюсь к сокращению факторов. Если модель остается работающей после устранения нескольких параметров, то она, вероятно, неплоха.
Вторым доказательством устойчивости служит то, что модель работает хорошо, независимо от торговой стратегии, которая построена не ее основе.Если вы можете делать деньги только используя сложное нелинейно масштабируемое правило для каждого вида стратегии, то скорее всего, у вас проблемы с устойчивостью.
Наконец, не должно быть привязки к данным. На каждом имеющимся наборе данных вы должны протестировать свою модель: разные страны, разные инструменты, различные временные периоды, различная частота маркет даты. Модель должна работать на всех выборках, иначе у вас случай подгонки под данные.
Звучит разумно. Что происходит в дальнейшем?
Вооруженные откалиброванной моделью, мы должны произвести тестирование прибыльности. Остатки модели, следующие процессу возврата к среднему, могут быть слишком малыми по амплитуде для компенсации спреда между бидом или аском, или неожиданные выбросы могут обнулить всю прибыль. Так что мы должны протестировать реальную торговую стратегию для данной модели. Здесь нужно действовать очень осторожно — очень легко добавить новые параметры, могущие привести к подгонке, или не учесть какие-либо редкие отклонения. Простота, четкое разделение выборок и интеллектуальная честность очень важны здесь.
Я использую Excel для бэктеста. Это осознанный выбор: Excel не такой мощный, как Python, и это значит, что есть верхний предел сложности торговых правил. Это хорошо, так как стратегии, требующие сложности для того, чтобы быть прибыльными, не являются устойчивыми.
Excel также позволяет ясно увидеть мои предположения: лекго упустить какие-то вещи, когда работаешь с кодом. Он позволяет визуализировать статистику производительности (риск, прибыльность, просадки, эффективность использования капитала, коэффициент Шарпа и т.д.) быстро и понятно. Даже если модель работает, это не значит, что торговая стратегия, построенная на ней, будет экономически эффективной, поэтому статистика имеет значение.
Очень мало торговых моделей проходят все эти стадии: теоретическое формулирование, калибровку на истории и проверку на выборке «out-of-sample», бэктестирование торговой стратегии и прибыльность. Для тех, кто все это прошел, следующий шаг — выпуск в производство. Эта еще одна долгая история (о которой мы расскажем в следующей части).
Продолжение и другие статьи по алгоритмической торговле смотрите на моем сайте — www.quantalgos.ru
Похоже на стеб) Реально впечатление, что чувак решил потроллить журналюг, и потом давился от смеха, перечитывая.
Помню, кто-то так Фишмана распрашивал о его роботах, и тот с умным видом каккой-то мути наговорил о ботах на MSSQL (правда до человека дошло, что это стеб).
Из второй части:
It sounds like you use a lot of tools – Mathematica, Matlab, Python, Excel, C. Is that deliberate?
Absolutely. Different stages in the pipeline require different tools. I’d be an idiot to build real-time performant systems in Excel, or do symbolic manipulation in Python.
На самом деле в Python можно делать символьные вычисления пакетом sympy, но он слабее Mathematica, некоторые интегралы, например, может и не взять.
What can you do in Matlab that you cannot do in Python or vice versa?
These days, you’re right, there’s not much you cannot do in Python. And indeed I find myself using Python more and more.
Да, полностью согласен, в последние годы Python сильно вырос и в плане быстродействия и в плане библиотек для фин.анализа, оптимизации, бэктестинга.