Успешная проверка алгоритмических торговых стратегий на исторических данных.
Часть 1: Ошибки, оказывающие влияние
Часть 2: Пакеты программного обеспечения для бэктестирования
Часть 3: Операционные издержки
Область программного обеспечения для бэктестирования обширна. Решения простираются от полностью интегрированного институционального высококачественного сложного программного обеспечения до таких языков программирования, как C++, Python и R, где почти все должно быть написано с нуля (или с использованием существующих «плагинов»). Как количественных трейдеров, нас интересует баланс между возможностью «обладания» торговым технологическим стеком и скоростью/надежностью методологии разработки. Вот основные соображения для выбора программного обеспечения:
— Навыки программирования. Выбор среды будет в большой части зависеть от вашей способности программировать. Я считаю, что контроль всего стека приведет к лучшим результатам ваших долгосрочных P&L, чем аутсорсинг, на сколько это возможно для программного обеспечения продавца. Это происходит из-за риска снижения курса акций при наличии внешних ошибок или особенностей, которые вы неспособны исправить в программном обеспечении продавца, и которые были бы легко исправлены, если бы вы имели больший контроль над своим «стеком технологий». Вы также хотите использовать такую среду, которая устанавливает верный баланс между производительностью, доступностью библиотек и скоростью исполнения. Мои рекомендации будут ниже.
— Способность исполнения/ взаимодействие с брокером. Некоторое программное обеспечение для бэктестирования, такое как Tradestation, привязано напрямую к брокеру. Я не поклонник такого подхода, поскольку сокращение операционных издержек часто является важным компонентом получения более высокого коэффициента Шарпа. Если вы будете привязаны к конкретному брокеру (а Tradestation «вынуждает» вас это делать), то вам будет труднее переходить на новое программное обеспечение (или к новому брокеру), если возникнет такая потребность. Interactive Brokers предоставляют API (интерфейс программирования приложения, Application Programming Interface), который является функциональным, хотя и немного непонятным.
— Настраиваемость. Такие среды как MATLAB или Python являются очень гибкими при создании алгоритмических стратегий, поскольку они предоставляют фантастические библиотеки для почти любой вообразимой математической операции, а также в случае необходимости позволяют более глубокую настройку.
— Сложность стратегии. Некоторое программное обеспечение просто не подходит для решения числовых задач большого объема или большой математической сложности. Excel является одним из них. В то время как он хорош для более простых стратегий, но не может быстро справиться с большим количеством активов или более сложными алгоритмами.
— Минимизация ошибок. Не является ли конкретная часть программного обеспечения или данных источником ошибок торговли? Если вы хотите самостоятельно реализовывать всю функциональность, то должны удостовериться, что не вводите ошибок, приводящих к искажениям.
— Скорость разработки. Не следует проводить месяцы за реализацией инструмента бэктестирования. Разработка прототипа должна занять лишь несколько недель. Удостоверьтесь, что ваше программное обеспечение сильно не препятствует вашему прогрессу, пытаясь захватить лишь несколько дополнительных процентных пунктов быстродействия. Использование здесь C++ явно является избыточным!
— Скорость исполнения. Если ваша стратегия полностью зависит от своевременности исполнения (как для высокочастотной торговли (high frequency trading, HFT) и сверх-высокочастотной торговли (Ultra-high frequency trading, UHFT)) тогда будет необходимо использовать такой язык, как C или C++. Однако это будет граничить с оптимизацией ядра Linux и использованием FPGA (Field Programmable Gate Array, логическая матрица, программируемая пользователем) для этих задач, что выходит за рамки этой статьи!
— Стоимость. Многие программные среды, с помощью которых вы можете программировать алгоритмические торговые стратегии, абсолютно бесплатны и имеют открытый исходный код. Фактически, многие хедж-фонды используют общедоступное программное обеспечение для всех своих алгоритмических торговых стеков. Кроме того, Excel и MATLAB и относительно дешевы, и даже существуют их бесплатные аналоги.
Теперь, когда мы перечислили критерии, по которым должны выбрать инфраструктуру нашего программного обеспечения, я хочу пробежаться по некоторым популярным пакетам и сравнить их.
Примечание: Я собираюсь включить только то программное обеспечение, которое доступно большинству розничных практиков и разработчиков программного обеспечения, поскольку в основном они являются читателями статьи. Хотя доступно и другое программное обеспечение – более институциональные высококачественные инструменты, но я считаю, что они слишком дороги для эффективного использования в рознице, и у меня нет опыта работы с ними.
Сравнение программных средств для бэктестирования
Excel MS
Описание: Программное обеспечение WYSIWYG (what-you-see-is-what-you-get, получаете то, что видите) в виде таблицы. Широко распространено в финансовой сфере. Данные и алгоритм тесно связаны.
Исполнение: Да, Excel можно привязать к большей части брокеров.
Настраиваемость: Макросы VBA предоставляют более продвинутую функциональность ценой сокрытия реализации.
Сложность стратегии: Передовые статистические инструменты труднее реализовать, поскольку они являются стратегиями с сотнями активов.
Минимизация ошибок: ошибки заглядывания вперед легко обнаружить посредством выделения ячеек (не принимая во внимание VBA).
Скорость разработки: Быстрый для осуществления основных стратегий.
Скорость исполнения: Маленькая скорость исполнения, подходящая только для низкочастотных стратегий.
Стоимость: Дешевый или бесплатный (в зависимости от лицензии).
Альтернатива: OpenOffice
MATLAB
Описание: Среда программирования, первоначально разработанная для вычислительной математики, физики и техники. Очень хорошо подходит для операций векторизации и тех, которые используют числовую линейную алгебру. Предоставляет огромное число плагинов для количественной торговли. Широко используется в количественных хедж-фондах.
Исполнение: Нет родной возможности исполнения, MATLAB требует отдельной системы исполнения.
Настраиваемость: Огромное число плагинов от сообщества для почти всех областей вычислительной математики.
Сложность стратегии: Многие передовые статистические методы уже доступны и тщательно протестированы.
Минимизация ошибок: Тяжелее обнаруживать ошибки заглядывания вперед, требует всестороннего тестирования.
Скорость разработки: Короткие скрипты могут легко создать сложную систему бэктестирования.
Скорость исполнения: С учетом алгоритма векторизации/параллелизации, MATLAB чрезвычайно оптимизирован. Беден на традиционные способы итерации.
Стоимость: Лицензия около $1000.
Альтернатива: Octave, SciLab
Python
Описание: Язык высокого уровня, разработан для скорости разработки. Огромное количество библиотек для практически любой вообразимой задачи с программным управлением. Получил широкое признание в хедж-фондах и инвестиционных банках. Скорость исполнения не такая большая, как у C/C++.
Исполнение: Плагины Python существуют для крупных брокеров, таких как Interactive Brokers. Следовательно и бэктестирование, и система исполнения могут быть частью того же самого «технического стека».
Настраиваемость: Python имеет очень значительное сообщество разработчиков и является зрелым языком. NumPy/SciPy предоставляют быстрые научные вычисления и статистические аналитические инструменты, важные для количественной торговли.
Сложность стратегии: Существует много плагинов для основных алгоритмов, но для количественной торговли меньше, чем в MATLAB.
Минимизация ошибок: Существует та же самая проблема минимизации ошибок, что и в любом языке высокого уровня. Необходимо быть чрезвычайно осторожным при тестировании.
Скорость разработки: Главное преимущество Python заключается в скорости разработки с надежными встроенными возможностями тестирования.
Скорость исполнения: Не так быстр, как C++, но научные вычислительные компоненты оптимизированы, и Python может взаимодействовать с нативным C посредством определенных плагинов.
Стоимость: Бесплатный/с открытым исходным кодом
Альтернатива: Ruby, Erlang, Haskell
R
Описание: Среда, разработанная для передовых статистических методов и анализа временного ряда. Огромное число специфических статистических, эконометрических и собственных графических комплектов инструментов. Большое сообщество разработчиков.
Исполнение: R обладает плагинами для некоторых брокеров, в особенности Interactive Brokers. Таким образом, можно написать полную систему полностью на R.
Настраиваемость: R может взаимодействовать с любым пакетом, но его сила заключается в статистических/эконометрических областях.
Сложность стратегии: Из-за доступных плагинов по большей части полезен при исполнении эконометрических, статистических стратегий или стратегий машинного обучения.
Минимизация ошибок: Аналогичный уровень вероятности появления ошибок, как и для любого другого языка высокого уровня, такого как Python или C++. Таким образом, должно проводиться тестирование.
Скорость разработки: R быстр для написания стратегий, основанных на статистических методах.
Скорость исполнения: R медленнее, чем C++, но остается относительно оптимизированным для векторных операций (как MATLAB).
Стоимость: Бесплатный/с открытым исходным кодом
Альтернатива: SPSS, Stata
C++
Описание: Сформировавшийся, высокоуровневый язык, разработан для скорости исполнения. Огромное количество библиотек количественных финансов и числовых библиотек. Его тяжелее отладить, и это часто занимает больше времени, чем на Python или MATLAB. Чрезвычайно распространен как на стороне покупателя, так и на стороне продавца.
Исполнение: Большая часть брокерского API написана на C++ и Java. Таким образом, существует много плагинов.
Настраиваемость: C/C++ предоставляет прямой доступ к основной памяти, следовательно могут быть реализованы сверх-высокочастотные стратегии.
Сложность стратегии: C++ STL предоставляет огромное число оптимизированных алгоритмов. Почти любой специализированный математический алгоритм обладает бесплатной реализацией C/C++ в сети с открытым исходным кодом.
Минимизация ошибок: Ошибка заглядывания вперед может быть сложной для устранения, но не сложнее, чем на другом высокоуровневом языке. Хорошие инструменты отладки, но нужно быть осторожным, имея дело с основной памятью.
Скорость разработки: C++ более многословный по сравнению с Python или MATLAB для того же самого алгоритма. Больше строк кода (lines-of-code, LOC) часто приводит к увеличению вероятности появления ошибок.
Скорость исполнения: C/C++ имеет чрезвычайно большую скорость исполнения и его можно хорошо оптимизировать для определенной вычислительной архитектуры. Это основная причина его использования.
Стоимость: Разные компиляторы: Linux/GCC бесплатный, MS Visual Studio имеет разные лицензии.
Альтернатива: C#, Java, Scala
Разные стратегии потребуют использования разных пакетов программ. Стратегии HFT и UHFT пишутся на C/C++ (сейчас они часто выполняются на GPUs и FPGAs), тогда как низкочастотные стратегии для акций легко осуществить в TradeStation из-за структуры «все в одном» программного обеспечения/брокерского API.
Лично я отдаю предпочтение Python, поскольку он обеспечивает нужную степень настраиваемости, скорости разработки, возможности тестирования возможностей и скорость исполнения для моих потребностей и стратегий. Если я нуждаюсь в чем-нибудь более быстром, я могу «обратиться» к C++ непосредственно из моих программ, написанных на Python. Многие количественные трейдеры предпочитают писать прототип стратегии на Python, а затем циклически преобразовывать более медленные части исполнения на C++. В конечном счете, весь алгоритм будет написан в C++ и его можно будет «оставить в покое для торговли»!
Автор: Michael Halls-Moore
Источник:
Sucessful backtesting of algorithmic trading strategies – part I
Комментарии:
SwanTrade: + скриптовый язык PERL
лично мне кажется удобнее и Питона и R
Yaroslav Alexeev: R векторный, иногда нужно 2 строчки кода, которые на C# или Java выльются в 2 страницы.
mehanizator: R жутко медленный 🙂
GreenBear: «mehanizator: R жутко медленный 🙂 «…
оптимизируй алгоритмы, Люк…
mehanizator: вариант «смени язык» для меня оказался вполне успешным.