Современная электронная библиотека ModernLib.Net

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

ModernLib.Net / Ценные бумаги, инвестиции / Донна Маккормик / Энциклопедия торговых стратегий - Чтение (Ознакомительный отрывок) (Весь текст)
Автор: Донна Маккормик
Жанр: Ценные бумаги, инвестиции

 

 


Донна Маккормик, Джеффри Кац

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

Эту книгу я посвящаю Розалин Анкер Кац

Благодарю тебя за любовь и поддержку

Издано при содействии Международного Финансового Холдинга FIBO Group, Ltd.


Перевод П. Глоба

Научный редактор А. Дзюра

Технический редактор Н. Лисицына

Компьютерная верстка А. Фоминов

Корректоры М. Савина, О. Ильинская

Дизайн обложки DesignDepot


© The McGraw-Hill Companies, Inc. 2000

All rights reserved.

© Издание на русском языке, перевод, оформление. ООО «Альпина Бизнес Букс», 2006

© Электронная версия книги подготовлена компанией ЛитРес ()


Кац Дж.

Энциклопедия торговых стратегий / Джеффри Оуэн Кац, Донна Л. Маккормик; Пер. с англ. – 4-е изд. – М.: Альпина Паблишер, 2011.


ISBN 978-5-9614-2669-4


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

Предисловие

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

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

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

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

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

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

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

Мы хотели бы пояснить, что данная книга является продолжением и развитием цикла статей, написанных нами для журнала Technical Аnalysis of Stocks and Commodities начиная с 1996 г.

Джеффри Оуэн Кац и Донна Л. Маккормик

Введение

У большинства трейдеров есть общая черта: они взялись предсказывать движение финансовых рынков, на которых торгуют, взялись искать островки прибыльной «неэффективности» в огромном океане эффективного рынка. Для одного из авторов, Джеффри Каца, эта деятельность сначала была способом потакать своей любви к математике. Более десяти лет назад он разработал модель, дававшую сигналы входа для Standard & Poor’s 500 (S&P 500) и ОЕХ. Хотя эти сигналы были верны примерно в 80 % случаев, Кац часто принимал торговые решения, не основанные на сигналах системы. Он полагался на собственные решения в выборе видов приказов для входа, выхода и установки стопов. Эти решения принимались скорее под влиянием страха и жадности, составляющих суть интуитивной торговли, чем на основе знаний и разума. В результате Кац колебался, принимал ошибочные решения и терял деньги чаще, чем выигрывал. Как и для большинства трейдеров, для Каца торговля без жестких «механических» правил принятия решений была неэффективна.

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

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

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

Что такое полностью механическая торговая система?

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

1. Когда, как и по какой цене входить в рынок.

2. Когда, как и по какой цене выходить из рынка с убытком.

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


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

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

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

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

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

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

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

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

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

Научный подход к разработке систем

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

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

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

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


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

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

Также следует отметить, что немногие авторы проводят тестирование входов и выходов независимо друг от друга. Существует ряд интересных способов, позволяющих проводить тестирование изолированных компонентов системы. Один из них – использование набора стандартных стратегий входа и выхода, которые остаются фиксированными, в то время как данный вход, выход или другой компонент меняется. Например, при изучении моделей входа используется стандартизованная модель выхода без изменений для различных входов и их модификаций, и таким же образом для изучения выходов будет использоваться стандартизованная модель входа. Для трейдера будет немалым шоком использование для исследования входов генератора случайных чисел, спонтанно открывающего длинные и короткие позиции на различных рынках! Большинство трейдеров впали бы в панику от одной мысли о модели, основанной на выпадении кубиков, но на самом деле такие входы великолепны для жесткого тестирования стратегий выхода. Стратегия, способная выжать прибыль из случайных сделок, как ни странно, вполне может быть разработана, по крайней мере для индекса S&P 500 (Katz and McCormick, March, 1998, April, 1998). Испытания следует проводить так, чтобы разные методы входа и выхода можно было осмысленно сравнивать.

В общем, основные элементы научного подхода включают:

1. Изолированные исследования различных элементов системы.

2. Использование стандартных методик, позволяющих проводить достоверные сравнения.

3. Статистическую оценку результатов.

Материалы и методы, необходимые для научного подхода

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

Мало иметь огромное количество данных – необходимо моделирование одного или нескольких торговых счетов для проведения тестов. Для этого требуется торговый симулятор, т. е. пакет программ для создания счетов и ведения торговли на компьютере. Наиболее широко использовался торговый симулятор от Scientific Consultant Services, написанный на языке С++, рассчитанный на работу с портфелями акций и хорошо известный авторам. Кроме того, разнообразные возможности тестирования и построения графиков заложены в такие программы, как TradeStation фирмы Omega Research или SystemWriter Plus. Мы использовали в нашем анализе не только эти программы, но и MS Excel, которой пользуются очень многие.

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

Джеффри Оуэн Кац и Донна Л. Маккормик

Часть I. Рабочие инструменты

Введение

Для объективной оценки поведения механических торговых систем требуются различные аналитические инструменты и данные.

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

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

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

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

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

Глава 1. Данные

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

<p>Виды данных</p>

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

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

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

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

Кроме данных о ценах товаров существуют другие ценные данные. Например, долговременные данные об активности солнечных пятен, полученные из Бельгийской королевской обсерватории, использованные в главах о влиянии Солнца и Луны. Изменения температуры и осадков оказывают влияние на рынок сельскохозяйственных продуктов. Различные данные из самых разных областей экономики – от уровня инфляции до цен на жилье – могут помочь в успешной торговле на товарной бирже. Не забывайте просматривать сводки, отражающие настроения участников рынка, такие как обзоры «Взгляды трейдеров» (Commitment of Traders), опросы, отражающие преобладание бычьих или медвежьих настроений, соотношения опционов пут и колл. Кроме того, при тестировании систем можно использовать и нечисленные данные, например новости в прессе. Поиск необычных данных часто открывает интересные и выгодные возможности – зачастую, чем более необычны и труднодоступны данные, тем они ценнее!

<p>Временные масштабы данных</p>

Данные могут использоваться в своих естественных временных рамках или пересчитываться в другой масштаб. В зависимости от используемого масштаба при торговле и особенностей торговой системы могут потребоваться тиковые, 5– и 20-минутные, часовые, недельные, двухнедельные, месячные, квартальные и даже годовые данные. Обычно источник данных имеет естественные временные ограничения; для внутридневных данных – это тик. Тик не является постоянной единицей времени: иногда тики бывают очень частыми, иногда спорадическими с длинными интервалами между ними. День – естественная единица шкалы для дневных данных. Для некоторых других данных естественный масштаб может быть двухмесячным, как, например, для сводок обзоров «Взгляды трейдеров», или квартальным, как бывает с отчетами о прибыли компаний.

Хотя от длинных временных периодов нельзя перейти к коротким (нельзя создать отсутствующие данные), обратный переход легко достижим при соответствующей обработке. Например, несложно создать серию 1-минутных штрихов на основе тиков. Конверсия обычно проводится автоматически при использовании аналитических программ или графических пакетов, а также при помощи особых утилит, часто предоставляемых поставщиком данных. Если данные скачиваются из Интернета по протоколу ftp или при помощи стандартного броузера, может потребоваться небольшая дополнительная программа или скрипт для перевода скачиваемых данных в желаемый формат и сохранения в приемлемом для других программ формате.

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

Недостатками краткосрочных временных масштабов являются необходимость получения данных в реальном времени, накопления исторических тиковых данных, применения высокопроизводительной аппаратуры с огромным объемом памяти, использования специальных программ и большое количество времени на занятия собственно торговлей. Необходимость в производительном компьютере с большим объемом памяти возникает по двум причинам: (1) при тестировании системы будут использоваться колоссальные объемы данных; (2) программы, управляющие системой, ведущие сбор данных и строящие графики, должны работать в реальном времени, не пропуская ни одного тика. И база исторических данных, и программы, способные справиться с такими объемами, необходимы для разработки и тестирования систем. Реальная работа требует поступления данных в реальном времени, и хотя сейчас мощные компьютеры вполне доступны по цене, специализированные программы и банки исторических тиковых данных недешевы. Оплата данных в реальном времени – также заметный и постоянный расход.

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

Еще одно преимущество больших временных масштабов – возможность вести торговлю на большом количестве рынков. Поскольку не на многих рынках уровень ликвидности и волатильности достаточен для дневной торговли, а человек не способен успевать делать все сразу, внутридневной трейдер может осуществлять диверсификацию только с помощью нескольких торговых систем на одном рынке. Трейдер, работающий по данным на конец дня, имеет более широкий выбор рынков и больше свободного времени, что дает ему возможность работать на нескольких рынках одновременно. Распределение капитала – замечательный способ снижения риска и повышения прибылей. Кроме того, длительные временные масштабы позволяют получать большие прибыли при следовании за сильными, продолжительными трендами; такие прибыли могут превратить позицию $50 000 в миллион менее чем за год. В конце концов средне– и долгосрочный трейдер может найти больше внешних параметров, имеющих потенциальные прогностические качества.

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

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

<p>Качество данных</p>

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

Ошибки данных принимают много различных форм, и некоторые из них весьма заметны. При торговле в реальном времени порой попадаются тики с откровенно ошибочными, попросту невозможными ценами. В течение секунды индекс S&P 500 может «упасть» с уровня 952,00 до 250,50! Это что – гигантский обвал рынка? Нет: спустя пару секунд в следующем тике индекс опять будет на уровне 952,00 или где-то рядом. Что случилось? Плохой тик – «шумовой выброс» в данных. Такие ошибки, если они не будут обнаружены и исправлены, могут погубить результаты самой лучшей механической торговой модели. Более опасны, хотя чаще встречаются и труднее обнаруживаются, обычные мелкие ошибки в уровнях цен и других показателях, попадающих к трейдеру от поставщиков данных. Лучшие из поставщиков неоднократно проверяют свои данные и сообщают о поправках в случае обнаружения ошибок. Например, почти каждый день Pinnacle Data автоматически сообщает о программных коррекциях ошибок. Многие из этих мелких обычных ошибок не очень опасны для тестирования систем, но заранее этого знать нельзя.

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

Табл. 1–1 изображает результат программы, проверявшей данные по непрерывным фьючерсам на индекс S&P 500 (дневные данные от Pinnacle Data Corporation (800-724-4903)). Программа не обнаружила неадекватных цен или объемов в этом наборе данных; не было примеров максимальной цены, меньшей, чем цена закрытия, минимальной, большей, чем цена открытия, отрицательного объема и других ложных данных. Два дня, впрочем, имели подозрительно высокие значения: один – на 10/19/87 (в отчете 871019), а другой – на 10/13/89. Аномальное значение на 10/19/87 не представляет собой ошибки, а связано с волатильностью, вызванной крупным падением рынка; значение на 10/13/89 также не является ошибкой, а связано с так называемым юбилейным эффектом. Поскольку эти два значения не были ошибочными, коррекции не потребовалось. При этом наличие таких значений в данных должно привлечь внимание к тому факту, что на рынке случаются события, когда изменения цены достигают экстремальных пропорций, и система должна быть способна справляться с такими случаями. Все значения в табл. 1–1 стандартизованы, т. е. вычислены путем деления ценового интервала данного дня на усредненный интервал 20 предыдущих дней. Как часто бывает с рыночными данными, распределение таких стандартизованных показателей более «растянуто», чем можно было бы ожидать при нормальном распределении, но тем не менее статистически события 10/19/87 и 10/13/89 – исключения. Во всех остальных случаях распределение давало упорядоченную картину: стандартизованные данные изменялись от 0 до 7 и лишь в отдельных случаях превышали 10.

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

При исключении 5 дней с наибольшими отклонениями наблюдается подобное растянутое распределение изменений цен закрытия от 0 до 7 стандартизованных единиц. Значения, близкие к отклонению, равному 8, отмечались три раза, а значения 10 – только два раза. Рассмотрение данных торговых дней показывает, что в них имела место аномальная активность рынка, а не ошибка. Неудивительно, что два из пяти помеченных дней – те же самые, что выделялись при рассмотрении величины дневного диапазона цен. В конце концов программа не обнаружила пропущенных дней, данных, приходящихся на нерабочие дни, а также данных с повторными или перепутанными датами. Единственные проблемные моменты являются следствием аномалии рынка, а не ошибок. В общем, набор данных по S&P можно считать чрезвычайно чистым, что и неудивительно, зная о высокой репутации поставщика – Pinnacle Data Corporation.

Как пример низкого качества данных рассмотрим последовательность котировок компании Apple Computer (AAPL), полученных авторами от одного знакомого. Результаты проверки приведены в табл. 1–2.

В отличие от предыдущей выборки, здесь данные за два дня были помечены как имеющие необъяснимые логические ошибки. В одном случае цена открытия равнялась нулю и была ниже минимальной цены. В другом случае обнаружилась аномальная величина дневного диапазона цен (что может быть как ошибкой, так и последствием аномальной торговли). В нескольких случаях отмечалось сильное отклонение цены закрытия, возможно, ввиду нескорректированных дроблений акций. Повторяющихся или перепутанных дат не обнаружено, но немало дней было пропущено. В этом случае пропущенные точки соответствуют праздникам и, следовательно, просто указывают на разный подход к работе с данными; мы обычно по ряду причин заполняем праздничные дни данными предыдущего дня. Притом что последовательность включает котировки только с 1/2/97 по 11/6/98 (котировки S&P 500 – с 1/3/83 по 5/21/98), обнаружение ряда серьезных ошибок с помощью довольно простой процедуры не может не настораживать.

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

<p>Поставщики и источники данных</p>

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

Поставщики, взимающие дополнительную плату, такие как Tick Data и Pinnacle, данные которых широко использовались в работе над книгой, могут снабжать трейдеров достаточно чистыми данными в удобном для использования формате. Они также предлагают удобные службы обновления и, по крайней мере Pinnacle, обеспечивают автоматическую коррекцию ошибок, что облегчает хранение надежной большой базы данных. Среди известных поставщиков данных на конец дня с товарных бирж можно отметить Pinnacle Data Corporation (800-724-4903), Prophet Financial Systems (650-322-4183), Commodities Systems Incorporated (CSI, 800-274-4727) и Technical Tools (800-231-8005). Внутридневные исторические данные, необходимые для тестирования систем, можно приобрести у Tick Data (800-822-8425) и Genesis Financial Data Services (800-621-2628). Трейдерам, ведущим дневную торговлю, следует также обратить внимание на Data Transmission Network (DTN, 800-485-4000), Data Broadcasting Corporation (DBC, 800-367-4670), Bonneville Market Information (BMI, 800-532-3400) и FutureSource-Bridge (800-621-2628); эти поставщики предлагают быстрые котировки в реальном времени, необходимые для успешной дневной торговли. Данные о других источниках котировок можно найти у Мэрдера (Marder, 1999), сравнительный обзор поставщиков данных на конец дня есть у Найта (Knight, 1999).

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

В конце концов необъятное количество баз данных может быть найдено в Интернете с помощью броузера или ftp-клиента. Сейчас практически все доступно в онлайне: например, министерства финансов поддерживают базы данных по экономическим показателям и индикаторам циклов деловой активности. NASA – замечательный источник для всевозможных солнечных и астрономических данных. Национальный центр климатических данных (NCDC) и Национальный центр геофизических данных (NGDC) предлагают данные о погоде и геофизические показатели. Для любителя путешествовать по Сети найдется необъятное изобилие данных в самых разнообразных форматах. Здесь, впрочем, лежит другая проблема – для поиска нужен некоторый уровень умения и, возможно, навыки в программировании и написании скриптов, а также много времени на поиск, переформатирование и очистку данных. Поскольку «время – деньги», лучше всего положиться на поставщика данных с хорошей репутацией для приобретения основных котировок и использовать Интернет и другие источники для получения более экзотических и труднодоступных данных.

Дополнительные источники данных также включают базы, доступные в библиотеках и на компакт-дисках. ProQuest и другие профессиональные базы с возможностью получения полного текстового содержания часто бывают доступны в общественных библиотеках, так что данные можно скопировать на принесенную с собой дискету. Не забывайте о периодических изданиях, таких как Investor’s Business Daily, Barton’s и The Wall Street Journal; они могут быть замечательными источниками некоторых видов информации и во многих библиотеках доступны в виде микрофильмов.

Наиболее удобно хранить данные в ASCII-текстовом формате. Этот формат легко конвертируется и читается разнообразными приложениями – от текстовых редакторов до программ построения графиков.

Глава 2. Симуляторы

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

<p>Виды симуляторов</p>

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

<p>Программирование симулятора</p>

Вне зависимости от устройства (интегрированный или основанный на компонентах симулятор) в него должна быть введена логика системы, используемой пользователем. Язык программирования может быть или многоцелевым языком программирования, как С++ или FORTRAN, или собственным языком скриптов программы. Без содействия формального языка невозможно выразить торговые правила системы с достаточной для симуляции точностью. Необходимость в программировании того или иного вида не следует рассматривать как неизбежное зло – пользователь может приобрести много опыта, поскольку программирование заставляет выражать свои идеи упорядоченно и целенаправленно.

В качестве примера программирования логики торговой системы рассмотрим TradeStation, популярный интегрированный пакет от Omega Research, содержащий интерпретатор для собственного языка программирования, называемого Easy Language, обеспечивающий проведение тестов на исторических данных. Easy Language – собственный язык фирмы, основанный на Pascal (многоцелевом языке программирования). Как выглядит простая торговая система, запрограммированная на Easy Language? В качестве примера предлагаем код для системы простого пересечения скользящей средней:

Эта система открывает длинную позицию (один контракт) при открытии на следующий день, когда цена закрытия пересекает скользящую среднюю вверх, и короткую позицию (один контракт), когда цена закрытия пересекает скользящую среднюю вниз. Каждому приказу присваивается имя или идентификатор: А – на покупку, В – на продажу. Длина скользящей средней (Len) может задаваться пользователем или оптимизироваться программой.

Ниже та же система, запрограммированная на языке С++ с помощью набора инструментов C-Trader от Scientific Consultant Services, в состав которого входит торговый симулятор C++:

За исключением синтаксиса и обозначений, различия в применении С++ и Easy Language невелики. Наиболее важны сноски на текущий бар (cb) и на данный симулируемый торговый счет или ссылку на класс симулятора (ts) в версии на С++. Так, на C++ можно использовать любое количество симулируемых счетов; это важно при работе с портфелями и метасистемами (системами, управляющими счетами другой системы) и при разработке моделей, включающих скрытую адаптацию с движением вперед.

<p>Выходные данные симулятора</p>

Все хорошие торговые симуляторы создают выходные данные, содержащие разнообразную информацию о поведении моделируемого счета. Можно ожидать получения данных по чистой прибыли, количеству прибыльных и убыточных сделок, максимальным падениям капитала и прочим характеристикам системы даже при использовании самых простых симуляторов. Более продвинутые программы предлагают отчеты по максимальному росту капитала, среднему благоприятному и неблагоприятному движению рынка, статистическим оценкам и т. д. и т. п., не говоря уже о детальном анализе индивидуальных сделок. Высокоуровневые симуляторы могут также включать какие-либо показатели соотношения прибыли и риска, например годовое соотношение риска/прибыли (ARRR) или отношение Шарпа – важный показатель, широко используемый для сравнения эффективности различных портфелей, систем или фондов (Sharpe, 1994).

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

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


Отчеты об эффективности системы

В качестве примера итогового отчета об эффективности системы, мы приготовили два отчета, полученные при тестировании уже упоминавшейся системы пересечения скользящей средней. Табл. 2–1 представляет собой отчет о системе, написанной и проработанной на TradeStation, а табл. 2–2 – отчет о системе, созданной с помощью С-Trader. В обоих случаях параметр длины скользящей средней был установлен равным 4.

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

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

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

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

Разница в содержании отчетов может быть и более значительной. Некоторые программы просто разбивают данные на результаты коротких позиций, длинных позиций и общие. Другие ведут анализ отдельно по сделкам в пределах выборки данных и вне ее. Дополнительное разделение проясняет картину; становится видно, как система, оптимизированная на одной выборке данных, будет себя вести за ее пределами. Проверка на данных, взятых из другого периода, обязательна для оптимизированных на некотором периоде систем. В некоторых отчетах присутствуют и другие важные показатели, такие как общее количество баров, максимальный подъем (показатель, противоположный максимальному падению капитала), максимальные благоприятное и неблагоприятное движения, максимальное и минимальное значения капитала на счете, прибыль в долларах за год, изменчивость торговли (в виде стандартного отклонения) и годовое соотношение риска/прибыли (вариант отношения Шарпа). Расчет статистических показателей, например т-критерия и его ассоциируемой вероятности, для отдельных тестов либо для множественных тестов и оптимизаций также является желательной чертой симулятора. Статистические функции, такие как т-тест и вероятности, важны потому, что помогают определить, действительно ли система отражает деятельность реального рынка или успех обусловлен случаем либо излишней подгонкой параметров системы под прошлые данные. Могут применяться многие дополнительные и, возможно, полезные методики анализа на основе информации, содержащейся в отчетах. Среди этих методов (Stendahl, 1999) – общие позитивные аутсайдеры, общие негативные аутсайдеры, селективная общая прибыль (за исключением выбросов), отношение убытков (максимальный убыток, деленный на общую прибыль), соотношение подъем/падение капитала, максимальный период простоя системы и прибыль стратегии «купи и держи» для сравнения с результатами торговой системы. Кроме того, в некоторых отчетах создается график состояния счета в зависимости от времени.

Если считать, что история повторяется, то хорошее понимание прошлого должно помочь аналитику при построении прогнозов на будущее. Хороший отчет об эффективности дает широкий обзор исторического поведения торговой стратегии. Показатели прибыли и риска показывают, насколько хорошо система работала на данных рассматриваемого исторического периода. Отношение Шарпа, или годовое соотношение прибыли/риска, измеряет прибыль с учетом риска. Т-тесты и подобные статистические методы могут отличить реально эффективную на рынке стратегию от случайности или неправильной оптимизации. Результаты, достигнутые за счет действительно эффективных правил, будут повторяться снова и снова; случайные результаты вряд ли повторятся в будущем. В общем, хороший отчет помогает обнаружить явления, которые могут повторяться. Поиск устойчивых явлений, приносящих прибыль, – основа любого длительного успеха в трейдинге.

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


Отчеты для каждой сделки

Примеры отчетов для каждой сделки были созданы с использованием симуляторов TradeStation (табл. 2–3) и C-Trader toolkit (табл. 2–4). Оба отчета описывают упоминавшуюся ранее систему пересечения скользящей средней. Так как рассматривался период с сотнями сделок и полный отчет слишком длинный, из таблиц удалены большие объемы текста, помеченные многоточиями. Поскольку данные отчеты представлены только как иллюстрации, такие пропуски вполне допустимы.

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

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

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

<p>Эффективность симулятора</p>

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


Скорость

Наиболее важный фактор, влияющий на скорость работы системы, – природа используемого языка: скриптовый или программный, т. е. определение, является ли программа скриптом или используется в интерпретаторе. Современные компиляторы языков общего назначения, таких как С++, FORTRAN и Pascal/Delphi, переводят написанную пользователем программу в высокоэффективный машинный код, пригодный для прямого исполнения процессором; это делает пакеты с использованием таких языков и компиляторов весьма быстрыми. С другой стороны, собственные интерпретируемые языки, такие как Visual Basic for Applications и Easy Language, должны переводиться и подаваться в процессор построчно при исполнении сложного, насыщенного циклами исходного кода. Каков же возможный выигрыш в скорости для компилируемого языка по сравнению с интерпретируемым? Мы слышали о системах, которые после перевода с собственного языка на С++ стали работать в 50 раз быстрее!


Емкость

Если скорость в основном зависит от работы с языком (интерпретируемым или компилируемым), то емкость главным образом от используемого 16– или 32-битного программного обеспечения. Старые 16-битные программы часто зависят от предела в 64 кбайт, т. е. практически для тестирования системы может быть загружено не более 15 000 баров данных (около 4 дней тиковых или 7 недель 5-минутных данных S&P 500). Кроме того, если у системы код большого объема, будьте готовы получить сообщение, что программа с ней не может справиться. Современные продукты, написанные на FORTRAN или С++, работают с соответствующими компиляторами, что позволяет, например, загрузить для тестирования всю историю тиков S&P 500 c появления индекса в 1983 г., если, конечно, у компьютера достаточно памяти. Кроме того, практически нет ограничений на количество сделок, принимаемых системой, или на сложность и размер самой системы. Все современные компиляторы для FORTRAN, С++, Pascal/Delphi – полностью 32-битные программы, работающие под 32-битными операционными системами, такими как Windows 95, Windows NT или LINUX/UNIX. Любой симулятор, работающий на основе таких компиляторов, способен работать с огромными объемами данных без труда. Поскольку большинство программных пакетов постоянно совершенствуется, проблема емкости становится все менее и менее принципиальной.


Мощность

Различия в мощности симуляторов главным образом зависят от языка программирования. Для начала рассмотрим язык, но не в аспекте скорости компилируемых и интерпретируемых языков, а в аспекте его возможностей. Можно ли изящно и обстоятельно запрограммировать самую сложную торговую идею? Как правило, примитивные языки не дают всех возможностей, необходимых для кодирования наиболее сложных торговых стратегий. К сожалению, наиболее мощные языки сложнее всего изучать. Но если человеку удалось овладеть таким языком, как С++, возможным становится практически все. Ваш текстовый процессор, программа работы с таблицами, броузер и сама операционная система, скорее всего, были исходно написаны на С++ или его предшественнике – Си. Такие языки, как С++ и Object Pascal (основа Borland Delphi), расширяемы и могут легко быть приведены в соответствие с требованиями разработки торговых систем с помощью использования библиотек и дополнительных компонентов. Языки Visual Basic и Easy Language, хотя и не обладают мощностью многоцелевых объектно-ориентированных языков вроде С++ и Object Pascal, более легки в изучении и имеют большинство необходимых возможностей. Гораздо слабее и не вполне достаточны для разработчика продвинутых систем макроязыки, встроенные в ряд популярных программ построения графиков, например MetaStock. Как правило, чем мощнее используемый язык, тем мощнее симулятор.

Вопросы оформления также влияют на мощность симулятора, особенно важна модульность и расширяемость. Симуляторы, использующие С++ или Delphi (Object Pascal) как основной язык, чрезвычайно расширяемы и модульны, поскольку таковы сами языки, спроектированные «снизу вверх». Библиотеки классов позволяют определять новые типы данных и операторов. Компоненты могут обеспечивать функции в готовых блоках, например управление базами данных или построение графиков. Даже «старинные» библиотеки, такие как Numerical Algorithms Group Library, International Mathematics and Statistics Library и Numerical Recipes Library, могут обеспечить самые разнообразные потребности. Модули, называемые User Functions могут быть написаны на Easy Language, а функции, написанные на других языках (включая C++), могут быть вызваны, если они записаны в виде DLL (динамической библиотеки ссылок). Макроязыки, с другой стороны, не столь гибки, что сильно лимитирует их эффективность для разработки продвинутых систем. С нашей точки зрения, возможность использования модулей, написанных на другом языке, абсолютно необходима: у разных языков разные «акценты», и даже при использовании мощного языка вроде С++ имеет порой смысл обратиться к модулям, созданным на другом языке, например таком, как Prolog (язык, разработанный для написания экспертных систем).

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

<p>Надежность симуляторов</p>

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

<p>Выбор правильного симулятора</p>

Если вы серьезно хотите заниматься разработкой продвинутых торговых систем, торговать сильно диверсифицированными портфелями, проводить тестирование индивидуальных контрактов или опционов, вам нужно собраться с силами для изучения программирования – вам нужен симулятор, созданный с помощью языков программирования общего назначения, таких как С++ или Object Pascal. Такие симуляторы имеют открытую архитектуру, позволяющую использовать множество дополнений и библиотек: библиотеки по техническому анализу, например от FM Labs (609-261-7357) и Scientific Consultant Services (516-696-3333); библиотеки общих числовых алгоритмов, например от Numerical Recipes (800-872-7423), Numerical Algorithms Group (NAG) (44-1865-511-245) и International Mathematics and Statistics Library (IMSL), в которых хорошо освещена статистика, линейная алгебра, спектральный анализ, дифференциальные уравнения и другие математические приложения. Продвинутые симуляторы с использованием общих языков программирования также доступны целому миру компонентов и графических средств управления, покрывающих все аспекты от сложного построения графиков и представления данных до продвинутого управления базами данных, и при этом совместимы с C++ Builder и Delphi, а также с Visual Basic и Visual C++.

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

<p>Симуляторы, использованные в этой книге</p>

Мы предпочитаем использовать симуляторы, основанные на практике современного объектно-ориентированного программирования. Одна из причин такого выбора состоит в том, что объектное ориентирование упрощает создание нужного количества моделируемых счетов, каким бы оно ни было. Это в особенности полезно при моделировании торговой системы, управляющей целым портфелем товаров или акций, как это сделано в большинстве тестов в данной книге. Объектно-ориентированные симуляторы также хороши для построения адаптивных самооптимизирующихся систем, в которых иногда требуется использовать внутреннее моделирование. Кроме того, такие программы позволяют достаточно просто создавать метасистемы (системы, принимающие решения на основе графиков изменения капитала других систем). Например, метасистемами можно считать модели распределения активов, поскольку они динамически меняют распределение средств между отдельными торговыми системами или счетами. Хороший объектно-ориентированный симулятор может генерировать графики изменения капитала портфелей и другую информацию для создания и тестирования на исторических данных систем распределения активов, работающих на основе множественных торговых систем. Из этих соображений, а также в силу привычки большинство тестов в этой книге проведены с использованием C-Trader tookit. Для того чтобы почерпнуть полезные знания из этой книги, не требуются познания в С++ и программировании. Логика любой системы или элемента системы будет подробно рассматриваться в тексте.

Глава 3. Оптимизаторы и оптимизация

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

Оптимизатор как таковой – это программа или алгоритм, пытающийся найти лучшее из возможных решений задачи; оптимизация – процесс поиска, подбора этого решения. Оптимизатор может быть отдельной программой, возможно, выполненной в виде класса С++, объекта Delphi или функции ActiveX. Мощные продвинутые оптимизаторы часто создаются в виде компонентов, встраиваемых в программы, которые будет разрабатывать пользователь. Менее сложные оптимизаторы, например встречаемые в программах построения графиков высокого уровня, – обычно простые алгоритмы, занимающие несколько строчек программного кода. Поскольку любое решение, приводящее к оптимизации, является оптимизатором, «оптимизация» не обязательно связывается с компьютерами – оптимизатором может быть и человек, занятый решением задачи! Надо сказать, что человеческий мозг – одна из наилучших эвристических систем на земле!

<p>Что делают оптимизаторы</p>

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

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

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

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

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

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

<p>Как используются оптимизаторы</p>

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

<p>Виды оптимизаторов</p>

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


Скрытые оптимизаторы

Бывает, что нельзя кликнуть мышкой на кнопку с надписью «Оптимизировать». Нет команды, которую можно было бы отдать программе – да нет ни самой программы, ни компьютера вообще. Значит ли это, что оптимизации не происходит? Нет. Даже при отсутствии видимого оптимизатора и признаков оптимизации процесс идет сам по себе – это называется скрытой оптимизацией. Все происходит таким образом: трейдер испытывает набор правил, основанный на некоторых идеях, касающихся рынка. Результаты системы неудовлетворительны, и трейдер перерабатывает идеи, меняет правила и снова тестирует систему, получая лучший результат. Повторив свои действия несколько раз, он получает систему, которой можно доверить реальную торговлю. Можно ли считать эту систему оптимизированной? Поскольку никакие правила или параметры не подвергались модификации с помощью компьютерных программ, кажется, что трейдер с успехом разработал неоптимизированную систему. Но при этом испытывалось более одного варианта параметров, что привело к выбору оптимального решения – следовательно, система все-таки была оптимизирована! Любая форма решения задачи, где рассматриваются множественные варианты, из которых выбирается один, де-факто может считаться оптимизацией. Мозг трейдера, использующий мысленные алгоритмы решения задач, например эвристические алгоритмы проб и ошибок, является мощнейшим оптимизатором. Это означает, что оптимизация присутствует всегда и всегда работает; другого выхода просто не существует!


Оптимизаторы с лобовым подходом

Оптимизатор с лобовым подходом определяет оптимальное решение путем систематического перебора всех потенциальных вариантов, т. е. сочетаний правил, параметров или того и другого вместе. Поскольку требуется проверить все варианты, оптимизация может быть чрезвычайно медленной, и тем медленнее она идет, чем больше комбинаций подлежит рассмотрению. Таким образом, оптимизация с лобовым подходом подвержена действию правил «комбинаторного взрыва». Насколько же медленна оптимизация с лобовым подходом? Рассмотрим случай, когда у нас есть четыре параметра и каждый из них может принимать одно из 50 значений. Лобовая оптимизация потребует перебрать в тестах 504 (около 6 миллионов) сочетаний параметров для поиска одного идеального; если (как, например, характерно для TradeStation) каждый тест займет 1,62 с, то весь процесс займет около 4 месяцев. Этот подход не очень практичен, особенно при большом количестве параметров и их значений, а также в том случае, если, кроме оптимизации, у вас есть и другие интересы в этой жизни. Тем не менее оптимизация с лобовым подходом полезна и эффективна; при правильном использовании она всегда находит самый лучший вариант, так что лобовой подход предпочтителен для задач, где количество комбинаций можно перебрать за несколько минут, а не за месяцы и годы.

Для оптимизации с лобовым подходом не требуется длинных программ, обычно используются простые циклы. Параметры изменяются от начального до конечного значения с определенным шагом при помощи оператора For loop (C, C++, Бейсик, Pascal/Delphi) или Do loop (FORTRAN). Оптимизатор с лобовым подходом для двух параметров, написанный на современном диалекте Бейсика, может выглядеть примерно так:

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

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

Система была оптимизирована изменением периода первой скользящей средней (LenA) от 2 до 10 с шагом в 2. Период второй скользящей средней (LenB) оптимизировался от 2 до 50 с тем же шагом. Шаг был принят более 1, чтобы испытывалось менее 200 сочетаний параметров (TradeStation может хранить данные не более чем о 200 оптимизационных тестах). Поскольку были исследованы не все возможные сочетания параметров, оптимизация не была проведена идеально; лучшее значение могло оказаться пропущенным при поиске. Таким образом, оптимизация проходила в 125 тестов, что заняло 3 мин 24 с времени для обработки данных за 5 лет исторических данных на конец дня на компьютере с процессором Intel 486 частотой 66 МГц. Полученные результаты были загружены в таблицу Excel и сортировались по общей прибыли. В табл. 3–1 приведены различные показатели эффективности для 25 лучших вариантов.

В таблице: Lena означает период короткой скользящей средней, LenB – период длинной скользящей средней, ЧИСТ. – чистую прибыль, Д.ПРИБ. – чистую прибыль для длинных позиций, К.ПРИБ. – чистую прибыль для коротких позиций, Ф.ПРИБ. – фактор прибыли, ДОХ – общую (не годовую) доходность счета, МаксПК – максимальное падение капитала, СДЕЛ– общее количество совершенных сделок, ПРИБ% – процент прибыльных сделок.

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


Оптимизация под управлением пользователя

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

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

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

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


Генетические оптимизаторы

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

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

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

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

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

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

На что похож генетический оптимизатор в работе? Мы перевели на С++ код для системы с пересечением скользящих средних, упоминавшейся ранее, чтобы при помощи C-Trader toolkit решать задачу оптимизации двух параметров – LenA и LenB. LenA, период первой скользящей средней, исследовался при значениях от 2 до 50, так же как и LenB – период второй скользящей средней. Оптимизация велась по показателю общей прибыли, чтобы можно было напрямую сравнивать результаты с полученными ранее методом оптимизации с лобовым подходом. Ниже приведен код для системы пересечения скользящих средних, написанный на С++:

Для поиска оптимальных параметров путем оптимизации с лобовым подходом потребовалось бы провести 2041 тест, т. е. около 56 минут работы TradeStation согласно опыту прошлого тестирования небольшой выборки. Генетический оптимизатор справился с заданием за минуту. Кроме того, генетический оптимизатор был остановлен после проведения всего лишь 133 тестов, что должно значительно ухудшить его результат.

Данные генетического оптимизатора приведены в табл. 3–2, где Р1 – период первой скользящей средней, Р2 – период второй скользящей средней, ЧИСТ. – чистая прибыль, Д.ПРИБ. – чистая прибыль для длинных позиций, К.ПРИБ. – чистая прибыль для коротких позиций, Ф.ПРИБ – фактор прибыли, ДОХ% – доходность в процентах годовых, МаксПК – максимальное падение капитала, СДЕЛ – количество совершенных системой сделок, ПРИБ% – процент выгодных сделок, Сред. рез. – прибыль или убыток от средней сделки и ПРИГ. – пригодность решения (в данном случае – просто общая прибыль). Как и в случае с данными лобовой оптимизации в табл. 3–1, генетические данные были рассортированы по эффективности (общей прибыли) и показаны только 25 лучших.

Сравнение результатов генетической оптимизации и оптимизации с лобовым подходом (табл. 3–1 и 3–2 соответственно) показывает, что генетический оптимизатор обнаружил решение, для которого общая прибыль была выше ($172,725 против $145,125). Это неудивительно, поскольку исследовалось большое поле вариантов и скорость оптимизации не была ограничена последовательными шагами. Удивительно скорее то, что решение было обнаружено так быстро, несмотря на прерванный преждевременно эволюционный процесс. Подобные результаты демонстрируют невероятную мощь генетической оптимизации.


Оптимизация моделированием отжига

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

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

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


Аналитические оптимизаторы

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

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

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

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

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

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

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


Линейное программирование

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

<p>Как потерпеть неудачу при оптимизации</p>

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

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

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


Небольшие выборки

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

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

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

В этом уравнении N означает количество точек данных, P – количество параметров модели, R – коэффициент множественной корреляции, определенный на выборке данных процедурой оптимизации, RC – скорректированный коэффициент. Обратная формула, показывающая увеличение корреляции, вызванное оптимизацией (R), в зависимости от подлинной корреляции () выглядит следующим образом:

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


Большие наборы параметров

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

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


Отсутствие подтверждения

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

<p>Как достичь успеха при оптимизации</p>

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


Большие представительные выборки

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

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

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

Впрочем, иногда приходится делать выбор между размером выборки и степенью ее репрезентативности. Увеличение размера выборки приводит к использованию старых ценовых данных, значимость которых для представления современного состояния рынка весьма сомнительна. В некоторых случаях существует четкая грань, за которой данные теряют значимость. Например, фьючерсы на индекс S&P 500 начали обращение на рынке в 1983 г., что оказало структурное влияние на рынок в целом. Это наблюдение становится менее важным при работе с внутридневной ценовой историей, где за относительно короткий период времени можно собрать данные о десятках и сотнях тысяч баров, не углубляясь в прошлое слишком далеко.

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


Минимум правил и параметров

Для достижения успеха следует ограничивать число оптимизируемых правил и параметров, особенно при работе на небольших выборках данных. Чем меньше правил и параметров, тем больше вероятность устойчивой эффективности решений как на материале выборки, так и за ее пределами. Хотя при работе с несколькими тысячами сделок (1 год S&P 500 содержит примерно 100 000 одноминутных баров) можно оптимизировать несколько десятков параметров, при использовании данных на конец дня за несколько лет даже два-три параметра могут оказаться излишними. Если данная модель требует оптимизации многих параметров, то следует приложить усилия к сбору колоссального объема данных. Легендарный Ганн, как говорят, собрал данные по цене на пшеницу за тысячу лет. При невозможности использовать большие объемы данных следует проводить оптимизацию системы на портфеле нескольких финансовых инструментов с использованием одних и тех же правил и параметров на всех рынках – эта методика широко использована в данной книге.


Подтверждение результатов

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

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

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

<p>Альтернативы традиционной оптимизации</p>

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

Принцип оптимизации, или тестирования с прогонкой вперед, состоит в эмуляции шагов, действительно производимых системой, требующей периодической оптимизации. Метод работает следующим образом. Оптимизируйте систему на точках данных от 1 до М. Затем проведите виртуальную торговлю в точках данных от М + 1 до М + К. Повторно оптимизируйте систему на точках от К + 1 до К + М. Затем промоделируйте торговлю в точках от (К + М) + 1 до (К + М) + К. Пройдите таким образом через всю выборку данных. Как следует из примера, сначала оптимизируется система, потом моделируется торговля. Через некоторое время система снова оптимизируется, и торговля возобновляется. Эта последовательность гарантирует, что торговля всегда происходит на данных, более поздних, чем данные, использовавшиеся для оптимизации. Практически все сделки происходят на данных вне пределов выборки. При тестировании с прогонкой вперед М – окно оптимизации (или исторического обзора), а К – интервал повторной оптимизации.

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

Трейдер, планирующий использовать самоадаптивные системы, должен иметь мощную, основанную на компонентах платформу с использованием развитого языка программирования (С++, Object Pascal или Visual Basic) с возможностью доступа к библиотекам и компонентам третьих производителей. Эти компоненты рассчитаны на встраивание в создаваемые пользователем программы, включая специальные программы адаптивных систем. Чем больше компонентов доступно, тем меньше работы: как минимум трейдер, пытающийся использовать самоадаптивные системы, должен иметь доступ к генетическому оптимизатору и симулятору, которые могут быть легко встроены в модель. Адаптивные системы будут рассмотрены в следующих главах, показывая, как этот метод работает на практике.

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

<p>Инструменты и информация для оптимизации</p>

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

Оптимизаторы с лобовым подходом обычно встроены в программные пакеты, нацеленные на другие задачи, и редко доступны по отдельности. В мире программ для трейдинга такие оптимизаторы встроены в TradeStation и SuperCharts фирмы Omega Research (800-292-3453), Excalibur фирмы Futures Truth (828-697-0273) и MetaStock фирмы Equis International (800-882-3040). Если вы пишете собственные программы, при помощи несложного программирования написать алгоритм лобовой оптимизации можно безо всяких дополнительных библиотек. Программы и алгоритмы для оптимизации с лобовым подходом также полезны при проведении оптимизации под управлением пользователя.

Хотя иногда генетические оптимизаторы бывают встроены в специализированные программы, они чаще встречаются в виде компонентов или библиотек классов, дополнений к различным пакетам или самостоятельных исследовательских инструментов. Примером библиотеки классов с учетом компонентного использования может служить OptEvolve, генетический оптимизатор на С++ фирмы Scientific Consultant Services (516-696-3333): этот многоцелевой генетический оптимизатор использует несколько алгоритмов, включая дифференциальную эволюцию, и продается в виде портативного кода на С++, пригодного для UNIX/LINUX, DOS и Windows. TS-Evolve фирмы Ruggiero Associates (800-211-9785) дает пользователям TradeStation возможность провести полноценную генетическую оптимизацию. Evolver фирмы Palisade Corporation (800-432-7475) представляет собой многоцелевой генетический оптимизатор для таблиц MS Excel; с ним поставляется DLL-библиотека, которая может быть использована с любой программой на любом языке, способной вызывать функции DLL. Так, программа GENESIS, написанная Джоном Грефенштеттом (John Grefenstette) из Naval Research Laboratory, представляет собой самостоятельный инструмент для исследователей и доступна в виде исходных кодов. Хотя генетические оптимизаторы могут включаться в состав пакетов моделирования для химиков и в другие специализированные продукты, они до сих пор не включены как стандартный компонент в программные пакеты для трейдеров.

О генетических оптимизаторах существует достаточно много доступной информации. Генетические алгоритмы обсуждаются в ряде книг, журналов и изданий, на сайтах новостей в Интернете. Хороший анализ проблемы дан в книге Девиса Handbook of Genetic Algorithms (Davis, 1991). Прайсом и Стормом (Price и Storm, 1997) описан алгоритм для метода «дифференциальной эволюции», который оказался чрезвычайно мощным инструментом для задач оптимизации с рациональными параметрами. Генетические алгоритмы сейчас являются темой многих научных изданий и конференций. Оживленные дискуссии ведутся на страницах ряда новостных сайтов в Интернете, из которых наиболее примечателен comp.ai.genetic.

Основы метода моделирования отжига приведены в книге Пресса и др. Numerical Recipes for C (Press et al., 1992) вместе с функциями для написания оптимизаторов с этим алгоритмом для комбинаторных задач и задач с рациональными параметрами. Книга Мастерса Neural, Novel & Hybrid Algorithms for Time Series Prediction (Masters, 1995) также содержит рассмотрение задач моделирования отжига, причем коды представлены на CD-приложении к книге. Как и генетическая оптимизация, моделирование отжига также является темой многих научных исследований, докладов на конференциях, статей и дискуссий в Интернете.

Алгоритмы весьма сложных методов – сопряженных градиентов и переменной метрики – можно найти в иссследованиях Пресса и др. Numerical Recipes for C (Press et al., 1992) и Numerical Recipes (Press et al., 1986). Большой ассортимент процедур аналитической оптимизации содержится в уже упомянутом труде Мастерса Neural, Novel & Hybrid Algorithms for Time Series Prediction (Masters, 1995) и на прилагаемом к нему диске. Дополнительные процедуры для аналитической оптимизации доступны в составе библиотек IMSL и NAG (Visual Numerics и Numerical Algorithms Corp. соответственно) и в составе оптимизационного набора для MATLAB (многоцелевого математического пакета от Math Works, 508-647-7000, очень популярного в среде занимающихся финансовым планированием). Кроме того, в MS Excel встроен Solver – аналитический оптимизатор, основанный на методе Ньютона и сопряженных градиентах.

Как источник общей информации об оптимизации при разработке торговых систем можно порекомендовать книгу Роберта Пардо Design, Testing and Optimization of Trading Systems (Robert Pardo, 1992). Кроме прочего, в книге приведены примеры прибыльной оптимизации, избежания чрезмерной подгонки системы под ценовые данные и проведения тестов с прогонкой вперед.

<p>Какой оптимизатор подходит вам?</p>

Как минимум любому трейдеру следует иметь оптимизатор с возможностью проведения лобовой оптимизации и оптимизации под управлением пользователя. Если вы используете для разработки систем TradeStation или Excalibur, эти оптимизации вам уже доступны. С другой стороны, если вы используете Excel, Visual Basic, C++ или Delphi, вам придется разрабатывать собственный оптимизатор. Как показано выше, это достаточно просто, и для многих проблем лобовая оптимизация или оптимизация под управлением пользователя – лучший подход.

Если для разработки вашей системы требуются более продвинутые методы, хороший выбор – генетический оптимизатор. При помощи лобового подхода и генетического оптимизатора можно решить практически любую задачу. В нашей работе мы почти не используем других инструментов! Пользователям TradeStation придется по вкусу TS-Evolve, предлагаемый Ruggiero Associates. Evolver фирмы Palisade Corporation хорош для пользователей Excel и Visual Basic. При разработке систем на С++ или Delphi выбирайте C++ Genetic Optimizer, предлагаемый Scientific Сonsultant Services, Inc. Генетический оптимизатор – наиболее универсальный инструмент среди оптимизаторов: даже задачи, более эффективно решаемые другими методами, могут быть медленно, но верно решены хорошим генетическим алгоритмом.

А если вы все же хотите испытать аналитическую оптимизацию или симуляцию отжига, мы рекомендуем воспользоваться книгой Пресса и др. Numerical Recipes in C (Press et al., 1992) и вышеупомянутым трудом Мастерса (Masters, 1995) как источниками и информации, и кодов. Пользователи Excel могут попробовать также встроенный Solver.

Глава 4. Статистика

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

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

Проверка по критерию Стьюдента необходима в тех случаях, когда надо определить вероятность того, что среднее или сумма некоторого ряда независимых значений (полученных из выборки) больше или меньше некоторого числа или находится в некоторых пределах от него. Например, проверка по критерию Стьюдента может вскрыть вероятность того, что общая прибыль ряда сделок (каждая с индивидуальными показателями прибыли/убытка) может превысить некоторый порог в результате простой случайности. Эти критерии также полезны для выбора периодичности данных, например при вычислении дневного или месячного дохода за период в несколько лет. Кроме того, проверка по критерию Стьюдента помогает установить границы производительности системы в будущем (если предположить, что на рынке не ожидается структурных изменений), что позволит заявить, например, следующее: «вероятность того, что в будущем средняя прибыль составит от х до y, более 95 %».

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

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

<p>Зачем нужен статистический анализ при оценке торговых систем?</p>

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

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

<p>Выборка</p>

Для статистики, а следовательно, и для нашего понимания, фундаментальным является понятие выборки – извлечения образца данных из некоей обширной, абстрактно определимой популяции. Основная идея статистического анализа состоит в том, чтобы использовать выборку для получения заключения о популяции данных. При работе с торговыми моделями под популяцией обычно понимается вся совокупность данных (прошлых, настоящих и будущих) для определенного рыночного инструмента (например, все 5-минутные штрихи на все фьючерсы S&P 500), все сделки (прошлые, настоящие и будущие), совершенные данной системой или по данному инструменту, а также все прибыли – годовые, месячные и даже дневные. Например, все квартальные прибыли IBM – пример популяции данных. Выборка может представлять собой специфические исторические данные, используемые при разработке или тестировании системы, данные о проведенных сделках или о месячной прибыли, принесенной этими сделками.

При создании торговой системы разработчик обычно определяет выборку данных из моделируемой популяции. Например, чтобы разработать систему для торговли S&P 500 на основе гипотезы: «Если вчерашняя цена закрытия выше, чем цена закрытия три дня назад, то завтра рынок будет подниматься», разработчик берет выборку цен на конец дня по S&P 500, простирающуюся назад, например, на 5 лет. Остается надеяться, что выборка репрезентативна, т. е. отражает реальное типичное поведение рынка, и в будущем (или на другом, неизвестном образце данных) система будет работать не хуже, чем на использованном при разработке образце. Чтобы подтвердить или опровергнуть результаты оптимизации, разработчики системы проводят тестирование на одном или нескольких периодах вне выборки, т. е. на образцах данных, не использовавшихся для разработки или оптимизации системы. Например, в нашем случае разработчик использует данные с 1991 по 1995 г. для разработки и настройки системы и резервирует данные за 1996 г. для тестирования вне пределов выборки. Очень рекомендуется заранее зарезервировать один или несколько периодов для подобного исследования.

Одна из проблем с выборкой образцов из популяций финансовых данных заключается в сложной и переменчивой природе объекта: завтрашний рынок может быть не похож на сегодняшний. Иногда эти изменения заметны, и их причины могут быть легко определены. Например, поведение индекса S&P резко изменилось в 1983 г. в результате введения фьючерсов и опционов на этот индекс. В таких случаях можно расценить изменение как событие, создавшее две отдельные популяции: S&P до и после 1983 г. Выборка, взятая из более раннего периода, не будет репрезентативна для более позднего, поскольку она взята из другой популяции! Конечно, это экстремальный случай. Гораздо чаще структурные изменения рынка возникают ввиду слабых влияний, которые порой невозможно определить, особенно заранее. В некоторых случаях рынок может остаться принципиально тем же, но фазы процессов, которые на нем проходят, могут быть различными; неосмотрительно взятая выборка может принадлежать к другой фазе и быть репрезентативна только для нее, но не для рынка в целом. Как же можно определить, действительно ли выборка, использованная для тестирования, относится к тому же периоду, что и данные, на которых будет идти торговля? Если не прыгать в машину времени и не тестировать будущее, то не существует достоверного способа определить, не случится ли завтра на рынке ломающая системы метаморфоза. Множественные тесты вне пределов выборки могут дать некоторую гарантию устойчивости системы, поскольку они подтвердят, что система, по крайней мере в нескольких периодах, работала более или менее стабильно. При наличии репрезентативной выборки можно сделать статистически достоверные выводы о той популяции, из которой выбраны образцы данных. Статистика не может определить будущие фундаментальные изменения рынка.

<p>Оптимизация и подгонка под исторические данные</p>

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

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

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

Пример с линейной регрессией показывает, что вредная подгонка затрудняется с ростом объема данных. Cравните две торговые системы: одна провела 2 сделки с прибылью $100 в каждой и стандартным отклонением $100; другая – 1000 сделок с такими же средним и стандартным отклонениями. При статистической оценке система, проведшая 1000 сделок, будет гораздо «статистически значимее», чем система, проведшая 2 сделки.

В моделях множественной линейной регрессии при увеличении количества параметров регрессии (бета-весов) по отношению к размеру выборки увеличивается степень вредной подгонки и уменьшается достоверность результатов модели. Другими словами, чем выше степень подгонки под исторические данные, тем сложнее добиться статистической значимости. Исключением является случай, когда повышение результативности модели, вызванное подгонкой, компенсирует потерю значимости при добавлении параметров. Оценка степени ожидаемого снижения корреляции при использовании данных вне выборки может производиться напрямую, исходя из объема данных и количества параметров: корреляция снижается с увеличением числа параметров и увеличивается с ростом объема данных. В общем, существуют достоверные математические доказательства того, что вероятность вредной подгонки повышается, если количество оптимизируемых параметров велико по отношению к объему используемой выборки данных. Фактически, когда n (размер выборки) стремится к бесконечности, вероятность того, что подгонка параметров будет непредставительной для данной популяции, стремится к нулю. Чем больше параметров оптимизируется, тем большая требуется выборка данных. На языке статистики это звучит так: оптимизируемые параметры используют доступные степени свободы.

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

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

Как и в случае с регрессией, при разработке нейронной сети можно произвести оценку коррекции коэффициента корреляции (т. е. показателя, обратного генерализации). Фактически нейронная сеть представляет собой систему уравнений множественной регрессии, хотя и нелинейных, и корреляция выходных значений сети может рассматриваться как множественный коэффициент корреляции. Множественная корреляция между выходными и целевыми значениями может быть скорректирована для прогнозирования поведения системы на данных вне выборки. Такая скорректированная множественная корреляция должна постоянно использоваться для определения того, является ли эффективность нейронной сети случайной или она вызвана обнаружением реальной закономерности в ценовом поведении рынка. Формула коррекции коэффициента множественной корреляции приведена ниже:

Формула приведена в стиле языка FORTRAN. Здесь SQRT означает квадратный корень; N – количество точек данных или фактов в случае нейронной сети; P – количество коэффициентов регрессии или (в случае нейронной сети) весов связей; R – некорректированную множественную корреляцию; RC – скорректированную корреляцию. Хотя эта формула строго приложима только к линейной множественной регрессии (для которой, собственно, и разрабатывалась), она неплохо работает с нейронными сетями и может быть использована для того, чтобы оценить, какая часть эффективности системы обусловлена вредной подгонкой на данном образце. Эта формула описывает связь между размером выборки, количеством параметров и снижением эффективности результатов. Статистическая коррекция, рассчитываемая по данной формуле, будет использована в главе о входах систем на нейронных сетях.

<p>Размер выборки и репрезентативность</p>

Хотя из статистических соображений разработчику следует искать самые большие из возможных выборки данных, при работе с финансовыми рынками между размером и представительностью образца существуют неоднозначные связи. Большие выборки означают, что данные уходят назад, в такие периоды времени, когда рынок был фундаментально иным – вспомните S&P 500 в 1983 г.! Это означает, что в некоторых случаях больший образец данных может быть менее представительным или включать смесь из нескольких различных популяций данных! Следовательно, нельзя забывать, что хотя цель – максимальный размер выборки, столь же важно, чтобы данные отображали тот рынок, который система должна прогнозировать.

<p>Статистическая оценка системы</p>

Разобравшись с некоторыми основными положениями, рассмотрим применение статистики при разработке и оценке торговых систем. Примеры, приведенные ниже, основаны на системе, которая была оптимизирована на некоторой выборке данных и затем тестировалась вне пределов выборки. Оценка на данных вне пределов выборки будет рассмотрена перед оценкой на основе выборки, поскольку ее статистический анализ проще (и аналогичен анализу неоптимизированной системы), в нем не требуются поправки на оптимизацию или множественные тесты. Система представляет собой модель торговли индексом S&P 500, основанную на лунном цикле, она была опубликована нами ранее (Katz, McCormick, июнь 1997). Код для системы в формате TradeStation приведен ниже:


Пример 1: Оценка теста вне пределов выборки

Оценка оптимизированной системы на данных, взятых вне пределов выборки и ни разу не использованных при оптимизации, аналогична оценке неоптимизированной системы. В обоих случаях проводится один тест без подстройки параметров. В табл. 4–1 показано применение статистики для оценки неоптимизированной системы. Там приведены результаты проверки на данных вне пределов выборки совместно с рядом статистических показателей. Помните, что в этом тесте использованы «свежие данные», которые не применялись как основа для настройки параметров системы.

Параметры торговой модели уже были определены. Образец данных для оценки вне пределов выборки охватывает период с 1.01.1995 по 1.01.1997; модель тестировалась на этих данных и совершала смоделированные сделки. Было проведено 47 сделок. Этот набор сделок можно считать выборкой сделок, т. е. частью популяции смоделированных сделок, которые система совершила бы по данным правилам в прошлом или будущем. Здесь возникает вопрос по поводу оценки показателя средней прибыли в сделке – могло ли данное значение быть достигнуто за счет чистой случайности? Чтобы найти ответ, потребуется статистическая оценка системы.

Чтобы начать оценку системы, для начала нужно рассчитать среднее в выборке для n сделок. Среднее здесь будет просто суммой прибылей/убытков, поделенной на n (в данном случае 47). Среднее составило $974,47 за сделку. Стандартное отклонение (изменчивость показателей прибылей/убытков) рассчитывается после этого вычитанием среднего из каждого результата, что дает 47 (n) отклонений. Каждое из значений отклонения возводится в квадрат, все квадраты складываются, сумма квадратов делится на n–1 (в данном случае 46), квадратный корень от результата и будет стандартным отклонением выборки. На основе стандартного отклонения выборки вычисляется ожидаемое стандартное отклонение прибыли в сделке: стандартное отклонение (в данном случае $6091,10) делится на квадратный корень из n. В нашем случае ожидаемое стандартное отклонение составляет $888,48.

Чтобы определить вероятность случайного происхождения наблюдаемой прибыли, проводится простая проверка по критерию Стьюдента. Поскольку прибыльность выборки сравнивается с нулевой прибыльностью, из среднего, вычисленного выше, вычитается нуль, и результат делится на стандартное отклонение выборки для получения значения критерия t, в данном случае – 1,0968. В конце концов оценивается вероятность получения столь большого t по чистой случайности. Для этого рассчитывается функция распределения t для данных показателей с количеством степеней свободы, равным n–1 (или 46).

Программа работы с таблицами Microsoft Excel имеет функцию вычисления вероятностей на основе t-распределения. В сборнике Numerical Recipes in C приведены неполные бета-функции, при помощи которых очень легко рассчитывать вероятности, основанные на различных критериях распределения, включая критерий Стьюдента. Функция распределения Стьюдента дает показатели вероятности случайного происхождения результатов системы. Поскольку в данном случае этот показатель был мал, вряд ли причиной эффективности системы была подгонка под случайные характеристики выборки. Чем меньше этот показатель, тем меньше вероятность того, что эффективность системы обусловлена случаем. Здесь показатель был равен 0,1392, т. е. при испытании на независимых данных неэффективная система показала бы столь же высокую, как и в тесте, прибыль только в 14 % случаев.

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

Кроме того, оценивался доверительный интервал вероятности выигрышной сделки. К примеру, из 47 сделок было 16 выигрышей, т. е. процент прибыльных сделок был равен 0,3404. При помощи особой обратной функции биноминального распределения мы рассчитали верхний и нижний 99 %-ные пределы. Вероятность того, что процент прибыльных сделок системы в целом составит от 0,1702 до 0,5319, – 99 %. В Excel для вычисления доверительных интервалов можно использовать функцию CRITBINOM.

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


Что, если распределение не соответствует нормальному? При проведении проверки по критерию Стьюдента исходят из предположения, что данные соответствуют нормальному распределению. В реальности распределение показателей прибылей и убытков торговой системы таким не бывает, особенно при наличии защитных остановок и целевых прибылей, как показано на рис. 4–1. Дело в том, что прибыль выше, чем целевая, возникает редко. Фактически большинство прибыльных сделок будут иметь прибыль, близкую к целевой. С другой стороны, кое-какие сделки закроются с убытком, соответствующим уровню защитной остановки, а между ними будут разбросаны другие сделки, с прибылью, зависящей от методики выхода. Следовательно, это будет совсем непохоже на колоколообразную кривую, которая описывает нормальное распределение. Это составляет нарушение правил, лежащих в основе проверки по критерию Стьюдента. Впрочем, в этом случае спасает так называемая центральная предельная теорема: с ростом числа точек данных в выборке распределение стремится к нормальному. Если размер выборки составит 10, то ошибки будут небольшими; если же их будет 20–30, ошибки будут иметь исчезающе малое значение для статистических заключений. Следовательно, многие виды статистического анализа можно с уверенностью применять при адекватном размере выборки, например при n = 47 и выше, не опасаясь за достоверность заключений.


Что, если существует серийная зависимость? Более серьезным нарушением, способным сделать неправомочным вышеописанное применение проверки по критерию Стьюдента, является серийная зависимость – случай, когда данные в выборке не являются независимыми друг от друга. Сделки совершаются в виде временного ряда. Последовательность сделок, совершенных в течение некоторого периода времени, нельзя назвать случайной выборкой – подлинно случайная выборка состояла бы, например, из 100 сделок, выбранных случайным образом из всей популяции данных – от начала рынка (например, 1983 г. для S&P 500) до отдаленного будущего. Такая выборка не только была бы защищена от серийной зависимости, но и являлась бы более представительной для популяции. Однако при разработке торговых систем выборка сделок обычно производится на ограниченном временном отрезке; следовательно, может наблюдаться корреляция каждой сделки с соседними, что сделает данные зависимыми.

Практический эффект этого явления состоит в уменьшении размеров выборки. Если между данными существует серийная зависимость, то, делая статистические выводы, следует считать, что выборка в два или в четыре раза меньше реального количества точек данных. Вдобавок определить достоверным образом степень зависимости данных невозможно, можно только сделать грубую оценку – например, рассчитав серийную корреляцию точки данных с предшествующей и предыдущей точками. Рассчитывается корреляция прибыли/убытка сделки i и прибыли/убытка сделок i + 1 и i — 1. В данном случае серийная корреляция составила 0,2120. Это немного, но предпочтительным было бы меньшее значение. Можно также рассчитать связанный t-критерий для статистической значимости значения корреляции. В данном случае выясняется, что если бы в популяции действительно не было серьезной зависимости, то такой уровень корреляции наблюдался бы только в 16 % тестов.

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


Что, если изменится рынок? При разработке торговых систем возможно нарушение третьего положения t-критерия, и его невозможно предугадать или компенсировать. Причина этого нарушения в том, что популяция, из которой взят образец данных для тестирования или разработки, может отличаться от популяции, данные из которой будут использоваться в будущих сделках. Рынок может подвергаться структурным или иным изменениям. Как говорилось, популяция данных S&P 500 до 1983 г. принципиально отличается от последующих данных, когда началась торговля опционами и фьючерсами. Подобные события могут разрушить любой метод оценки системы. Как бы ни проводилось тестирование, при изменении рынка до начала реальной торговли окажется, что система разрабатывалась и тестировалась на одном рынке, а работать будет на другом. Естественно, модель разваливается на части. Даже самая лучшая модель будет уничтожена изменением рынка.

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


Пример 2: Оценка тестов на данных в пределах выборки

Каким образом можно оценивать систему, которая подвергалась подгонке параметров (т. е. оптимизации) по некоторой выборке данных? Трейдеры часто оптимизируют системы для улучшения результатов. В данном аспекте применение статистики особенно важно, поскольку позволяет анализировать результаты, компенсируя этим большое количество тестовых прогонов во время оптимизации. В табл. 4–2 приведены показатели прибыли/убытка и различные статистические показатели для тестов в пределах выборки (т. е. на данных, использовавшихся для оптимизации системы). Система подвергалась оптимизации на данных за период с 1.01.1990 по 1.02.1995.

Большая часть статистики в табл. 4–2 идентична показателями табл. 4–1 из примера 1. Добавлены два дополнительных показателя – «Количество тестов оптимизации» и «Скорректировано по оптимизации». Первый показатель – просто количество различных комбинаций параметров, т. е. число испытаний системы по выборке данных с различными параметрами. Поскольку первый параметр системы на лунном цикле, L1, принимал значения от 1 до 20 с шагом в 1, было проведено 20 тестов и соответственно получено 20 значений t-критерия.

Количество тестов, использованных для коррекции вероятности (значимости) по лучшему показателю t-критерия, определяется следующим образом: от 1 отнимается статистическая значимость лучшего теста, результат возводится в степень m (где m – число прогонок тестов). Затем этот результат вычитается из единицы. Это показывает вероятность обнаружения в m тестах (в данном случае m = 20) по крайней мере одного значения t-критерия, как минимум не уступающего действительно обнаруженному в данном решении. Некорректированная вероятность случайного происхождения результатов составляет менее 2 % – весьма впечатляющий показатель. После коррекции по множественным тестам (оптимизации) картина в корне меняется. Результаты с такой прибыльностью системы могли быть достигнуты чисто случайно в 31 % случаев! Впрочем, все не так плохо. Настройка была крайне консервативной и исходила из полной независимости тестов друг от друга. На самом же деле между тестами будет идти значительная серийная корреляция, поскольку в большинстве традиционных систем небольшие изменения параметров вызывают небольшие изменения результатов. Это в точности напоминает серийную зависимость в выборках данных: эффективный размер снижается, если снижается эффективное количество проведенных тестов. Поскольку многие из тестов коррелируют друг с другом, 20 проведенных соответствуют 5–10 «реальным» независимым тестам. Учитывая серийную зависимость между тестами, вероятность с поправкой на оптимизацию составит около 0,15, а не 0,3104. Поскольку природа и точная величина серийной зависимости тестов неизвестны, менее консервативное заключение об оптимизации не может быть рассчитано напрямую, а только может быть примерно оценено.

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


Трактовка статистических показателей

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


Результаты оптимизации. В табл. 4–2 показаны результаты анализа данных из выборки. За 5 лет периода оптимизации система провела 118 сделок (n = 118), средняя сделка дала прибыль в $740,97, и сделки были весьма различными: стандартное отклонение выборки составило около $3811. Таким образом, во многих сделках убытки составляли тысячи долларов, в других такого же масштаба достигали прибыли. Степень прибыльности легко оценить по столбцу «Прибыль/Убыток», в котором встречается немало убытков в $2500 (на этом уровне активировалась защитная остановка) и значительное количество прибылей, многие более $5000, а некоторые даже более $10 000. Ожидаемое стандартное отклонение средней прибыли в сделке показывает, что если бы такие расчеты многократно проводились на схожих выборках, то среднее колебалось бы в пределах десяти процентов, и многие выборки показывали бы среднюю прибыльность в размере $740 ± 350.

T-критерий для наилучшего решения составил 2,1118 при статистической значимости 0,0184. Это весьма впечатляющий результат. Если бы тест проводился только один раз (без оптимизации), то вероятность случайно достичь такого значения была бы около 2 %, что позволяет заключить, что система с большой вероятностью находит «скрытую неэффективность» рынка и имеет шанс на успех в реальной торговле. Впрочем, не забывайте: исследовались лучшие 20 наборов параметров. Если скорректировать статистическую значимость, то значение составит около 0,31, что вовсе не так хорошо – эффективность вполне может оказаться случайной. Следовательно, система имеет некоторые шансы на выживание в реальной торговле, однако в ее провале не будет ничего удивительного.

Серийная корреляция между сделками составляла всего 0,0479 при значимости 0,6083 – в данном контексте немного. Эти показатели говорят, что значительной серийной корреляции между сделками не наблюдалось, и вышеприведенный статистический анализ, скорее всего, справедлив.

За время проведения теста было 58 прибыльных сделок, т. е. доля прибыльных сделок составила около 49 %. Верхняя граница 99 %-ного доверительного интервала количества прибыльных сделок составила около 61 %, а нижняя – около 37 %. Это означает, что доля прибыльных сделок в популяции данных с вероятностью 99 % попала бы в интервал от 37 до 61 %. Фактически коррекция по оптимизации должна была бы расширить доверительный интервал; но мы этого не делали, поскольку не особенно интересовались показателем доли прибыльных сделок.


Результаты проверки. В табл. 4–1 содержатся данные и статистические заключения по тестированию модели на данных вне выборки. Поскольку все параметры уже определены при оптимизации и проводился всего один тест, мы не рассматривали ни оптимизацию, ни ее последствия. За период с 1.01.1995 по 1.01.1997 система провела 47 сделок, средняя сделка дала прибыль в $974, что выше, чем в выборке, использованной для оптимизации! Видимо, эффективность системы сохранилась.

Стандартное отклонение выборки составило более $6000, почти вдвое больше, чем в пределах выборки, по которой проводилась оптимизация. Следовательно, стандартное отклонение средней прибыли в сделке было около $890, что составляет немалую ошибку. С учетом небольшого размера выборки это приводит к снижению значения t-критерия по сравнению с полученным при оптимизации и к меньшей статистической значимости – около 14 %. Эти результаты не слишком плохи, но и не слишком хороши: вероятность нахождения «скрытой неэффективности» рынка составляет более 80 %. Но при этом серийная корреляция в тесте была значительно выше (ее вероятность составила 0,1572). Это означает, что такой серийной корреляции чисто случайно можно достичь лишь в 16 % случаев, даже если никакой реальной корреляции в данных нет. Следовательно, и t-критерий прибыли/убытка, скорее всего, переоценил статистическую значимость до некоторой степени (вероятно, на 20–30 %). Если размер выборки был бы меньше, то значение t составило бы около 0,18 вместо полученного 0,1392. Доверительный интервал для процента прибыльных сделок в популяции находился в пределах от 17 до приблизительно 53 %.

В общем, оценка показывает, что система, вероятно, сможет работать в будущем, но без особой уверенности в успехе. Учитывая, что в одном тесте вероятность случайности прибылей составила 31 %, в другом, независимом, – 14 % (с коррекцией на оптимизацию 18 %), шанс того, что средняя сделка будет выгодной и система в будущем сможет работать, остается неплохим.

<p>Другие статистические методы и их использование</p>

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


Системы, полученные генетическими методами

Мы разрабатываем множество систем с использованием генетических алгоритмов. Популярной функцией пригодности системы (степени достижения желаемого результата) является общая прибыль системы. Но при этом общая прибыль не является лучшим из критериев качества системы! Система, которая использует только крупные обвалы рынка S&P 500, например, даст очень высокую общую прибыль и очень высокий процент прибыльных сделок, но кто может с уверенностью утверждать, что такая система полезна в практической торговле? Если система провела всего 2–3 сделки за 10 лет, чисто интуитивно нельзя ожидать ее стабильной работы в будущем или быть уверенным, что система вообще сможет совершать сделки. Частично проблема в том, что общая прибыль никак не учитывает количество сделок и их изменчивость.

Альтернативными показателями пригодности, лишенными некоторых недостатков общей прибыли, являются t-критерий и связанная с ним вероятность. При использовании t-критерия как функции пригодности (вместо простого поиска наиболее выгодного решения) смысл генетического развития систем состоит в создании систем с максимальной вероятностью прибылей в будущем или, что то же самое, с минимальной вероятностью прибылей, обусловленных случайностью или подгонкой под исторические данные. Этот подход работает весьма хорошо; t-критерий учитывает прибыль, размер выборки данных и количество совершенных сделок. Хотя все факторы важны, все же, чем больше сделок совершает система, тем выше t-показатель и больше вероятность устойчивости в будущем. Таким же образом системы, которые дают более стабильные сделки с минимальным разбросом, будут иметь лучший t-показатель и предпочтительнее систем, где разброс сделок велик. T-критерий включает в себя многие из параметров, определяющих качество торговой модели, и сводит их в одно число, для оптимизации которого можно применить генетический алгоритм.


Множественная регрессия

Еще одна часто применяемая методика – множественная регрессия. Рассмотрим анализ сравнения рынков; цель этого исследования в том, чтобы обнаружить на других рынках показатели поведения, которые указывали бы на текущее поведение данного рынка. Проведение различных регрессий – подходящий метод для анализа таких потенциальных связей; более того, существуют замечательные методы для тестирования и установки доверительных интервалов корреляций и весов регрессии (бета-чисел), генерируемых при анализе. Ввиду ограниченности объема главы, рекомендуем обратить внимание на книгу Мейерса (Meyers, 1986) – хорошее пособие по основам множественной регрессии.


Метод Монте-Карло

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


Тестирование вне пределов выборки

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


Тестирование с прогонкой вперед

При тестировании с прогонкой вперед система оптимизируется на данных за несколько лет, затем моделируется торговля за следующий год. Потом система повторно оптимизируется на данных за несколько лет, со сдвигом окна оптимизации вперед, включая год ведения торговли, и процесс повторяется раз за разом, прогоняя систему через популяцию данных. Хотя этот метод требует огромного количества вычислений, он чрезвычайно полезен для изучения и тестирования торговых систем. Его основное преимущество в том, что он совмещает оптимизацию и проведение тестов вне пределов выборки. Все вышеописанные статистические методы, например проверка по критерию Стьюдента, могут быть использованы на тестах с прогонкой вперед просто и доступно, без необходимости вносить поправки на оптимизацию. Кроме того, тесты будут весьма правдоподобно моделировать процесс, происходящий в реальной торговле, – сначала ведется оптимизация, а затем система ведет торговлю на ранее неизвестных данных и время от времени повторно оптимизируется. Продвинутые разработчики встраивают процесс оптимизации в систему, создавая то, что можно назвать «адаптивной торговой моделью». В работе Мейерса (Meyers, 1997) подробно рассмотрен процесс тестирования с прогонкой вперед.

Конец бесплатного ознакомительного фрагмента.

  • Страницы:
    1, 2, 3, 4, 5, 6