16 February 2008

TradeStrategy - Теругольники и Фибоначчи

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

Сразу скажу что буду рассматривать стратегии связанные только с ТА (техническим анализом). Фундамент оставим Соросу :)

Начнем со стратегий, которые можно использовать на внутридневной торговле.

Первой рассмотрю ТС на базе треугольников и Фибоначчи.

Идея не нова и интерпретаций ее бесчисленное множество, одно из них (Автор J. Mark Kinoff ) является данная:


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

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

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

Понаблюдав за этими ребятами, я пришел к выводу, что наличие жесткой утренней стратегии снижает вероятность получения прибыли. Если вы спросите у трейдеров, куда сегодня двинется рынок, почти у каждого есть на этот счет собственное мнение, однако, наибольшего успеха добиваются, как правило, те, чей ответ звучит так: "Мне все равно, главное заработать сегодня что-нибудь". Может есть смысл последовать этому совету?

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

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

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

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

Преимущество стратегии состоит в том, что она одинаково хорошо работает на любом промежутке времени.

Правила входа

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

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

Рисунок 1. Треугольник строится через последние максимальные и минимальные точки свинга.

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

Рис. 2: Расположение ордеров входа.

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

Правила выхода

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


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

На рис. 3, противоположные стрелочки указывают на то, что прошло 50% времени, если считать от основания треугольника по самой длинной стороне (где линии пересекаются). По этой середине мы рассчитываем высоту треугольника в пунктах. Высотой является расстояние между верхней трендлинией и нижней трендлинией в срединной точке треугольника. Открываем короткую позицию на 107.15, это на 5 тиков выше последнего максимума, который или касается, или пересекает линию. Наш начальный стоп будет как раз под вершиной, в данном случае это 107.25. Обратите внимание - не имеет значения, на каком уровне находится ордер! Слишком многие трейдеры выставляют свои стоп-лоссы в зависимости от заполнения ордеров, но между ними нет связи. Всегда располагайте стоп как раз за вершиной треугольника. А затем забирайте то, что вам предлагает рынок.

Для подсчета целевого уровня по Фибоначчи, используйте идеальную точку входа. Чтобы определить ее, добавляем к верхней точке треугольника в срединной точке его высоту, высчитанную через срединную точку. Таким образом, высчитывается оптимальная цель. В нашем случае высота треугольника в срединной точке составляет 20 пунктов оптимальная цель 106.95 пункта (идеальный уровень входа 107.15 + высота в срединной точке 20). На рынке с четко выраженным трендом (по определению многих индикаторов), уровень расширения вверх, скорее всего, будет достигнут.

Целевой ценовой уровень рассчитывается путем умножения высоты треугольника в срединной точке - 39 на коэффициент Фибоначчи 1.618, затем добавляем нашу цену на входе, 107.15 + (20* 1.618). Получаем приблизительно 106.80. Если бы дошли до этой точки, то можно ожидать разворота и подождал образования еще одного паттерна сжатия для повторного входа на рынок. В данном примере мы вошли на рынок в конце фазы сжатия и вышли в фазе расширения, при этом мы не имеем ни малейшего понятия, куда рынок двинется потом.

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

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

Более осторожным вариантом будет забрать свои деньги из игры на оптимальном целевом уровне (161.8%) и присмотреть следующий удачный уровень для открытия позиции.

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



Рис.4. Цена развернулась на целевом уровне. Это происходит часто.Драматический разворот. После того как была достигнута верхняя цель на уровне расширения Фибоначчи, произошел разворот.

11 February 2008

OsMA for MetaTrader4

После небольшого перерыва снова вернулся к форексу.

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

В двух словах о нем:
OsMA "Oscillator - Moving Average of Oscillator"
(Осцилятор Скользящего Среднего)
OsMA - в общем случае разность между осцилятором и сглаживанием осцилятора. В данном случае в качестве осцилятора используется основная линия MACD, а в качестве сглаживания - сигнальная линия MACD
Параметры:
1. N - период усреднения для сигнальной линии.
Расчет (на основе MACD):
OsMAj = MACDj - MAvej(MACD, N)

ИНТЕРПРЕТАЦИЯ
Сигнал на покупку дается, когда OsMA перестает снижаться и начинает расти. Сигнал на продажу дается, когда OsMA перестает расти и начинает понижаться. Хороший сигнал дает дивергенция цены и OsMA.

Для простоты использования разукрасим его.
Открываем Метатрейдер, выбираем OsMA, в меню Modify, Заменяем на ниже приведенный текст, компилируем, пользуемся.

Код:

//+------------------------------------------------------------------+
//| OsMA.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| v.1.1 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, modify by Faust"
#property link "http://faustforex.blogspot.com/"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
//#property indicator_color1 Silver
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double OsmaBuffer1[];
double OsmaBuffer2[];
double MacdBuffer[];
double SignalBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(4);
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_HISTOGRAM);


SetIndexDrawBegin(0,SignalSMA);
SetIndexDrawBegin(1,SignalSMA);
IndicatorDigits(Digits+2);
//---- 3 indicator buffers mapping
SetIndexBuffer(0,OsmaBuffer1);
SetIndexBuffer(1,OsmaBuffer2);
SetIndexBuffer(2,MacdBuffer);
SetIndexBuffer(3,SignalBuffer);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Moving Average of Oscillator |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st additional buffer
for(int i=0; i<limit; i++)
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd additional buffer
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- main loop
for(i=0; i<limit; i++)
{
double current=MacdBuffer[i]-SignalBuffer[i];
double prev=MacdBuffer[i+1]-SignalBuffer[i+1];
if(prev<=current)
{
OsmaBuffer1[i]=current;
OsmaBuffer2[i]=0;
}
else
{
OsmaBuffer2[i]=current;
OsmaBuffer1[i]=0;
}
}
//---- done
return(0);
}
//+------------------------------------------------------------------+