Странная ошибка в модуле советника 187 билд.

 
Здравствуйте, не могу понять что за ошибка, компилятор жалуется что нет закрывающей операторной скобки в конце модуля, "'\end_of_program' - ending bracket '}' expected C:\Straighthold Trader187\experts\00015.mq4 (362, 1)" но когда ее ставишь вообще вылазит куча ошибок которые на самом деле ошибками не являются, это глюк в платформе, или может я чего то не правильно сделал?

//+------------------------------------------------------------------+
//|                                                  Expert.mq4      |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#define MAGIC 916883

extern double lStopLoss      = 20;
extern double sStopLoss      = 20;
extern double lTakeProfit    = 50;
extern double sTakeProfit    = 50;
extern double lTrailingStop  = 20;
extern double sTrailingStop  = 15;
extern double ADX_Period     = 30;
extern double RSIBUY         = 70;
extern double RSISELL        = 30;
extern double RSICLOSE       = 18; 
extern double MACDH4FastMa   = 8;
extern double MACDH4SlowMa   = 13;
extern double MACDH4SMa      = 5;
extern double BULLSD1        = 14;
extern double BEARSD1        = 14;
extern double Ma1            = 12;
extern double Ma2            = 24;
extern double Ma3            = 36;

extern string s1 = "Варианты";
extern bool  UseMacdOpenH4 =  true;
extern bool  UseMacdCloseH4 = true;
extern string s2 = " ";
extern int Slippage = 5;
extern bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 0;
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";
extern double Lots = 0.10;
extern string _Parameters_b_Lots = "Параметры модуля расчёта лота";
extern int LotsWayChoice  = 1;    // Способ выбора рабочего лота: 
                                  //  0-фиксированный, 
                                  //  1-процент от депозита, 
                                  //  2-фракционно-пропорциональный, 
                                  //  3-фракционно-фиксированный, 
extern int LotsPercent=40;   // Процент от депозита 
extern int LotsDeltaDepo=500;  // Коэффициент приращения депозита 
extern int LotsDepoForOne=500;  // Размер депозита для одного минилота 
extern int LotsMax=10000; // Максимальное количество минилотов 
 
extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "ADX4";




void deinit() {
   Comment(""); 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

double diMACD0H4, diMA01, diMA02, diMA03, diMA11, diMA12, diMA13, diMA21, diMA22, diMA23, diRSI2; 
double diRSI3, diRSI4, diRSI5, diRSI6, diRSI7, diRSI8, diRSI9, diRSI10; 
double diRSI11, diRSI12, diBullsPowerD0, diBearsPowerD0, diMACD1H4, diMACD2H4; 
double diMACD3H4, diADX31P, diADX32M, diADX33C, diADX21P, diADX22M, diADX23C;
double diADX11P, diADX12M, diADX13C, diADX01P, diADX02M, diADX03C, diRSI1;
string op;
double OpenBuyPos, OpenSellPos, CloseBuy, CloseSell;

int start(){
 if (UseHourTrade){
  if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
  Comment("Time for trade has not come else! ");
  return(0);
  } else Comment("");
 }else Comment("");

 if(Bars<100){
 Print("bars less than 100 ");
 return(0);
 }
 if(lStopLoss<10){
 Print("StopLoss less than 10 ");
 return(0);
 }
 if(lTakeProfit<10){
 Print("TakeProfit less than 10 ");
 return(0);
 }
 if(sStopLoss<10){
 Print("StopLoss less than 10 ");
 return(0);
 }
 if(sTakeProfit<10){
 Print("TakeProfit less than 10 ");
 return(0);
 }   
 diBullsPowerD0   =iBullsPower(NULL,1440,BULLSD1,PRICE_OPEN,0);
 diBearsPowerD0   =iBearsPower(NULL,1440,BEARSD1,PRICE_OPEN,0);
   
 diADX31P = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_PLUSDI,3); 
 diADX32M = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MINUSDI,3);
 diADX33C = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MAIN,3);   

 diADX21P = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_PLUSDI,2); 
 diADX22M = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MINUSDI,2);
 diADX23C = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MAIN,2);

 diADX11P = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_PLUSDI,1);
 diADX12M = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MINUSDI,1);
 diADX13C = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MAIN,1);

 diADX01P    = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_PLUSDI,0);
 diADX02M    = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MINUSDI,0);
 diADX03C    = iADX(NULL,240,ADX_Period,PRICE_OPEN,MODE_MAIN,0);
   
 diRSI1      = iRSI(NULL,240,14,PRICE_OPEN,0); //Filter
   
 diRSI2      = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,0);//----------------------------------
 diRSI3      = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,1);//Close filter   
 diRSI4      = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,2);   
 diRSI5      = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,3);   
 diRSI6      = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,4);   
 diRSI7      = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,5);   
 diRSI8      = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,6);   
 diRSI9      = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,7);   
 diRSI10     = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,8);   
 diRSI11     = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,9);   
 diRSI12     = iRSI(NULL,240,RSICLOSE,PRICE_OPEN,10);//---------------------------------
   
   
 diMACD0H4 = iMACD(NULL,240,MACDH4FastMa,MACDH4SlowMa,MACDH4SMa,PRICE_TYPICAL,MODE_MAIN,0);
 diMACD1H4 = iMACD(NULL,240,MACDH4FastMa,MACDH4SlowMa,MACDH4SMa,PRICE_TYPICAL,MODE_MAIN,1);
 diMACD2H4 = iMACD(NULL,240,MACDH4FastMa,MACDH4SlowMa,MACDH4SMa,PRICE_TYPICAL,MODE_MAIN,2);
 diMACD3H4 = iMACD(NULL,240,MACDH4FastMa,MACDH4SlowMa,MACDH4SMa,PRICE_TYPICAL,MODE_MAIN,3);

 diMA01  =iMA(NULL,240,Ma1,0,MODE_EMA,PRICE_CLOSE,0); 
 diMA02  =iMA(NULL,240,Ma2,0,MODE_EMA,PRICE_CLOSE,0);
 diMA03  =iMA(NULL,240,Ma3,0,MODE_EMA,PRICE_CLOSE,0);
 diMA11  =iMA(NULL,240,Ma1,0,MODE_EMA,PRICE_CLOSE,1);    
 diMA12  =iMA(NULL,240,Ma2,0,MODE_EMA,PRICE_CLOSE,1);
 diMA13  =iMA(NULL,240,Ma3,0,MODE_EMA,PRICE_CLOSE,1);    
 diMA21  =iMA(NULL,240,Ma1,0,MODE_EMA,PRICE_CLOSE,2);     
 diMA22  =iMA(NULL,240,Ma2,0,MODE_EMA,PRICE_CLOSE,2);      
 diMA23  =iMA(NULL,240,Ma3,0,MODE_EMA,PRICE_CLOSE,2);
   
     
 if(AccountFreeMargin()<(500*Lots)){
 Print("сливать больше нефиг, осталось: ", AccountFreeMargin());
 return(0);
 }
 if (!ExistPositions()){
 op ="Buy";
 OpenBuyPos=GetPermission(op);
  if (OpenBuyPos==1){
  OpenBuy();
  return(0);
  }
  op="Sell";
  OpenSellPos=GetPermission(op);
  if(OpenSellPos==1){  
  OpenSell();
  return(0);
  }
 } 
 if (ExistPositions()){
  if(OrderType()==OP_BUY){
  op="Buy"
  CloseBuy = GetPermissonToClose(op);
   if (CloseBuy==1){
   CloseBuy();
   return(0);
   }
  }
  if(OrderType()==OP_SELL){
  op="Sell"; 
  CloseSell = GetPermissonToClose(op);
   if (CloseSell==1){ 
   CloseSell();
   return(0);
   }  
  } 
 }   
 TrailingPositionsBuy(lTrailingStop);
 TrailingPositionsSell(sTrailingStop);
 return (0);
}

bool ExistPositions() {
 for (int i=0; i<OrdersTotal(); i++) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
	if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
	return(True);
	}
  } 
 } 
 return(false);
}
void TrailingPositionsBuy(int trailingStop) { 
 for (int i=0; i<OrdersTotal(); i++) { 
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
   if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { 
    if (OrderType()==OP_BUY) { 
     if (Bid-OrderOpenPrice()>trailingStop*Point) { 
      if (OrderStopLoss()<Bid-trailingStop*Point){ 
      ModifyStopLoss(Bid-trailingStop*Point); 
      } 
     } 
    } 
   } 
  } 
 }
} 
void TrailingPositionsSell(int trailingStop) { 
 for (int i=0; i<OrdersTotal(); i++) { 
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
   if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { 
    if (OrderType()==OP_SELL) { 
     if (OrderOpenPrice()-Ask>trailingStop*Point) { 
      if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0){  
      ModifyStopLoss(Ask+trailingStop*Point); 
      } 
     } 
    } 
   } 
  } 
 }
} 
void ModifyStopLoss(double ldStopLoss) { 
   bool fm;
   fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE); 
   if (fm && UseSound) PlaySound(NameFileSound); 
} 

void CloseSell() { 
   bool fc; 
   fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell); 
   if (fc && UseSound) PlaySound(NameFileSound); 
}
void CloseBuy() { 
   bool fc; 
   fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy); 
   if (fc && UseSound) PlaySound(NameFileSound); 
} 
 
void OpenBuy() { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 
   ldLot = GetSizeLot(); 
   ldStop = GetStopLossBuy(); 
   ldTake = GetTakeProfitBuy(); 
   lsComm = GetCommentForOrder(); 
   OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy); 
   if (UseSound) PlaySound(NameFileSound); 
} 
void OpenSell() { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 

   ldLot = GetSizeLot(); 
   ldStop = GetStopLossSell(); 
   ldTake = GetTakeProfitSell(); 
   lsComm = GetCommentForOrder(); 
   OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell); 
   if (UseSound) PlaySound(NameFileSound); 
}
string GetCommentForOrder() { 	return(Name_Expert); } 
double GetSizeLot() { 
  double dLot; 
  if (LotsWayChoice==0) dLot=Lots; 

  // фиксированный процент от депозита 
  if (LotsWayChoice==1) { 
    dLot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10; 
  } 

  // фракционно-пропорциональный 
  if (LotsWayChoice==2) { 
    int k=LotsDepoForOne; 
    for (double i=2; i<=LotsMax; i++) { 
      k=k+i*LotsDeltaDepo; 
      if (k>AccountFreeMargin()) { 
        dLot=(i-1)/10; break; 
      } 
    } 
  } 

  // фракционно-фиксированный 
  if (LotsWayChoice==3) { 
    dLot=MathCeil((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10; 
  } 

  if (dLot<0.1)  dLot=0.1;
  if (dLot>LotsMax) dLot=LotsMax;
   
  return(dLot);  
   
}
double GetStopLossBuy() { 	return (Bid-lStopLoss*Point);} 
double GetStopLossSell() { 	return(Ask+sStopLoss*Point); } 
double GetTakeProfitBuy() { 	return(Ask+lTakeProfit*Point); } 
double GetTakeProfitSell() { 	return(Bid-sTakeProfit*Point);} 
//***********************************************************************************************
double GetPermission(string operation){
 if (operation=="Buy"){
  if (diBullsPowerD0>0.1){
   if (diADX01P>diADX02M&&(diADX11P<=diADX12M||diADX21P<=diADX22M||diADX31P<=diADX32M)){
    if (diMACD0H4>diMACD1H4&&diMACD1H4>diMACD2H4&&diMACD2H4>diMACD3H4){ 
     if (diRSI1<RSIBUY){
     return (1);
     }
    }
   }
  }
 }
 if (operation=="Sell"){    
  if (diBearsPowerD0<-0.1){
   if (diADX01P<diADX02M && (diADX11P>=diADX12M||diADX21P>=diADX22M||diADX31P>=diADX32M)){
    if (diMACD0H4<diMACD1H4 && diMACD1H4<diMACD2H4 && diMACD2H4<diMACD3H4){
     if (diRSI1>RSISELL){  
     return (1);  
     }
    }
   }
  }
 }
}
//
//**************************************************************************************************
double GetPermissonToClose(string operation){    
 if (operation=="Buy");
  if (diMACD0H4<diMACD1H4&&diMACD1H4<diMACD2H4&&diMACD2H4<diMACD3H4&&(diRSI2>70||diRSI3>70||diRSI4>70||diRSI5>70||diRSI6>70||diRSI7>70||diRSI8>70||diRSI9>70||diRSI10>70||diRSI11>70||diRSI12>70)){
  return (1);
  else  if ((diMA01>diMA02&&diMA01>diMA03)&&(diMA11<diMA12&&diMA11<diMA13)||(diMA21<diMA22&&diMA21<diMA23));
  return (1); 
  else  if (diADX01P<diADX02M && (diADX11P>=diADX12M||diADX21P>=diADX22M||diADX31P>=diADX32M)){//diADX14<diADX15 && diADX16>=diADX17 && diADX18>diADX19 && diADX20>15
  return (1);
  else return (0);
  }
 }
 if (operation=="Sell"){
  if (diMACD0H4>diMACD1H4&&diMACD1H4>diMACD2H4&&diMACD2H4>diMACD3H4&&(diRSI2<30||diRSI3<30||diRSI4<30||diRSI5<30||diRSI6<30||diRSI7<30||diRSI8<30||diRSI9<30||diRSI10<30||diRSI11<30||diRSI12<30)){
  return (1);
  else  if (diADX01P>diADX02M && (diADX11P<=diADX12M||diADX21P<=diADX22M||diADX31P<=diADX32M)){
  return (1);
  else  if (diADX01P>diADX02M && diADX11P>diADX12M){ 
  return (1);
  else return(0);
  }
 }
}
//************************************************************************************
 
сорри, вопрос снят протупил с переменными, надо сказать определение ошибок компилятором, реализовано в МТ не самым лучшим образом, иногда уходит куча времени на их поиск.
Причина обращения: