Кевин Дейви - Создание прибыльных алгоритмических торговых стратегий

От ju.vskv, 17 апреля в В помощь трейдеру

Страница 3 из 6
Автор#12

image.thumb.png.47c03c200b1e566187e663cf07b82b85.png

 

ГЛАВА 11

Поговорим о данных

 

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

 

■ Какое количество данных следует использовать?

■   Использовать данные с биржи или электронные данные?

■ Использовать ли данные непрерывных контрактов?

■ Повлиял ли приход электронных торгов на рыночные данные?

■ Как проводить тестирование на данных с валютного рынка?

 

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

 

■ Какое количество данных следует использовать?

 

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

 

Надеюсь, вы понимаете бесполезность такого примитивного теста. Слишком мало сделок, мало рыночных условий – слишком мало всего, чтобы принять взвешенное решение. Чтобы добиться долгосрочного успеха, нужен бо́льший объем данных.

 

Так какой же объем данных можно считать приемлемым? Когда меня спрашивают об этом, я почти всегда отвечаю: «Как можно бо́льший». Бо́льшее количество данных воспроизводит больше рыночных условий: больше бычьих рынков, больше медвежьих рынков, больше боковых рынков; больше спокойных периодов и больше волатильных. Чем больше сделок вы совершите и чем дольше ваша система остается прибыльной, тем меньше вероятность того, что результаты были случайными. Вспомните подбрасывание монеты. Подбросив ее один раз, вы получаете шанс выпадения орла 50/50. Если же вы подбросите монету 10 раз, вероятность того, что орел выпадет хотя бы один раз, уже выше. А если вы подбросите монету 100 раз, то у вас практически гарантированно выпадет как минимум один орел. Чем больше бросков, тем выше уверенность; аналогичным образом больше уверенности придаст вам и бо́льшее число сделок.

 

Для свинговых стратегий на дневных графиках (сделки в них удерживаются от нескольких дней до нескольких недель) оптимальным компромиссом я считаю применение 10-летних данных. Это позволяет протестировать стратегию в разных рыночных условиях и хорошо подходит для пошагового форвардного тестирования (которому требуется время для инициализации).

 

Для внутридневных и краткосрочных стратегий я тоже предпочитаю использовать 10-летние данные. Однако на практике – например, после перехода на электронную торговлю – это трудно реализовать. Поэтому часто я использую лишь 5-летние данные, понимая, что результаты, возможно, будут менее надежными, чем у стратегии, протестированной на 10-летней истории.

 

Для некоторых людей период 5-10 лет является слишком длинным или такие данные им попросту недоступны. В подобных случаях я рекомендую воспользоваться следующим подходом: на каждое правило и параметр торговой стратегии должно приходиться как минимум от 30 до 100 сделок. Например, если стратегия имеет два условия для входа и два условия для выхода, то я хотел бы протестировать ее на 120-400 сделках. Возможно, будет приемлемым и меньшее количество сделок, но в этом случае возрастает риск «подгонки» стратегии под данные.

 

Недостаток использования максимального количества данных заключается в том, что разработка стратегии значительно усложняется. Давайте посмотрим правде в глаза: в лучшем случае большинство представленных на рынке торговых стратегий выходят на уровень безубыточности до вычета комиссий и проскальзывания. Это означает, что чем дольше вы ее тестируете, тем выше вероятность, что валовая прибыль вернется к нулю. Думаю, вы уже видели это: в течение одного, трех или шести месяцев стратегия показывает великолепные результаты – а в следующем периоде полностью возвращает в рынок всю накопленную прибыль. Так что спросите себя, что вы хотите – стратегию, дающую стабильный положительный результат в течение длительного периода, или «звезду», блестяще работающую короткое время? Первую найти гораздо сложнее – вторая чаще приводит к убыткам в реальной торговле.

 

■ Какие данные следует использовать: биржевые или электронные?

 

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

 

■ Только биржевые данные

■ Только электронные данные

■ Как биржевые, так и электронные данные

■ Данные только в течение традиционных часов работы биржи

■ Данные за все часы работы биржи

■ Данные дневной/вечерней сессии

 

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

 

Чтобы подчеркнуть эту дилемму, приведу простой пример. Допустим, вы торгуете золото и хотите использовать 20-летние данные (отличный выбор!) на 60-минутном таймфрейме. 20 лет назад единственным источником данных была биржевая яма, иного выбора не было. В рамках внутридневной биржевой сессии было, грубо говоря, шесть-восемь баров (хотя количество 60-минутных баров в день менялось, поскольку менялись часы работы биржи). Допустим, в вашей стратегии используется скользящая средняя с периодом 14, т. е. данный период охватывает примерно два торговых дня.

 

Теперь переместимся на современные электронные рынки. Сейчас торговля идет почти 23 часа в сутки. Если вы по-прежнему используете скользящую среднюю с периодом 14, то теперь она охватывает лишь половину торгового дня, тогда как раньше – два полных дня. Как вы думаете, может ли это радикально повлиять на результаты вашего бэктестирования? Еще бы!

 

Как с этим быть? Я в значительной степени полагаюсь на дневные данные, особенно на расчетные цены дня. Биржевые и электронные расчетные цены идентичны. Мне не нравится использовать дневные максимумы и минимумы, потому что диапазон между максимумом и минимумом биржевой сессии, как правило, меньше, чем между максимумом и минимумом в электронной торговле. Если это звучит запутанно, просто представьте себе ночной ценовой шок, который длится час и затем возвращается к прежнему уровню. В былые времена, когда вся торговля проходила в биржевой яме, такой шок вообще не отразился бы в данных, потому что приходился бы на ночь. Для электронных данных дневной максимум будет включать этот ценовой шок. В результате в «старые времена» ваша стратегия будет работать иначе, чем сегодня.

 

Один прием, который помогает сделать все данные однородными – выбрать стандартное дневное торговое время и применить его ко всей базе исторических данных. Например, торговля валютами в биржевой яме когда-то проходила с 08:20 до 15:00 по восточному поясному времени. Чтобы сохранить этот интервал времени в электронную эпоху, я создаю специальную «биржевую сессию для валютного рынка» с 08:20 до 15:00 для всех исторических данных. Тогда мои данные становятся полностью согласованными.

 

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

 

■ Непрерывные контракты

 

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

 

Самый «чистый» способ тестирования фьючерсов – просто использовать «сырые» контракты без сшивки. Тогда вообще не нужно беспокоиться о непрерывных контрактах. Но проблема в том, что большинство торговых платформ не приспособлены для этого. Допустим, вы хотите протестировать стратегию на фьючерсе на евродоллар. Если бы вы тестировали его в 2013 году, то с 1 января до 15 марта использовали бы мартовский контракт 6EH13. С 15 марта до 15 июня – июньский контракт 6EM13. Так вы прошли бы через все годы своей базы данных. Но такой подход создает проблемы в тестировании. Во-первых, вам пришлось бы прописывать логику: (1) определять правильную дату завершения торгов для каждого контракта (то есть до первого дня уведомления или до последнего торгового дня, в зависимости от того, что наступит раньше) и (2) выполнять ролловер текущей позиции из старого контракта в новый. Это, безусловно, можно реализовать, но потребуется детальное программирование. Более серьезная проблема возникнет, если вы захотите оптимизировать стратегию на всех этих контрактах. Большинство торговых платформ требуют, чтобы оптимизация запускалась на одном графике данных. При наличии множества отдельных контрактов вы не сможете выполнить оптимизацию, кроме как вручную, а это утомительный и долгий процесс.

 

Чтобы обойти ограничения тестирования на отдельных контрактных данных, многие объединяют данные контрактов в так называемый непрерывный контракт. Существует два основных (и множество менее популярных) способа создания непрерывного контракта – и, разумеется, у обоих есть серьезные недостатки. 

 

Первый способ – нескорректированный непрерывный контракт. В приведенном выше примере 15 марта данные переходят с мартовского контракта на июньский. Преимущество этого метода в том, что исходные данные сохраняются – никаких корректировок дат не проводится. Недостаток этого метода заключается в том, что на момент ролловера цена двух контрактов редко, если вообще когда-либо, будет абсолютно одинаковой. Часто ближайший месяц торгуется с заметным дисконтом или премией к следующему месяцу. На рисунке 11.1 показан пример. Использование этих данных в неизменном виде будет приводить к ложным сигналам, а также к ложным прибылям и убыткам. Предположим, вы находитесь в длинной позиции по ноябрьскому контракту по сое и переходите на майский контракт. При спреде 38 пунктов стратегия на нескорректированном непрерывном контракте решит, что на рынке произошел реальный гэп и вы на нем заработали. Но на самом деле вы никак не могли получить прибыль на этом гэпе. Он существует лишь потому, что изменился срок экспирации контракта.

 

Многие обходят этот искусственный гэп, используя так называемый контракт с корректировкой прошлых цен. В этом случае гэпы устраняются, а все предыдущие данные соответствующим образом корректируются. Пример: 15 марта июньский контракт по фьючерсу на евродоллар закрывается по цене 1,3512, а мартовский – по 1,3516, разница составляет 0,0004. Чтобы устранить этот гэп, ко всем данным, начиная с марта и далее в историю, нужно прибавить 0,0004. Это устранит гэп и даст красивый непрерывный поток данных. Такое решение кажется идеальным. 

 

image.png.8272db1097ef079a8e7c4222f5d72e74.png

Рисунок 11.1. Цены контрактов в разные месяцы различаются.

 

image.png.69944cfa0f90b9f08cbc2f580ab39b27.png

Рисунок 11.2. Непрерывные контракты с корректировкой прошлых цен могут показывать отрицательные цены

 

Разумеется, идеальных методов не бывает, и у этого метода тоже есть две проблемы, одну из которых почти никто не обсуждает (по крайней мере, я никогда не встречал никаких упоминаний о ней). Первая проблема заключается в том, что постоянный учет гэпов при каждом ролловере приводит к тому, что исторические данные могут стать отрицательными. На рисунке 11.2 показан пример этого. Очевидно, что нефть никогда не имела отрицательной цены, но непрерывный контракт будет показывать минус, и ваша стратегия будет тестироваться на таких данных. Хотя эти данные выглядят странно (лучше не показывайте друзьям ваш «Святой Грааль» – стратегию на таких данных – люди подумают, что вы сошли с ума), результаты остаются корректными, если только вы не попадете во вторую ловушку.

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

 

Предположим, стратегия использует процентное изменение цены закрытия: closei/closei-1. 10 марта вы используете мартовский контракт, и цена закрытия составляет 1,3500. Днем ранее она была 1,3420. Таким образом, процентное изменение цены равно: 1,3500 / 1,3420 = 1,00596.

 

Перемотаем вперед до 20 марта, когда первоначальным контрактом стал июньский. При создании непрерывного скорректированного контракта к мартовским данным была добавлена корректировка +0,0030 (это крайне большая величина для корректировки цены при ролловере, просто чтобы подтвердить данные умозаключения). Теперь цена закрытия 10 марта составляет 1,353, а предыдущая – 1,345. И новое процентное изменение цены уже равно: 1,353 / 1,345 = 1,00595. Значение за ту же дату изменилось! И при каждом следующем ролловере оно снова будет меняться. Это означает, что при тестировании стратегии, использующей такие отношения цен, сигналы, полученные на исторических данных, будут отличаться от сигналов, полученных в реальном времени. Возможно, разница будет небольшой, но она будет всегда. И возникает вопрос: «Можно ли доверять результатам тестирования, о которых вы заранее знаете, что в будущем они изменятся?»

 

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

 

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

 

■ Влияние перехода на электронные рынки

 

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

 

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

 

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

 

Учитывая эти противоположные точки зрения, при разработке своих долгосрочных свинговых стратегий я всё же использую данные, полученные в биржевых ямах, и ту историю, которую они предоставляют. Таким образом, моя стратегия может протестировать бо́льшее количество рыночных условий. Если стратегия, которую я создаю для сои, показывает хорошие результаты в 1990-е, 2000-е и 2010-е годы, я отношусь к ней с бо́льшей уверенностью и уважением. Некоторые люди выполняют бэктестирование даже на данных 1970-х и 1980-х годов! Для краткосрочных стратегий, особенно внутридневных, возможно, будет разумным использовать только электронные данные. Если вдобавок ко всему эта стратегия работает и на данных биржевых ям – прекрасно, но я бы не стал делать это обязательным требованием.

 

■ Тестирование на данных валютного рынка

 

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

 

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

 

Вторая проблема при тестировании данных на рынке форекс – это типы используемых ордеров. Если вы тестируете систему на данных рынка форекс, нужно очень тщательно контролировать, как ваша стратегия размещает ордера. Из-за проблемы, которую я покажу далее, я использую для входа и выхода только рыночные ордера. В моих стратегиях торговли на валютном рынке нет ни лимитных, ни стоп-ордеров. Разумеется, в итоговой прибыли/убытке каждой сделки я всегда учитываю спред, но благодаря рыночным ордерам мне не приходится беспокоиться о «фантомных» исполнениях.

 

В чем же заключается ловушка использования лимитных и/или стоп-ордеров на рынке форекс? На фьючерсных рынках существует единый поток данных, который всегда показывает цену, по которой были совершены сделки. На валютном рынке есть поток цен bid и поток цен ask. Разница между ними – это текущий спред, обычно в несколько пунктов. По определению, купить можно только по цене ask, а продать – только по цене bid.

 

Проблема тестирования торговой стратегии на данных рынка форекс состоит в том, что поток, отображаемый на графике – это, как правило, поток цен bid. Хотя в качестве альтернативы можно отобразить поток данных по запросу (если он доступен), большинство программных средств для тестирования торговых стратегий могут использовать только один поток для расчета результатов сделок. Если ваш софт для торговли умеет рассчитывать исполнение сделок, одновременно используя данные цен bid и ask, вы можете никогда не столкнуться с этой проблемой. Например, необъектно-ориентированная платформа TradeStation может выполнять тестирование только по ценам bid или только по ценам ask. А вот платформа MultiCharts способна выполнять тестирование одновременно как по ценам bid, так и по ценам ask. Так что разумно будет сначала проверить свое ПО. Если же эта проблема для вас актуальна, вот пример, почему это может оказаться серьезным препятствием.

 

Предположим, вы торгуете на валютной паре EURUSD. Текущая цена – 1,3502/1,3505 (для примера я использую нереалистично большой спред в три пункта, но данный принцип сохраняется и при меньших спредах). Это означает, что цена bid составляет 1,3502, а цена ask – 1,3505. Помните: вы можете купить по цене ask, но не ниже нее, и продать по цене bid, но не выше. Допустим также, что ваше ПО показывает данные bid, поэтому сейчас оно выводит цену 1,3502.

 

В этом примере ваша стратегия выставляет ордер на покупку по цене 1,3500. Вскоре после этого цена падает до 1,3499/1,3502. Поскольку теперь цена на графике 1,3499, а ваша цена покупки – 1,3500, платформа для тестирования стратегий считает, что вы получили исполнение по 1,3500. Она «думает», что сейчас вы находитесь в длинной позиции, но цена ask дошла только до уровня 1,3502, т. е. в реальности вы не получили бы исполнения.

 

«Пустяки!» – скажете вы. – «Как часто такое происходит?» Такое никогда не произойдет в убыточных сделках, поскольку в убыточных позициях цена будет продолжать падать, и в реальной торговле вы получите исполнение по такой же цене, как и в бэктесте. Но для прибыльных сделок, которые становятся прибыльными еще до того, как цена ask достигнет уровня 1,3500, ваша сделка на реальном рынке вообще никогда не исполнится. В зависимости от вашей торговой методологии это может привести к огромной разнице между результатами тестирования и результатами реальной торговли. Отчет по бэктесту будет выглядеть чрезмерно оптимистично. А поскольку вы используете эту информацию для разработки своей стратегии, вы можете основывать свои торговые решения на весьма сомнительных данных. Данный пример приведен для отложенных лимитных ордеров, но аналогичная ситуация возникает и со стоп-ордерами: вы можете получить исполнение по цене, которой никогда не было на графике цен bid.

 

Чтобы избежать этой проблемы, недостаточно просто добавить проскальзывание к каждой сделке, как это часто делают на фьючерсах. Ведь проблема с ценами bid/ask – это не «слегка худшее исполнение», а «либо исполнение, либо отсутствие исполнения». Некоторые торговые платформы предоставляют продвинутые методы обработки ордеров (на платформе TradeStation это называется “price series providers” – «поставщики ценовых серий»). Главное – иметь возможность тестировать стратегию так же, как вы торгуете в реальном времени. Именно поэтому во всех своих стратегиях торговли на валютном рынке я использую рыночные ордера. Поскольку я использую ордера вроде “sell next bar at market” («продай на следующем баре по рыночной цене»), я могу получить убытки, которые будут гораздо больше заранее установленного стоп-лосса, и в этом главный недостаток рыночных ордеров. Представьте, как может измениться цена внутри 5-минутной свечи во время заявления Федеральной резервной системы. Однако в долгосрочной перспективе я знаю, что рыночные ордера всегда будут исполнены, и их результаты в бэктестах – с учетом спреда – совпадают с результатами реальной торговли. Поэтому я считаю такой подход приемлемым, поскольку он дает результаты тестирования, достаточно близкие к реальным исполнениям.

 

■ Резюме

 

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

 

 

 

Кевин Дейви

Переведено для TLAP

 

 

Изменено 8 мая пользователем ju.vskv

Автор#13

image.thumb.png.8021cb25331d8cceae41da899f5b5aeb.png

 

ГЛАВА 12

Ограниченное тестирование

 

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

 

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

 

Другой серьезной проблемой при тестировании на всех доступных данных является то, что протестировав эти данные однажды, вы «сжигаете» их. Это означает, что любые последующие повторные тесты будут подогнаны под кривую, то есть оптимизированы. Подумайте: вы прогоняете стратегию A на всех данных. Результат выглядит неплохо, но не впечатляет. Вы вносите несколько мелких правок и изменений в правила своей стратегии и тестируете новую стратегию Б. Теперь она показывает гораздо лучшие результаты. Вы в восторге. Но понимаете ли вы, что только что выполнили оптимизацию? Нет, вы не оптимизировали ее в том смысле, как это понимает большинство торговых платформ – то есть не подобрали оптимальные параметры для стратегии A. Но оптимизация всё же произошла, ведь вы протестировали и стратегию A, и стратегию Б, выбрав лучшую из них. И хотя в данном случае стратегия Б показывает лучшие результаты бэктестирования, я больше доверял бы результатам стратегии A (если только результаты стратегии Б не оказались значительно лучше), поскольку стратегия A тестировалась на «нетронутых» данных.

 

Теоретически стратегию следует прогонять на наборе данных один-единственный раз. Если она работает – отлично, если нет – просто переходите к следующему набору данных или другому инструменту. Первоначальные данные в определенной степени оказываются испорчены самим фактом тестирования. Именно здесь теория и практика расходятся. На практике вы рано или поздно всё равно будете тестировать множество стратегий на одних и тех же данных – может быть, не сразу, но это неизбежно. Поэтому нужно быть особенно осторожным. В своих тестах я стараюсь следовать наставлению Дона Хуана из книги «Путешествие в Икстлан: уроки Дона Хуана» (“Journey to Itxlan: The Lessons of Don Juan”, издательство “Simon & Schuster”, 1972 год): «Он слегка касается его, задерживается на нужное время, а затем быстро уходит, почти не оставляя следа».

 

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

 

Поскольку тестировать стратегию на всех имеющихся данных недопустимо, какой разумный и приемлемый способ тестирования будет оптимальным? С одной стороны, нужно понять, есть ли в вашей базовой идее хоть какой-то смысл, а с другой – вы хотите добавлять или менять правила стратегии, не попадая в ловушку чрезмерной оптимизации или эффекта знания задним числом. Кроме того, нужно оставить как можно больше данных нетронутыми, чтобы получить качественное и реалистичное пошаговое форвардное тестирование (о нем мы поговорим в следующей главе).

 

Учитывая все эти противоречивые требования, я считаю оптимальным предварительное тестирование на части исторических данных, а не на всем их объеме. Например, если у меня есть 10-летние данные для полного теста, то предварительное ограниченное тестирование, описанное ниже, я провожу на данных за один или два года. Я стараюсь использовать как можно меньше данных, но при этом получить достаточное количество сделок для достижения статистической значимости их результатов. Обычно я выбираю эти два года случайным образом, не используя одну и ту же выборку постоянно и не отдавая предпочтения каким-то конкретным годам.

 

Некоторые трейдеры советуют начинать с «самых интересных» данных. Для большинства товаров и фьючерсов это период 2007-2009 года, когда мировые рынки пребывали на грани краха. Они считают, что если стратегия плохо показывает себя в это время, то, скорее всего, она потерпит неудачу и при следующем рыночном шоке. Хотя я понимаю их подход, но я не согласен с ним. Я стараюсь избегать предварительного тестирования на данных финансового кризиса, поскольку это может привести к созданию системы, которая будет хорошо работать только в периоды сильнейших потрясений и паники. Хотя такая стратегия и будет полезна в моменты кризиса, я бы опасался того, что в более частые «нормальные» периоды она будет приносить большие убытки.

 

Если я беру фрагмент, состоящий из 2-летних данных, и придерживаюсь следующего процесса, то могу довольно уверенно определить, есть ли у идеи хоть какой-то потенциал. Цель ограниченного тестирования – не выяснить, пригодна ли система для реальной торговли, а использовать это как фильтр: понять, имеет ли данная торговая идея перспективу. Часто бывает так, что стратегия успешно проходит ограниченный двухлетний тест, но затем проваливается на более строгих этапах. И лишь изредка бывает наоборот: я отвергаю стратегию по результатам ограниченного теста, а позже выясняется, что это отличная система.

 

■ Тестирование входов

 

Первое, что я обычно хочу выяснить при тестировании торговой системы – есть ли у входов хоть какая-то ценность. Часто то, что кажется хорошим входом, выглядит таким только благодаря выходам. Иногда сложно оценить реальное влияние входов, тестируя систему целиком.

 

Оценивая входы по отдельности, я обычно анализирую их тремя способами:

 

■ Фиксированные стоп-лосс и тейк-профит

■ Фиксированное количество баров до выхода

■ Рандомный выход

 

Выход по фиксированным стопам и тейкам

 

При тестировании стратегии с фиксированными выходами я просто устанавливаю стоп-лосс и тейк-профит, которые подходят для инструмента и таймфрейма, на которых я торгую. Для среднесрочной стратегии (свинговой торговли), работающей в течение нескольких дней, разумным считается стоп-лосс в пределах от $ 500 до $ 1 500. Аналогичным образом я задаю подходящий тейк-профит. При прочих равных условиях, если вы устанавливаете стоп-лосс и тейк-профит на одинаковую сумму в долларах, то до вычета комиссий и проскальзывания ваш процент прибыльных сделок должен составлять не менее 50%, при условии, что ваша точка входа не лучше случайной. Используя фиксированные суммы для стопов и тейков, я просто создаю стратегию с моим сигналом для входа, заданным стоп-лоссом и заданным тейк-профитом.

 

Выход по фиксированному количеству баров

 

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

 

Рандомный выход

 

Рандомный выход я обычно использую в рамках процесса «обезьяньего теста», суть которого будет описана позже. Однако иногда я применяю его и в самом начале тестирования. Данная концепция основывается на устранении влияния любого выхода и анализе способности входа генерировать прибыльные сделки. Если вход стабильно приносит прибыль при случайно выбранном выходе, то преимущество у такого входа значительно выше.

 

Критерии оценки входа

 

Для каждого из трех описанных подходов к тестированию существует несколько способов анализа результатов. Например, вполне пригодным методом сравнения входов является процент прибыльных сделок. Если ваш тест не содержит проскальзывания и комиссии, то вход должен приносить прибыль более чем в 50% сделок, потому что именно такой результат показала бы случайная точка входа. По моему опыту, вполне достижимым является значение данного показателя 52-60%, и такие высокие значения указывают на грамотную технику входа.

 

Контраргумент против использования процента прибыльных сделок заключается в том, что хотя и приятно быть правым, но еще лучше – зарабатывать при этом деньги. При количестве прибыльных сделок 60% стратегия может приносить меньше прибыли, чем при значении 40%, особенно если речь идет о входах в направлении тренда. Трендовые входы, такие как пробои или пересечения скользящих средних, обычно дают гораздо меньший процент прибыльных сделок. Но они «берут реванш» за счет нескольких крупных прибыльных сделок и множества мелких убыточных, при этом сумма прибыли значительно превышает сумму убытков. В таких случаях полезно применять показатель средней прибыли в сделке.

 

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

 

Вероятно, вы задаетесь вопросом: стоит ли использовать оптимизацию? Я применяю ее, но когда смотрю на результаты, я обращаю внимание не только на лучшие итерации – я оцениваю всё. Например, если я запускаю 100 итераций с разными значениями входных параметров и только небольшая их часть оказывается прибыльной или имеет процент прибыльных сделок выше 50%, такую систему я, скорее всего, отброшу. Но если 70% или больше итераций дают благоприятный результат, я считаю, что данный вход успешно прошел тестирование.

 

■ Тестирование выходов

 

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

 

Когда я отдельно оцениваю выходы, я обычно выполняю анализ двумя способами:

 

■ Аналогичный вид входа

■ Рандомный вход

 

Аналогичный вид входа

 

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

Поскольку позже я буду тестировать фактический вход вместе с фактическим выходом, на данном этапе мне важно увидеть, как работает сам выход. Для этой цели я создаю вход, аналогичный тому, который собираюсь использовать. Обычно он относится к одной из двух основных категорий: торговля в направлении тренда или против тренда. Поскольку я уже знаю вид входа, я просто создаю нечто общее, похожее на него. Для следования за трендом, к примеру, я могу использовать стратегию торговли на пробое X-го бара. Для контртрендовой системы – вход, основанный на индексе относительной силы (RSI). В любом случае я создаю вход, сопоставимый с моим реальным входом. Затем я тестирую его со стратегией выхода. Надежная стратегия выхода, приносящая прибыль для похожих видов входа, вероятнее всего, будет прибыльной и с моим фактическим входом. Это способ тестирования выхода, не затрагивая вход.

 

Рандомный вход

 

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

 

■ Критерии оценки выхода

 

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

 

■ Тестирование всей стратегии целиком

 

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

 

Цель тестирования всей стратегии – увидеть, как работает система на ограниченном историческом периоде. Главным критерием на этом этапе является чистая прибыль, и я люблю получать прибыльные результаты в широком диапазоне параметров и в большинстве итераций. Например, если моя стратегия работает на простом пробое с 10 возможными значениями величины пробоя и 10 значениями стоп-лосса/тейк-профита, это создает 10 × 10 = 100 итераций. Если моя стратегия хорошая, то я ожидаю, что она будет приносить прибыль в 70 или более итераций на небольшом наборе данных. Если я вижу такое поведение, я, как правило, провожу «обезьяний тест», описанный далее, и затем перехожу к более глубокому тестированию.

 

Бо́льшую часть времени число прибыльных итераций составляет около 30-70% от общего их количества. Это ставит меня в «нулевую зону»: очевидно, стратегия в ее нынешнем виде недостаточно хороша, но, возможно, в ней есть что-то, с чем можно работать. В таких ситуациях я могу добавить правило, фильтр или как-либо иначе изменить вход и выход. К сожалению, строгого протокола для этого не существует. Часто я использую дополнительные правила или условия, которые хорошо работали у меня ранее. После внесения небольших изменений я повторно оцениваю результаты выборки.

 

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

 

Как я уже говорил, на этапе предварительного тестирования с ограниченной оптимизацией я предпочитаю видеть чистую прибыль в 70% или больше итераций. Если положительные результаты находятся в диапазоне 30-70% итераций, я немного доработаю их в попытке улучшить результаты. Но что делать со стратегиями, которые просто ужасны и приносят прибыль менее чем в 30% итераций? В таких случаях я использую подход Джорджа Костанзы: если всё, что я создал, работает плохо, значит, хорошими должны быть противоположные значения параметров! Я в корне изменю свою стратегию и буду покупать, когда ранее продавал, и продавать, когда ранее покупал. В зависимости от логики стратегии, это не всегда дает противоположный результат, но во многих случаях приносит свои плоды. Однако этот противоположный эффект виден только до вычета комиссий и проскальзывания. Почему так?   Возьмем, к примеру, торговую стратегию, в которой средняя прибыль в сделке составляет -$50 после вычета $30 комиссий и проскальзывания. На первый взгляд эта стратегия может показаться хорошим кандидатом для внедрения противоположных параметров, ведь многие подумают, что противоположная система будет зарабатывать в среднем $50 - $30 = $20 в сделке. Но в реальности противоположная сделка принесет убыток -$10. При внедрении противоположной стратегии вы должны учитывать двойные комиссии и проскальзывание. Математика проста:

 

-$50 – средняя прибыль в сделке после вычета проскальзывания и комиссий

+$30 – комиссии и проскальзывание

-$20 – средняя прибыль в сделке без вычета комиссий и проскальзывания

 

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

 

+$20 – средняя прибыль в сделке без вычета комиссий и проскальзывания

-$30 – комиссии и проскальзывание

-$10 – средняя прибыль в сделке в противоположной стратегии с учетом комиссий и проскальзывания

 

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

 

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

 

■ Обезьяна видит – обезьяна делает

 

Один из заключительных тестов, который я люблю выполнять, я называю «обезьяна видит – обезьяна делает». Суть теста – понять, превосходит ли моя стратегия обезьяну, бросающую дротики. В 1973 году в книге Бёртона Малкиела утверждалось, что «бросание дротиков в страницы финансовой газеты может сформировать портфель, который будет работать не хуже, чем портфель, тщательно отобранный экспертами». Книга «Случайное блуждание по Уолл-стрит» (“A Random Walk Down Wall Street”, издательство “W. W. Norton”, 1973 год) – классика для инвесторов и трейдеров, и идея с обезьяной нашла отклик у многих людей. В конце концов, никто не хочет показывать результаты хуже обезьяны! Лично я не разделяю точку зрения, что рынки торгуются случайным образом – если бы я придерживался ее, то у меня не было бы никакого основания искать торговое преимущество. Поскольку стабильные преимущества не могут существовать на случайных рынках, я считаю «обезьяний тест» очень ценным.

 

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

 

Тест №1. «Обезьяний вход»

 

Цель первого теста – выяснить, действительно ли разработанный мной вход лучше случайного. Я просто заменяю вход в стратегии на вход, который генерируется случайным образом. Я запускаю стратегию со случайными входами (при сохранении остальной логики) 8000 раз. Это дает 8000 уникальных отчетов о производительности, потому что каждый прогон будет иметь свои собственные случайно сгенерированные входы. Изменяя частоту сигналов для входа, я добиваюсь того, чтобы количество сделок было близко к числу сделок в моем пошаговом форвардном тестировании. Также я стараюсь сохранить тот же процент длинных и коротких позиций. Эти два условия гарантируют, что «обезьяна» торгует с той же частотой, как и моя стратегия, и примерно с тем же соотношением длинных и коротких сделок.

 

Обычно хорошая стратегия превосходит «обезьянью» по чистой прибыли и по максимальной просадке в 9 случаях из 10. Для моих 8000 прогонов в «обезьяньем тесте» это означает, что примерно 7200 из них должны показать худшую чистую прибыль, чем в моей стратегии, и такое же количество прогонов с более высокой максимальной просадкой, чем результаты моего пошагового форвардного тестирования. Если я не достигаю этих целей, я всерьез задумываюсь, действительно ли мой вход лучше случайного.

 

Тест №2. «Обезьяний выход»

 

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

 

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

 

Тест №3. «Обезьяний вход и обезьяний выход»

 

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

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

 

■ количеству сделок

■ соотношению длинных и коротких сделок

■ среднему числу баров в сделке

 

Заметьте, что параметры те же самые, которые я применяю и в других обезьяньих тестах. Затем я запускаю стратегию «обезьяний вход – обезьяний выход» 8000 раз, так же, как и остальные тесты, и сравниваю результаты тем же методом.

 

Таймфреймы

 

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

 

Другой таймфрейм, в котором я использую «обезьянье тестирование» – это стратегия, работающая на реальном рынке. Я беру результаты за последние 6-12 месяцев (3 месяца тоже могут быть приемлемым сроком, хотя, если сделок было мало, ее достоверность может вызывать сомнения). Если за 6-12 месяцев производительность «обезьяньего теста» стала значительно лучше, я понимаю, что мое предполагаемое преимущество ухудшилось или вовсе исчезло. Возможно, лучше перестать торговать по этой стратегии.

 

Пример «обезьяньего теста»

 

Я приведу пример, как работает «обезьяний тест» в пошаговом форвардном тестировании на исторических и на реальных данных.

На рисунке 12.1 показана производительность пошагового форвардного тестирования разработанной стратегии, а также ее производительность после завершения разработки. Стратегия какое-то время работала очень хорошо, но в итоге пережила существенные просадки. Вопрос: мог ли 6-месячный «обезьяний тест» показать, что преимущество системы исчезло и что торговлю следовало прекратить? Чтобы ответить на этот вопрос, я выполню «обезьянье тестирование» в точках, отмеченных на графике. 

 

image.png.0dd8207b6913def6dc31bff06cc07e66.png

Рисунок 12.1. Пример производительности пошагового форвардного тестирования

 

Таблица 12.1. Базовые показатели стратегии

image.thumb.png.d77f607842a9adadc7ade04c5f3586fa.png

 

Код для базовой стратегии и трех «обезьяньих» стратегий, написанный на языке EasyLanguage для платформы TradeStation, приведен в Приложении A.

 

Первый шаг при создании рандомных стратегий, сопоставимых с базовой – это сбор необходимых статистических данных базовой стратегии. Они приведены в таблице 12.1.

 

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

 

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

 

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

 

Таблица 12.2. Рандомный «обезьяний тест» №1

image.thumb.png.46404498037a8880161cb01008d4f3ca.png

 

Таблица 12.3. Рандомный «обезьяний тест» №2

image.thumb.png.8594fca4703d5bd5199e9e7fc3dc94d5.png

 

Но как базовая стратегия выглядела по сравнению с рандомными стратегиями спустя несколько месяцев? Обратившись к рисунку 12.1, мы видим, что базовая стратегия столкнулась с определенными трудностями примерно в феврале-марте 2012 года. Если принять конечную дату 1 марта 2012 года, то за предыдущие 12 месяцев стратегия показала чистую прибыль $ 780 и максимальную внутридневную просадку -$ 15 680. Как это соотносится с рандомными стратегиями? После 8 000 прогонов были получены такие результаты (см. таблицу 12.3).

 

Эти результаты должны вызвать определенное беспокойство. Очевидно, что базовая стратегия показала себя лишь немного лучше рандомной – в зависимости от того, на какую цифру вы смотрите. Лично я рассматриваю все показатели в совокупности, и если большинство из них находится на уровне или ниже 60-70%, это начинает меня настораживать. Если же большинство значений ниже 50%, я очень беспокоюсь, так как по всем меркам моя стратегия работает не лучше «обезьяньей».

 

В данном случае, когда значение только одного параметра ниже 50%, а два – ниже 70%, я, вероятно, позволил бы стратегии продолжить торговлю. Более консервативные трейдеры в этот момент могут прекратить торговлю, и это тоже будет разумным выбором.

 

Следующим периодом, когда базовая стратегия вызвала опасения, был май 2013 года. За год, закончившийся 1 мая 2013 года, базовая стратегия получила убыток -$ 1 105 при максимальной внутридневной просадке -$ 15 100. Как это выглядит по сравнению с рандомными «обезьяньими» стратегиями? См. таблицу 12.4.

 

Таблица 12.4. Рандомный «обезьяний тест» №3

image.thumb.png.042f5dfbb2dcbbc40d0cb6b8b7cd7538.png

 

Теперь результаты гораздо очевиднее. В среднем «обезьяньи» стратегии аналогичны или немного лучше базовой системы. Это указывает на то, что любое преимущество, которое стратегия имела изначально, исчезло или, по крайней мере, находится на паузе. Разумные трейдеры прекратили бы торговлю по этой системе в начале мая 2013 года. Судя по результатам работы базовой стратегии после 1 мая 2013 года, это было правильным решением.

 

Сравнение собственной стратегии с рандомно генерируемыми системами тоже может быть полезным. В предыдущем примере анализ показал, что разработанная стратегия была существенно лучше рандомной, в которой «обезьяны бросают дротики». Это приятно, поскольку вселяет уверенность в начале торговли.

 

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

 

 

Кевин Дейви

Переведено для TLAP

 

 

Изменено 9 мая пользователем ju.vskv

Автор#14

image.thumb.png.2f9346d9b34806b22a2663b094735646.png

 

ГЛАВА 13

Глубокое тестирование/пошаговый форвардный анализ

 

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

 

■ тестирование на исторических данных – полностью на всех данных внутри выборки

■ тестирование на данных вне выборки

■ пошаговое форвардное тестирование

■ тестирование в реальном времени

 

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

 

■ Стратегия без параметров для оптимизации

 

Иногда вы можете создать стратегию, в которой нет параметров для оптимизации. Например, ваш вход может основываться на определенном свечном паттерне, а выход – на стоп-лоссе с фиксированной суммой в долларах и заданном тейк-профите. По той или иной причине вы можете решить, что не хотите менять значения стоп-лосса и тейк-профита и что вход тоже должен оставаться неизменным. Ваша философия может звучать так: «никакой оптимизации» – и это, безусловно, один из способов избежать подгонки под исторические данные или чрезмерной оптимизации стратегии.

 

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

 

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

 

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

 

Стратегия №1

Вход в лонг на свечном паттерне A

Стоп-лосс: $ X, тейк-профит: $ Y 

 

Стратегия №2

Вход в лонг на свечном паттерне Б

Стоп-лосс: $ X, тейк-профит: $ Y

 

Стратегия №3 – комбинация стратегий №1 и №2

Для i = от 1 до 2

Если i = 1, вход в лонг на свечном паттерне A

Если i = 2, вход в лонг на свечном паттерне Б

Стоп-лосс: $ X, тейк-профит: $ Y

 

Преимущество такого подхода состоит в том, что вы заранее знаете, что оптимизируете процесс (и не допускаете скрытых или забытых оптимизаций, способных исказить результаты). Кроме того, вполне может оказаться, что комбинация стратегий (например, стратегия №1 работает лучше в первый год, а стратегия №2 – во второй) превосходит по производительности каждую из них по отдельности.

 

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

 

■ Введение в пошаговый форвардный анализ

 

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

 

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

 

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

 

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

 

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

 

Критерий пригодности – это критерий, используемый для определения «лучшего» результата, позволяющий выбрать оптимальные параметры.

 

Тест с привязкой/отсутствием привязки показывает, смещается ли начальная дата периода со временем или всегда остается неизменной.

 

Хотя детали выбора этих параметров будут обсуждаться позже, в нашем тесте мы будем использовать:

 

– 5-летний период в пределах выборки;

– 1-летний период вне выборки;

– фактор пригодности: чистая прибыль;

– тест с отсутствием привязки.

 

Наша стратегия будет очень простой – контртрендовая система на пробое:

 

– Открываем шорт, если цена закрытия является максимальной за период X дней.

– Открываем лонг, если цена закрытия является минимальной за период X дней.

– Стоп-лосс Z.

 

На платформе TradeStation на языке EasyLanguage данный код стратегии выглядит так:

 

input: X(5), Y(5), Z(200);

if close=highest(close,X) then buy next bar at market;

if close=lowest(close,Y) then sellshort next bar at market;

SetStopLoss(Z);

 

В этом примере мы будем использовать:

 

– непрерывный фьючерсный контракт E-mini S&P (ES);

– 10-летние данные – с 1 января 2000 года до 1 января 2010 года;

– дневной таймфрейм

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

 

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

 

X = 9

Y = 5

Z = $ 600

 

Полная оптимизация дает чистую прибыль $ 55 162 за 10-летний период.

 

Теперь проведем пошаговый форвардный анализ. Поскольку мы используем 5-летний период оптимизации, то сначала будем оптимизировать с 1 января 2000 года до 1 января 2005 года. При этом для варианта с наибольшей чистой прибылью получаются следующие значения параметров:

 

X = 7

Y = 17

Z = $ 600

 

На этом завершается наша первая оценка стратегии на данных внутри выборки. Теперь мы применяем эти параметры к первому периоду данных вне выборки – с 1 января 2005 года по 1 января 2006 года. Обратите внимание: эти данные считаются вне выборки, поскольку они не входили в первый период оптимизации. Результаты первого тестирования на данных вне выборки приносят убыток $ 3 138.

 

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

 

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

 

var: X(5), Y(5), Z(200);

If date>1050101 and date<1060101 then begin

x=7; y=17; z=600;

end;

If date>1060101 and date<1070101 then begin

x=7; y=45; z=100;

end;

If date>1070101 and date<1080101 then begin

x=49; y=7; z=600;

end;

If date>1080101 and date<1090101 then begin x=21; y=11; z=1000;

end;

If date>1090101 and date<1100101 then begin

x=9; y=5; z=600;

end;

If date>1100101 and date<1110101 then begin

x=9; y=5; z=600;

end;

If date>1110101 and date<1120101 then begin

x=9; y=5; z=700;

end;

If date>1120101 and date<1130101 then begin x=9; y=5; z=700;

end;

119

If date>1130101 and date<1140101 then begin x=9; y=5; z=700;

end;

if close=highest(close,X) then sellshort next bar at market;

if close=lowest(close,Y) then buy next bar at market;

SetStopLoss(Z);

 

Таблица 13.1. Пример результатов пошагового форвардного тестирования

image.thumb.png.2d387a102ae137515e475c04f2cdc672.png

 

Это позволяет нам сравнить результаты пошагового форвардного тестирования (рисунок 13.1) с результатами оптимизации. Наиболее интересные моменты:

 

■ Кривая капитала после оптимизации выглядит намного лучше, чем кривая капитала после пошагового форвардного тестирования. Это ожидаемо, поскольку оптимизированная кривая – результат подгонки параметров. Это показывает, что практически любую стратегию можно «приукрасить», если оптимизировать ее за период, который вас интересует.

■ Результаты пошагового форвардного тестирования довольно слабые. Форвардный анализ представляет собой строгий тест, который большинство стратегий не проходит. Но поскольку он лучше имитирует производительность стратегии в режиме реального времени, чем полностью оптимизированные результаты, он является более точным методом анализа.

 

image.png.a5b82eb58bf22cf6bbd4b166d42c1a5c.png

Рисунок 13.1. Сравнение производительности оптимизированной стратегии и стратегии после пошагового форвардного тестирования

 

Я уже неоднократно упоминал об этом, но вас по-прежнему может интересовать вопрос: «Откуда вам известно, что пошаговый форвардный анализ лучше отражает будущую доходность стратегии, чем полностью оптимизированный тест?» Я утверждаю это, основываясь на собственном опыте. Текущая стратегия – показательный пример такой разницы в производительности. По результатам только что выполненного анализа оптимизированной стратегии и стратегии после пошагового форвардного тестирования за период с 1 января 2010 года по 14 ноября 2013 года мы видим следующую производительность. Как показано на рисунке 13.2, после оптимизации доходность стратегии в период вне выборки за 2010-2013 год была практически нулевой. Она совершенно не похожа на оптимизированный участок кривой капитала за 2005-2009 год, где среднегодовой прирост составил около $ 10 000. Как видно на рисунке 13.2, с пошаговым форвардным анализом дела обстоят совсем иначе. У кривой капитала пошагового форвардного тестирования период 2010-2013 годов тоже был флэтовым, но он повторяет результаты стратегии с пошаговым форвардным тестированием за период 2005-2009 года. Иными словами, производительность пошаговой форвардной стратегии не менялась со временем – она была почти каждый год стабильно низкоприбыльной или убыточной.

 

Хотя один пример еще не делает это правилом, в целом именно такую картину можно ожидать от оптимизированных бэктестов и пошаговых форвардных бэктестов. При применении оптимизированных результатов к данным, не входящим в выборку, наблюдается ухудшение производительности. Именно поэтому так много людей разочаровываются в системах, которые продают нечестные продавцы. Эти продавцы демонстрируют оптимизированные результаты, а реальная будущая производительность почти никогда не соответствует результатам бэктеста. Результаты пошагового форвардного теста, наоборот, должны показывать примерно одинаковую производительность на протяжении всего периода тестирования. Поэтому многие трейдеры предпочитают именно результаты пошагового форвардного тестирования. Форвардный анализ, как правило, дает кривые капитала, которые остаются более устойчивыми в будущем. Снова подчеркну: это не правило, однако, по моему опыту, в целом именно так и происходит. 

 

image.png.a1b340abfe5c86e9716fabf71ea35ae4.png

Рисунок 13.2. Результаты пошагового форвардного тестирования в сравнении с результатами оптимизированной стратегии до и после разработки

 

■ Входные параметры пошагового форвардного тестирования

 

Если мы выполняем анализ вручную, как описано выше, мы должны заранее знать следующие параметры:

 

● Период в пределах выборки

● Период вне выборки

● Критерий пригодности

● Наличие или отсутствие привязки

 

Если для анализа вы используете программное обеспечение (как сейчас делаю я), то заранее знать эти значения необязательно. Это одновременно и благословение, и проклятие. Благословение, потому что вам нужно запустить оптимизацию всего один раз, без необходимости многократного повторения форвардного анализа. А проклятие, потому что эти параметры тоже могут быть оптимизированы, как и любые другие входные параметры вашей стратегии. Возможно, это не будет выглядеть как оптимизация в привычном смысле, но если вы, например, сравните два значения параметра внутри выборки и выберете то, которое дает лучший результат – это равносильно оптимизации. Решение нужно принимать до начала анализа.

 

Предполагая, что вы выбираете входные параметры для пошагового форвардного теста заранее (позже мы рассмотрим альтернативный метод), возникает вопрос: как выбрать значения для каждого из них? Ниже описан метод определения этих параметров.

 

Период в пределах выборки

 

В рамках периода внутри выборки ваша цель – получить достаточное количество сделок, чтобы сделать вывод о наилучших параметрах для каждого периода. Логично стремиться к определенному количеству сделок на одну входную переменную. Например, если у вас четыре входных параметра для оптимизации, вам, вероятно, потребуется совершить 100-200 сделок внутри выборки, что соответствует 25-50 сделкам на одну переменную. К сожалению, установленного «лучшего» количества сделок на входной параметр не существует, хотя многие считают 30 хорошей цифрой с точки зрения статистической значимости.

 

Период вне выборки

 

Как бы безумно это ни звучало, но я знаю людей, которые проводят пошаговый форвардный анализ каждый день, то есть их период вне выборки – это один день. Лично я считаю это крайностью, но кто я такой, чтобы спорить, если это приносит им прибыль? На выбор периода вне выборки влияют несколько факторов. Во-первых, если сделать его слишком длинным, у вас получится лишь один или два периода вне выборки, и ваш тест станет очень похож на тест с одним периодом данных вне выборки. Во-вторых, если сделать период вне выборки слишком коротким, вы ежедневно или еженедельно будете выполнять чрезмерную оптимизацию. Это может оказаться нерациональным, учитывая, что у вас мало времени для разработки и торговли, особенно если вам нужно оптимизировать множество стратегий. Понимая, что продолжительность периода вне выборки имеет разумные пределы, я обычно устанавливаю его в диапазоне 10-50% от периода внутри выборки. Например, если мой период внутри выборки составляет 1000 дней, то период вне выборки будет в диапазоне 100-500 дней. Данный диапазон очень широкий, но для надежных стратегий финальные результаты обычно не слишком чувствительны к выбору периода вне выборки: период вне выборки длительностью 100 дней вполне может дать примерно такие же результаты, как и 500 дней.

 

■ Критерий пригодности

 

Из всех параметров в пошаговом форвардном анализе наиболее спорным является именно критерий пригодности. Уверен, что бурная дискуссия между двумя разработчиками на эту тему иногда заканчивалась рукоприкладством (вот это преданность делу!). Не хочу разжигать споры, перечисляя преимущества и недостатки различных критериев пригодности – расскажу лишь о тех, которые принесли мне наибольший успех.

 

Чистая прибыль

 

Для многих этот критерий является выбором по умолчанию, и он вполне разумен. Без прибыли все остальные параметры теряют смысл. Лично я чаще всего использую именно этот критерий пригодности, поскольку он прост и понятен. Но он не учитывает еще один важный параметр – просадку. Однако, по моим наблюдениям, высокая чистая прибыль обычно идет рука об руку с низкой максимальной просадкой. Если вы хотите обязательно учитывать просадку, то вам понадобится один из нижепредставленных критериев пригодности:

 

Линейность кривой доходности

 

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

 

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

 

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

 

Доходность счета

 

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

 

Доходность счета = чистая прибыль / (максимальная просадка + требуемая маржа)

 

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

 

■ Тест с привязкой/без привязки

 

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

 

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

 

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

 

Это можно проиллюстрировать на простом примере. Предположим, у вас есть результаты оптимизации, показанные в таблице 13.2.

 

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

 

image.png.f12325b0b8ee7b2ea8bd792c76869f05.png

Рисунок 13.3. Пошаговый форвардный анализ с привязкой и без привязки к начальной дате

 

Таблица 13.2. Многие показатели производительности не суммируются

image.thumb.png.e6d5940e24cc5707b9dc39c2373091a8.png

 

■ Проведение анализа

 

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

 

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

 

Одна из распространенных ошибок при пошаговом форвардном анализе – скрытая оптимизация периодов внутри выборки и вне выборки. Допустим, вы запускаете анализ с 4-летним периодом внутри выборки и 1-летним периодом вне выборки. Результаты хорошие, но не впечатляющие, и вы думаете: «Может, сто́ит попробовать 4-летний период внутри выборки и 1-летний период вне выборки?» Этот вариант оказывается лучше на 200% и полностью соответствует вашим целям. И вы решаете: «Вот она, ключевая комбинация. Вперед!»

 

Стоп.

 

Понимаете ли вы, что сейчас произошло? Как только вы выбрали второй набор параметров периодов внутри и вне выборки, снова запустили анализ и выбрали лучший результат, вы фактически выполнили оптимизацию. Да, это не полноценная оптимизация, поскольку вы сравнили всего два случая, но всё же это оптимизация. Учитывая правило, что оптимизированным результатам доверять нельзя, вы оказываетесь перед дилеммой: принять первый прогон (4-летний период внутри выборки и 1-летний период вне выборки) и затем отбросить данную стратегию, поскольку она не дотянула до ваших целей, или принять второй прогон и сделать вид, что никакой оптимизации не было.

 

Снова признаюсь: иногда я так делал. Но не помню, чтобы это когда-либо приводило к хорошему исходу. Главный вопрос здесь заключается в следующем: «Можно ли протестировать несколько вариантов внутри и вне выборки и выбрать лучший, при этом сохранив целостность пошагового форвардного анализа?» Ответ, к счастью – да. Делается это так: вы создаете, по сути, второй пошаговый форвардный анализ внутри первого. Для этого вы запускаете обычный форвардный анализ, но оставляете последние несколько лет данных нетронутыми. Обычно я оставляю три года. Затем, используя данные форвардного анализа, которые у меня есть, я выбираю лучшую пару периодов внутри и вне выборки и прогоняю стратегию на последних трех годах. Если стратегия проходит данное тестирование, я двигаюсь дальше. Если нет, я ее отбрасываю. Но в любом случае я хотя бы предпринял усилие, чтобы выбрать оптимальную комбинацию периодов внутри и вне выборки. Минус этого подхода в том, что вы всё равно выполняете оптимизацию, и чем больше оптимизаций вы проводите, тем хуже, как правило, оказываются ваши результаты.

 

Этот процесс выглядит так:

 

1. 2000-2008 год → запуск пошагового форвардного анализа для различных комбинаций периодов внутри и вне выборки, выбор лучшей пары.

2. С 2009 года по настоящее время → запуск пошагового форвардного анализа с использованием лучшей пары из шага 1.

3a. Если результаты форвардного анализа из шага 2 хорошие, вы продолжаете разработку.

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

 

Ниже на рисунке 13.4 представлено сравнение подхода с оптимизацией периодов внутри и вне выборки с традиционным пошаговым форвардным анализом.

 

image.png.bbffcefbaff2626e411a7f9f999d0955.png

Рисунок 13.4. Пошаговый форвардный тест внутри другого форвардного теста

 

■ Соберите стратегию после пошагового форвардного анализа воедино

 

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

 

Оптимизируемая стратегия

input: avg(10); // strategy code

 

Стратегия после пошагового форвардного анализа

var: avg(10);

If date is between Jan 1, 2010 and Jan 1, 2011 then avg=8

If date is between Jan 1, 2011 and Jan 1, 2012 then avg=12

If date is between Jan 1, 2012 and Jan 1, 2013 then avg=6

// strategy code

 

В стратегии после пошагового форвардного анализа переменные меняются в зависимости от даты. Таким образом, вы получаете непрерывную историю работы стратегии – вам не нужно «склеивать» результаты вручную, чтобы получить историю форвардного тестирования.

 

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

 

 

Кевин Дейви

Переведено для TLAP

 

 

Изменено 10 мая пользователем ju.vskv

Автор#15

image.thumb.png.af9da21115782e0e2d9a14130afea32e.png

 

ГЛАВА 14

Анализ по методу Монте-Карло и инкубация

 

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

 

Как уже было упомянуто ранее в главе 7, для проведения анализа по методу Монте-Карло я использую таблицы Excel. Вы можете скачать этот инструмент на странице списка литературы данной книги (http://www.wiley.com/go/algotradingsystems). Вы также можете найти в интернете множество бесплатных и платных симуляторов для проведения анализа по методу Монте-Карло. Например, хороший бесплатный симулятор – Equity Monaco от NeoTick (equitymonaco.software.informer.com). Еще один хороший платный инструмент – @Risk (http://www.palisade.com/). Все эти варианты дадут примерно одинаковые результаты, и вы сможете выбрать тот, формат вывода данных и функционал которого вам понравится больше всего. Главное – получить такие результаты симуляции, которые помогут вам принять решение.

 

Если для этого метода моделирования вы используете созданную мной таблицу, вам нужно будет скопировать результаты сделок из отчета о производительности стратегии, вставить их в таблицу, указать начальный капитал, капитал в точке выхода и число сделок в год, затем нажать «рассчитать». Таблица создаст симулированные кривые капитала для 2500 итераций и покажет сводные результаты за один год торговли. Пример таблицы был показан ранее на рисунке 7.2. Обычно я смотрю на соотношение доходности к максимальной просадке и считаю допустимыми его значения выше 2,0. Показатели ниже 2,0 указывают на то, что риск стратегии слишком высок относительно полученной прибыли и, возможно, не стоит тратить на нее время.

 

Если вы умеете писать макросы в Excel, вы легко сможете адаптировать мою таблицу моделирования по методу Монте-Карло под свои задачи. Например, вы можете добавить управление размером позиции или изменить набор выводимых результатов. В конечном итоге цель моделирования – предоставить вам результаты, которые вы сможете понять и интерпретировать. Я рассказал, что подходит мне; возможно, это подойдет и вам, а возможно, вы придумаете нечто лучшее.

 

■ Инкубация

 

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

 

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

2. Мы разработали торговую идею, которая, как нам кажется, обладает преимуществом, и определили рынок, таймфрейм и другие важные параметры для тестирования.

3. Мы провели ограниченное тестирование стратегии и довольны его результатами. Полагаем, что у нас есть преимущество.

4. Мы провели глубокое тестирование, по возможности используя пошаговое форвардное тестирование. И, опять же, нас устраивают полученные результаты производительности.

5. Мы выполнили тестирование по методу Монте-Карло, чтобы установить вероятности результатов нашей стратегии и получить реалистичные варианты ее будущей производительности.

 

Эти пять этапов представляют собой огромный объем работы, который, вероятно, заставил нас отбросить десятки или даже сотни стратегий, прежде чем мы нашли успешную. Дойти до последнего этапа – тестирования по методу Монте-Карло – уже само по себе является достижением. Дойдя до него, вы, скорее всего, будете настолько воодушевлены, что захотите немедленно начать торговать! Но это, разумеется, будет ошибкой. Правильным этапом станет инкубация.

 

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

 

Почему важно подвергать стратегию инкубации? Вот несколько причин:

 

■ Когда вы завершаете тестирование по методу Монте-Карло, вы находитесь на эмоциональном подъеме. Ваше «дитя» выжило и подает большие надежды. Вы вложили в эту стратегию массу эмоциональных сил, времени и усилий. Вы хотите, чтобы она была успешной. Возможно, вам даже нужно, чтобы она стала успешной. Всё это делает ваше эмоциональное состояние хрупким. Начав немедленно торговать по этой стратегии на реальном рынке, вы можете потерять способность трезво мыслить, если ваша стратегия на старте покажет плохие результаты, что зачастую и происходит в самом начале. Это может привести к тому, что вы преждевременно откажетесь от своей стратегии или, что еще хуже, к хаотическому увеличению объемов после неудачного старта («добавлению к убыточным сделкам»).

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

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

■ Инкубация дает возможность увидеть, как работает ваша стратегия в реальном времени. Возможно, вы обнаружите, что она вам не нравится, даже если и приносит деньги. Например, ваша стратегия продает на каждом локальном максимуме. Скорее всего, при тестировании на исторических данных это не будет вас смущать. Но наблюдать в режиме реального времени, как стратегия «борется» с каждым рыночным максимумом, может оказаться вам совсем не по душе. Лучше понять это заранее, чем после того, как вы внесете на счет деньги и начнете торговать по этой стратегии.

 

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

 

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

 

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

■ Лимитные ордера, которые исполняются при простом касании цены. Иногда – от 0% до 30% случаев – вы действительно получите исполнение по вашей лимитной цене, когда рынок лишь касается ее. Но в большинстве случаев цена должна пройти уровень, чтобы ваш ордер гарантированно исполнился.

■ Любые экзотические бары, такие как бары Ренко, бары Кейса и даже графики «крестики-нолики». Из-за специфики формирования таких баров на исторических данных исполнение вашей стратегии часто нельзя считать достоверным. Лучше просто избегать таких баров, за исключением дискреционной внутридневной торговли в реальном времени.

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

 

■ Оценка инкубации

 

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

 

 

 

 

Кевин Дейви

Переведено для TLAP

 

 

Изменено 10 мая пользователем ju.vskv

Страница 3 из 6

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025