CandleCode жив!
В основе нового подхода к анализу графиков японских свечей лежит индикатор CandleCode. Он приписывает каждой свече некоторое число, показывающее, в какой степени данная свеча отражает бычье или медвежье настроение рынка. Это – первый количественный метод интерпретации японских свечей.
Построение числового кода
Прежде толкование японских свечей было полностью субъективным и основывалось на рассуждениях лишь психологического плана. Числом свечи никогда не измерялись, что в общем-то противоречит самому духу технического анализа, где все подвергается точному измерению, взвешиванию, сравнению.
Неудивительно, что опубликованная в ноябрьском номере 1999 года журнала Technical Analysis of Stocks & Commodities моя статья о количественном описании японских свечей привлекла внимание читателей и специалистов и вызвала весьма активное обсуждение. Были там и содержательные темы, была и попытка объявить идею громоздкой конструкцией, недостойной опубликования в таком уважаемом журнале, как S&C. Однако время показало, что индикатор CandleCode жив. И работает! Думаю, читателям «ВС» также будет интересно познакомиться с некоторыми аспектами дискуссии. Это поможет лучше понять тонкости метода и успешнее применять его в торговых системах.
Напомню кратко основную идею и схему построения числового кода. Свеча, представляющая движение цены внутри заданного стандартного временного интервала, состоит из трех элементов: тела (body), верхней тени (upper shadow) и нижней тени (lower shadow). Исходная идея метода: чем больше размер элемента свечи, тем сильнее выражено то настроение рынка, в направлении которого указывает этот элемент. Так, большое тело белой свечи говорит о гораздо более бычьем настроении рынка, чем малое тело белой свечи. А любая черная свеча указывает на медвежьи настроения – тем сильнее выраженные, чем больше размер ее тела. Верхняя тень указывает на бычьи настроения (тем большие, чем длиннее эта тень), а нижняя тень свидетельствует о медвежьих настроениях, имевших место в течение соответствующего интервала времени.
Рис. 1. Схема представления свечи набором чисел 0 и 1.
Для построения числового кода свечи размеры всех ее элементов (тела и теней) делятся на четыре категории: большой, средний, малый, отсутствует (свеча без тела - это doji). Четыре возможных варианта удобно представлять с помощью двух чисел: 0 и 1. Большой элемент, направленный вверх, получает значение 11, средний 10, малый 01, отсутствующий 00. Элементы свечи, направленные вниз, получают коды в обратном порядке: большой 00, средний 01, малый 10, отсутствующий 11. Под таким назначением кодов понимается, что наиболее бычьи по настроению элементы получают самые большие коды, менее бычьи – меньшие коды, медвежьим элементам приписываются малые коды, а самым медвежьим – самые малые коды (рис. 1).
Каждой свече в итоге присваивается набор из семи нулей и единиц. Этот набор затем рассматривается как двоичное представление десятичного числа. Полученное число и есть значение CandleCode для рассматриваемой свечи. Правило вычисления CandleCode заключается в том, что каждый символ в двоичной записи десятичного числа получает свой вес (черные цифры под линейкой – рис. 2).
Те веса, над которыми в коде свечи стоят единицы, суммируются и получается CandleCode. Так, для свечи, избраженной на рисунке 1, CandleCode = 64 + 32 + 16 + 8 + + 2 = 122.
Рис. 2. Веса, присваиваемые разрядам кода.
Какие же возражения против такого способа количественного описания свечей обсуждались в ходе дискуссии? Кодирование или взвешивание? Было высказано мнение, что автор делает принципиальную ошибку, путая две вещи – кодирование и взвешивание свечей. На самом деле здесь нет путаницы, поскольку подход решает обе задачи – и кодирование свечей, и их взвешивание. Присваивая каждой свече набор нулей и единиц, мы, прежде всего, упорядочиваем все множество свечей. Каждая свеча получает свой номер, однозначно определяющий ее место в иерархии. Сильно медвежьи свечи (большое черное тело, длинная нижняя тень) получают совсем малые номера, свечи с несколько более выраженными бычьими настроениями получают немного большие номера, бычьи свечи получают номера еще большие, а сильно бычьи свечи – самые большие номера. И так все свечи выстраиваются по порядку номеров от 0 до 127.
Важно, что эта нумерация выстраивает все свечи единственным образом: взяв любое число от 0 до 127, вы точно знаете, какая свеча соответствует этому номеру. Например, свеча 122 – большая белая со средней верхней тенью и малой нижней. И никакой другой тип свечи не может иметь такого же номера. Следовательно, нумерация полностью соответствует своему назначению.
Для самой нумерации безразлично, какое именно число присвоено каждой свече. Эти числа просто создают однозначный порядок всех типов свечей. Но для практического применения в торговых системах как раз очень важно, какое именно число (вес) имеет та или иная свеча, поскольку от этого полностью зависят получаемые торговые сигналы.
Вес, равный десятичному числу (двоичным представлением которого является код свечи), – это один из возможных вариантов взвешивания. Он прост и удобен тем, что является аддитивным: вес свечи равен сумме весов ее тела, верхней тени и нижней тени. Есть у такого взвешивания и недостатки – например, величины весов, присваиваемых нижним и верхним теням, сильно различаются. Максимально возможный вклад верхней тени в числовой вес свечи равен 12, а вклад нижней тени не превосходит 3. По этой причине я первоначально работал с другим вариантом индекса, который и назывался вес свечи и был в этом отношении более симметричным. Сами величины весов для нижней и верхней теней были одинаковыми при одинаковых длинах теней. Цвет свечи учитывался с помощью знака: белые свечи имели положительный вес тела, а черные – отрицательный; верхняя тень имела положительный вес, а нижняя – отрицательный.
Однако на реальных графиках в поведении индикаторов, построенных путем усреднения такого веса, не обнаруживалось никаких принципиальных отличий от того, что давал CandleCode. Все основные уровни на графиках усредненных индикаторов, тренды и точки пересечения различных скользящих средних почти совпадали. Поэтому обычно я использую СandleCode. Хотя для конкретных торговых систем можно создать и специальные методы взвешивания.
Метод построения веса свечи, наилучшего для конкретной торговой системы, был рассмотрен в октябрьском номере за 2001 г. журнала Technical Analysis of Stocks & Commodities. Он использует изменяемые коэффициенты (множители) для весов тела и теней. В обозначениях, принятых для построения индикатора [1], формула для такого веса свечи будет иметь вид:
Weight = B x CandleCode-b + + U x CandleCode-u + L x х CandleCode-l,
где B, U, L – заранее не заданные коэффициенты, которые выбираются в процессе оптимизации торговой системы, использующей индикатор Weight в определении торговых сигналов.
Ясно, что, выбирая различные торговые системы и применяя их на разных рынках, мы будем получать каждый раз свое правило взвешивания. Спорить о том, какой способ взвешивания лучше, – бесполезно. CandleCode хорош тем, что он универсален, пригоден для всех случаев жизни. Но финансовый результат конкретной торговой системы можно улучшить за счет оптимизации коэффициентов индикатора типа Weight. Однако эти коэффициенты будут хороши именно для данной системы на данном рынке. Кстати, после такого взвешивания однозначность упорядочивания свечей уже теряется (разные типы свечей могут получить одинаковые значения веса).
Снова на арене быки и медведи
Один из моих оппонентов высказал принципиальное несогласие с методом. Он считает, что на самом деле верхняя тень должна рассматриваться как медвежья, а нижняя тень – как бычья характеристика свечи. Это существенное возражение, и на нем обязательно надо остановиться. Мнение, что верхняя тень – медвежья, а нижняя – бычья, основано на следующих соображениях. Длинная верхняя тень говорит о том, что быки пытались поднять рынок на рога, но ничего у них не получилось. Значит, рынок пойдет вниз. Длинная нижняя тень намекает на то, что здесь медведи пытались сбросить рынок вниз, но получили по носу. Скорее всего, будет ход вверх. Определенный резон в этом есть. Но давайте посмотрим на рисунок 3. Здесь изображены две свечи, отличающиеся нижней тенью. Обе имеют среднего размера тело и малую верхнюю тень, но у свечи A имеется большая нижняя тень, а у свечи B нижняя тень вообще отсутствует. Слева от свечей изображены возможные сценарии поведения рынка внутри отрезка времени, соответствующего каждой свече. В первом сценарии свечи A медведи пытались толкнуть цены вниз, но получили по носу. Во втором же сценарии они, получив по носу, затаили злобу и явно не успокоятся на достигнутом. Несмотря на несомненно бычий вид свечи A, второй сценарий рынка носит явно медвежий характер. Более того, именно так и должен разворачиваться серьезный ход рынка вниз. Согласно одному из основных свойств рыночных графиков, пробив уровень поддержки, рынок должен откатиться вверх – так, чтобы уровень поддержки стал уровнем сопротивления. Если медвежья тенденция на рынке сохранится, то будет новый ход вниз с прорывом следующего уровня поддержки и новый откат вверх. Что и отражено во втором сценарии свечи А.
Но самое главное в том, что при сравнении вариантов свеч А и B видно, что в любом случае A имеет намного больше медвежьих признаков, чем B. Это и отражается в их количественном измерении: код свечи A и его числовое представление (вес) равны 1100100 = 64 + 32 + 4 = 100, а для свечи B: 1100111 = 64 + 32 + 4 + 2 + 1 = 103.
Если представить себе, что те же свечи имеют черный цвет (для этого достаточно повернуть ось времени на рисунке 3 в обратную сторону), то медвежий характер свечи A станет еще более выраженным по сравнению с B. Для черного варианта свечи A будем иметь код 0010100 = 16 + 4 = 20, а для черного варианта свечи B: 0010111 = 16 + 4 + 2 + 1 = 23.
Рис. 3. Которая свеча более медвежья?
Какой именно сценарий имел место внутри свечи, и, тем более, куда рынок пойдет дальше, – мы не знаем. Но чем больший ход прошел рынок по направлению вниз, тем большее число уровней поддержки он мог пробить по дороге. Значит, можно ожидать большего разнообразия сценариев, в которых график затем продолжит ход вниз через эти пробитые уровни поддержки.
Поэтому при выборе кода для теней я исходил из соображения, что свеча с длинной верхней тенью является более бычьей, чем свеча с короткой верхней тенью, а свеча с длинной нижней тенью является более медвежьей, чем при короткой нижней тени.
«Я вообще ничего не придумывал!»
Тот же оппонент высказал упрек: здесь придуман какой-то громоздкий метод описания свечи, использующий к тому же искусственный прием с тремя диапазонами размеров элементов свечи. Посмотрим, что здесь искусственного и громоздкого.
1. Соотношение цен открытия и закрытия имеет самое главное значение для интерпретации смысла свечи. Таково их общепринятое понимание в биржевой торговле (open и close – цены начала и окончания сессии). Это хорошо известно также и трейдерам на валютном рынке, для которых цена закрытия часа (а тем более, дня) имеет явно выраженный психологический смысл. Поэтому при количественном измерении свечи open и close должны учитываться как главный фактор.
В индикаторе СandleCode характеристики тела свечи находятся в старших разрядах, следовательно, они и оказывают наибольшее влияние на значение веса.
2. Когда, глядя на свечу, вы оцениваете возможное последующее движение рынка, цвет свечи является главным фактором. Белая свеча (open < close) показывает состоявшееся бычье движение рынка, поэтому при прочих равных обстоятельствах она имеет более выраженный бычий смысл, чем черная свеча (open > close). Если рассматривать свечи по отдельности, не обращая внимания на соседние свечи графика, то любая белая свеча является более бычьей, чем любая черная, независимо от размеров их теней. Поскольку СandleCode выполняет численное кодирование именно изолированных свечей, то он удовлетворяет этому требованию: в старшем разряде ставится 1 для белой свечи и 0 для черной. Любая белая свеча будет «старше» любой черной: код белой свечи не может быть меньше 1000000 = 64, а код черной свечи не может быть больше 0111111 = 63.
3. Следующим по важности фактором является размер тела свечи. Чем больше расстояние между ценами открытия и закрытия, тем более выраженным является то настроение, на которое указывает цвет свечи (известная истина биржевой торговли: начинают день дилетанты, а заканчивают профессионалы). Белая свеча с большим телом является более бычьей, чем белая свеча с малым телом. Соответственно, черная свеча с большим телом выглядит как более медвежья, чем черная свеча с малым телом.
Какой именно размер тела соответствует категории «малый» и «большой», зависит от статистики рынка и от целей кодирования. Можно ввести много рангов: весьма малый, очень малый, малый, средний, типичный и т. д., и столько же градаций в сторону больших размеров. Если есть в этом необходимость, такую схему вполне можно построить, хотя я не вижу необходимости в подобном усложнении и использую только три категории размеров: малый, средний и большой.
Выделение нулевого размера тела в отдельную категорию представляется мне принципиальным, так как doji наглядно характеризует состояние неопределенности рынка. Математическое удобство состоит в том, что четыре размера тела изображаются двумя битами. Возражение, что нулевой размер надо приписывать не только собственно doji (open = close), но и свечам с очень малым телом (скажем, в 5-10 пунктов), ничего не меняет в подходе. Такой вариант легко может быть предусмотрен небольшим изменением вычислительной схемы.
Веса, назначаемые индикатором СandleCode, полностью соответствуют этим рассуждениям. Тело большой белой свечи (Long White) получает код 111. Среди всех белых свечей (первый разряд, равный 1) она является самой бычьей (два следующих разряда в ее коде – 11); а телу большой черной свечи (Long Black) присвоен код 000, среди всех черных свечей (первый разряд 0) она является самой медвежьей. Для белых свечей код тела тем выше, чем больше размер тела. Для черных свечей наоборот – код тем меньше, чем больше размер тела. Наиболее длинные белые свечи получают самые высокие коды, а длинным черным свечам присваиваются самые малые коды. Этим достигается наибольшее разнесение значений кодов свечей. Полезным следствием будет определенная статистическая устойчивость индикаторов, получаемых путем усреднения весов. Надеюсь, я смог убедить читателей, что кодирование и числовое взвешивание свечей в индикаторе СandleCode носят самый естественный характер. Фактически, я здесь вообще ничего не придумывал, просто на математическом языке записал те соображения, что хорошо известны каждому, кто занимается техническим анализом.
Использование полос Боллинджера
Было и такое возражение: в CandleCode для выбора порогов неправомерно использованы полосы Боллинджера (Bollinger Band). Индикатор Боллинджера тесно связан с нормальным (гауссовским) распределением, а распределение размеров свечей (или их элементов) является логарифмически нормальным. Сначала несколько слов о том, зачем вообще понадобились полосы Боллинджера. Проблема была связана с выбором порогов. Для каждого элемента свечи (тела, верхней тени, нижней тени) в методе предусмотрено два порога: верхний и нижний. Все элементы свечей, меньшие по размеру, чем нижний порог, считаются малыми. Те элементы, размеры которых попадают между нижним и верхним порогами, относятся к средним, а все, что выше верхнего порога, считается большим.
Во многих способах представления рыночных графиков предусмотрены те или иные пороговые критерии. Например, в представлении графиков крестики-нолики (Points and Figure Charts, P&F) любые движения цены, меньшие заданной пороговой величины, вообще не отражаются. Чтобы появился новый крестик или нолик, цена должна пройти достаточно большой ход.
Так же и в построении СandleCode: в одну категорию – скажем, среднее тело – относятся все свечи, размеры тела у которых находятся в диапазоне от нижнего порога до верхнего. Как и в P&F, многие движения рынка при этом не различаются, то есть получается более грубое представление графика. Ясно, что выбор порогов не может быть произвольным, на каждом рынке эти пороги будут своими. Для обоснованного выбора порогов необходим анализ размеров свечей. Первоначально я использовал гистограммы размеров тел и теней, построенные на определенных интервалах времени (для часовых графиков валют использовались интервалы в 4 недели).
Кстати сказать, гистограммы эти показывают, что распределения размеров свечей являются даже не логарифмически нормальными, а, пожалуй, еще хуже - экспоненциальными. Пороги на гистограммах я расставлял из соображений равновероятности: чтобы примерно 33% всех свечей имели малые тела, 33% – средние тела, 33% – большие. Найденные пороги фиксировались на некоторое время для вычислений индикаторов CandleCode. Потом гистограммы строились для новых 4-недельных интервалов и находились новые пороги.
Проблема даже не в том, что проводить периодически такой статистический анализ – дело утомительное. Самое главное, оказалось, что получаемые пороги обладают довольно большой устойчивостью: они мало изменялись со временем. Пороги для разных валют отличались между собой в пределах 10-20%, а изменения порогов такой величины почти не отражались на поведении усредненных индикаторов, построенных на основе CandleCode.
Это, кстати, свидетельствует о статистической устойчивости (robustness) процедур, основанных на усредненных индикаторах CandleCode, что является полезным свойством для финансовых решений.
Стало ясно, что процедуру выбора порогов надо автоматизировать, для чего я и применил полосы Боллинджера. Их использование для выбора порогов мне представляется правильным решением. Само по себе вычисление средних значений и дисперсий, входящих в полосы Боллинджера, не связано с какими-либо специфическими свойствами нормального распределения, они пригодны для анализа любых измерений и обычно дают хорошие оценки.
Если трейдер желает получить лучшее соответствие индикаторов CandleCode своему рынку, то он может построить гистограммы для выбранных графиков и по ним найти оптимальные пороги. Такая настройка индикаторов на конкретный рынок, наверное, позволит получить лучшие результаты в торговле. Но автоматический выбор порогов является универсальным, пригодным для всех рынков, и CandleCode в таком виде работает, что уже доказано!
Кодирование групп свечей
Было и такое замечание: в CandleCode рассматривается только одна свеча, тогда как надо учитывать соседние свечи. Именно в анализе групп свечей – суть восточной мудрости. С этим я действительно согласен. CandleCode присваивает числовой вес отдельно взятой свече. Для этого он и предназначен. В оправдание могу привести два довода.
Во-первых, для построения кода одной свечи индикатор Candle-Code все же анализирует рынок на довольно большом историческом интервале времени (окно усреднения в полосах Боллинджера). Поэтому в коде каждой свечи заложена большая статистическая информация о рынке.
Во-вторых, кодирование групп свечей – это просто другая задача. Представить одним числом не свечу, а целую группу свечей – еще более сложная проблема, чем взвешивание изолированной свечи. Возможно, CandleCode является частью решения этой задачи, возможно, кто-то пойдет совсем другим путем. Как бы то ни было, CandleCode соответствует тому назначению, для которого он был создан. А усредняя или каким-то другим способом объединяя коды соседних свечей, вы получаете уже некоторое описание именно групп свечей!
И такое возражение оппонентов было: количественное описание свечи – слишком сложная задача, даже сам Tushar Chande не взялся за нее!
Теперь уже ничего не поделаешь. Во время работы над CandleCode мне не была известна книга «The New Technical Trader», но позже я познакомился с предложенным там индикатором Qstick (Quantitative Candle-Stick), который представляет собой усредненное значение разности цен открытия и закрытия (close-open).
Конечно, в качестве численного представления свечи этот индикатор не впечатляет. Это все равно, что на рисунке 3 выбросить из сценариев развития рынка все, что не попадает внутрь диапазона тела (между горизонтальными линиями, проведенными через open и close). Важная часть информации останется (тело свечи), но картина рынка в целом будет потеряна.
Итоги дискуссии
Измерить одним числом настроение рынка, его психологические мотивы, заложенные в картине поведения рыночного графика, – очень сложная задача. С этим нельзя не согласиться. Задача эта не имеет единственного и окончательного решения. Различные подходы здесь имеют право на существование, и исследования в направлении анализа графиков японских свечей, несомненно, будут продолжаться. Алгоритмы кодирования на основе CandleCode и его вариантов являются настолько простыми, насколько это возможно в сложной задаче. И поскольку полученные индикаторы явно способны генерировать полезные сигналы, они заслуживают изучения и применения в большей степени, чем дальнейшего усложнения. За прошедшие годы индикатор CandleCode и торговые системы, построенные на его основе, были реализованы специалистами фирм-разработчиков программного обеспечения. Индикатор CandleCode и торговые системы на его основе доступны теперь в таких пакетах, как Equis MetaStock, Omega Research Trade Station, NeuroShell (Ward Systems), TradingSolutions (Neuro-Dimensions), Wealth-Lab, Investor/RT, TechniFilter Plus. Можно с уверенностью сказать, что они уже прошли испытание на различных финансовых рынках.
2002
Виктор Лиховидов
Литература:
1. Письмо в редакцию // Валютный спекулянт, 2002, № 2, с. 79.