//+------------------------------------------------------------------+
//|                                                         ema4.mq5 |
//|                                      Copyright 2016, Mr.SilverKZ |
//|                                                silverkaz@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Mr.SilverKZ"
#property link      "silverkaz@mail.ru"
#property version   "1.00"

//--- входные параметры
input int    EMA_Fast_1 = 10;
input int    EMA_Slow_1 = 30;
input int    EMA_Fast_2 = 50;
input int    EMA_Slow_2 = 100;
input int    EA_Magic   = 12345;
input double Lot        = 0.1;  

//--- глобальные переменные
int          EMA_Fast_1_Handle;
int          EMA_Slow_1_Handle;  
int          EMA_Fast_2_Handle;  
int          EMA_Slow_2_Handle; 

double       EMA_Fast_1_price[];  
double       EMA_Slow_1_price[];   
double       EMA_Fast_2_price[];
double       EMA_Slow_2_price[]; 
  
bool         Sig_Buy  = false;
bool         Sig_Sell = false;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   //--- Получить хэндлы индикаторов
   EMA_Fast_1_Handle = iMA(_Symbol, _Period, EMA_Fast_1, 0, MODE_EMA, PRICE_CLOSE);
   EMA_Slow_1_Handle = iMA(_Symbol, _Period, EMA_Slow_1, 0, MODE_EMA, PRICE_CLOSE);
   EMA_Fast_2_Handle = iMA(_Symbol, _Period, EMA_Fast_2, 0, MODE_EMA, PRICE_CLOSE);
   EMA_Slow_2_Handle = iMA(_Symbol, _Period, EMA_Slow_2, 0, MODE_EMA, PRICE_CLOSE);

   //--- Нужно проверить, не были ли возвращены значения Invalid Handle
   if(EMA_Slow_1_Handle == INVALID_HANDLE || 
      EMA_Fast_1_Handle == INVALID_HANDLE ||
      EMA_Slow_2_Handle == INVALID_HANDLE || 
      EMA_Fast_2_Handle == INVALID_HANDLE)
   {
      Alert("Ошибка при создании хендла индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(-1);
   }
   //---
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   //--- Освобождаем хэндлы индикаторов
   IndicatorRelease(EMA_Fast_1_Handle);
   IndicatorRelease(EMA_Slow_1_Handle);
   IndicatorRelease(EMA_Fast_2_Handle);
   IndicatorRelease(EMA_Slow_2_Handle);
   //--- Почистить за собой экран
   Comment("");
   //---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   //--- Находим максимальное из 4 целых чисел (периоды ЕМА)
   int max = 0;
   max = fmax(EMA_Slow_1, EMA_Fast_2);
   max = fmax(max, EMA_Slow_2);
   max = fmax(max, EMA_Fast_2);
   
   //--- Достаточно ли количество баров для работы
   if (Bars(_Symbol, _Period) < max)
   {
      Alert("На графике меньше ", max, " баров, советник не будет работать!!");
      return;
   }

   //--- Копирование хэндлов индикаторов в динамические массивы
   if(CopyBuffer(EMA_Fast_1_Handle, 0, 0, 3, EMA_Fast_1_price) < 0 || 
      CopyBuffer(EMA_Slow_1_Handle, 0, 0, 3, EMA_Slow_1_price) < 0 || 
      CopyBuffer(EMA_Fast_2_Handle, 0, 0, 3, EMA_Fast_2_price) < 0 || 
      CopyBuffer(EMA_Slow_2_Handle, 0, 0, 3, EMA_Slow_2_price) < 0)
   {
       Alert("Ошибка копирования хэндлов индикаторов в массивы - номер ошибки:",GetLastError(),"!!");
       return;
   } 
   
   //--- Установим индексацию в массивах индикаторов как в таймсериях
   ArraySetAsSeries(EMA_Fast_1_price, true);
   ArraySetAsSeries(EMA_Slow_1_price, true);   
   ArraySetAsSeries(EMA_Fast_2_price, true);
   ArraySetAsSeries(EMA_Slow_2_price, true); 
   
   Comment(EMA_Slow_2_price[1]); // все ОК !!!!!
   
  
}

//+------------------------------------------------------------------+
//| END                                                              |
//+------------------------------------------------------------------+

