Количественный анализ японских свечей (продолжение)
В мартовском номере журнала Technical Analysis of STOCKS & COMMODITIES опубликована моя статья Coding Candlesticks (II), продолжающая тему построения количественного описания графиков японских свечей (первая статья, Coding Candlesticks, была напечатана в ноябрьском номере журнала в 1999 году).
Статья родилась из дискуссии, вызванной письмом одного из читателей журнала, в котором он подверг сомнению саму правомерность моего подхода в целом и высказал много конкретных упреков по различным поводам. Хотя, вопреки мнению автора письма, все поднятые там вопросы, проблемы и возражения ни в коей мере не составляли опровержения моего метода, но они заслуживали обсуждения, которое могло бы помочь и другим читателям лучше понять основания и возможные применения подхода. Поэтому в ответ я написал подробное письмо в защиту своего метода, но поскольку оно оказалось слишком длинным для письма, то редактор предложил превратить его в статью.
Те возражения в письме, которые относятся к существу самого подхода, можно кратко сформулировать следующим образом (полностью письмо можно найти на сайте журнала),: - при интерпретации свечей несут ли нижние тени смысл медвежьего настроения рынка, а верхние тени - бычьего? - способ кодирования не различает такие свечи как hanging man (дает медвежий сигнал в конце бычьего хода) и hammer (дает бычий сигнал внизу падающего рынка), поскольку сама по себе конфигурация этих свечей идентична; - применение диапазонов Болинджера (Bollinger Bands) в даном случае некорректно, поскольку они основаны на статистике нормального распеределения, а распределения размеров свечей являются скорее логарифмически-нормальными; - сама по себе схема кодирования, основанная на выделении трех диапазонов для размеров элементов свечей, является искусственной и громоздкой.
Разберем эти возражения по порядку. Я не буду повторять здесь сами определения конструкций, связанных с построением кода свечи, так как первую статью всегда можно посмотреть в нашей библиотеке:
1). В моем методе кодирования верхняя тень имеет бычий смысл (чем длинне верхняя тень, тем более бычий код получит данная свеча), а нижняя тень имеет медвежий смысл (чем длиннее нижняя тень, тем более медвежий смысл получит свеча). Автор же письма считает, что верхняя тень говорит о медвежьем настроении рынка (быки пытались толкнуть цены вверх, но им это не удалось), а нижняя тень свидетельствует о преобладающем бычьем настроении (медведи предприняли атаку, но "получили по носу").
С этим я не согласен принципиально; на мой взгляд, свеча с длинной верхней тенью является более бычьей, чем свеча с короткой верхней тенью, и соответственно, свеча с длинной нижней тенью является более медвежьей, чем свеча с короткой нижней тенью.
Для пояснения этого рассмотрим пример - две свечи, отличающихся нижней тенью (представлены на рисунке): обе свечи имеют среднего размера тело и малую верхнюю тень, но у свечи A большая нижняя тень, а у свечи B нижняя тень отсутствует. Рядом со свечами изображены по два возможных сценария поведения рынка внутри отрезка времени, соответствующего свече.
В первом сценарии свечи A (показанном слева) медведи пытались толкнуть цены вниз, но получили по носу. Во втором же сценарии они, получив по носу, затаили злобу и явно не успокоятся на достигнутом. Несмотря на несомненно бычий характер свечи A, второй сценарий рынка носит весьма медвежий характер.
Но самое главное в том, что при сравнении этих вариантов с соответствующими вариантами свечи B видно, что в любом случае свеча A имеет намного больше медвежьх признаков, чем свеча B, лишенная нижней тени. Код свечи A и его числовое представление равны 1100100 = 64+32+4 = 100, а для свечи B: 1100111 = 64+32+4+2+1 = 103. То есть, этот способ кодирования правильно отражает подобные нюансы в настроении рынка.
Если же предствить, что те же самые свечи имеют черный цвет (для этого достаточно просто повернуть ось времени на рисунке в обратную сторону), то несомненный медвежий характер свечи A станет еще более выраженным по сравнению с B. Для черного варианта свечи A будем иметь код 0010100 = 16+4 = 20, а для черного варианта свечи B, 0010111 = 16+4+2+1 = 23.
2). Второе возражение абсолютно резонно; действительно, одна и та же свеча в одном случае дает медвежий сигнал, а в другом - бычий. Но тут ничего не поделаешь, мой метод был разработан и предназначен для кодирования именно изолированных свечей, различие же между hanging man и hammer проявляется в поведении соседей. В литературе, посвященной графикам Candlesticks, очень много внимания уделяется интерпретации комбинаций, состоящих из нескольких свечей, и это естественно. Но и отражение настроения рынка в изолированных свечах, взятых отдельно от окружения, тоже является важной частью идеологии; не случайно многие изолированные свечи сами по себе получили характерные собственные имена и широко используются в комментариях аналитиков. Это говорит о содержательности задачи численного описания изолированных свечей.
Построение количественного метода измерения настроений рынка, проявляющихся в комбинациях из нескольких свечей, является более сложной задачей. Решать ее можно разными подходами, в том числе и с применением кодов изолированных свечей. Сделан пока только первый шаг.
Кстати, что касается конкретно hanging man и hammer, то мой код вполне позволит различить их. Сами по себе эти свечи имеют код из середины диапазона возможных значений (то есть, где-то в районе 64). Свеча hanging man появится после подъема рынка, значит, несколько предыдущих свечей подряд будут иметь достаточно большие значения кода (ближе к 90), а потом появится свеча с малым кодом. Если построить усредненный индикатор (применить какое-нибудь сглаживание к CandleCode), то на свече hanging man этот индикатор покажет поворот вниз (размер поворота будет зависеть от длины усреднения). Наоборот, на свече hammer усредненный индикатор покажет разворот вверх, поскольку предыдущие свечи будут в среднем иметь малые значения CandleCode (нисходящий тренд имеет тенденцию составляться из черных свечей!).
3). Применение какого-либо формального метода для выбора порогов, на основании которых размеры тела и теней относятся к категориям 'малый', 'средний' и 'большой', является существенной частью подхода. Выбор порогов не может быть произвольным, на каждом рынке эти пороги будут своими, в зависимости от частоты встречаемости разных размеров ходов, то есть, от статистики рынка.
Поэтому для обоснованного (объективного) выбора порогов, используемых в группировке размеров тел и теней, необходим анализ статистических распределений размеров этих элементов. Первоначально я использовал с этой целью гистограммы размеров тел и теней, построенные на определенных интервалах времени (например, для часовых графиков валют использовались интервалы в 4 недели).
Пороги на гистограммах я расставлял из соображений равновероятности групп, чтобы, скажем, 33% свечей имели малые тела, 33% - средние тела, остальные тела считаются большими. Найденные пороги фиксировались на некоторое время для вычислений индикаторов, связанных с CandleCode. По истечении определенного времени гистограммы строились для новых 4-недельных интервалов и находились новые пороги.
Оказалось, что получаемые пороги обладают довольно большой устойчивостью: они мало изменялись со временем. Пороги для разных валют (тогда я исследовал часовые графики долларовых курсов японской йены, британского фунта, немецкой марки и швейцарского франка) отличались между собой в пределах 10 - 20 %, но такого рода изменения порогов почти не отражались на поведении усредненных индикаторов, построенных на основе CandleCode. Это свидетельствует о статистической устойчивости процедур, основанных на усредненных индикаторах CandleCode, что является полезным свойством для финансовых решений.
Использование диапазонов Боллинджера для выбора порогов мне представляется в практическом отношении подходящим решением. Само по себе вычисление диапазонов не связано с какими-либо специфическими свойствами нормального распределения, они пригодны для анализа любых статистик и обычно дают достаточно устойчивые оценки. Разумеется, для логарифмически нормальных распределений параметр 0.5 диапазонов, использованный в моей статье, не даст равных вероятностей кластеров. Но во-первых, не обязательно равновероятные пороги являются оптимальными, а во-вторых, небольшие отклонения порогов, как правило, не сильно искажают поведение индикаторов.
Если трейдер желает получить более тонкое соответствие CandleCode-индикаторов конкретному рынку, то он легко может сам выполнить построение гистограмм и выбрать по ним пороги для соответствующих графиков цен. Вначале я именно так и действовал, но постоянная необходимость делать отдельный статистический анализ распределений свечей и выбирать пороги (ручная работа!) превращал индикатор в некое вспомогательное средство. Конечно, так можно выявить более тонкие особенности поведения валют. Но, во-первых, еще низвестно, надо ли отлавливать эти тонкости, если сглаженные индикаторы работают достаточно хорошо. А во-вторых, все равно надо делать полностью автономный индикатор, как положено в пакетах технического анализа: подцепил мышью, бросил на график - и готово.
Поэтому, когда убедился, погоняв графики, что автоматический выбор порогов через Bollinger Bands работает правильно, окончательно я и оформил индикатор в таком виде. Возможностей же для тех, кому нужна более тонкая настройка индикатора, остается еще сколько угодно. Можно менять длину окна у Bollinger Bands, можно менять коэффициент пропорциональности, который измеряет степень отклонения порога от среднего значения, можно сделать это отклонение вообще несимметричным (то есть нижний и верхний пороги будут отстоять от вреднего на разных расстояниях). Все это можно делать, надо только поставить цель - для чего (определить целевую функцию). Но на мой взгляд, все и так работает очень красиво.
4) Наконец, последний упрек - в искусственности придуманного построения. Мой критик считает, что я нагородил какую-то сложную схему, с обоснованием которой сам не справился. Я утверждаю, что моя идея сопоставления числового значения отдельной свече графика candlestick основана на самых основных, исходных и общепризнанных, принципах технического анализа. Давайте посмотрим, кто прав.
Во-первых, соотношение цен открытия и закрытия имеет главное значение для интерпретации смысла свечи. Это совершенно очевидно в биржевой торговле (цены начала и окончания сессии!), это хорошо известно также и трейдерам на валютном рынке, для которых цена закрытия часа имеет явно выраженный психологический смысл. Поэтому в количественной характеристике свечи эти цены должны учитываться как главный фактор.
Мой метод использует в качестве исходного шага составление бинарного кода свечи; числовое представление этого кода затем может рассматриваться как некоторый "вес" свечи. В составе этого кода цены open и close учитываются в старших разрядах, что автоматически присваивает им самый высокий вес. Рассматривать бинарный код свечи как двоичное представление числа, имеющего смысл веса свечи, удобно и тем, что такое отображение является аддитивным: вес свечи равен сумме весов ее тела, верхней тени и нижней тени.
Цвет свечи является главным фактором в оценивании ее смысла с точки зрения возможного последующего движения рынка. Белая свеча (open < close) демонстрирует состоявшееся бычье движение рынка, поэтому, при прочих равных обстоятельствах, она имеет более выраженный бычий смысл, чем черная свеча (open > close). Более того, если рассматривать свечи в отдельности, то есть сами по себе, без учета контекста, создаваемого соседними свечами графика, то любая белая свеча является более бычьей, чем любая черная свеча, независимо от размеров и соотношений теней.
Поскольку мой метод заключается в численном кодировании именно изолированных свечей (в этом заключается его определенная ограниченность, но описание групп свечей - это принципиально иная задача, требующая других подходов), то я ставлю в старшем разряде кода 1 для белой свечи и 0 для черной. Теперь любая белая свеча будет "старше " любой черной: код белой свечи не может быть меньше 1000000 = 64, а код черной свечи не может быть больше 0111111 = 63.
Следующим по важности фактором является размер тела свечи: чем больше расстояние между ценами открытия и закрытия, тем более выраженным является то настроение, на которое указывает цвет свечи. Белая свеча с большим телом является более бычьей, чем белая свеча с малым телом. Соответственно, черная свеча с большим телом выглядит как более медвежья, чем черная свеча с малым телом и т.д.
Какой именно размер тела соответствует категории "малый" и "большой" зависит от статистики рынка и от целей кодирования. Можно ввести много рангов: весьма малый, очень малый, малый, средний, типичный…, и столько же градаций в сторону больших размеров. Если есть в этом необходимость, такую схему вполне можно построить; следует только конкретно определить цель подобного представления. Но для демонстрации принципиальных возможнойстей подхода нет необходимости в каком-либо усложнении. Поэтому я ввел только три категории размеров: малый, средний и большой.
Выделение нулевого размера тела в отдельную категорию представляется мне принципиальным, так как doji наглядно характеризует состояние неопределенности рынка. Математическое удобство состоит в том, что четыре размера тела как раз изображаются двумя битами. Возражение о том, что нулевой размер надо приписывать не только собственно doji (open = close), но и свечам с очень малым телом (скажем, в 5 - 10 пунктов), вообще ничего не меняет в подходе и такой вариант легко может быть предусмотрен моей вычислительной схемой путем небольшого ее изменения.
Коды, назначаемые белым и черным свечам, полностью соответствуют сформулированным здесь рассуждениям: Тело свечи Long White получает код 111, поскольку среди всех белых свечей (первый бит 1) она является самой бычьей (два следующих разряда в ее коде - 11); а телу свечи Long Black присвоен код 000, так как среди всех черных свечей (первый бит 0) она является самой медвежьей. Для белых свечей код тела тем выше, чем больше размер тела; для черных свечей наоборот - код тела тем меньше, чем больше размер тела. Поэтому наиболее длинные белые свечи получают коды самые высокие, а длинным черным свечам присваиваются коды самые малые. Этим достигается наибольшее ранесение кодов свечей в диапазоне возможных значений кодов; полезным следствием будет определенная статистическая устойчивость индикаторов, получаемых путем усреднения весов. При этом doji имеет код тела в середине диапазона (если doji считать белым, то код его тела есть 100, а если его считать черным, то 011).
Я еще раз хочу подчеркнуть, что такое кодирование и соответствующее ему числовое взвешивание свечей носят самый естественный характер и не нуждаются ни в каком жонглировании (вроде отнимания у тела его тени либо умножения тела на тень).
Фактически, я здесь вообще ничего не придумал, просто в виде математических формул записал те соображения, которыми пользуется каждый чартист и которыми полны любые наставления по интерпретации графиков и комментарии различных аналитиков.
Вполне понятные возражения вызывает явная асимметрия, связанная с очень разными величинами весов, присваиваемых нижним и верхним теням. Действительно, максимально возможный вклад верхней тени в числовой вес свечи равен 12, а вклад нижней тени не превосходит 3. По этой причине в практической торговле я первоначально работал с другим вариантом индекса, который и назывался "вес свечи" (терминология, кстати, не очень удачная, можно было бы придуматьи лучшие названия, но как всегда, не до того) и был в этом отношении более симметричным. Цвет свечи учитывался с помощью знака: белые свечи имели положительный вес тела, а черные отрицательный. Верхняя тень имела положительный вес, а нижняя отрицательный. Сами величины весов для нижней и верхней теней были одинаковыми при одинаковых длинах теней. Текст этого индикатора под названием SymmCandleCode уже был ранее опубликован по другому поводу, поэтому здесь его не стану повторять.
Однако на реальных графиках (по крайней мере, для часовых и дневных графиков валют) в поведении индикаторов, построенных путем усреднения такого веса (примеры усредненных индикаторов даны в статье), не обнаруживалось никаких принципиальных отличий от того, что давал вариант, представленный в первой статье. Все основные уровни на графиках усредненных индикаторов, тренды и точки пересечения различных скользящих средних часто почти совпадали. Поэтому вскоре я вернулся к более простому варианту.
Тем не менее, различные вариации индекса имеют право на существование; соответствующие программы легко могут быть получены модификацией основного алгоритма и использованы для анализа графиков и построения торговых систем. Можно, например, обобщить структуру веса свечи, введя некоторые коэффициенты (множители) для весов тела и теней; в обозначениях, принятых в статье из TASC Nov.99, формула для такого веса свечи будет иметь вид
Weight = B x CandleCode-b + U x CandleCode-u + L x CandleCode-l,
где B, U, L - заранее не заданные коэффициенты, подбирая которые можно добиться получения более надежных торговых сигналов. При этом лишь необходимо лишь четко сформулировать ту задачу, для решения которой применяется подобный показатель и определить достаточно ясно все ограничения, при которых она решается. Поскольку иначе, просто занимаясь подгонкой коэффициентов B, U, L,…. , и увеличением числа градаций размеров тел и теней, можно с любой степенью точности аппроксимировать исходный график цены и впасть в величайший грех, доступный техническому аналитику - curve fitting.
В том виде, как он представлен в моей статье, алгоритм кодирования и взвешивания свечей является настолько простым, насколько это возможно в такой задаче, а поскольку полученные индикаторы явно способны генерировать полезные сигналы, они заслуживают дальнейшего изучения в большей степени, чем дальнейшего усложнения.
Конечно же, измерить одним числом настроение рынка, его психологические мотивы, заложенные в картине поведения рыночного графика - это очень сложная задача. Она не имеет единственного и универсального решения, различные подходы здесь имеют право на существование и несомненно, попытки создать новые количественные методы анализа графиков японских свечей будут продолжаться. Сделанное представляет собой только первый шаг.
16 февраля 2001 г.
|