Тестирование и оптимизация торговых систем

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

Джордж Дж. Черч

СПЕЦИАЛЬНО ПОДОБРАННЫЙ ПРИМЕР*

Вы выложили $895, чтобы посетить десятый ежегодный семинар «Сек­реты миллионеров», организованный для фьючерсных трейдеров. За эти деньги, как вы предполагаете, докладчики раскроют некоторую очень значительную информацию.

Текущий докладчик объясняет устройство системы торговли фью­черсами под названием «СуперМозги» (СМ). Слайд на громадном экра­не демонстрирует ценовой график с символами В и S, представляющи­ми моменты покупки и продажи. Слайд впечатляет: система всегда по­купает дешевле, чем продает.

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

Как утверждает докладчик, «все, что требуется, — это 10 минут в день и знание простейшей арифметики».

Следующий раздел представляет собой выдержки из статьи, опубликован­ной в журнале «Futures» в сентябре 1984 г.

696 ЧАСТЬ 4. торговые системы и измерение эффективности торговли

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

Как только вы возвращаетесь домой, то выбираете 10 различных рынков и начинаете торговать с использованием системы СМ. Ежеднев­но вы следите за своей прибылью. Проходят месяцы, и вы подмечаете странные изменения. Хотя суммарная прибыль на вашем счете демон­стрирует очень устойчивый тренд, как это и происходило в семинарс­ком примере, существует одно отличие: тренд на вашем графике при­были направлен вниз. В чем же ошибка?

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

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

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

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

В качестве иллюстрации статья использовала поведение швейцарского франка в 1980 г. Применение этой системы к швейцарскому франку в 1980 г. приводило бы к прибыли в $17 235 на контракт (предполагая, что средние затраты на сделку равны $80). Выделив всего $6000 на торговлю по этой системе, вы получили бы годовой доход в 287%! Не­плохо для системы, которая может быть описана двумя предложения­ми. Легко представить, как трейдеры, присутствующие при таком при­мере, немедленно отказываются от прочих подходов к торговле ради этой бесспорной машины по производству денег.

Я не мог поверить, что настолько простая система может работать так хорошо. Поэтому решил протестировать систему на более широком временном отрезке — с 1976 г. по середину 1983 г.* — и на расши­ренной группе рынков.

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

ГЛАВА 20. тестирование и оптимизация торговых систем 697

Начав с швейцарского франка, я обнаружил, что общая прибыль за этот период составила $20 473. Другими словами, за исключением 1980 г., система заработала лишь $3238 за оставшиеся 6,5 лет. Та­ким образом, при выделении $6000 на торговлю при данном подхо­де, средняя годовая прибыль за эти годы составила всего 8% — нали­цо определенное снижение результативности по сравнению с 287% в 1980 г.

Но подождите. Все хуже. Намного хуже.

Когда я применил систему к группе из 25 рынков на временном про­межутке с 1976 г. по середину 1983 г., система потеряла деньги на 19 из 25 рынков. На 13 рынках (более половины всего набора) потери превысили $22 500, или $3000 в год на каждый контракт! На пяти рынках потери превысили $45 000, что эквивалентно $6000 в год на контракт!

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

У меня не осталось никаких вопросов. Это была поистине плохая система. Так что если вы смотрите только на специально подобранный пример, то можете подумать, что наткнулись на торговую систему, рав­ноценную той, которую использовал Джесс Ливермор в свои лучшие годы. Речь идет о разрыве между заблуждениями и реальностью.

Эта система демонстрирует настолько большие и основательные потери, что вы вполне можете поинтересоваться, почему следование сигналам подобной системы с точностью до наоборот не может приве­сти к привлекательной торговой стратегии. Причина состоит в том, что большинство потерь оказываются результатом высокой частоты совер­шения сделок и связаны с комиссионными и проскальзыванием. (Поня­тие проскальзывания обсуждается ниже.) Подобная чувствительность системы иногда может оказаться полезной, как было в случае швейцар­ского франка в 1980 г. Однако в целом — это главный недостаток дан­ной системы.

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

Мораль проста: не делайте никаких заключений по поводу систе­мы (или индикатора) на основе изолированных примеров. Единствен­ный путь проверить, имеет ли система какую-то ценность, — бесприс­трастно протестировать ее на большом промежутке времени для широ­кого спектра рынков.

698 ЧАСТЬ 4. торговые системы и измерение эффективности торговли

ОСНОВНЫЕ ПОНЯТИЯ И ОПРЕДЕЛЕНИЯ

Торговая система — это набор правил, которые могут быть использо­ваны для генерирования торговых сигналов. Параметр — это величи­на, от которой зависят правила системы и которую можно варьировать для того, чтобы изменять время поступления сигналов. Например, в базовой системе пробоя величина N (число предшествующих дней, мак­симумы и минимумы которых должны быть превышены, чтобы появил­ся сигнал) — это параметр. Хотя действие правил в системе останется тем же самым, будь N равно 7 или 40, время поступления сигнала бу­дет значительно отличаться (см. рис. 17.5).

Большинство торговых систем будет иметь более одного парамет­ра. Например, в системе пересекающихся скользящих средних есть два параметра: длины краткосрочной и долгосрочной скользящих средних. Любая комбинация значений параметров называется набором парамет­ров. Например, в системе пересечения скользящих средних скользящие средние длиной 10 и 40 будут представлять специфический набор па­раметров. Любая другая комбинация значений усреднения будет пред­ставлять другой набор параметров. В системах с единственным пара­метром (например, в системах пробоя) набор параметров будет состо­ять из одного-единственного элемента*.

Большинство «механических» систем ограничиваются одним или двумя параметрами. Однако конструкция более творческих и гибких систем или дополнение базовых систем различными модификациями обычно будут подразумевать необходимость трех или более парамет­ров. Например, добавление подтверждающего правила временной за­держки к системе пересечения скользящих средних подразумевало бы третий параметр: число дней временной задержки. Одна проблема, связанная с системами, которые включают в себя много параметров, связана с тем, что они делаются слишком громоздкими для тестирова­ния даже малой части всех разумных комбинаций. Например, если каж­дый параметр может подразумевать 10 значений, возникло бы 1000 наборов параметров, если система включает 3 параметра, и 1 000 000 наборов параметров, если бы было 6 параметров!

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

Заметьте, что термины «набор параметров» и «вариация системы» (последнее выражение использовалось в гл. 17) соответствуют идентичным понятиям. Вве­дение термина «набор параметров» было просто отложено до этой главы, по­скольку это позволяет более логично выстроить подачу материала.

ГЛАВА 20. тестирование и оптимизация торговых систем 699

му системы (с наименьшим возможным количеством параметров), кото­рая не подразумевает существенного ухудшения результативности по сравнению с более сложными вариантами. Однако не стоит отбрасы­вать значимые параметры ради сокращения объема необходимых тес­тов. Следовало бы заметить, что даже в простой системе с одним или двумя наборами параметров нет необходимости в тестировании всех возможных комбинаций. Например, в простой системе пробоя, когда кто-то хочет протестировать результативность при значениях N от еди­ницы до ста, нет никакой необходимости тестировать каждое значение в этом ряду. Намного более эффективным подходом оказалось бы вна­чале протестировать систему с некоторым шагом для значений N (на­пример, 10, 20, 30... 100), а затем, при желании, трейдер может со­средоточиться на любых областях, которые покажутся интересными. Например, если система, в частности, показывает лучшую результатив­ность при значениях параметра N = 40 и N = 50, трейдер может захо­теть также протестировать другие значения N из этого суженного диа­пазона. Однако подобный дополнительный шаг, видимо, излишен, по­скольку, как будет видно из продолжения этой главы, разница в резуль­тативности близких наборов параметров, вероятно, является случайной величиной и лишена какого-либо значения.

В качестве более практического примера из реальной жизни пред­ставим, что мы хотим протестировать систему пересечения скользящих средних, которая включает в себя правило подтверждения с времен­ной задержкой. Если бы мы поинтересовались результативностью сис­темы при значениях параметров от 1 до 50 для краткосрочной сколь­зящей средней, от 2 до 100 для более долгосрочной скользящей сред­ней и от 1 до 20 для временной задержки, образовалось бы 74 500 наборов параметров*.

Очевидно, было бы невозможным протестировать, даже не сравни­вая результаты, все эти комбинации. Заметьте, что мы не можем умень­шить количество параметров, не разрушив основную структуру системы. Однако мы можем протестировать ограниченное количество наборов параметров, что давало бы очень хорошее приближение обшей резуль­тативности системы. Например, мы могли бы использовать шаги в 10 для краткосрочной скользящей средней (10, 20, 30, 40 и 50), шаги в 20 для долгосрочной скользящей средней (20, 40, 60, 80 и 100) и три выбран­ных значения для временной задержки (например, 5, 10 и 20). При этом количество тестируемых наборов параметров снизилось бы до 57**.

Чтобы избежать двойного счета, каждая «краткосрочная» скользящая сред­няя должна комбинироваться только с «долгосрочной» скользящей средней большей длины. Таким образом, общее количество комбинаций дается фор­мулой (99 + 98 + 97 + ... + 50) х 20 = 74 500.

(5 + 4 + 4 + 3 + 3) х 3 = 57.

700 ЧАСТЬ 4. торговые системы и измерение эффективности торговли

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

С концептуальной точки зрения могло бы быть полезным опреде­лить четыре типа параметров.

Непрерывный параметр.Непрерывный параметр может подразу­мевать использование любого значения из данного диапазона. Процен­тный ценовой пробой был бы примером непрерывного параметра. По­скольку непрерывный параметр может предполагать бесконечное чис­ло значений, необходимо определить некоторый шаг — интервал в те­стировании подобного параметра. Например, параметр процентного пробоя может быть протестирован в диапазоне от 0,005 до 0,50% с шагом в 0,05% (т.е. 0,05; 0,10 ... 0,50). Будет разумным ожидать, что при малых изменениях в значении параметра результативность будет меняться незначительно (предполагая тестовый период существенной длительности).

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

Кодовый параметр.Кодовые параметры используются для описания классификационных различий в определениях торговых правил. Таким образом, кодовому параметру можно присвоить любое математическое значение. В качестве примера кодового параметра предположим, что мы хотим протестировать простую систему пробоя, используя три раз­личных определения пробоя (случай покупки): закрытие дня превыша­ет максимум предшествующих N дней, дневной максимум превышает предшествующий N-дневный максимум и закрытие дня превышает наи­большее закрытие предшествующих N-дней. Мы могли бы протестиро­вать в отдельности каждую из этих систем, но удобнее было бы исполь­зовать параметр для идентификации подразумеваемого определения. Таким образом, значение параметра, равное нулю, указывало бы на первое определение, значение, равное 1 — на второе определение и

ГЛАВА 20. тестирование и оптимизация торговых систем 701

значение, равное 2 — на третье определение. Заметьте, что у этого параметра есть только три возможных значения, и количественные из­менения параметра не имеют никакого смысла.

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

ВЫБОР ЦЕНОВЫХ СЕРИЙ

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

ВЫБОР ВРЕМЕННОГО ПЕРИОДА

Вообще говоря, чем дольше тестовый период, тем большего доверия заслуживают результаты. Если временной отрезок слишком короток, тест не будет отражать результативность системы для достаточного спектра рыночных ситуаций. Например, тестирование системы следо­вания за трендом на рынке хлопка, которое использует лишь данные двух последних лет (апрель 1993 г. — март 1995 г. в момент написа­ния книги) — период, в который доминировал мощный протяженный «бычий» рынок (рис. 20.1), — будет приводить к результатам, вводящим в полное заблуждение с точки зрения возможной долгосрочной резуль­тативности системы.

С другой стороны, если для тестирования системы используется слишком протяженный период, первые годы рассматриваемого перио­да могут оказаться в высшей степени нерепрезентативными для текущих

702 ЧАСТЬ 4. торговые системы и измерение эффективности торговли

Рисунок 20.1.

ФАЗА МАСШТАБНОГО ТРЕНДА

КАК ПРИМЕР НЕРЕПРЕЗЕНТАТИВНОГО ПОВЕДЕНИЯ ЦЕН: НЕПРЕРЫВНЫЕ ФЬЮЧЕРСЫ НА ХЛОПОК

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

Хотя и невозможно предложить решающий ответ по поводу того количества лет, которое следует использовать при тестировании, 10-20 лет кажутся разумным выбором. Дня краткосрочных торговых си­стем (средняя продолжительность торговли, равная нескольким неделям или менее) был бы, вероятно, достаточен более короткий тестовый пе­риод (например, 5-10 лет). Результаты тестирования торговой систе-

ГЛАВА 20. тестирование и оптимизация торговых систем 703

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

В идеальном случае следовало бы тестировать систему, используя длительный временной отрезок (например, 15 лет), а затем оценивать результаты как для всего периода в целом, так и для различных более коротких интервалов (например, для отдельных лет . Подобный подход важен для определения степени временной устойчивости системы — постоянства результативности от одного периода к другому. Устойчи­вость во времени важна, поскольку она повышает доверие к возмож­ностям системы поддерживать постоянную приемлемую результатив­ность в будущем. Большинство людей будет испытывать сомнения по поводу рациональности использования системы, которая создавала зна­чительную чистую прибыль на периоде в 15 лет благодаря трем эффек­тным результативным годам, но несла убытки или торговала близко к безубыточности в оставшиеся 12 лет, и эти сомнения совершенно спра­ведливы. И наоборот, система, которая регистрировала умеренный чи­стый доход на протяжении 15-летнего периода и при этом была при­быльной в 14 из 15 годов, без сомнения, большинством трейдеров рас­сматривалась бы как более привлекательная.

Наши рекомендации