Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114320
Forex Trader  
Подскажите плз, как вы закрываете ВСЕ ордера.

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

спас.
Forex Trader
114320
Forex Trader  
Скрипт !!!
//+------------------------------------------------------------------+
//|                                            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
114320
Forex Trader  
//+------------------------------------------------------------------+
//| Закрытие всех позиций по рыночной цене                           |
//+------------------------------------------------------------------+
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
114320
Forex Trader  
упс, чето не мало строк)
спасибо. разберемся
Forex Trader
114320
Forex Trader  
gen4,
за то время, пока закроется первый ордер, курс уже вполне может уйти, поэтому OrderClose(), требующий свежих курсов, не исполняется по старым. Надо использовать в теле цикла RefreshRates().
Forex Trader
114320
Forex Trader  
gen4,
за то время, пока закроется первый ордер, курс уже вполне может уйти, поэтому OrderClose(), требующий свежих курсов, не исполняется по старым. Надо использовать в теле цикла RefreshRates().


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