Переобразование индикатора в советник

 
вот часть кода с индюка, который при пересечении машек показывает на buy или на sell (часть кода):

int start() {
   int limit, i, counter;
   double MA1now, MA2now, MA1previous, MA2previous, MA1after, MA2after;
   double Range, AvgRange;
   int counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
   
   for(i = 0; i <= limit; i++) {
   
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
       
      MA1now = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, i);
      MA1previous = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, i+1);
      MA1after = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, i-1);

      MA2now = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_OPEN, i);
      MA2previous = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_OPEN, i+1);
      MA2after = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_OPEN, i-1);
      
      if ((MA1now > MA2now) && (MA1previous < MA2previous) && (MA1after > MA2after)) {
                   CrossUp[i] = Low[i] - Range*1.5;
                   if (AlertOn && NewBar()) {
                      Alert(AlertPrefix+MA1short_name+" ("+MA1+") "+"crosses UP " + MA2short_name+" ("+MA2+")");
                   }   
                    if (SendAnEmail && NewBar()) {
                      SendMail(AlertPrefix,MA1short_name+" ("+MA1+") "+"crosses UP " + MA2short_name+" ("+MA2+")");
                    }
      }
      else if ((MA1now < MA2now) && (MA1previous > MA2previous) && (MA1after < MA2after)) {
                   CrossDown[i] = High[i] + Range*1.5;
                   if (AlertOn && NewBar()) {
                      Alert(AlertPrefix+MA1short_name+" ("+MA1+") "+"crosses DOWN " + MA2short_name+" ("+MA2+")");
                   }   
                    if (SendAnEmail && NewBar()) {
                      SendMail(AlertPrefix,MA1short_name+" ("+MA1+") "+"crosses DOWN " + MA2short_name+" ("+MA2+")");
                    }
      }
   }
   return(0);
}
и вот я добавил функцию еще при етом открытия ордеров при етих условия на buy и sell :
int start() {
   int limit, i, counter;
   double MA1now, MA2now, MA1previous, MA2previous, MA1after, MA2after;
   double Range, AvgRange;
   int counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
   
   for(i = 0; i <= limit; i++) {
   
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
       
      MA1now = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, i);
      MA1previous = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, i+1);
      MA1after = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, i-1);

      MA2now = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_OPEN, i);
      MA2previous = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_OPEN, i+1);
      MA2after = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_OPEN, i-1);
      
      if ((MA1now > MA2now) && (MA1previous < MA2previous) && (MA1after > MA2after)) {
                   CrossUp[i] = Low[i] - Range*1.5;
                   if (AlertOn && NewBar()) {
                       if (bnewopen == true)
                       int ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TP*Point,"BuyOrder_0",bmagic,0);
                      if(ticket<0)
                                 {
                        Print("Ошибка открытия buy : ",GetLastError());
                                            }
                      Alert(AlertPrefix+MA1short_name+" ("+MA1+") "+"crosses UP " + MA2short_name+" ("+MA2+")");
                   }   
                    
      }
      else if ((MA1now < MA2now) && (MA1previous > MA2previous) && (MA1after < MA2after)) {
                   CrossDown[i] = High[i] + Range*1.5;
                   if (AlertOn && NewBar()) {
                      if (snewopen == true)
                      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TP*Point,"SellOrder_0",smagic,0);
                      if(ticket<0)
                                 {
                        Print("Ошибка открытия sell : ",GetLastError());
                                            }
                      
                      Alert(AlertPrefix+MA1short_name+" ("+MA1+") "+"crosses DOWN " + MA2short_name+" ("+MA2+")");
                   }   
                    
      }
   }
return(0);
}
но он неторгует...вч ем проблема? как правельно изменить индюк на советник?
вот сам индикатор :
Файлы:
 
Поищите в базе статью Н.Косицина - там это разобрано.
 
Svinozavr >>:
Поищите в базе статью Н.Косицина - там это разобрано.


https://www.mql5.com/ru/articles/1516 вот ета статья ...на скоко я понял?
 
Вам нужно убрать цикл и переписать условия для открытия позиций...
       
      MA1now = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, 2);
      MA1previous = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, 3);
      MA1after = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, 1);

      MA2now = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_OPEN, 2);
      MA2previous = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_OPEN, 3);
      MA2after = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_OPEN, 1);
 
kharko >>:
Вам нужно убрать цикл и переписать условия для открытия позиций...


какой цикл?
 
цикл такой там есть
for(i = 0; i <= limit; i++)
 
yuripk >>:
цикл такой там есть


  вот все поменял...и всеравно неторгует((
Файлы:
 
Не проверял... Должен работать...
Файлы:
Причина обращения: