Подскажите, куда правильно поставить цикл перебора и закрытия предыдущего ордера при открытии нового.

 

Здравствуйте

 Подскажите, куда правильно поставить цикл перебора и закрытия предыдущего ордера при открытии нового.

Что-то до меня никак не доходит, как правильно. (может есть проще вариант?)

 

extern double  Lot         = 0.02;  

extern double  K           = 2;     

extern int     Takeprofit  = 200;   

extern int     slippage    = 3;

extern int     Magic       = 0;     

datetime TimeOpen;

//-------------------------------------------------------------------

int init()

{

   return(0);

}

//-------------------------------------------------------------------

int deinit()

{

   return(0);

}

//-------------------------------------------------------------------

int start()

{

  

   

   

 

  double PRICE;

   string Obj_N,txt;

   for(int i=ObjectsTotal()-1; i>=0; i--) 

   {

      Obj_N=ObjectName(i);

      if (ObjectType(Obj_N)!=OBJ_HLINE) continue;

      PRICE = ObjectGet(Obj_N, OBJPROP_PRICE1); 

      if (StringFind(Obj_N,"BUY",0)!=-1)

      {

         

         ObjectSet(Obj_N,OBJPROP_STYLE,0);

         ObjectSet(Obj_N,OBJPROP_COLOR,Blue);

         txt = StringConcatenate(txt,"\n","первый BUY по цене ",DoubleToStr(PRICE,Digits));

         if ((Low[2]<PRICE || Low[1]<PRICE) && Close[1]>=PRICE && TimeOpen!=Time[0]) if (SendOrder(OP_BUY, Lot, Obj_N)) {ObjectDelete(Obj_N);TimeOpen=Time[0];continue;}

      }

      else

      {

         if (StringFind(Obj_N,"SELL",0)!=-1)

         {

           

            ObjectSet(Obj_N,OBJPROP_STYLE,0);

            ObjectSet(Obj_N,OBJPROP_COLOR,Red);

            txt = StringConcatenate(txt,"\n","первый SELL по цене ",DoubleToStr(PRICE,Digits));

            if ((High[2]>PRICE || Open[1]>PRICE) && Close[1]<=PRICE && TimeOpen!=Time[0]) if (SendOrder(OP_SELL, Lot, Obj_N)) {ObjectDelete(Obj_N);TimeOpen=Time[0];continue;}

         }

        

      }

   }

   Comment(txt);

   return(0);

}

//-------------------------------------------------------------------------

bool SendOrder(int tip, double lot, string com)

{

   for (int i=0; i<OrdersTotal(); i++) 

   {  

      if (OrderSelect(i, SELECT_BY_POS))

      {  

         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)

         {

            if (OrderComment()==com) return(0);

         }

      }

   }

   int error,nn;

   while(true)

   {

      RefreshRates();

      if (tip==OP_BUY) error = OrderSend(Symbol(),OP_BUY,lot,NormalizeDouble(Ask,Digits),slippage,0,0,com,Magic,0,Blue);

      

      if (tip==OP_SELL) error = OrderSend(Symbol(),OP_SELL,lot,NormalizeDouble(Bid,Digits),slippage,0,0,com,Magic,0,Red);

      

      if (error==-1)

      {

         Print("OrderSend Error ",GetLastError()," Lot ",lot);

         Sleep(1000);

      }

      else return(1);

      nn++;

      if (nn>10) return(0);

   }

   return(1);

 
 
Темы не плодите. Бана за спам не будет
 
Если сигнал на открытие совпал, то ордер удаляешь а потом ставишь новый.
Причина обращения: