5.1. База данных
Исторические данные – это краеугольный камень любой системы бэктестинга торговых стратегий. Только на американском биржевом рынке торгуется более 2000 опционабельных акций. Если предположить, что у каждой акции в среднем имеется порядка 10 торгуемых страйков и порядка 10 дат экспираций, то в итоге получится порядка 200 000 торговых инструментов. Каждый из них имеет свои исторические значения. Такое разнообразие объясняет особые требования, предъявляемые к организации базы данных и структуры доступа к содержащимся в ней торговым инструментам.
5.1.1. Поставщики данных
Большинство брокерских платформ, предоставляющих онлайн-доступ к биржевой информации, дает возможность видеть текущие котировки опционов. Однако предоставление исторической информации достаточной глубины в прошлое не является частью обычного брокерского сервиса. Котировки текущего торгового дня для большинства опционных контрактов можно найти на популярных бесплатных сервисах finance.yahoo.com и finance.google.com. Гораздо сложнее дело обстоит с историей цен опционов.
Для создания и поддержания исторической базы данных необходимо обращаться к специализированным поставщикам данных. При этом не все поставщики поддерживают достаточный объем и глубину данных. Это объясняется тем, что деятельность по созданию систем бэктестинга опционных стратегий достаточно сложна и пока еще не получила широкого распространения.
Многие поставщики данных предоставляют историю цен опционов только на небольшой спектр базовых активов, например основные валюты и индексы. Некоторые разработчики аналитических платформ для торговли опционами предоставляют доступ к истории непосредственно из собственных программных продуктов. Это удобно для построения простейших систем бэктестинга, реализуемых непосредственно на платформе, предоставленной разработчиком. Однако разработка и тестирование сложных стратегий, основанных на оригинальных инновационных идеях, на такой платформе невозможна.
Довольно широкий спектр базовых инструментов и более или менее серьезную глубину истории можно найти на интернет-сервисах Historicaloptiondata.com, IVolatility.com, Livevol.com, Optionmetrics.com, Stricknet.com. В частности, Livevol предоставляет не только данные закрытия дня, но и внутридневные цены. Сервис IVolatility, помимо истории цен, предоставляет богатый спектр специфических для опционов расчетных и аналитических материалов и программные продукты для разработчиков, с помощью которых можно получать онлайн-доступ к оперативной биржевой информации.
В случае если база данных приобретается у определенного поставщика в готовом виде, следует обратить особое внимание на проблему отсутствия в приобретаемой базе тех базовых активов, которые существовали ранее, но в настоящий момент уже не торгуются (так называемая проблема выживания – survival bias problem). Это может быть связано с банкротством компании либо с ее поглощением. При этом многие провайдеры данных предоставляют информацию только о тех компаниях, которые торгуются в настоящее время. Если этим ограничиться, то при бэктестинге стратегии будет упущено важное рыночное событие, и результат исследования нельзя будет считать полным и надежным. Например, в период, когда циркулировали слухи о возможном поглощении определенной компании, стоимость ее опционов могла быть очень высокой. Если бы в этот период стратегия, основанная на продаже волатильности, сгенерировала сигнал на открытие короткой позиции по этой акции, то в момент, когда событие реализовалось, могло произойти большое ценовое движение. Это привело бы к серьезным убыткам и, возможно, к полному разорению всего торгового счета. Если же база данных, на которой проводится тестирование, не содержит тиккер такой поглощенной компании, то в процессе бэктестинга это событие не получит никакого отражения. Поэтому использование при разработке стратегий полных списков всех тиккеров, существовавших в те дни, для которых производится моделирование торговли, является обязательным.
5.1.2. Структура базы данных
База данных должна содержать минимальный объем информации, относящийся к определенному временному интервалу (в большинстве случаев интервал принимается равным одному торговому дню). В отношении цены такой минимальный объем информации включает цены открытия и закрытия дня, а также максимальные и минимальные цены дня. Более подробные базы включают также внутридневные цены, фиксируемые с заданной частотой, а самые полные базы могут содержать полную информацию обо всех совершенных сделках.
Исторические цены опционов имеют свою специфику. Поскольку опционы являются производными финансовыми инструментами, их ценообразование неразрывно связано с текущей ценой их базовых активов. Возникает принципиально важная задача синхронизации. А именно: котировки опционов на определенный момент времени осмыслены только вместе с ценой их базового актива строго в тот же момент времени. Этот фактор необходимо учитывать при организации структуры базы исторических данных.
В виду больших спредов между ценами спроса и предложения и из-за низкой ликвидности опционов котировки их цен спроса и предложения имеют гораздо большее значение, чем цены совершенных сделок. Особое значение это приобретает при определении котировок закрытия торгового дня (или другого фрейма). Во многих случаях последняя сделка по опционам происходит не в момент закрытия дня, в то время как последняя сделка по базовому активу, как правило, приходится на закрытие торгов. Поскольку такая десинхронизация недопустима, приходится вместо цен закрытия торгового дня использовать соответствующие котировки спроса и предложения опционов.
Для тестирования большинства опционных стратегий в структуре базы данных необходимо предусмотреть следующий состав информационных разделов:
• История цен базовых активов, включая стандартный набор цен открытия, закрытия, максимумов и минимумов для поддерживаемого тайм-фрейма.
• История цен и котировок опционов. Каждый опцион является отдельным инструментом со своим тиккером, историей сделок и котировок. Для полноценного бэктестинга необходимо поддерживать их структурное описание, связывающее каждый отдельный опцион с базовым активом и параметрами серии – базовым инструментом, страйком, типом опциона, датой экспирации. Необходимо иметь возможность по тиккеру базового актива получить множество всех его активных на данный момент опционов и осуществлять по нему навигацию по двум измерениям – датам экспирации и страйкам.
• История данных по объемам торговли (как для базовых активов, так и для опционов) и открытому интересу (для опционов).
• История дивидендных выплат, сплитов и переименований тиккеров базовых активов.
• История квартальных отчетов. Необходимо помнить, что цель бэктестинга – смоделировать ситуацию принятия решения в прошлом, не заглядывая в относительное к этому прошлому будущее. Достаточно просто получить хронологию уже состоявшихся квартальных отчетов, предоставляемую многими бесплатными сервисами. Однако такая информация не должна быть использована в бэктестинге, поскольку может стать причиной принципиальных ошибок. Дело в том, что в реальной торговле принятие решения может опираться только на предполагаемые даты событий – причем событий, предполагаемых только на основании имеющейся в тот момент информации. Рынок может не знать о точной дате будущего отчета, и это радикально отразится на цене опционов (например, подразумеваемая волатильность будет ниже по сравнению с ситуацией точно известной близкой даты отчета). Либо ситуация может быть обратной – точная дата отчета известна, но в назначенный день отчет не публикуется. Реакция рынка в таком случае зависит от причины задержки отчета. В обоих случаях в процессе бэктестинга будет принято решение, которое было бы невозможно в реальности. Чтобы избежать подобного искажения результатов, необходимо хранить для каждого дня прошлого предполагаемые даты квартальных отчетов, доступные в открытом доступе в этот день. Эти данные можно накапливать, ежедневно автоматически сканируя популярные сайты типа MarketWatch.com, Earnings.com, Finance.Yahoo.com и другие.
• История нерегулярных корпоративных событий: слияния/поглощения, банкротства, судебные решения, заседания комиссий с одобрением или запрещением продукции. Информация подобного типа существенно осложняет бэктестинг. Все перечисленные события сильно влияют на подразумеваемую волатильность и, следовательно, на цену опционов. Однако информация о них становится достоверной только после фактического наступления события. В бэктестинге же необходимо учитывать только предположения и ожидания, которыми участники рынка могли руководствоваться в конкретный день до наступления события. Сбор, хранение и использование такой информации в стратегиях – крайне непростая задача. При невозможности правильно оценить информацию, доступную участникам рынка в заданный момент времени (до наступления события), следует отказываться от сделок в системе бэктестинга. Это делается путем применения специальных фильтров (описанных ниже).
• История фундаментальных показателей. Фундаментальные финансовые показатели, такие как P/E, PEG, ROE, EPS и многие другие «мультипликаторы», получаемые из корпоративной отчетности и экспертных оценок, являются основой фундаментального анализа. В настоящее время использование фундаментальных показателей при построении опционных торговых стратегий не имеет широкого распространения. Однако разработка подобных стратегий представляется нам весьма перспективным направлением развития (особенно в сочетании с использованием элементов технического анализа). Основная задача состоит в накоплении данных, публикуемых в квартальных отчетах, и параллельное взаимосвязанное накопление для этих же данных их прогнозных значений (существовавших до публикации отчета).
Многие поставщики данных и информационных сервисов сопровождают биржевые данные о ценах и объемах целым спектром расчетных показателей – различными вариантами волатильностей (исторической и подразумеваемой), «греками», поверхностями волатильности и т. п. Эту информацию можно также поддерживать в исторической базе. С другой стороны, разработчик торговой системы может использовать свои модели и алгоритмы расчета данных показателей.
5.1.3. Оперативный доступ к данным
Данные имеют весьма внушительный объем. Доступ к ним требует заметных временных затрат. Имитация торговли подразумевает последовательную обработку данных за несколько сотен и даже тысяч торговых дней. Многочисленные исторические симуляции необходимо проводить не только при бэктестинге, но и при оптимизации стратегий, статистическом исследовании параметров или элементов алгоритмов.
Для бэктестинга опционных стратегий необходимо оперировать одновременно большим количеством торговых инструментов. Причем в качестве инструмента может выступать как отдельный опцион, так и их комбинация (можно создавать практически неограниченное количество опционных комбинаций, играющих роль самостоятельных инструментов). Поэтому, помимо стандартного движения по истории, то есть во времени, необходимо обеспечить быструю навигацию по структуре опционных серий. В частности, алгоритм тестируемой стратегии может требовать создания на каждый день прогонки следующих наборов данных:
• опцион заданного базового актива заданного типа (пут или колл) с заданным страйком и датой экспирации;
• все страйки и даты экспирации для данного базового актива;
• все активно торгуемые опционы (со среднедневным объемом торговли выше заданной пороговой величины) для заданного базового актива;
• опционы, имеющие страйки «около денег», «вне денег» или «в деньгах» для заданной даты экспирации;
• опционы с заданным страйком, имеющие даты экспирации в пределах заданного интервала времени от текущей даты;
• многие другие более сложные наборы.
Необходимо также оперативно определять истинность или ложность высказываний типа: предполагается ли для данной компании корпоративный отчет между текущим днем и датой экспирации?
Для решения таких многомерных задач, требующих навигации как во времени, так и по структуре комбинаций, необходимо обеспечить такую скорость доступа к данным, которую позволяет только объект, содержащий в оперативной памяти все данные, необходимые во время прогонки стратегии. Это значит, что, помимо большой базы данных, предназначенной для хранения и накопления исторических данных, необходима оперативная история – встроенный в программный код системы бэктестинга объект, осуществляющий быстрый доступ к определенным данным на каждом шаге прогонки.
На практике оперативная история представляет собой подгружаемый при запуске системы бэктестинга объект, содержащий всю необходимую историю, которая может потребоваться для конкретной стратегии. Это существенно снижает проблему объемности данных и скорости обращения к ним. Например, возможно строить стратегии, использующие только индексы или ETF в качестве базовых активов (при этом отпадает потребность в использовании истории предполагаемых квартальных отчетов). Другой пример – стратегия, торгующая опционами только на акции из состава S&P 500. Также можно ограничить спектр серий двумя ближайшими датами экспирации и страйками, отстоящими не далее 10 % от текущей цены базовых активов. Вместе с тем, даже несмотря на подобные ограничения, для размещения оперативной истории в оперативной памяти приходится применять алгоритмы сжатия данных.
5.1.4. Рекуррентные вычисления
В традиционном бэктестинге стратегий, ориентированных на торговлю акциями или фьючерсами, реализуется доступ к историческим значениям различных функций – индикаторов технического и фундаментального анализа. В бэктестинге опционных стратегий сюда добавляются еще и другие специфические расчетные величины. Стандартными для многих систем бэктестинга являются расчетные значения подразумеваемой и исторической волатильности, «греки», относящиеся ко всему спектру инструментов и всему горизонту истории. Объемы исторических данных не всегда позволяют хранить эти показатели рассчитанными заранее. Поэтому приходится каждый раз вычислять их значения по мере необходимости. Это приводит к возникновению другой проблемы, выражающейся в непомерно больших затратах времени и вычислительных ресурсов. Для решения этой проблемы требуется применение специальных технологий ускорения и упрощения текущих вычислительных операций. Одной из таких технологий являются рекуррентные вычисления, когда значение некой функции вычисляется на основе ее предыдущего значения.
Примером применения технологии рекуррентных вычислений служит вычисление исторической волатильности. Текущее значение исторической волатильности используется при вычислении критериев с интегрированием платежной функции по функции плотности вероятности распределения цены базового актива. Типичными критериями такого типа являются математическое ожидание прибыли и вероятность получения прибыли, рассчитываемые на основе логнормального распределения. В процессе бэктестинга стратегий критерии вычисляются для каждого момента времени t. Следовательно, необходимо на каждый момент времени иметь соответствующее значение исторической волатильности НV(t). Наиболее эффективным представляется вариант, когда все значения исторических волатильностей вычисляются до старта прогонки для всех базовых активов и всех моментов времени. При этом в силу простоты формулы исторической волатильности расчеты можно производить рекуррентно по времени. Если ненормированная по времени историческая волатильность задается выражением:
где С(t) – цена закрытия t-го дня истории, N – длина периода истории, используемого для расчета волатильности, то историческая волатильность, соответствующая следующему дню истории, вычисляется как:
При этом нетрудно видеть, что объем вычислений при достаточной длине исторической базы практически не зависит от
N. Аналогичные рассуждения справедливы для любой формулы волатильности вида
с обратимой функцией
F. Применение рекуррентных вычислений позволяет рассчитывать значение функции для каждого следующего дня на основе предыдущего значения этой же функции. Это существенно сокращает количество вычислений.
5.1.5. Проверка достоверности данных
Данные, поступающие даже из самых надежных источников, могут оказаться искаженными. Помимо примитивных ошибок, связанных с программными сбоями или техническими проблемами (например, десятичная точка перепутана с запятой, неучтенное переименование тиккера, пропущенная информация о сплите, и т. п.), встречаются систематические ошибки, связанные с неверными и пропущенными котировками. Серьезную проблему представляет несинхронность данных о цене базового актива и соответствующих ему опционов. Эта проблема может быть обусловлена, к примеру, тем, что многие инструменты торгуются на разных биржевых площадках и электронных системах. Моделировать торговлю на основе таких данных чревато серьезными искажениями результатов.
Проблему недостоверных данных необходимо решать путем их выявления и дальнейшего исправления либо фильтрации. Процедуры выявления необходимо применять ко всем поступающим в базу новым ценам и котировкам спроса и предложения. Существуют два подхода к выявлению искаженных данных: тесты на наличие арбитражных ситуаций и исследование поверхностей подразумеваемой волатильности.
В основе тестов на наличие арбитражных ситуаций находится теория ценообразования опционов и условие паритета опционных цен. Для европейских опционов с одинаковой датой экспирации паритет цен опционов пут и колл без учета дивидендов имеет вид равенства:
где N – цена опциона колл, P – цена опциона пут, X – страйк опционов, S – текущая цена базового актива, r – безрисковая ставка, t – время до экспирации. Понятие паритета основывается на принципе невозможности возникновения на эффективном рынке арбитражных ситуаций. Другими словами, не может существовать финансового инструмента или совокупности инструментов, с помощью которых можно получить без риска доходность, превышающую безрисковую ставку. Это касается любых опционных комбинаций.
Если выявляется нарушение паритета, то это говорит о том, что цены опционов ошибочны либо существует учтенная в них рынком, но неизвестная проверочному алгоритму информация – например, выплата дивидендов. Ошибочной может быть цена одного из опционов либо обоих. В последнем случае необходимо установить, цена которого из опционов искажена. Для этого следует каждый из двух опционов проверить в паре с другим опционом, успешно прошедшим тест на паритет. Другой опцион будет неизбежно иметь другой страйк либо другую дату истечения. Выявив опцион с искаженной ценой, его следует исключить из базы данных либо исправить цену путем решения уравнения паритета (цена искаженного опциона берется как неизвестное, а цена правильного опциона является константой).
Существенным недостатком данного метода является то, что он применим только для европейских опционов. Для американских опционов формула паритета имеет вид неравенства:
Из формулы следует, что для американских опционов не существует точного значения паритета. Алгоритм тестирования может установить лишь факт попадания разности цен опционов кол и пут в определенный диапазон. Выход за рамки диапазона означает нарушение паритета, однако попадание в диапазон еще не означает, что искажение цены полностью исключается. Цена одного из опционов (либо обоих) может быть неправильной, но не настолько, чтобы выйти за рамки диапазона. Впрочем, и для европейских опционов существует возможность искажения цены при соблюдении паритета. Например, если уменьшить цену пута на некую величину и при этом увеличить цену колла на такую же величину, то условие паритета будет соблюдено, несмотря на то что цены обоих опционов искажены.
Другой метод выявления искаженных данных основывается на расчетах подразумеваемой волатильности. Для этого необходимо вычислить значения подразумеваемой волатильности для всех опционов, относящихся к определенному базовому активу. В силу целого ряда причин эти значения не будут совпадать. Вместе с тем их расхождения не являются случайными. В частности, зависимость подразумеваемой волатильности от страйка в большинстве случаев имеет форму улыбки (она так и называется «улыбкой волатильности») – наименьшее значение соответствует страйку, наиболее близкому к текущей цене базового актива, а по мере удаления страйка в обе стороны (глубоко «в деньгах» и глубоко «вне денег») волатильность возрастает. Могут быть и другие формы зависимости. Однако, какова ни была бы форма зависимости, она представляет собой более-менее гладкую кривую (либо, в отдельных случаях, прямую линию). Если же одна из точек (то есть одно из значений волатильности) выпадает из общего ряда и находится далеко от того места на кривой, где должна находиться, это с большой вероятностью указывает на искажение цены опциона, соответствующего данному страйку.
Можно построить аналогичную зависимость подразумеваемой волатильности от даты экспирации. Однако удобнее всего рассматривать поверхность волатильности, представляющую собой трехмерный график зависимости подразумеваемой волатильности от страйка и даты экспирации. В нормальной ситуации такой график имеет форму относительно гладко изгибающейся поверхности. Острые пики и впадины на такой поверхности указывают на возможно некорректные значения подразумеваемой волатильности, что может свидетельствовать об искажении цены опционов.
Основная проблема данного метода состоит в том, что выявление аномальных цен базируется на визуальном анализе графиков, что абсолютно недопустимо при ежедневном автоматическом пополнении базы данных десятками тысяч новых тиккеров. Решить эту проблему можно с помощью алгоритмизации поиска точек «выброса», что во многих случаях является нетривиальной задачей. При рассмотрении одномерной линейной зависимости (например, волатильности от страйка), эта задача решается просто с помощью линейной аппроксимации. Аномальные точки находятся путем сравнения их остатков (residuals), получаемых из регрессионной модели. Если остаток некой точки отличается от среднего остатка больше, чем на пороговую величину, то это может рассматриваться как индикация искажения цены соответствующего опциона.
В тех случаях, когда зависимость нелинейна (а таких случаев большинство), приходится использовать более сложные модели апроксимации. Задача усложняется еще больше при переходе от одномерной системы к поверхностям волатильности. В этом случае приходится применять еще более сложные математические модели. Главное требование к этим моделям – достаточно точная аппроксимация данных и наличие аналитической формулы, описывающей подбираемую кривую или поверхность.
Формулы требуются для того, чтобы в случае выявления искаженных ценовых значений можно было вычислить корректную цену. Для этого необходимо удалить из модели точку-outlier и вновь рассчитать аналитическую формулу кривой либо поверхности. После этого следует вычислить новое значение подразумеваемой волатильности для данного outlier с помощью новой формулы. Имея скорректированное значение волатильности, можно рассчитать корректную стоимость опциона с помощью выбранной модели ценообразования.