Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 133

 
Привет Всем. Подскажите как изменить этот код       for(int i=OrdersTotal()-1;i>=0;i--){
В данный момент он закрывает последние открывшиеся. А нужно наоборот чтобы закрывались сначала самые первые!
 
Rustam Bikbulatov:
Привет Всем. Подскажите как изменить этот код       for(int i=OrdersTotal()-1;i>=0;i--){
В данный момент он закрывает последние открывшиеся. А нужно наоборот чтобы закрывались сначала самые первые!
for(int i=0; i<OrdersTotal(); i++)
 
Rustam Bikbulatov:
Привет Всем. Подскажите как изменить этот код       for(int i=OrdersTotal()-1;i>=0;i--){
В данный момент он закрывает последние открывшиеся. А нужно наоборот чтобы закрывались сначала самые первые!
for( int i = 0; i < OrdersTotal(); i++ )
   {
    if( /*Функция закрытия. Если вернула истину*/ )
       i--;
   }

Попробуйте так. Вместо комментария функцию закрытия ордера. На работоспособность не проверял. И здесь, думаю, нужно будет вызывать функцию подсчета количества именно каждый раз, т.к. число ордеров будет уменьшаться.

Также можно попробовать такой вариант:

while( OrdersTotal() > 0 )
   /*Функция закрытия ордера*/


 

 
Vitaly Muzichenko:
for(int i=0; i<OrdersTotal(); i++)
как то несуразно закрывает)
 
Rustam Bikbulatov:
как то несуразно закрывает)
правильно - это запомнить какие ордера надо закрывать, этот список отсортировать как вам надо и в этом порядке закрывать

не правильно, но пока (до какого-то билда) работает : при успешном закрытии i--



 
Rustam Bikbulatov:
Привет Всем. Подскажите как изменить этот код       for(int i=OrdersTotal()-1;i>=0;i--){
В данный момент он закрывает последние открывшиеся. А нужно наоборот чтобы закрывались сначала самые первые!

//+------------------------------------------------------------------+
//|           Закрыть все позиции начиная с первых                   |
//+------------------------------------------------------------------+

double CloseOrders()

{
  for(int i=0; i<OrdersTotal(); )
  {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    break;
    
    if (OrderMagicNumber() != mn)
    break;
    
    int type   = OrderType();

    bool result = false;
    
    switch(type)
    {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor );
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor );
                          break;
    }
    
    if(result == false)
    {
      Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      i++;
    }  
  }
return (True);
}
// End
 
Rustam Bikbulatov:
как то несуразно закрывает)
Предложенный мной вариант в целом несуразен для закрытия.
Если вы говорите о том, что нужно закрывать от старых к новым - значит вы закрываете сетку. Имея некоторый опыт работы с сетками, то уверенно могу сказать только то, что выбирать нужно не по старости позиции, а по её лотности, и закрывать нужно от бОльшего лота к меньшему. Если сетка однолотная, то разницы в очерёдности при закрытии нет никакой. Используйте готовые функции для закрытия, и не изобретайте то, что уже изобретено)
 
Спасибо большое ребята! Я уже разобрался!!!
 
Vitaly Muzichenko:
Предложенный мной вариант в целом несуразен для закрытия.
Если вы говорите о том, что нужно закрывать от старых к новым - значит вы закрываете сетку. Имея некоторый опыт работы с сетками, то уверенно могу сказать только то, что выбирать нужно не по старости позиции, а по её лотности, и закрывать нужно от бОльшего лота к меньшему. Если сетка однолотная, то разницы в очерёдности при закрытии нет никакой. Используйте готовые функции для закрытия, и не изобретайте то, что уже изобретено)
Все верно. Ты прав!
 
Господа разрабы! Всем доброго времени суток. Интересует вопрос по созданию шаблона эксперта(скрипта) при его создании. Такое можно где-то редактировать и как это делается?
Причина обращения: