суббота, 22 сентября 2012 г.

Индикаторы BW и %b

Индикатор BW (Bands Width)

Индикаторы BW и %b описаны Боллинджером в его книге, однако в стандартной поставке MT4 отсутствуют. 

Первый из этих индикаторов - BW (Bands Width) - показывает ширину ленты в отдельном окне. Второй - %b - показывает положение цены в ленте в процентах.

Предлагаемые здесь индикаторы несколько изменены от предлагаемых Боллиджером. Во первых, индикатор BW. Т.к. для границ введен режим построения как средней линии от полученных отклонений (MA), то расстояние от верхней границы (TOP LINE, TL) до средней линии ленты (MIDDLE LINE, ML) не равно расстоянию от нижней границы (BOTTOM LINE, BL) до средней линии.

Индикатор строится в отдельном окне.

Полный список параметров приводится ниже:

method        - метод построения: 0 - в значениях цены, 1 - в пунктах
ext           - ширина: 0 - TL-BL, 1 - TL-ML, 2 - ML - BL

// параметры модифицированной полосы Боллинджера
// параметры средней линии
MA_Period     - период

MA_Shift      - сдвиг
MA_Mode       - метод построения MA
MA_Price      - используемая цена (от 0 до 6)

// параметры построения отклонений
Bands_Period  - период
Bands_Dev     - коэффициент
Bands_H       - степень
 

// параметры MA для сглаживания границ
Bounds_Period - период
Bounds_Shift  - сдвиг
Bounds_Mode   - метод построения MA


// параметры построения сигналов
// параметры МА1 сглаживания ширины (сигнал 1)
sig1_Period   - период
sig1_Shift    - сдвиг
sig1_Mode     - метод построения MA


// параметры МА2 сглаживания ширины (сигнал 2)
sig2_Period   - период
sig2_Shift    - сдвиг
sig2_Mode     - метод построения MA
 

В отдельном окне будут отображены 3 линии: выбранная параметрами method и ext ширина, MA от ширины и MA от MA от ширины.
В программном коде буфер с индексом 0 соответствует значению ширины, с индексом 1 - значение MA от ширины, c индексом 2 - MA от MA от ширины.

Этот индикатор я применяю в советниках.

Для отображения на графике используется индикатор-обертка, в котором параметры полосы задаются именем комплекта параметров (см. предыдущее сообщение), а также задается отображаемые линии параметром view.

Вот список параметров индикатора-обертки:

view          - отображение: 0-main, 1-sig1, 2-sig2, 3-main/sig1, 4-main/sig2,
                5-sig1/sig2
method        - метод построения: 0 - в значениях цены, 1 - в пунктах
ext           - ширина: 0 - TL-BL, 1 - TL-ML, 2 - ML - BL

// параметры модифицированной полосы Боллинджера
name          - имя комплекта параметров 

// параметры построения сигналов
// параметры МА1 сглаживания ширины (сигнал 1)
sig1_Period   - период
sig1_Shift    - сдвиг
sig1_Mode     - метод построения MA


// параметры МА2 сглаживания ширины (сигнал 2)
sig2_Period   - период
sig2_Shift    - сдвиг
sig2_Mode     - метод построения MA








На приведенном рисунке отображены 2 ленты с периодами 144(розовый) и 55(желтый). Внизу показан индикатор BW: в первом окне отображена полная ширина для ленты с периодом 55 (белая линия) и 1-я сигнальная линия (период 8, голубая линия), во втором окне показаны два индикатора BW для ленты с периодом 55, одна из которых (белая) показывает ширину от верхней линии до средней линии, а другая (красная) - ширину от средней линии до нижней.

Для построения к границам применяется MA с периодом 5 и методом построения LWMA.
Хорошо видно, что в случае тренда ширина от средней линии до границы в сторону тренды меньше ширины от средней линии до противоположной границы.



Индикатор %b

Следующий индикатор показывает положение цены внутри ленты. В книге Боллинджера он носит название %b. Я изменил название на b% для более удобного, на мой взгляд, восприятия (чисто субъективно) в списке индикаторов MT4. Думаю что это не принципиально.

В описании Боллинджера значения индикатора изменяются от 0 до 100% при нахождении цены внутри ленты. При выходе за пределы нижней границы значения индикатора имеют отрицательные значения, при выходе за верхнюю границу значения индикатора рпинимают значения выше 100%. Значение 50% соответствует средней линии.

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

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


Еще одним дополнением является то, что для построения индикатора берется не цена, а значения MA с задаваемыми параметрами. При построении MA с периодом 1, сдвигом 0, методом построения SMA и ценой Close мы получим цену, если это необходимо. Однако диапазон применения индикатора сразу возрастает.

Вот полный список параметров индикатора:

// параметры анализируемой MA
period        - период
shift         - сдвиг
mode          - метод построения MA
price         - используемая цена (от 0 до 6)

// параметры модифицированной полосы Боллинджера
// параметры средней линии
MA_Period     - период

MA_Shift      - сдвиг
MA_Mode       - метод построения MA
MA_Price      - используемая цена (от 0 до 6)

// параметры построения отклонений
Bands_Period  - период
Bands_Dev     - коэффициент
Bands_H       - степень
 

// параметры MA для сглаживания границ
Bounds_Period - период
Bounds_Shift  - сдвиг
Bounds_Mode   - метод построения MA

 // параметры построения сигналов
// параметры МА1 сглаживания ширины (сигнал 1)
sig1_Period   - период
sig1_Shift    - сдвиг
sig1_Mode     - метод построения MA


// параметры МА2 сглаживания ширины (сигнал 2)
sig2_Period   - период
sig2_Shift    - сдвиг
sig2_Mode     - метод построения MA
 

Значения номеров буферов при программном обращении аналогично индикатору BW.

Для графиков, как всегда, используется индикатор-обертка с параметрами:

view          - отображение: 0-main, 1-sig1, 2-sig2, 3-main/sig1, 4-main/sig2,
                5-sig1/sig2

// параметры анализируемой MA
period        - период
shift         - сдвиг
mode          - метод построения MA
price         - используемая цена (от 0 до 6)
// параметры модифицированной полосы Боллинджера
name          - имя комплекта параметров 

// параметры построения сигналов
// параметры МА1 сглаживания ширины (сигнал 1)
sig1_Period   - период
sig1_Shift    - сдвиг
sig1_Mode     - метод построения MA


// параметры МА2 сглаживания ширины (сигнал 2)
sig2_Period   - период
sig2_Shift    - сдвиг
sig2_Mode     - метод построения MA








На приведенном рисунке показаны два окна с индикаторм b% для полосы с периодом 144. Первое окно - главная линия индикатора относительно цены закрытия. Второе окно - значения индикатора и сигнальная линия с периодом 3. Четко видна дивергенция 20 сентября между значением индикатора и ценой на графике. Пересечения с сигнальной линией показывают коррекционные движения цены.

Ссылка для скачивания индикаторов:bw.zip (1.4Mb) 



В следующих сообщениях: индикаторы для анализа лент, построеные по принципу индикатора ROC (Rate Of Change), построение дополнительных уровней лент.

вторник, 11 сентября 2012 г.

Модифицированные ленты Боллинджера

Первое сообщение будем считать отладочным.
Теперь по порядку.  Пару лет назад мне попалась книга "Боллинджер о лентах Боллинжера". После ее прочтения сразу же захотелось применить полученные знания в терминале Metatrader 4 (далее MT4) и сразу же появились проблемы: во первых количество отклонений можно было задавать только целым числом, во вторых, что более серьезно, в составе не было встроенных очень нужных индикаторов ширины ленты BandsWidth (далее BW) и %b.
Первая проблема была решена довольно быстро - в кодовой базе MT4 есть исходный код индикатора Bollinger Bands http://codebase.mql4.com/ru/243, в котором тип параметра BandsDeviations установлен как double.
Вторая проблема оказалась сложней - пришлось написать код индикаторов самостоятельно. 
И тут началось самое интересное. При написании кода этих дополнительных индикаторов возникло несколько идей относительно самого индикатора полос. 
Первое, что хочется сразу изменить - это указывать метод построения центральной тенденции. В книге указано, что мерой центральной тенденции является простая скользящая средняя. Что мешает нам добавить метод построения в качестве параметра?

Далее в качестве параметра добавляем количество точек для построения отклонений, т.к. во встроенном индикаторе количество точек и период скользящей средней совпадает.
Следующий шаг - добавить в качестве параметра степень для расчета отклонений. Что это значит? При расчете разность между средним значением и данными возводится в квадрат, далее из средней суммы квадратов извлекается квадратный корень. Возведение в квадрат заодно устраняет отрицательные значения разностей. А можно эту степень сделать произвольной. Т.е., мы будем возводить разность в степень H, а среднюю от суммы этих степеней возводить в степень 1/H. При значении H=2 получаем исходную формулу.
Проще говоря, вот текст из описания индикатора, размещенного по выше указанной ссылке:
"
Полосы Боллинджера формируются из трех линий. Средняя линия (MIDDLE LINE, ML) — это обычное скользящее среднее.

ML = SUM (CLOSE, N) / N = SMA (CLOSE, N)


Верхняя линия (TOP LINE, TL) — это та же средняя линия, смещенная вверх на определенное число стандартных отклонений (D).

TL = ML + (D * StdDev)

Нижняя линия (BOTTOM LINE, BL) — это средняя линия, смещенная вниз на то же число стандартных отклонений.
BL = ML — (D * StdDev)
StdDev = SQRT (SUM ((CLOSE - SMA (CLOSE, N))^2, N)/N)
где:
  • SUM (..., N) — сумма за N периодов;
  • CLOSE — цена закрытия;
  • N — количество периодов, используемых для расчета;
  • SMA — простая скользящая средняя;
  • SQRT — квадратный корень;
  • StdDev — стандартное отклонение:
 "

Мы в формуле для ML метод SMA заменяем на задаваемый параметром.
Формулу для StdDev заменяем на следующую:

StdDev =  (SUM ((PRICE - MA (CLOSE, M))^H, M)/M))^1/H

Значение M может отличаться от значения N, используемого для построения линии ML.

Ну и последнее - верхняя и нижняя линии индикатора. А что, если рисовать среднюю от рассчитанных значений для этих линий. Причем, также как и для центральной тентенции, задавать метод построения этой средней.
В результате получается индикатор со следующими параметрами:
 - параметры построения средней линии:
  • MA_Period - период построения ML;
  • MA_Shift - сдвиг ML;
  • MA_Mode - метод построения ML;
  • MA_Price - цена, используемая для построения ML.
- параметры построения отклонений:
  • Bands_Period - период для усреднения отклонений;
  • Bands_Dev - коэффициент;
  • Bands_H - используемая степень.
- параметры усреднения границ ленты:
  • Bounds_Period - период;
  • Bounds_Shift - сдвиг;
  • Bounds_Mode - метод построения.
Исходный файл - !bands.mq4
В дальнейшем он будет называться основным или базовым индикатором.
Этот индикатор я использую в советниках, других индикаторах и скриптах, а также при подборе параметров.

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

Исходный файл индикатора - !bandsView.mq4
Этот индикатор я использую для нанесения на графики.
Параметры:
  • view - способ отображения: 0 - показать все линии, 1 - верхняя и средняя линии, 2 - средняя и нижняя линии, 3 - верхняя и нижняя границы, 4 - только средняя линия (бесполезный режим, сделан только для полноты - при выборе этого режима фактически отображается MA), 5 - верхняя линия, 6 - нижняя линия, 7 - верхняя или нижняя линия в зависимости от наклона средней линии, т.е если MA направлена вверх, то показывается верхняя линия и наоборот, 8 - аналогично 7, но при наклоне вверх показывается нижняя линия и наоборот (этот режим использую для установки stoploss);
  • name - имя комплекта параметров.
Имена глобальных переменных формируются по правилу:
name-<имя параметра основного индикатора>
Хорошим свойством МТ4 является то, что значения глобальных переменных сохраняются от сеанса к сеансу.

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

В следующих сообщениях речь пойдет об индикаторах !bw - ширина ленты и индикаторе %b. Т.к. изменился базовый индикатор и у него появились новые свойства, то и производные индикаторы bw и %b также получили дополнительные свойства.
Далее будут описаны дополнительные индикаторы для анализа графиков на основе модифицированных лент Боллиджера, а также практические приемы такого анализа.

воскресенье, 2 сентября 2012 г.

Первая тема - модифицированные индикаторы, основанные на ленте Боллинджера (Bollinger Bands), реализация которых выполнена для терминала Metatrader 4 (MT4).

Начнем с главного индикатора - индикатора, наносимого на график и рисующего саму полосу Боллинджера.

Стандартный индикатор терминала MT4 Bollinger Bands доработан для расширения функциональности. Доработки коснулись:
1. Изменен тип параметра "Отклонения" на double
2. Отклонения рассчитываются с заданным параметром степенью (стандартное значение 1/2 - корень квадратный).
3. Задаются все параметры МА для средней линии.
4. Задается параметр для периода расчета верхней и нижней линий индикатора. Он может отличаться от периода средней линии.
5. Верхняя и нижняя линия могут задаваться как МА.

Пример отображения индикатора с параметрами 
    view         =0      способ отображения
    MA_Period    =13;    период средней линии
    MA_Shift     =0;     сдвиг
    MA_Mode      =3;     метод построения средней линии (MODE_LWMA)
    MA_Price     =6:     цена (PRICE_WEIGHTED);
    Bands_Period =13;    период для расчета верхней и нижней линий
    Bands_Dev    =1.618; отклонение
    Bands_H      =2;     степень (квадрат/корень квадратный) 
    Bounds_Period=3;     период усреднения верхней и нижней линий
    Bounds_Shift =0;     сдвиг
    Bounds_Mode  =1;     метод построения MODE_EMA

    view         =0;
    MA_Period    =144;
    MA_Shift     =0;
    MA_Mode      =0;
    MA_Price     =6:
    Bands_Period =144;
    Bands_Dev    =1.618;
    Bands_H      =2;
    Bounds_Period=5;
    Bounds_Shift =0;
    Bounds_Mode  =2;

показан на скриншоте:

Ссылка для скачивания (с книгой "Боллинджер о лентах Боллинджера"):
Ссылка для скачивания (без книги):

Недостатком является большое количество параметров. Этот недостаток можно устранить методом создания индикаторов-оберток. Об этом - в следующих сообщениях.

Подписка на рассылку:
FxMail.ru
Индикаторы для MT4