ПОМОГИТЕ откорректировать готовый советник

 
extern double Lots=0.04;
extern int K=5;
extern int D=3;
extern int Z=3;
extern int TrailingStop=30;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//------
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int start()                          // Спец. функция start
{
double M_0, M_1, a,              // Значение MAIN на 0 и 1 барах
       S_0, S_1;               // Значение SIGNAL на 0 и 1барах
int i,ii, summaord,bBars;
summaord=OrdersTotal();
    //-------------------------------------------------------------------- 
                                       // Обращение к функции техн.индикат.
M_0 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_MAIN,  0);// 0 бар ,M_0 на нулевом баре имеет это значение
M_1 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_MAIN,  1);// 1 бар ,M_1 на предыдущем баре имеет это значение
S_0 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_SIGNAL,0);// 0 бар ,S_0 на нулевом баре имеет это значение
S_1 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_SIGNAL,1);// 1 бар ,S_1 на предыдущем баре имеет это значение
    //--------------------------------------------------------------------  
      

            if( M_0 >= S_0 && M_1 < S_1 )
               {
                if( summaord<1)
           

                   { 
              

                Alert("сигнальная пересекает трендовую с верху вниз. открываем покупку.OP_BUY");                
                OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
                Print("BUY order opened : ",OrderOpenPrice());
                     }
                      for ( i=0;i<OrdersTotal();i++)
                           {
                            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
                            if(OrderType()==OP_SELL)
                    OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(Symbol(),MODE_SPREAD));
             
                               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                                   {
                                    if(OrderStopLoss()<Bid-Point*TrailingStop)
                                       {
                                        OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,0,0,Green);
                                       return(0);
                                                                         
                                        }
                                   
                                   }
                       }
                        
                }
             if( M_0 <= S_0 && M_1 > S_1 ) 
                {
                 if( summaord<1)
              
                   {
                 
                 Alert("сигнальная пересекает трендовую снизу вверх открываем продажу OP_SELL.");
                 OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);
                 Print("SELL order opened : ",OrderOpenPrice());
                    }
                       for ( ii=0;ii<OrdersTotal();ii++)
                            {
                             if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES)==true)
                             if(OrderType()==OP_BUY)
                    OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(Symbol(),MODE_SPREAD));
                 
                            if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                                 {
                                   if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                                       {
                                         OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,0,0,Red);
                                            return(0);
                                              
                                       }
                                  }
                            }
                      
                 }
          
                 return(0);}

Когда ордер закрывается по трейлинг стопу, цикл заканчивается, идет снова проверка условия if( M_0 >= S_0 && M_1 < S_1 ) и если бар еще не сменился

(т.е. условие сново становится верным) снова открывается ордер (((

но по задумке -при этом условии- должен быть открыт только один ордер не важно, закроется ли он по SL или нет! И также один ордер должен

открываться при противоположном условии

if( M_0 <= S_0 && M_1 > S_1 )

Как мне это осуществить??? помогите пожалуйсто


                 
 
forexfor >>:

а зачем? судя по скрину эксперт сливает неподецки:))))

 
а вообще - если отложки не выставляете - проверяйте OrdersTotal()