Эта статья продолжает серию о количественной торговле, которая началась с "Руководства для начинающих" и "Идентификации стратегии".
Алгоритмическое бэкстестинг требует знаний во многих областях, включая психологию, математику, статистику, разработку программного обеспечения и микроструктуру рынка / биржи. Я не мог надеяться охватить все эти темы в одной статье, поэтому я собираюсь разделить их на две или три небольшие части. Что мы обсудим в этом разделе? Я начну с определения бэкстестинга, а затем опишу основы его проведения. Затем я проясню предрассудки, которые мы затронули в Руководстве для начинающих по количественной торговле. Далее я представлю сравнение различных доступных вариантов программного обеспечения для бэкстестинга.
В последующих статьях мы рассмотрим подробности реализации стратегии, которые часто едва упоминаются или игнорируются. Мы также рассмотрим, как сделать процесс обратного тестирования более реалистичным, включив в него особенности торговой биржи. Затем мы обсудим затраты на транзакции и как правильно их моделировать в условиях обратного тестирования. Мы закончим обсуждением производительности наших обратных тестов и, наконец, приведем пример общей квантовой стратегии, известной как торговля двойками с обратным средним значением.
Давайте начнем с обсуждения того, что такое бэкстестинг и почему мы должны проводить его в нашей алгоритмической торговле.
Алгоритмическая торговля отличается от других типов инвестиционных классов, потому что мы можем более надежно предложить ожидания о будущей производительности от прошлой производительности, в результате наличия обильного количества данных.
Проще говоря, бэкстестинг осуществляется путем подвержения алгоритма вашей конкретной стратегии потоку исторических финансовых данных, что приводит к набору торговых сигналов. Каждая сделка (которую мы будем называть здесь
Каковы ключевые причины для обратного тестирования алгоритмической стратегии?
Backtesting обеспечивает множество преимуществ для алгоритмической торговли. Однако не всегда возможно напрямую проверить стратегию. В целом, по мере увеличения частоты стратегии становится сложнее правильно моделировать микроструктурные эффекты рынка и бирж. Это приводит к менее надежным бэкстестам и, следовательно, более сложной оценке выбранной стратегии. Это особенная проблема, когда система исполнения является ключом к эффективности стратегии, как и при сверхвысокочастотных алгоритмах.
К сожалению, в ретро-тестировании есть много предрассудков, о некоторых из которых мы говорили в предыдущих статьях.
Есть много предрассудков, которые могут повлиять на производительность обратной стратегии. К сожалению, эти предрассудки имеют тенденцию увеличивать производительность, а не уменьшать ее. Таким образом, вы всегда должны рассматривать обратный тест как идеализированную верхнюю границу фактической производительности стратегии. Почти невозможно устранить предрассудки от алгоритмической торговли, поэтому наша работа заключается в том, чтобы минимизировать их как можно лучше, чтобы принимать обоснованные решения о наших алгоритмических стратегиях.
Есть четыре основных предрассудка, которые я хотел бы обсудить: предрассудки оптимизации, предрассудки прогнозирования, предрассудки выживания и предрассудки психологической толерантности.
Это, вероятно, самый коварный из всех предрассудков обратного теста. Он включает в себя корректировку или введение дополнительных торговых параметров, пока эффективность стратегии на наборе данных обратного теста не будет очень привлекательной. Однако, как только она будет запущена, эффективность стратегии может значительно отличаться.
Оптимизация склонности трудно устранить, поскольку алгоритмические стратегии часто включают в себя много параметров.
Один из методов, помогающих смягчить этот уклон, - это проведение анализа чувствительности. Это означает изменение параметров постепенно и составление
В системе обратного тестирования вводятся предварительные предвзятости, когда будущие данные случайно включаются в точку симуляции, где эти данные на самом деле не были бы доступны. Если мы выполняем обратный тест хронологически и достигаем точки времени N, то предвзятость возникает, если данные включаются для любой точки N + k, где k>0.
Как и в случае с оптимизационным уклоном, необходимо быть крайне осторожным, чтобы избежать его внедрения.
Уклонение к выживанию является особенно опасным явлением и может привести к значительному увеличению производительности для определенных типов стратегий.
В качестве примера рассмотрим тестирование стратегии на случайном выборе акций до и после краха рынка 2001 года. Некоторые технологические акции обанкротились, в то время как другие смогли остаться на плаву и даже процветать. Если бы мы ограничили эту стратегию только акциями, которые прошли через период снижения рынка, мы бы ввели предвзятость выживаемости, потому что они уже продемонстрировали нам свой успех. На самом деле, это просто еще один конкретный случай предвзятости, поскольку будущая информация включается в прошлый анализ.
Есть два основных способа смягчить предвзятость выживания в ваших стратегических бэк-тестах:
Теперь мы рассмотрим некоторые психологические явления, которые могут повлиять на вашу торговую эффективность.
Это особенное явление не часто обсуждается в контексте количественной торговли. Тем не менее, оно широко обсуждается в отношении более дискреционных методов торговли. У него есть различные названия, но я решил назвать его "психологическая толерантность bias", потому что он захватывает суть проблемы. При создании бэктестов в течение периода 5 лет или более легко посмотреть на восходящую кривую акций, рассчитать совокупную годовую доходность, коэффициент Шарпа и даже характеристики привлечения и быть удовлетворенным результатами.
Если исторические снижения на 25% или более произойдут в бэктестах, то, по всей вероятности, вы увидите периоды аналогичного снижения в живой торговле. Эти периоды снижения психологически трудно переносить. Я наблюдал из первых рук, как может выглядеть расширенное снижение, в институциональной обстановке, и это не приятно - даже если бэктесты предполагают, что такие периоды произойдут. Причина, по которой я назвал это
Ландшафт программного обеспечения для обратного тестирования стратегии обширен. Решения варьируются от полностью интегрированного сложного программного обеспечения институционального уровня до языков программирования, таких как C ++, Python и R, где почти все должно быть написано с нуля (или получены подходящие плагины).
Теперь, когда мы перечислили критерии, с помощью которых мы должны выбрать нашу программную инфраструктуру, я хочу пройти через некоторые из наиболее популярных пакетов и как они сравниваются:
Примечание: я собираюсь включить только программное обеспечение, которое доступно для большинства розничных практиков и разработчиков программного обеспечения, поскольку это читательская аудитория сайта.
Сравнение программного обеспечения для обратного тестирования
Описание: WYSIWYG (what-you-see-is-what-you-get) программное обеспечение для электронных таблиц.
Исполнение: Да, Excel можно связать с большинством брокерских компаний.
Настройка: макросы VBA позволяют более продвинутые функции за счет сокрытия реализации.
Сложность стратегии: более продвинутые статистические инструменты сложнее внедрить, как и стратегии со многими сотнями активов.
Минимизация предвзятости: предвзятость можно легко обнаружить с помощью функции подчеркивания ячейки (при условии отсутствия VBA).
Скорость разработки: Быстрое внедрение базовых стратегий.
Скорость исполнения: медленная скорость исполнения - подходит только для стратегий с более низкой частотой.
Стоимость: дешевая или бесплатная (в зависимости от лицензии).
Альтернативы: OpenOffice
Описание: Окружающая среда программирования, изначально разработанная для вычислительной математики, физики и инженерии. Очень хорошо подходит для векторизированных операций и тех, которые включают в себя числовую линейную алгебру. Предоставляет широкий спектр плагинов для квантовой торговли. Широко используется в количественных хедж-фондах.
Исполнение: нет возможности выполнения, MATLAB требует отдельной системы исполнения.
Настройка: Огромное множество плагинов сообщества для почти всех областей вычислительной математики.
Сложность стратегии: многие передовые статистические методы уже доступны и хорошо проверены.
Минимизация предвзятости: труднее обнаружить предвзятость, требует обширных испытаний.
Скорость разработки: короткие сценарии могут легко создавать сложные бэкстесты.
Скорость выполнения: при условии векторизированного/параллелизированного алгоритма MATLAB высоко оптимизирован.
Стоимость: ~ 1000 долларов США за лицензию.
Альтернативы: Octave, SciLab
Описание: язык высокого уровня, предназначенный для скорости разработки. Широкий спектр библиотек для практически любой программируемой задачи. Общественность хедж-фондов и инвестиционных банков приобретает более широкое признание. Не так быстро, как C / C ++ для скорости выполнения.
Исполнение: плагины Python существуют для более крупных брокеров, таких как Interactive Brokers.
Настройка: Python имеет очень здоровое сообщество разработчиков и является зрелым языком.
Сложность стратегии: существует много плагинов для основных алгоритмов, но не столь большое квантовое сообщество, как для MATLAB.
Минимизация предубеждений: существуют те же проблемы минимизации предубеждений, что и для любого языка высокого уровня. Необходимо быть чрезвычайно осторожными при тестировании.
Скорость разработки: главное преимущество Python - это скорость разработки, с надежными встроенными в тестирование возможностями.
Скорость выполнения: не так быстро, как C++, но научные вычислительные компоненты оптимизированы, и Python может общаться с кодом C с помощью определенных плагинов.
Стоимость: бесплатный/открытый код
Альтернативы: Ruby, Erlang, Haskell
Описание: Окружающая среда, предназначенная для передовых статистических методов и анализа временных рядов. Широкий спектр специфических статистических, эконометрических и нативных наборов инструментов графики. Большое сообщество разработчиков.
Использование: R имеет плагины для некоторых брокеров, в частности Interactive Brokers.
Настройка: R можно настроить на любой пакет, но его сильные стороны заключаются в статистических/эконометрических областях.
Сложность стратегии: в основном полезна при выполнении эконометрических, статистических или машинного обучения стратегий из-за доступных плагинов.
Минимизация предвзятости: аналогичный уровень возможности предвзятости для любого языка высокого уровня, такого как Python или C ++. Таким образом, необходимо проводить тестирование.
Скорость разработки: R является быстрым для написания стратегий, основанных на статистических методах.
Скорость выполнения: R медленнее, чем C++, но остается относительно оптимизированным для векторизированных операций (как и в MATLAB).
Стоимость: бесплатный/открытый код
Альтернативы: SPSS, Stata
Описание: зрелый язык высокого уровня, предназначенный для скорости выполнения. Широкий спектр количественных финансов и цифровых библиотек. Труднее отладки и часто занимает больше времени для реализации, чем 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 ++ и могут быть оставлены сами себе для торговли!
В следующих статьях о бэкстестинге мы рассмотрим некоторые конкретные вопросы, связанные с реализацией системы алгоритмического бэкстестинга торговли, а также как включить эффекты торговых бирж.