Блог им. Yourmom
Сегодня мы завершаем серию публикаций Сергея Голубицкого, посвящённых спектральному анализу на фондовом рынке, рассказом о технике, известной как Walk Forward Analysis — форвардный анализ.
Мы остановились на том, что традиционный алгоритм выявления циклов — преобразование Фурье — замечательно справляется с выявлением корреляции с графиком котировок, однако оставляет желать лучшего в плане оценки способности того или иного цикла предсказывать будущее.
Меру такой способности мы обозначили термином коэффициент предикативности в противоположность коэффициенту исторической корреляции, с помощью которого ранжируются циклы в классическом спектральном анализе.
На скришноте мы выделили вертикальными линиями два цикла с самым высоким коэффициентом исторической корреляции (FIT) с графиком изменений индекса РТС: 27,9% для 275-дневного цикла и 30,8% для 316-дневного цикла.
Вы помните, что максимум, на что мы можем рассчитывать в рамках традиционной техники спектрального анализа — это актуализировать данные циклы с помощью вейвлет-преобразования, которое позволит ответить на вопрос: «Какие циклы действуют в настоящий момент, а какие своё уже отработали и их влияние осталось целиком в прошлом».
Однако даже самые актуальные циклы не гарантируют, что уже в ближайшем будущем они не перестанут работать и, соответственно, прогноз, основанный на показании этих циклов, не окажется ложным.
Для того, чтобы оценить эффективность циклов в плане предсказания будущих ценовых изменений, в биржевой науке давно и продуктивно применяется техника, известная как Walk Forward Analysis — форвардный анализ.
Популяризация форвардного анализа связана с именем Роберта Пардо, ещё одного американского гуманитария (Боб снискал степень бакалавра по истории, философии и социологии в Северозападном Университете (Northwestern University, Эванстон, штат Иллинойс), заболевшего трейдингом и посвятившего всю свою жизнь разработке компьютеризированных трейдинговых систем.
В 1991 году Пардо опубликовал книгу «Разработка, тестирование, оптимизация торговых систем для биржевого трейдера» (2-е изд. 2008; русский перевод — 2002, из-во Минакс), которая с тех пор является библией всех «роботостроителей» (трейдеров, доверяющих лишь торговле, освобождённой от человеческого фактора и вверенной «беспристрастным» компьютерным системам).
Простейшая трейдинговая система создаётся в два этапа: сначала мы оптимизируем её параметры; затем тестируем в реальных условиях.
Предположим, мы хотим разработать трейдинговую систему, сигналы на открытие и закрытие позиций в которой подаются с помощью скользящей средней (только, бога ради, не нужно ориентироваться на этот примитивный пример в торговле на бирже живыми деньгами!). Для торговли мы собираемся использовать определённый инструмент — возьмём для примера наш любимый фьючерс на индекс РТС.
В скользящей средней у нас есть переменная — период усреднения. На самом деле есть ещё три переменных (тип скольжения: простой, экспоненциальный, взвешенный и т.п., а также вертикальное и горизонтальное смещения), но для простоты примера мы их не учитываем.
Как можно неправильно оптимизировать эти переменные? Предвижу недоумение читателя: с какой это стати я заговорил о неправильной оптимизации?! Дело в том, что именно так — неправильно — оптимизируются торговые системы по умолчанию в самом популярном программном продукте на рынке — Metastock! Происходит это совершенно без учёта форвардного анализа.
Неправильная оптимизация выглядит следующим образом. Мы задаём переменную (opt1), определяем диапазон значений и шаг для неё (скажем, для периода скользящих средних мы задаём шаг 1 и диапазон от 2 до 200), формулируем условия для стоп-ордеров (если мы хотим их использовать), наконец, пишем на простеньком интерпретационном языке формулу для открытия и закрытия позиции, после чего начинаем тестировать сигналы скользящей средней (пересечение цены закрытия Close вверх или вниз) на всем диапазоне исторических данных, которые нам доступны.
Далее происходит следующее: программа (Metastock) подставляет одно за другим в нашу формулу значения переменной и оценивает доходность (прибыль или убыток), который мы бы получили, если бы открывали и закрывали позиции по сигналам скользящей средней с данным значением переменных. Затем берётся следующее значение, ещё одно и так далее до последнего в указанном нами ряду (2–200).
В результате мы получаем такую таблицу.
Все переменные ранжированы по степени «эффективности». Как видите, самая «успешная» система — 230 успешных трейдов и 341 убыточных — представляет собой сигналы на пересечение с ценой скользящей средней с периодом 4.
Всё замечательно, кроме одного: использовать такую, с позволения сказать, «торговую систему» в реальном трейдинге бессмысленно! Почему? Потому что это всё равно, что подбрасывать монету. А на самом деле и того хуже, ведь выигрышных — читай: угаданных! — сделок у нас всего 40%.
Что фундаментально неверно в описанной оптимизации? Неверен принцип самого тестирования! Программа берёт все доступные ей данные (котировки), подставляет одно за другим значения переменной и оценивает доходность. Иными словами, мы постоянно оцениваем сигналы системы на вход и выход в позицию задним числом! Как бы в обратную сторону. Мы подгоняем значение периода скользящей средней под график! Для эффективной же системы нужно прямо противоположное движение: не подгонять период под график, а смотреть, как тот или иной период скольжения будет давать сигналы на совершенно не знакомых ему данных (графике)! Иными словами, нужно оценивать эвристику сигнала, его предикативность (способность предсказывать), а не эффективность подстраивания под уже известные данные.
Именно для такой задачи и был предложен форвардный анализ Робертом Пардо. Алгоритм будет гораздо нагляднее усвоить на примере.
Предположим у нас есть исторические данные (котировки) за последние 10 лет. Сначала мы делим все эти данные на так называемые оптимизационные окна, например, на 10 частей, каждая из которых равняется одному году. Затем делим каждое оптимизационное окно на неравные отрезки, скажем, 11 месяцев и 1 месяц. Первые 11 месяцев называются in-sample (в пределах выборки) или тестовым окном, последний месяц — out-of-sample (за пределами выборки) или форвардным окном.
Теперь приступаем к реализации форвардного анализа. Сначала мы оптимизируем нашу систему на участке в пределах выборки. В нашем примере мы подставляем один за другим различные периоды скользящей средней и смотрим на их эффективность в тестовом окне.
Затем тот же самый период мы проверяем за пределами выборки, то есть в форвардном окне. В нашем примере это — 12-й месяц.
Далее мы сравниваем эффективность каждого периода за пределами выборки с эффективностью этого же периода в пределах выборки и делим одно на другое. В результате мы получаем walk forward efficiency, форвардный показатель эффективности, который и является главным критерием для выбора трейдинговой системы: чем выше этот показатель, тем эффективнее система, чем ниже — тем эта система ненадёжнее.
После определения форвардных показателей эффективности на данных первого оптимизационного окна, мы перемещаемся дальше по доступным нам данным на срок, который называется шаговым окном. Обычно шаговое окно равняется форвардному окну. В нашем примере это — 1 месяц.
Переместившись на шаговое окно по данным мы повторяем оптимизацию нашей системы точно так же, как и раньше: сначала используем данные тестового окна (первые 11 месяцев нового оптимизационного окна), затем оптимизируем на форвардном окне (12-й месяц нового оптимизационного окна), после чего вычисляем форвардный показатель эффективности, и так далее до самого конца всех наших данных.
В результате этих процедур, объединённых термином «форвардный анализ», мы выявим период скользящей средней с самым высоким форвардным показателем эффективности. Полагаю, вы уже догадались, что именно этот период и будет соответствовать системе с самой высокой степенью предикативности.
Вернёмся теперь к спектральному анализу и посмотрим, как в нём реализуются на практике вышеописанные идеи. В нашем главном инструменте нейросетевого и спектрального анализа — Timing Solution — есть модуль под названием Q Spectrum, который представляет собой соединение классического спектрального анализа, основанного на преобразовании Фурье, с форвардным анализом.
На скриншоте вы видите работу Q Spectrum по выявлению циклов с самым высоким форвардным показателем эффективности. В данном примере мы получили явного фаворита, который выделяется из всех остальных циклов, действующих на графике индекса РТС — 313 дней с показателем форвардной эффективности 87,5%.
Будет интересно теперь сравнить результат с циклами, полученными нами после классического спектрального анализа, проведённого в начале статьи. Тогда, вы помните, мы получили 275-дневный и 316-дневный циклы. Очевидно, что 316 дней — это цикл, очень близкий к 313-дневному, который выявил Q Spectrum. Тогда как у 275-дневного цикла WFE (Walk Forward Efficiency, форвардный показатель эффективности) существенно ниже — 70% (на скриншоте выше данный цикл обозначен стрелкой).
Очевидно, что результаты, выданные форвардно-спектральным анализом (Q Spectrum), также можно (и нужно!) подать на входные узлы нейросети, обучить её и построить прогноз на ещё более надёжном фундаменте.
Вот как выглядит проекционная линия (синяя на графике в правой части окна) для индекса РТС, рассчитанная сегодня, 29 сентября, нейросетью, на входные узлы которой подавалась информация, описывающая 313-дневный цикл.