Консультант-советник трейдера на основе расширенного анализа MACD

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

А вдруг для анализа забрать три последних бара, то количество и качество информации существенно расширятся.
Метод скрипта основан на сравнении разностей приростов нулевого, первого и второго баров гистограммы MACD. К примеру: в случае если величина разности между значениями текущего и прошлого бара больше величины разности между значениями прошлого и предпредыдущего баров, то тренд, (либо тенденция) — растущая и с хорошим ускорением, в случае если разность меньше, то тренд тормозит скорость собственного роста (тренд затухающий) и необходимо думать о закрытии долгой позиции.
Мало о самом скрипте: Скрипт возможно применять, как минимум, в двух направлениях. Первое — применение как советника-консультанта на протяжении торговли для определения момента входа в рынок и выхода из него, конечно для определения количества сделки (лота) в зависимости от положения, направления и хорошего либо отрицательного ускорения прироста количества гистограммы. Второе назначение – применение скрипта при проведении анализа прошедших событий (на истории). При присоединении скрипта к графику с целью проведения анализа выводится окно особенностей, в котором возможно задать (поменять) номер начального бара и задать любой разбираемый период графика.

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

//+——————————————————————+ //| TrendMACD v5.mq4 | //|Анализ гистограммы MACD по трем последним барам Genkov | //| genkov@bk.ru | //+——————————————————————+ #property copyright "Genkov" #property link "genkov@bk.ru" //в случае если ниже лежащую строчок закомментировать, то окно со особенностями не будет выводиться #property show_inputs extern int a = 0; // тут возможно задать любой начальный исследуемый бар //extern int period = 1; // 1 60 секунд //extern int period = 5; // 5 мин. //extern int period = 15; // 15 мин. extern int period = 30; // 30 мин. //extern int period = 60; // раскомментируйте необходимый Вам период //extern int направляться = 240; // 4 часа //extern int period = 1440; // сутки //extern int period = 10080; // семь дней //extern int period = 43200; // месяц //+——————————————————————+

Главную переменную для номера начального бара «а» и переменную для периодов «period» поставим в глобальные переменные скрипта. А внутренние переменные для сравнений и расчётов поместим по окончании запускающей функции:

int start() { int b,c; b=a+1; c=b+1; //—- double Macd_h1_a= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,a); double Macd_h1_b= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,b); double Macd_h1_c= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,c);

Для визуального контроля расчетов тут возможно поместить оператор Print(), что может понадобиться при проведении анализа прошедших событий (на истории). Множитель «*1000» (возможно и второй) нужен для большей читабельности взятых результатов.

Print(" Macd_h1_c= ",Macd_h1_c*1000," Macd_h1_b= ", Macd_h1_b*1000," Macd_h1_a= ",Macd_h1_a*1000);

В случае если Вам пригодится отключить сообщения (Alert-ов), в операторе «int Message = 1;» нужно заменить единицу на ноль. Наряду с этим, дабы информация где-то отражалась, нужно закомментировать операторы «int Message = 1;» и « Message == 1;» все последующие операторы Alert() заменить на операторы Print(), тогда данные возможно будет видеть во вкладке терминала «Специалисты». Скрипт предусматривает возможность расчета времени работы скрипта при помощи функции GetTickCount(). Для этого в начале работы программы помещаем следующий оператор:

int start=GetTickCount(); //… //…, а в конце программы: Alert(" Время вычисления ", GetTickCount()-start," миллсек");

Главный код программы скрипта складывается из блоков величины состояния (отношений и сравнения положения разностей значений гистограммы на исследуемых барах). В скрипте анализируются главные значимые вероятные переходные состояния (обстановки). К примеру:

Всего в программе 6 блоков сравнения: с 1 по 2 — блок для MACD ниже оси // ———————-для MACD ниже оси————————-1—&
if(Macd_h1_c {
//прирост "0" бара довольно первого
double r1=MathAbs(MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b));
//прирост "1" бара довольно "2"
double r2=MathAbs(MathAbs(Macd_h1_b)-MathAbs(Macd_h1_c));
// — MACD внизу — тренд идет вниз
if(Macd_h1_c>Macd_h1_b&&Macd_h1_b>Macd_h1_a)
{
if(r1>r2)
{
Alert("На ",a," баре MACD " Тренд идет вниз ‘с ускорением");
}
if(r1 {
Alert("На ",a," баре MACD " Тренд идет вниз ^с замедлением");
}
if((r1==r2)||MathAbs(r1-r2) {
Alert("На ",a," баре MACD " Тренд идет вниз равноускоренно");
}
}
// — MACD внизу — тренд идет вверх
if(Macd_h1_c {
if(направляться1>r2)
{
Alert("На ",a," баре MACD " Тренд идет вверх //»с ускорением");
}
if(r1 {
Alert("На ",a," баре MACD " Тренд идет вверх /^с замедлением");
}
if((r1==r2)||MathAbs(r1-r2) {
Alert("На ",a," баре MACD " Тренд идет вверх равноускоренно");
}
}
// — MACD внизу -тренд разворачивается вниз
if(Macd_h1_cMacd_h1_a)
{
if(r1>r2)
{
Alert("На ",a," баре MACD " Тренд разворачивается вниз /’с ускорением");
}
if(r1 {
Alert("На ",a," баре MACD " Тренд разворачивается вниз //^с замедлением");
}
}
// — MACD внизу -тренд разворачивается вверх
if(Macd_h1_c>Macd_h1_b&&Macd_h1_b {
if(r1>r2)
{
Alert("На ",a," баре MACD " Тренд разворачивается вверх //»с ускорением");
}
if(r1 {
Alert("На ",a," баре MACD " Тренд разворачивается вверх /^с замедлением");
}
}
if(MathAbs(MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b)) MathAbs(MathAbs(Macd_h1_c)-MathAbs(Macd_h1_b)) {
Alert("На ",a," баре,но,Флет! в диапазоне: ",Macd_h1_c,
" ",Macd_h1_b," ",Macd_h1_a);
}

}

Подобный с 2 по 3 — блок для MACD выше оси (см. прикрепленные файлы) с 3 по 4 – блок для перехода через ось снизу вверх:

// ————для перехода через ось снизу вверх——————3—& if(Macd_h1_c Macd_h1_c { r1=MathAbs(Macd_h1_a)+MathAbs(Macd_h1_b); r2=MathAbs(Macd_h1_c)-MathAbs(Macd_h1_b); if(MathAbs(r1)>MathAbs(r2)) { Alert("На ",a," баре Тренд пересекает ось снизу вверх //» с ускорением "); } if(MathAbs(r1) { Alert("На ",a," баре Тренд пересекает ось снизу вверх /^ с замедлением "); } } //— if(Macd_h1_c0.0 && Macd_h1_a>0&& // b>0 a>0 Macd_h1_c { r1=MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b); r2=MathAbs(Macd_h1_c)+MathAbs(Macd_h1не); if(MathAbs(r1)>MathAbs(r2)) { Alert("На ",a," баре Тренд пересекает ось снизу вверх //»с ускорением"); } if(MathAbs(r1) { Alert("На ",a," баре Тренд пересекает ось снизу вверх /^ с замедлением"); } }

Подобный с 4 по 5 – блок для перехода через ось сверху вниз (см. прикрепленные файлы) Блоки с 5 по 6 — для разворота под осью и с 6 по 7 – для разворота над осью закомментированы и смогут понадобиться любителям анализа на истории. (см. прикрепленные файлы)
Пример работы скрипта на истории:

Для скрипта, предназначенного лишь для торгов, «шапка» скрипта обязана смотреться приблизительно следующим образом:

//+——————————————————————+ //| TrendMACD v6.mq4 | //| для торгов | //+——————————————————————+ #property copyright "Genkov" #property link "genkov@bk.ru" extern int a = 0; // тут возможно задать начальный исследуемый бар extern int period = 30; // поставьте значение нужного Вам периода //+——————————————————————+ int start() { int b,c; b=a+1; c=b+1; //—- double Macd_h1_a= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,a); double Macd_h1направляться= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,b); double Macd_h1_c= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,c); … ….

Потом блоки сравнения такие же, как и по большей части варианте. Пример работы скрипта для торгов:

Имейте в виду, что значения переменных «а» и «period» должны быть заданы до применения скрипта! И еще: в торгующем варианте целесообразнее начальный бар забрать равным единице, поскольку нулевой бар может оказаться не организованным на момент запроса данных, к примеру в середине либо в начале периода. В заключении возможно, что использование этого скрипта окажет помощь начинающим трейдерам и не только уменьшит число неточностей при торговле хотя бы процентов на 10.

Всем успешного профита!

TrendMACD v5.mq4 TrendMACD v6.mq4