Скачать MetaTrader 5

закрыть все ордеры

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Как заработать на MQL5.community? Зайди и узнай!
Forex Trader
114257
Forex Trader 2005.12.05 17:11 
Подскажите плз, как вы закрываете ВСЕ ордера.

у меня трабл тут:
прохожу циклом
for(int pos=0;pos<1000;pos++){ //примерный код
OrderSelect(pos,SELECT_BY_POS);
OrderClose(OrderTicket,..... .);
}
не работает) в лучшем случае закрывает 1 ордер ) почему не понятно.

спас.
Forex Trader
114257
Forex Trader 2005.12.05 18:05  
Скрипт !!!
//+------------------------------------------------------------------+
//|                                            close-all-orders.mq4  |
//|                                  Copyright © 2005, Matias Romeo. |
//|                                       Custom Metatrader Systems. |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2005, Matias Romeo."
#property link      "mailto:matiasDOTromeoATgmail.com"

int start()
{
  int total = OrdersTotal();
  for(int i=total-1;i>=0;i--)
  {
    OrderSelect(i, SELECT_BY_POS);
    int type   = OrderType();

    bool result = false;
    
    switch(type)
    {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
                          break;

      //Close pending orders
      case OP_BUYLIMIT  :
      case OP_BUYSTOP   :
      case OP_SELLLIMIT :
      case OP_SELLSTOP  : result = OrderDelete( OrderTicket() );
    }
    
    if(result == false)
    {
      Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      Sleep(3000);
    }  
  }
  
  return(0);
}


Forex Trader
114257
Forex Trader 2005.12.05 19:08  
//+------------------------------------------------------------------+
//| Закрытие всех позиций по рыночной цене                           |
//+------------------------------------------------------------------+
void CloseAllPositions() {
  bool fc;
  int  err, it;

  for (int i=OrdersTotal()-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        fc=False;
        for (it=0; it<NumberOfTry; it++) {
          while (!IsTradeAllowed()) Sleep(5000);
          if (OrderType()==OP_BUY) {
            fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
            if (fc) {
              if (UseSound) PlaySound(NameFileSound); break;
            } else {
              err=GetLastError();
              Print("Error(",err,") closing buy: ",ErrorDescription(err),", try ",it);
              Sleep(1000*PauseAfterError);
            }
          }
          if (OrderType()==OP_SELL) {
            fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
            if (fc) {
              if (UseSound) PlaySound(NameFileSound); break;
            } else {
              err=GetLastError();
              Print("Error(",err,") closing sell: ",ErrorDescription(err),", try ",it);
              Sleep(1000*PauseAfterError);
            }
          }
        }
      }
    }
  }
}
Forex Trader
114257
Forex Trader 2005.12.05 20:24  
упс, чето не мало строк)
спасибо. разберемся
Forex Trader
114257
Forex Trader 2005.12.05 22:49  
gen4,
за то время, пока закроется первый ордер, курс уже вполне может уйти, поэтому OrderClose(), требующий свежих курсов, не исполняется по старым. Надо использовать в теле цикла RefreshRates().
Forex Trader
114257
Forex Trader 2005.12.06 12:57  
gen4,
за то время, пока закроется первый ордер, курс уже вполне может уйти, поэтому OrderClose(), требующий свежих курсов, не исполняется по старым. Надо использовать в теле цикла RefreshRates().


ммм..., спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий