Тестирование и оптимизация торговых систем
Каждому десятилетию свойственна своя глупость, но основная причина всегда одна: люди упорствуют в собственных верованиях, полагая, что происходившее в недавнем прошлом будет продолжаться неограниченно долго, даже когда земля уходит у них из-под ног.
Джордж Дж. Черч
СПЕЦИАЛЬНО ПОДОБРАННЫЙ ПРИМЕР*
Вы выложили $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 годов, без сомнения, большинством трейдеров рассматривалась бы как более привлекательная.