Пытаюсь совместить мою систему с новым индикатором

 

Добрый день форумчане.

Сразу оговорюсь.я-ток 2 дня назад начал вникать во всю систему.поэтому возможно делаю глупые ошибки.

Моя существующая система проста пересечение 2 скользящих средних с определенным фильтрованием сигналов. Но во флэте система ведет себя конечно же не лучшем образом. Покопавшись в базе данных нашел показатель XMA Пытаюсь совместить и встроить но не удается.все упорно отказывается работать ((

Вот такой код получается Чую что дело в циклах...но чет не могу понять где. Прошу помощи у опытных юзеров


extern int EMA1 = 14;
extern int EMA2 = 48;
extern int EMA3 = 155;
extern double Lots=0.5;
extern double SL =  300;
extern int chk=0;
extern int period=12;
extern int porog =3;
extern int metod =1;
extern int metod2=1;
extern int prise =0;
//---- buffers
double Ema48;
double Ema14;                              
double ADX;
double Ema144;
double Signal[];
double Up[];
double Dn[];
double Fl[];
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int start() {
   SL = SL*Point;  //мои стопы
  
//прога для расчета XMA
   int limit;
   double tmp1,tmp2;
   int counted_bars=IndicatorCounted();
   int i;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for (i = limit;i>=0;i--){
     tmp1=iMA(Symbol(),0,period,0,metod,prise,i);
     tmp2=iMA(Symbol(),0,period,1,metod2,prise,i);
     if(MathAbs(tmp1-tmp2)>=porog*Point){
       Signal[i]=tmp2;
       if(i>0){
         if(Close[i]<=Signal[i]){Dn[i]=Signal[i];}else{Fl[i]=Signal[i];}
         if(Close[i] >=Signal[i]){Up[i]=Signal[i];}else{Fl[i]=Signal[i];}
       }else{Fl[i]=Signal[i];}  
     }else{
       Signal[i]=Signal[i+1];
       Fl[i]=Signal[i];
            }
   }
   return(0);
  
   //--------------
   int cnt=0, ticket, total;
   Ema14  =iMA(NULL, 0, EMA1, 0,MODE_EMA, PRICE_CLOSE, 0);
   Ema48 =iMA(NULL, 0, EMA2, 0,MODE_EMA, PRICE_CLOSE, 0);
   Ema144=iMA(NULL, 0, EMA3, 0,MODE_EMA, PRICE_CLOSE, 0);
  ADX =iADX(NULL, 0,7,PRICE_HIGH,MODE_MAIN,0);
  
   total=OrdersTotal();
   if(total<1)
     {
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("У вас нет денег. Свободные средства = ", AccountFreeMargin());
         return(0);
        }
      if(ADX>10)
        {
         chk=1;
         Print("Позиция возможна!");
        }
      if(chk==1)
        {
         if(Ema14>Ema48 && Ema48>Ema144 && ADX>25 && Close[i]>=Signal[i])
           {
            ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask-SL,0,
            "EMA position:",16385,0,Red);
            if(ticket>0)
              {
               if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                  Print("Открыт ордер buy : ",OrderOpenPrice());
               chk=0;
              }
            else
              {
               Print("Ошибка открытия buy ордера : ",GetLastError());
               return(0);
              }
           }
         if(Ema14<Ema48 && Ema48<Ema144 && ADX>25 && Close[i]>=Signal[i])
           {
            ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid+SL,0,
            "EMA position:",16385,0,Green);
            if(ticket>0)
              {
               if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                  Print("Открыт ордер Sell : ",OrderOpenPrice());
               chk=0;
              }
            else
              {
               Print("Ошибка открытия sell ордера : ",GetLastError());
               return(0);
              }
           }
        }
      return(0);
     }
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // это открытая позиция? OP_BUY или OP_SELL
         OrderSymbol()==Symbol())  // инструмент совпадает?
        {
         if(OrderType()==OP_BUY)   // открыта длинная позиция
           {
            // проверим, может уже пора закрываться?
            if(Ema14<Ema48)
              {
               chk=0;
               OrderClose(OrderTicket(),OrderLots(),Bid,300,Violet); // закрываем позицию
               return(0); // выходим
              }
           }
         else // иначе это короткая позиция
           {
            // проверим, может уже пора закрываться?
            if(Ema14>Ema48)
              {
               chk=0;
               OrderClose(OrderTicket(),OrderLots(),Ask,300,Violet); // закрываем позицию
               return(0); // выходим
              }
           }
        }
     }
   return(0);  
  
   }
Причина обращения: