Как закрыть открытий ордер. - страница 2

 
nikelodeon:


Чето ошибка со скобками, никак не пойту.....


вот так поменьше скобок ))

//Закрываем позиции
int CloseAllPos()
{
for(int i=0;i<OrdersTotal();i++){
if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{if(OrderSymbol()==Symbol() && OrderMagicNumber()==magicnumer)
{ if(OrderType()==OP_BUY){OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow);i--;}
  if(OrderType()==OP_SELL){OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow);i--;}
}}
}// end for
//=====
return(0);
}
 
zhuki:
Если ДЦ позволяет,то закроет.

А вот такая функция пойдет, я ее исправил сделал как вы сказали через тоталь?

//функция закрытия ордеров
void CloseAllOrders(int type)
{
   int total = OrdersTotal();
   for (total - 1; total >= 0; total--) {
           if(OrderSelect(total, SELECT_BY_POS) == true){
           if (OrderSelect(total, SELECT_BY_POS, MODE_TRADES) == true){
           if (OrderSymbol() == Symbol()){
                                int err = 0;
                                int count = 0;
                                while ((err != 1) && (count < 10))
                                 {
                         if (OrdersTotal() == 0) return(0);
                                   count++;
                                        RefreshRates();
                                        if (OrderType() == type)
                                        if(type == OP_BUY) err = OrderClose(OrderTicket(),OrderLots(),Ask,slip,Violet); //Close position
                                        else if(type == OP_SELL) err = OrderClose(OrderTicket(),OrderLots(),Bid,slip,Violet); //Close position
                              }//while
                           }//Symbol()
                   }//OrderSelect
           }//OrderSelect
   }//for
}//CloseAllOrders
 
//Закрываем позиции
void CloseAllPos()
{
  for(int i=0;i<OrdersTotal();i++)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magicnumer) continue;

    if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); i--; }
    if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow); i--; }
  }
}
а так еще меньше.
 
SJS:


вот так поменьше скобок ))

Говорят что перебор надо делать через - минус..., а у вас через +

for(int i=0;i<OrdersTotal();i++){
 
Martingeil:

Говорят что перебор надо делать через - минус..., а у вас через +


а у нас i--; } есть для сдвига позиции ;))
 
SJS:

а у нас i--; } есть для сдвига позиции ;))
Не заметил))))
 
sergeev:
а так еще меньше.
Интересно это с i-- . Я бы не догадался через неё любимую ... сделать.
 
zhuki:
Интересно это с i-- . Я бы не догадался через неё любимую ... сделать.

вообще это не мой код,

тем более такой стиль как i-- в массиве с i++ - это придумали индусы

 
Блин чёто у меня нифига не получасеться. Вроде всё написано правильно, и я понимаю работу функции, с этим всё в порядке, но почемуто в функцию закрытия позиций заходим, но не закрываем.... И почемуто цикл не выполняеться...... Ставлю в него команду принт, но в журнале ничего не выходит..... Блин я уже запарился, помогите найти ошибку....
Файлы:
 
nikelodeon:
Блин чёто у меня нифига не получасеться. Вроде всё написано правильно, и я понимаю работу функции, с этим всё в порядке, но почемуто в функцию закрытия позиций заходим, но не закрываем.... И почемуто цикл не выполняеться...... Ставлю в него команду принт, но в журнале ничего не выходит..... Блин я уже запарился, помогите найти ошибку....

Вставь функцию сергеева.

//Закрываем позиции
void CloseAllPos()
{
  for(int i=0;i<OrdersTotal();i++)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magicnumer) continue;

    if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); i--; }
    if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow); i--; }
  }
}
Причина обращения: