Меню

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

  •    Автор:  TTraders
Введение
Одним из лучших признанных индикаторов направления движения цены является гистограмма 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 минута 
//extern int period = 5;     //  5 минут 
//extern int period = 15;    // 15 минут 
extern int period = 30;      //  30 минут
//extern int period = 60;    // раскомментируйте нужный Вам период
//extern int period = 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.0&&Macd_h1_a<0.0&&Macd_h1_a<0.0) 
   {
     //прирост "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<0 = ",Macd_h1_a,
           "  Тренд идет вниз 'с ускорением");
     }
    if(r1<r2) 
     {
     Alert("На ",a," баре MACD<0 = ",Macd_h1_a,
           "  Тренд идет вниз ^с замедлением");
     }
    if((r1==r2)||MathAbs(r1-r2)<0.000015)
     {
     Alert("На ",a," баре MACD<0 = ",Macd_h1_a,
           "  Тренд идет вниз равноускоренно");
     }
    }
// -- MACD внизу - тренд идет вверх
   if(Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
    if(r1>r2) 
     {
     Alert("На ",a," баре MACD<0 =",Macd_h1_a,
           "  Тренд идет вверх //''с ускорением");
     }
    if(r1<r2) 
     {
     Alert("На ",a," баре MACD<0 = ",Macd_h1_a,
           "  Тренд идет вверх /^с замедлением");
     }
    if((r1==r2)||MathAbs(r1-r2)<0.000015)
     {
     Alert("На ",a," баре MACD<0 = ",Macd_h1_a,
           "  Тренд идет вверх равноускоренно");
     }
    }
// --- MACD внизу -тренд разворачивается вниз    
   if(Macd_h1_c<Macd_h1_b&&Macd_h1_b>Macd_h1_a)
    {
    if(r1>r2) 
     {
     Alert("На ",a," баре MACD<0 = ",Macd_h1_a,
           "  Тренд разворачивается вниз /'с ускорением");
     }
    if(r1<r2)
     {
     Alert("На ",a," баре MACD<0 = ",Macd_h1_a,
           "  Тренд разворачивается вниз //^с замедлением");
     }
    }
// --- MACD внизу -тренд разворачивается вверх
   if(Macd_h1_c>Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
    if(r1>r2)
     {
     Alert("На ",a," баре MACD<0 = ",Macd_h1_a,
           "  Тренд разворачивается вверх //''с ускорением");
     }
     if(r1<r2) 
     {
     Alert("На ",a," баре MACD<0 = ",Macd_h1_a,
           "  Тренд разворачивается вверх /^с замедлением");
     }
    }
   if(MathAbs(MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b))<0.0002 && 
      MathAbs(MathAbs(Macd_h1_c)-MathAbs(Macd_h1_b))<0.0002)
    {
    Alert("На ",a," баре,однако,Флет! в диапазоне:  ",Macd_h1_c,
          "   ",Macd_h1_b,"   ",Macd_h1_a);
    }

   }


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


// ------------для перехода через ось снизу вверх------------------3--&
   if(Macd_h1_c<0.0 && Macd_h1_b<0.0 && Macd_h1_a>0&&  // c<0 b<0
      Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)  
    {
     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)<MathAbs(r2))
     {
     Alert("На ",a," баре Тренд пересекает ось снизу вверх /^ с замедлением ");
     }
    }
//---     
   if(Macd_h1_c<0.0 && Macd_h1_b>0.0 && Macd_h1_a>0&&  // b>0 a>0
      Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
     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)<MathAbs(r2))
     {
     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_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);
….


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


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

 

 

TrendMACD v5.mq4  TrendMACD v6.mq4

 

Перейти вверх

Добавить комментарий


Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

C чего начать

Типы

Анализ

Обучение

Инвестиции

«Поделиться»

18+

обновить