Индикатор CCI
Индикатор CCI, о котором пойдет речь, достаточно популярен среди трейдеров. Он входит во все программы технического анализа и упоминается практически во всех пособиях по биржевой торговле. Но потенциал CCI в плане проектирования торговых систем и комбинаций с другими индикаторами пока в полной мере еще не изучен.
Общая характеристика
Любому трейдеру известно, что аббревиатура CCI означает Commodity Channel Index, что в переводе на русский язык звучит как индекс товарного канала (другие названия - индекс торгового канала, канальный индекс моментов). Этот индикатор представляет собой нормированный осциллятор момента, строящийся по формуле:
где T (Typical) = (High + Low + Close)/3,
MA(T) - n-периодная средняя скользящая от T,
D=1/n*СУММА i=1...nl Ti-MA(T)l - среднее отклонение от средней цены.
Сами разработчики индикатора и большинство авторов учебников рассматривают в качестве сигналов CCI пересечение линий +100 и -100. В данном случае сигналом к открытию длинной позиции служит пересечение индикатором отметки -100 снизу вверх, а сигналом к открытию короткой позиции -пересечение индикатором отметки +100 сверху вниз, как это показано на рисунке 1. То есть перед нами классическая торговля по осциллятору.
Существует и "альтернативное" толкование индикатора. Согласно этой интерпретации, позицию можно открывать не от линий +100 и -100, а от нулевой черты. Соответственно, пересечение отметки 0 снизу вверх служит сигналом к покупке, сверху вниз - сигналом к продаже. Практика показала, что такая система торговли имеет смысл на трендовом рынке, когда применение осцилляторов нецелесообразно.
Простейшая система
Для начала построим самую простую торговую систему на основе пересечения индикатором CCI нулевой отметки. Позиция будет открываться после пересечения линией индикатора нулевой линии: длинная - при пересечении вверх, короткая - при пересечении вниз соответственно. Закрытие будет идти по линиям +100 и -100: длинные позиции закрываются при пересечении CCI линии +100 сверху вниз, короткие - при пересечении линии -100 снизу вверх. Фактически это полноценная торговая система, созданная только из одного индикатора. Единственным ее недостатком является отсутствие стопов, но к этой теме мы еще вернемся.
Чтобы протестировать систему в MetaStock, надо написать и ввести в MetaStock System Tester следующий код:
Enter Long:
CCI(opt1) > 0 AND Ref (CCI(opt1), -1) < 0 Close Long:
CCI(opt1) < 190 AND Ref (CCI (opt1),-1 ) > 100 Enter Short:
CCI(opt1) < 0 AND Ref (CCI (opt1), -1 ) > 0 Close Short:
CCI(opt1) > -190 AND Ref(CCI
(opt1),-1 ) < -100
Переменная Opt1 означает период индикатора. Вручную найти оптимальный период непросто, если не сказать - невозможно, поэтому лучше определить его автоматически с помощью тестирования в MetaStock. На дневном графике валютной пары EUR/USD тестирование выдает в качестве оптимального периода значение 7. Следовательно, конечный вид кода торговой системы будет такой:
Enter Long:
CCI(7) > 0 AND Ref( CCI(7),-1 ) < 0 Close Long:
CCI(7) < 190 AND Ref( CCI(7),-1 ) > 100 Enter Short:
CCI(7) < 0 AND Ref( CCI(7),-1 ) > 0 Close Short:
CCI (7) > -190 AND Ref( CCI(7),-1 ) < -100
Тестирование системы на исторических данных EUR/USD с февраля 2001 г. по январь 2003 г. показало среднемесячную прибыль 355 пунктов. Однако пока не стоит обольщаться: подобные результаты тестирования на исторических данных вовсе не означают, что в реальном времени система будет такой же прибыльной. Из 77 сделок, совершенных за это время, прибыльными оказались 40, а 37 -убыточными. То есть "точность попадания" составляет 52%. Это довольно рискованный показатель. Кривая доходности хоть и повышается, но не показывает четкой направленности: рост носит, скорее, хаотический характер.
Такая система, безусловно, требует оптимизации. Ее цель - устранить два недостатка: малое количество прибыльных сделок и допуск больших потерь (максимальная потеря - 1700 пунктов против максимальной прибыли 2400 пунктов за сделку).
Подключаем стоп-лоссы
Важно, чтобы любой убыток в трейдинге, в том числе и системном, покрывался последующей прибыльной сделкой. Иначе никакие гениальные решения в области технического анализа не спасут от отрицательного исхода торговли. В данном случае мы должны минимизировать возможный убыток по одной сделке.
Единственный способ это сделать при системной торговле, когда трейдер не всегда в полной мере контролирует открытую позицию, - заранее выставлять стопы. В данном случае возможным решением является выставление стоп-лосса, соответствующего волатильности рынка в текущий момент. Для определения волатильности можно использовать Average True Range - один из многих индикаторов, в основу которых заложена концепция волатильности (можно также экспериментировать с другими подобными индикаторами, принципы те же).
Во второй торговой системе и стоп-лосс, и плавающий стоп-лосс ставятся по текущему значению ATR. В результате код системы приобретает вид:
Enter Long
CCI(opt1) > 0 AND Ref( CCI(opt1), -1 ) < 0
Close Long
LOW < (Ref(LOW,-1)-Ref(opt3*ATR (opt2),-1) )
Enter Short
CCI(opt1) < 0 AND Ref( CCI(opt1), -1 ) > 0
Close Short
HIGH > (Ref(HIGH,-1) + Ref(opt3 * ATR (opt2) ,-1) )
Переменная Opt1, как и в первой системе, означает период индикатора CCI, переменная Opt2 -период индикатора ATR, Opt3 - количество величин ATR. В результате тестирования можно определить, что оптимальный период CCI равен, как и в первом случае, 7, оптимальный период ATR - 2, оптимальное количество величин ATR - 1.
Таким образом, в конечном виде система будет выглядеть так:
Enter Long
CCI(7) > 0 AND Ref( CCI(7),-1 ) < 0
Close Long
LOW < (Ref(LOW,-1)-Ref(1* ATR(2), -1) )
Enter Short
CCI(7) < 0 AND Ref( CCI(7),-1 ) > 0
Close Short
HIGH > (Ref(HIGH,-1)+Ref(1* ATR (2), -1) )
Среднемесячная прибыльность данной системы по EUR/USD за тот же период составляет 509 пунктов. В данном случае мы достигли приемлемого среднего соотношения прибылей/убытков по сделке - 1.93. Но вместе с тем, по сравнению с первой системой, значительно уменьшилось количество прибыльных сделок: только 38% вместо 52%.
На графике (рис. 2) видно, что кривая прибыльности растет при трендовом рынке, а при боковом тренде падает. Следовательно, недостаток системы заключается в том, что она не отличает сильные сигналы от слабых, и в результате большая часть сделок заканчивается стопами.
Попытка построить систему, основанную на пробое волатильности, результатов не дала - она оказалась менее прибыльной, чем вторая модификация. Поэтому единственно возможным решением в данном случае может быть торговая система, в которой фильтром служит доминирующий на рынке тренд.
CCI + экспоненциальная скользящая средняя
Следующей модификации торговой системы на основе индикатора CCI позиции будут открываться только по тренду. Сигналы CCI против доминирующего тренда игнорируются. Доминирующий тренд определяется простейшим способом - по расположению цены относительно экспоненциальной скользящей средней.
Можно сформулировать условия принятия решений. Длинная позиция открывается, если кривая CCI пересекает нулевую линию снизу вверх, при этом текущая цена выше экспоненциальной скользящей средней. Короткая позиция открывается, если кривая CCI пересекает нулевую линию сверху вниз, при этом текущая цена ниже экспоненциальной скользящей средней. Условия закрытия позиций остаются прежними. Код системы в MetaStock будет выглядеть так:
Enter Long
CCI(opt1) > 0 AND Ref( CCI(opt1), -1 ) < 0 AND C > Mov(C,opt2,E)
Close Long
LOW < (Ref(LOW,-1)-Ref(1* ATR(opt3), -1) )
Enter Short
CCI(opt1) < 0 AND Ref( CCI(opt1), -1 ) > 0 AND C < Mov(C,opt2,E)
Close Short
HIGH > (Ref(HIGH,-1)+Ref(1*ATR (opt3) ,-1) )
Переменная Оpt1 - это период CCI, переменная Оpt2 - период экспоненциальной скользящей средней, Оpt3 - период ATR. Результаты тестирования на валютной паре EUR/USD показали, что прежние значения периодов CCI и ATR остаются в силе, а оптимальный период EMA - 7. Таким образом, готовый код системы для MetaStock следующий:
Enter Long
CCI(7) > 0 AND Ref( CCI(7),-1 ) < 0 AND C > Mov(C,7,E)
Close Long
LOW < (Ref(LOW,-1)-Ref (1*ATR (2),-1) )
Enter Short
CCI(7) < 0 AND Ref( CCI(7),-1 ) > 0 AND C < Mov(C,7,E)
Close Short
HIGH > (Ref(HIGH,-1)+Ref (1*ATR (2) ,-1)
Эта система приносит по евро среднемесячную прибыль 821 пункт. По остальным показателям она также значительно превосходит не только предыдущие системы, но и разрекламированные "черные ящики" на основе нейросетей. Средняя прибыль по сделке превышает средний убыток более чем в 2 раза. Максимальная прибыль по сделке превышает максимальный убыток в 4 раза.
На пересечении двух CCI
Торговая система на пересечении двух CCI является несколько нестандартной интерпретацией этого индикатора. В одном окне открываются два индикатора CCI с разными периодами, и если линия индикатора с меньшим периодом пересекает линию индикатора с большим периодом сверху вниз - открывается длинная позиция. Если же линия индикатора с большим периодом пересекает сверху вниз линию индикатора с меньшим периодом - открывается короткая позиция. Закрытие длинных позиций осуществляется одновременно с открытием коротких, закрытие коротких - вместе с открытием длинных позиций, то есть реверсивным способом. В таком виде код системы в MetaStock будет выглядеть, как:
Enter Long
Cross( CCI(opt1 ), CCI(opt2 ) ) AND
opt1 < opt2
Close Long
Cross( CCI(opt2 ), CCI(opt1) )
Enter Short
Cross( CCI(opt2 ), CCI(opt1) ) AND
opt1 < opt2
Close Short
Cross( CCI(opt1 ), CCI(opt2 ) )
Opt1 и Оpt2 - периоды кривых CCI. При тестировании на EUR/USD (дневной график) выяснены оптимальные значения: период первой кривой - 8, второй кривой - 16. Следовательно, готовый код системы будет такой:
Enter Long
Cross( CCI(8 ), CCI(16 ) )
Close Long
Cross( CCI(16 ), CCI(8) )
Enter Short
Cross( CCI(16 ), CCI(8) )
Close Short
Cross( CCI(8 ), CCI(16 ) )
Система дает по евро среднемесячную прибыль 950 пунктов, выдавая сигналы достаточно часто как в трендовом рынке, так и при боковом тренде. Количество выигрышных сделок - 41, проигрышных - 37. Правда, максимальный выигрыш лишь ненамного превышает максимальную потерю. Попробуем оптимизировать систему с помощью плавающего стоп-лосса на основе волатильности, как в предыдущих случаях. Тогда код тестируемой в MetaStock системы будет выглядеть как:
Enter Long
Cross( CCI(8 ), CCI(16 ) )
Close Long
LOW < (Ref(LOW,-1)-Ref(opt1*ATR (opt2),-1))
Enter Short
Cross( CCI(16 ), CCI(8) )
Close Short
HIGH > (Ref(HIGH,-1)+Ref (opt1* ATR (opt2) ,-1))
Тестирование дает такой же результат, из чего можно сделать вывод о том, что оптимизировать надо не выход из рынка, а вход в него. Можно так же, как и в предыдущих системах, применить экспоненциальную скользящую среднюю. Тогда код будет следующим:
Enter Long
Cross( CCI(8 ), CCI(16 ) ) AND C > Mov(C,opt1,E)
Close Long
LOW < (Ref(LOW,-1)-Ref(opt2*ATR (opt3) ,-1))
Enter Short
Cross( CCI(16 ), CCI(8) ) AND C < Mov (C,opt1,E)
Close Short
HIGH > (Ref(HIGH,-1)+Ref(opt2* ATR(opt3) ,-1))
Переменная Оpt1 - период скользящей средней, переменная Оpt2 - количество величин ATR, а Оpt3 - период ATR. В данном случае рекомендуется применять экспоненциальную скользящую среднюю с периодом 5, количество ATR устанавливать 4, период ATR - 10. Готовый код работоспособной системы будет выглядеть так:
Enter Long
Cross( CCI(8 ), CCI(16 ) ) AND C > Mov(C,5,E)
Close Long
LOW < (Ref(LOW,-1)-Ref(4*ATR (10) ,-1))
Enter Short
Cross( CCI(16), CCI(8)) AND C < Mov(C,5,E)
Close Short
HIGH > (Ref(HIGH,-1)+Ref(4*ATR (10) ,-1))
Доходность системы - в среднем 1215 пунктов в месяц. На графике (рис. 3) видно, что система рассчитана на долгосрочных инвесторов, и кривая доходности близка к идеальной. Кстати, видно, что тенденция к повышению евро сохраняется.
Заключение
Не следует питать иллюзий, что, применив все эти системы в реальном времени, можно гарантированно заработать указанное количество пунктов, не меньше. CCI - индикатор довольно капризный. Если при тестировании приходится иметь дело с ретроспективой рынка, иными словами, с его статичным изображением, то в реальном времени, перед тем как застыть на каком-либо значении, кривая индикатора может нередко описывать крутые виражи.
CCI может реагировать на малейшие изменения рынка и давать ложные сигналы. Программа технического анализа будет их бесстрастно фиксировать. Если, например, после пересечения линий стохастики обратный процесс вряд ли произойдет, то кривая индекса товарного канала может колебаться вокруг критической точки на протяжении целого дня. Дабы удостовериться, что сигнал был не ложным, нужно, чтобы на графике прошло еще 2 свечи или бара.
CCI: Правила для трейдеров
1. Открывать длинные позиции, когда CCI превысит +100%. Закрывать, когда индекс опустится ниже +100%.
2. Открывать короткие позиции, когда CCI опустится ниже -100%. Закрывать, когда индекс поднимется выше -100%.
Правило нулевого уровня (Zero CCI) для рисковых трейдеров
1. Покупать при пересечении вверх нулевого уровня индекса CCI.
2. Продавать при пересечении вниз нулевого уровня. Из книги В. Э. Меладзе
"Курс технического анализа"
Роман Мамчиц