MQL5. Ошибки компиляции

 

Здравствуйте. Написала робота на mql5. Выдает ошибки при компиляции. Помогите разобраться где ошибка.

 

//+-----------------------------------+
//|  Описание классов усреднений      |
//+-----------------------------------+
#include <SmoothAlgorithms.mqh> 
//+-----------------------------------+
//|  объявление перечислений          |
//+-----------------------------------+
/*enum Smooth_Method - перечисление объявлено в файле SmoothAlgorithms.mqh
  {
   MODE_SMA_,  //SMA
   MODE_EMA_,  //EMA
   MODE_SMMA_, //SMMA
   MODE_LWMA_, //LWMA
   MODE_JJMA,  //JJMA
   MODE_JurX,  //JurX
   MODE_ParMA, //ParMA
   MODE_T3,    //T3
   MODE_VIDYA, //VIDYA
   MODE_AMA,   //AMA
  }; */
//+----------------------------------------------+
//|  ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА ЭКСПЕРТА       |
//+----------------------------------------------+
input Smooth_Method MAMethod = MODE_LWMA;// Метод усреднения
input int RSI_Period = 14;              // Период RSI
input int MA_Period = 5;                // Период сигнальной
input int Magic = 2;                    // Магическое число  
input double Lot = 0.01;                // Лот
input bool BuyPosOpen=true;             //Разрешение для входа в лонг
input bool SellPosOpen=true;            //Разрешение для входа в шорт
input bool BuyPosClose=true;            //Разрешение для выхода из лонгов
input bool SellPosClose=true;           //Разрешение для выхода из шортов
//+----------------------------------------------+
//|  ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА                |
//+----------------------------------------------+
input int MPhase = 15;                  // Параметр сглаживания
input ENUM_TIMEFRAMES InpInd_Timeframe=PERIOD_CURRENT; // Таймфрейм индикатора
input uint SignalBar=1;               // Номер бара для получения сигнала входа

//---- Объявление целых переменных для хранения периода графика в секундах 
int TimeShiftSec;
//---- Объявление целых переменных для хендлов индикаторов
int MR_00_Handle,MR_11_Handle,MR_22_Handle,MR_33_Handle;
//---- объявление целых переменных начала отсчета данных
int min_rates_total;
//+------------------------------------------------------------------+
//  Торговые алгоритмы                                               | 
//+------------------------------------------------------------------+
#include <TradeAlgorithms.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   MR_00_Handle=iCustom(Symbol(),0,"Examples\\MARSI",RSI_Period,MA_Period,MPhase,MAMethod,0,0);
   MR_11_Handle=iCustom(Symbol(),0,"Examples\\MARSI",RSI_Period,MA_Period,MPhase,MAMethod,1,0);
   MR_22_Handle=iCustom(Symbol(),0,"Examples\\MARSI",RSI_Period,MA_Period,MPhase,MAMethod,2,0);
   MR_33_Handle=iCustom(Symbol(),0,"Examples\\MARSI",RSI_Period,MA_Period,MPhase,MAMethod,3,0);

   if(MR_00_Handle==INVALID_HANDLE || MR_11_Handle==INVALID_HANDLE || MR_22_Handle==INVALID_HANDLE || MR_33_Handle==INVALID_HANDLE)
     {
      Alert("Ошибка загрузки индикатора, поворите попытку");
      return(-1);
     }
//---- инициализация переменной для хранения периода графика в секундах  
   TimeShiftSec=PeriodSeconds(InpInd_Timeframe);

//---- Инициализация переменных начала отсчёта данных
   min_rates_total=int(1+2+SignalBar);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   GlobalVariableDel_(Symbol());
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---- проверка количества баров на достаточность для расчёта
   if(BarsCalculated(MR_00_Handle)<min_rates_total||BarsCalculated(MR_11_Handle)<min_rates_total||BarsCalculated(MR_22_Handle)<min_rates_total||BarsCalculated(MR_33_Handle)<min_rates_total) return;

//---- подгрузка истории для нормальной работы функций IsNewBar() и SeriesInfoInteger()  
   LoadHistory(TimeCurrent()-PeriodSeconds(InpInd_Timeframe)-1,Symbol(),InpInd_Timeframe);

//---- Объявление локальных переменных
   double MR_00[2],MR_11[2],MR_22[2],MR_33[2];

//---- Объявление статических переменных
   static bool Recount=true;
   static bool BUY_Open=false,BUY_Close=false;
   static bool SELL_Open=false,SELL_Close=false;
   static datetime UpSignalTime,DnSignalTime;

//+----------------------------------------------+
//| Определение сигналов для сделок              |
//+----------------------------------------------+
   if(!SignalBar || NB.IsNewBar(Symbol(),InpInd_Timeframe) || Recount) // проверка на появление нового бара
     {
      //---- обнулим торговые сигналы
      BUY_Open=false;
      SELL_Open=false;
      BUY_Close=false;
      SELL_Close=false;
      Recount=false;

      //---- копируем вновь появившиеся данные в массивы
      if(CopyBuffer(MR_00_Handle,0,SignalBar,2,MR_00)<=0) {Recount=true; return;}
      if(CopyBuffer(MR_11_Handle,0,SignalBar,2,MR_11)<=0) {Recount=true; return;}
      if(CopyBuffer(MR_22_Handle,0,SignalBar,2,MR_22)<=0) {Recount=true; return;}
      if(CopyBuffer(MR_33_Handle,0,SignalBar,2,MR_33)<=0) {Recount=true; return;}

      //---- Получим сигналы для покупки
      if(MR_33[1]>55 && MR_11[1]>55)
        {
         if(BuyPosOpen && MR_33[1]<45 && MR_11[1]<45) BUY_Open=true;
         if(SellPosClose) SELL_Close=true;
         UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;
        }

      //---- Получим сигналы для продажи
      if(MR_22[1]>55 && MR_00[1]>55)
        {
         if(SellPosOpen && MR_22[1]<45 && MR_00[1]<45) SELL_Open=true;
         if(BuyPosClose) BUY_Close=true;
         DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;
        }
     }
//+----------------------------------------------+
//| Совершение сделок                            |
//+----------------------------------------------+
//---- Закрываем лонг
   BuyPositionClose(BUY_Close,Symbol(),Deviation_);

//---- Закрываем шорт   
   SellPositionClose(SELL_Close,Symbol(),Deviation_);

//---- Открываем лонг
   BuyPositionOpen(BUY_Open,Symbol(),UpSignalTime,0,0,Deviation_,0,0);

//---- Открываем шорт
   SellPositionOpen(SELL_Open,Symbol(),DnSignalTime,0,0,Deviation_,0,0);
//----
  }
//+------------------------------------------------------------------+
Файлы:
MARSIH.mq5  8 kb
 
Anna_89:

Здравствуйте. Написала робота на mql5. Выдает ошибки при компиляции. Помогите разобраться где ошибка.

 

Вам нужно повнимательнее ознакомиться с первоисточником: https://www.mql5.com/ru/articles/358
Простейшие торговые системы с использованием семафорных индикаторов
Простейшие торговые системы с использованием семафорных индикаторов
  • 2012.01.13
  • Nikolay Kositsin
  • www.mql5.com
Если разобраться досконально в любой сложной торговой системе, то мы увидим, что в основе её лежит набор простых торговых сигналов. Поэтому начинающему разработчику торговых роботов не стоит сразу же приниматься за написание сложных алгоритмов. В статье приводится пример торговой системы, использующей для осуществления сделок семафорные индикаторы.
 
Karputov Vladimir:
Вам нужно повнимательнее ознакомиться с первоисточником: https://www.mql5.com/ru/articles/358

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

 
Anna_89:

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

По Вашим ошибкам: треугольники - это предупреждения - их нужно устранить. Кружочки - это критические ошибки. При клике на ошибке Вас перебросит в код и на строчку кода где возникла ошибка. 

"undeclared identifier" - необъявленный идентификатор - другими словами переменную нужно сначала объявить, а потом уже обращаться к ней. 

Причина обращения: