В процессе загрузки ресурсов... загрузка...

Успешное тестирование алгоритмических торговых стратегий - часть I

Автор:Доброта, Создано: 2019-03-20 17:00:16, Обновлено:

Эта статья продолжает серию о количественной торговле, которая началась с "Руководства для начинающих" и "Идентификации стратегии".

Алгоритмическое бэкстестинг требует знаний во многих областях, включая психологию, математику, статистику, разработку программного обеспечения и микроструктуру рынка / биржи. Я не мог надеяться охватить все эти темы в одной статье, поэтому я собираюсь разделить их на две или три небольшие части. Что мы обсудим в этом разделе? Я начну с определения бэкстестинга, а затем опишу основы его проведения. Затем я проясню предрассудки, которые мы затронули в Руководстве для начинающих по количественной торговле. Далее я представлю сравнение различных доступных вариантов программного обеспечения для бэкстестинга.

В последующих статьях мы рассмотрим подробности реализации стратегии, которые часто едва упоминаются или игнорируются. Мы также рассмотрим, как сделать процесс обратного тестирования более реалистичным, включив в него особенности торговой биржи. Затем мы обсудим затраты на транзакции и как правильно их моделировать в условиях обратного тестирования. Мы закончим обсуждением производительности наших обратных тестов и, наконец, приведем пример общей квантовой стратегии, известной как торговля двойками с обратным средним значением.

Давайте начнем с обсуждения того, что такое бэкстестинг и почему мы должны проводить его в нашей алгоритмической торговле.

Что такое обратное тестирование?

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

Проще говоря, бэкстестинг осуществляется путем подвержения алгоритма вашей конкретной стратегии потоку исторических финансовых данных, что приводит к набору торговых сигналов. Каждая сделка (которую мы будем называть здесь обратной поездкой двух сигналов) будет иметь связанную прибыль или убыток. Накопление этой прибыли / убытка в течение периода вашего бэкстеста стратегии приведет к общей прибыли и убытку (также известный как P&L или PnL). Это суть идеи, хотя, конечно, дьявол всегда в деталях!

Каковы ключевые причины для обратного тестирования алгоритмической стратегии?

  • Фильтрация - если вы вспомните из статьи о выявлении стратегии, наша цель на начальной стадии исследования заключалась в том, чтобы создать стратегию и затем отфильтровать любую стратегию, которая не отвечает определенным критериям.
  • Моделирование - обратное тестирование позволяет нам (безопасно!) тестировать новые модели определенных рыночных явлений, таких как затраты на транзакции, маршрутизация заказов, задержка, ликвидность или другие вопросы микроструктуры рынка.
  • Оптимизация - Хотя оптимизация стратегии чревата предрассудками, обратное тестирование позволяет нам увеличить эффективность стратегии путем изменения количества или значений параметров, связанных с этой стратегией, и перерасчета ее эффективности.
  • Проверка - наши стратегии часто получаются извне, через наш стратегический трубопровод. Бактестирование стратегии гарантирует, что она не была неправильно реализована. Хотя мы редко будем иметь доступ к сигналам, генерируемым внешними стратегиями, мы часто будем иметь доступ к показателям производительности, таким как соотношение Шарпа и характеристики снижения. Таким образом, мы можем сравнить их с нашей собственной реализацией.

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

К сожалению, в ретро-тестировании есть много предрассудков, о некоторых из которых мы говорили в предыдущих статьях.

Проверки прошлого стратегии, влияющие на предубеждения

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

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

Оптимизация предубеждений

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

Оптимизация склонности трудно устранить, поскольку алгоритмические стратегии часто включают в себя много параметров. Параметры в этом случае могут быть критерии входа/выхода, периоды обратного обзора, средние периоды (т.е. параметр сглаживания скользящей средней) или частота измерения волатильности. Оптимизация склонности может быть сведена к минимуму, сохраняя количество параметров до минимума и увеличивая количество точек данных в наборе обучения. На самом деле, также нужно быть осторожным с последним, так как старые точки обучения могут подчиняться предыдущему режиму (например, регулирующей среде) и, следовательно, могут не иметь отношения к вашей текущей стратегии.

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

Предвзятость в отношении будущего

В системе обратного тестирования вводятся предварительные предвзятости, когда будущие данные случайно включаются в точку симуляции, где эти данные на самом деле не были бы доступны. Если мы выполняем обратный тест хронологически и достигаем точки времени N, то предвзятость возникает, если данные включаются для любой точки N + k, где k>0.

  • Технические ошибки - массивы/векторы в коде часто имеют итераторы или индексные переменные.
  • Вычисление параметров - Другой распространенный пример предвзятости происходит при расчете оптимальных параметров стратегии, например, при линейных регрессиях между двумя временными рядами.
  • Максимальные/минимальные значения - Некоторые торговые стратегии используют экстремальные значения в любом периоде времени, например, включая высокие или низкие цены в данные OHLC. Однако, поскольку эти максимальные/минимальные значения могут быть рассчитаны только в конце периода времени, если эти значения используются в течение текущего периода, вводится предвзятость.

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

Противоположность выживания

Уклонение к выживанию является особенно опасным явлением и может привести к значительному увеличению производительности для определенных типов стратегий.

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

Есть два основных способа смягчить предвзятость выживания в ваших стратегических бэк-тестах:

  • В случае с данными акций можно приобрести наборы данных, которые включают исключенные из списка, хотя они не дешевы и обычно используются только институциональными фирмами. В частности, данные Yahoo Finance НЕ свободны от предвзятости выживания, и это обычно используется многими розничными трейдерами.
  • Использование более поздних данных - В случае акций использование более позднего набора данных снижает вероятность того, что выбранный выбор акций будет взвешен на "выжившие", просто так, как меньше вероятность того, что общий запас будет удален из списка в более короткие периоды времени. Также можно начать создание личного набора данных, свободного от предвзятости по выживанию, путем сбора данных с текущей точки. Через 3-4 года у вас будет солидный набор данных о выживании, свободный от предвзятости, с помощью которого можно проверить дальнейшие стратегии.

Теперь мы рассмотрим некоторые психологические явления, которые могут повлиять на вашу торговую эффективность.

Психологическая толерантность

Это особенное явление не часто обсуждается в контексте количественной торговли. Тем не менее, оно широко обсуждается в отношении более дискреционных методов торговли. У него есть различные названия, но я решил назвать его "психологическая толерантность bias", потому что он захватывает суть проблемы. При создании бэктестов в течение периода 5 лет или более легко посмотреть на восходящую кривую акций, рассчитать совокупную годовую доходность, коэффициент Шарпа и даже характеристики привлечения и быть удовлетворенным результатами.

Если исторические снижения на 25% или более произойдут в бэктестах, то, по всей вероятности, вы увидите периоды аналогичного снижения в живой торговле. Эти периоды снижения психологически трудно переносить. Я наблюдал из первых рук, как может выглядеть расширенное снижение, в институциональной обстановке, и это не приятно - даже если бэктесты предполагают, что такие периоды произойдут. Причина, по которой я назвал это bias, заключается в том, что часто стратегия, которая в противном случае была бы успешной, прекращается торговать в периоды расширенного снижения и, таким образом, приведет к низкой производительности по сравнению с бэктестом. Таким образом, хотя стратегия носит алгоритмический характер, психологические факторы все еще могут оказать значительное влияние на прибыльность.

Программные пакеты для обратного тестирования

Ландшафт программного обеспечения для обратного тестирования стратегии обширен. Решения варьируются от полностью интегрированного сложного программного обеспечения институционального уровня до языков программирования, таких как C ++, Python и R, где почти все должно быть написано с нуля (или получены подходящие плагины).

  • Навыки программирования - Выбор среды в значительной степени зависит от вашей способности программировать программное обеспечение. Я бы сказал, что контроль над полным стеком окажет большее влияние на ваш долгосрочный доход и доход, чем аутсорсинг как можно большего количества программного обеспечения поставщика. Это связано с негативным риском наличия внешних ошибок или особенностей, которые вы не можете исправить в программном обеспечении поставщика, которые в противном случае были бы легко устранены, если бы у вас был больше контроля над вашим tech stack. Вы также хотите среду, которая достигает правильного баланса между производительностью, доступностью библиотеки и скоростью исполнения.
  • Умение выполнения/взаимодействие брокера - Некоторые программы обратного тестирования, такие как Tradestation, напрямую связаны с брокерским агентством. Я не фанат этого подхода, поскольку снижение затрат на транзакции часто является большим компонентом получения более высокого коэффициента Sharpe. Если вы связаны с определенным брокером (и Tradestation заставляет вас это делать), то вам будет сложнее перейти на новое программное обеспечение (или новый брокер), если возникнет необходимость.
  • Настройка - среда, такая как MATLAB или Python, дает вам большую гибкость при создании стратегий algo, поскольку они предоставляют фантастические библиотеки для практически любой математической операции, но также позволяют широкую настройку, когда это необходимо.
  • Сложность стратегии - Некоторые программы просто не подходят для обработки больших чисел или математической сложности. Excel является одним из таких программ. Хотя он хорош для более простых стратегий, он не может действительно справляться с многочисленными активами или более сложными алгоритмами со скоростью.
  • Минимизация предвзятости - может ли конкретное программное обеспечение или данные более поддаться предвзятости в торговле?
  • Скорость разработки - Не стоит тратить месяцы и месяцы на реализацию движка обратного теста. Прототип должен занять всего несколько недель. Убедитесь, что ваше программное обеспечение не препятствует вашему прогрессу в большой степени, просто чтобы захватить несколько дополнительных процентных пунктов скорости выполнения. C ++ - это "слон в комнате" здесь!
  • Скорость выполнения - Если ваша стратегия полностью зависит от своевременности выполнения (как в HFT / UHFT), то такой язык, как C или C ++, будет необходим.
  • Стоимость - многие программные среды, с помощью которых можно программировать алгоритмические торговые стратегии, являются полностью бесплатными и с открытым исходным кодом. На самом деле, многие хедж-фонды используют программное обеспечение с открытым исходным кодом для всех своих торговых стеков. Кроме того, Excel и MATLAB относительно дешевы, и есть даже бесплатные альтернативы каждому.

Теперь, когда мы перечислили критерии, с помощью которых мы должны выбрать нашу программную инфраструктуру, я хочу пройти через некоторые из наиболее популярных пакетов и как они сравниваются:

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

Сравнение программного обеспечения для обратного тестирования

MS Excel

Описание: WYSIWYG (what-you-see-is-what-you-get) программное обеспечение для электронных таблиц.

Исполнение: Да, Excel можно связать с большинством брокерских компаний.

Настройка: макросы VBA позволяют более продвинутые функции за счет сокрытия реализации.

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

Минимизация предвзятости: предвзятость можно легко обнаружить с помощью функции подчеркивания ячейки (при условии отсутствия VBA).

Скорость разработки: Быстрое внедрение базовых стратегий.

Скорость исполнения: медленная скорость исполнения - подходит только для стратегий с более низкой частотой.

Стоимость: дешевая или бесплатная (в зависимости от лицензии).

Альтернативы: OpenOffice

MATLAB

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

Исполнение: нет возможности выполнения, MATLAB требует отдельной системы исполнения.

Настройка: Огромное множество плагинов сообщества для почти всех областей вычислительной математики.

Сложность стратегии: многие передовые статистические методы уже доступны и хорошо проверены.

Минимизация предвзятости: труднее обнаружить предвзятость, требует обширных испытаний.

Скорость разработки: короткие сценарии могут легко создавать сложные бэкстесты.

Скорость выполнения: при условии векторизированного/параллелизированного алгоритма MATLAB высоко оптимизирован.

Стоимость: ~ 1000 долларов США за лицензию.

Альтернативы: Octave, SciLab

Питон

Описание: язык высокого уровня, предназначенный для скорости разработки. Широкий спектр библиотек для практически любой программируемой задачи. Общественность хедж-фондов и инвестиционных банков приобретает более широкое признание. Не так быстро, как C / C ++ для скорости выполнения.

Исполнение: плагины Python существуют для более крупных брокеров, таких как Interactive Brokers.

Настройка: Python имеет очень здоровое сообщество разработчиков и является зрелым языком.

Сложность стратегии: существует много плагинов для основных алгоритмов, но не столь большое квантовое сообщество, как для MATLAB.

Минимизация предубеждений: существуют те же проблемы минимизации предубеждений, что и для любого языка высокого уровня. Необходимо быть чрезвычайно осторожными при тестировании.

Скорость разработки: главное преимущество Python - это скорость разработки, с надежными встроенными в тестирование возможностями.

Скорость выполнения: не так быстро, как C++, но научные вычислительные компоненты оптимизированы, и Python может общаться с кодом C с помощью определенных плагинов.

Стоимость: бесплатный/открытый код

Альтернативы: Ruby, Erlang, Haskell

R

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

Использование: R имеет плагины для некоторых брокеров, в частности Interactive Brokers.

Настройка: R можно настроить на любой пакет, но его сильные стороны заключаются в статистических/эконометрических областях.

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

Минимизация предвзятости: аналогичный уровень возможности предвзятости для любого языка высокого уровня, такого как Python или C ++. Таким образом, необходимо проводить тестирование.

Скорость разработки: R является быстрым для написания стратегий, основанных на статистических методах.

Скорость выполнения: R медленнее, чем C++, но остается относительно оптимизированным для векторизированных операций (как и в MATLAB).

Стоимость: бесплатный/открытый код

Альтернативы: SPSS, Stata

C++

Описание: зрелый язык высокого уровня, предназначенный для скорости выполнения. Широкий спектр количественных финансов и цифровых библиотек. Труднее отладки и часто занимает больше времени для реализации, чем Python или MATLAB. Чрезвычайно распространен как на стороне покупки, так и продажи.

Исполнение: большинство брокерских API написаны на C++ и Java.

Настройка: C/C++ позволяет получить прямой доступ к базовой памяти, поэтому могут быть реализованы стратегии сверхвысокой частоты.

Сложность стратегии: C++ STL предоставляет широкий спектр оптимизированных алгоритмов.

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

Скорость разработки: C++ довольно многословен по сравнению с Python или MATLAB для того же алгоритма.

Скорость выполнения: C/C++ имеет чрезвычайно быструю скорость выполнения и может быть хорошо оптимизирована для конкретных вычислительных архитектур.

Стоимость: различные компиляторы: Linux/GCC бесплатный, MS Visual Studio имеет различные лицензии.

Альтернативы: C#, Java, Scala

Различные стратегии потребуют различных программных пакетов. Стратегии HFT и UHFT будут написаны на C/C++ (в настоящее время они часто выполняются на графических процессорах и FPGA), тогда как низкочастотные направленные стратегии акций легко реализовать в TradeStation из-за "всего в одном" характера программного обеспечения / брокерства.

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

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


Больше