Добрый день! HELP!!!

 

Очень нужен взгляд со стороны и добрый совет.

По алгоритму открываю один рыночный бай и пять бай-лимитов. В случае срабатывания профита по баю удаляю отложенные функцией:

//=========================================================================

// Закрытие отложенных ордеров

//=========================================================================

int closewaitorders()

{

         k=0;

         Alert(OrdersTotal());

         for(k=1; k<=OrdersTotal(); k++)     

            {      

            if (OrderSelect(k-1,SELECT_BY_POS,MODE_TRADES)==true) 

               {                                      


               if (OrderSymbol()!=Symb)

                  continue;

               o_Ticket=OrderTicket();

               if (OrderType()>1)                       

                  Ans=OrderDelete(o_Ticket);   

               if (Ans==false)

                  {

                  Alert(GetLastError(),"  для ордера  ", o_Ticket);

                  }                                    

               }

            }

return (0);

В результате информирует,  что OrdersTotal()=5, и это правда! Потом вместо пяти циклов по  for(k=1; k<=OrdersTotal(); k++) делает только три, удаляет отложенные 2,4 и 6 ордера, а 3 и 5 просто не замечает. Истерика!!! Спасите! Заранее благодарен.

 
nys2000:

Очень нужен взгляд со стороны и добрый совет.

По алгоритму открываю один рыночный бай и пять бай-лимитов. В случае срабатывания профита по баю удаляю отложенные функцией:

//=========================================================================

// Закрытие отложенных ордеров

//=========================================================================

int closewaitorders()

{

         k=0;

         Alert(OrdersTotal());

         for(k=1; k<=OrdersTotal(); k++)     

            {      

            if (OrderSelect(k-1,SELECT_BY_POS,MODE_TRADES)==true) 

               {                                      


               if (OrderSymbol()!=Symb)

                  continue;

               o_Ticket=OrderTicket();

               if (OrderType()>1)                       

                  Ans=OrderDelete(o_Ticket);   

               if (Ans==false)

                  {

                  Alert(GetLastError(),"  для ордера  ", o_Ticket);

                  }                                    

               }

            }

return (0);

В результате информирует,  что OrdersTotal()=5, и это правда! Потом вместо пяти циклов по  for(k=1; k<=OrdersTotal(); k++) делает только три, удаляет отложенные 2,4 и 6 ордера, а 3 и 5 просто не замечает. Истерика!!! Спасите! Заранее благодарен.


ошибка в цикле.

for(k=OrdersTotal()-1; k>=0; k--)  

Для вставки кода используйте SRC

 
Vinin:


ошибка в цикле.

Для вставки кода используйте SRC


Сработала хреновина. Огромное спасибо! Да продлит Аллах Ваши годы и гаишники не отберут права!