Скачать MetaTrader 5

Функция удаления отложников при изменении лота - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Авторизуйся на MQL5.community с помощью OpenID. Это удобно!
Pirat
251
Pirat 2011.04.10 20:35  
Он увеличивается, вопрос в другом.
KONDOR
358
KONDOR 2011.04.11 08:57  
Pirat:
//+------------------------------------------------------------------+
//|                                                 DELETE_Limit.mq4 |
//|                                                                  |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "http://www.metaquotes.net"

extern bool open_limit=true;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
if(CalculateOrd(OP_BUYLIMIT)==0) && open_limit==true) OrderSend(....OP_BUYLIMIT..); // ставим отложенник.

if(LotsSum(OP_BUYLIMIT)!= рассчетное число ) CloseDelete(OP_BUYLIMIT);  
//если размер отложенника не соответствует рассчетному - удаляем нафиг
  
  if(CalculateOrd(OP_BUY)==0 ) {   // если ниче не открыто
     if(OrderCloseTime_(OP_BUY)> OrderOpenTime_(OP_BUYLIMIT)) { // сравниваем время
                   CloseDelete(OP_BUYLIMIT); open_limit=false; } // закрываем,ставим запрет на установку отложенников                              
                               }
//----
   return(0);
  }
//+------------------------------------------------------------------+

datetime OrderOpenTime_(int type)
  {
   datetime Time_=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() )
        {
         if(OrderType()==type && OrderOpenTime()>Time_)  Time_=OrderOpenTime();
        
        }
     }

 return(Time_);
  }  
  
//------------------------------------------------------  
  datetime OrderCloseTime_(int type)
  {
   datetime Time_=0;
   for(int i=0;i<OrdersHistoryTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) break;
      if(OrderSymbol()==Symbol() )
        {
         if(OrderType()==type && OrderCloseTime()>Time_)  Time_=OrderCloseTime();
        
        }
     }

 return(Time_);
  }
//------------------------------------------------------

int CalculateOrd(int type)
  {
   int count=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() )
        {
         if(OrderType()==type)  count++;
        
        }
     }
 return(count);
  }
//----------------------------------------------------

int CloseDelete( int type)
{
 
 for(int i=0;i<OrdersTotal();i++)
  if(OrderSelect(i,SELECT_BY_POS) && OrdersTotal()>0)
   if( OrderSymbol() == Symbol() ) {
        
        if( OrderType()==type)   { 
           if (OrderDelete(OrderTicket()))   { Print("Ордер удален");}           
       else   { Print("Ошибка ", GetLastError(), " при удалении ордера");}   
                               }    }
             
return(0);
}   
//-----------------------------------------------------
double LotsSum(int type) {

   double res = 0;
   for(int i = 0; i < OrdersTotal(); i++)   {   
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);         
           if(OrderType() == type && OrderSymbol() == Symbol())
             { res +=OrderLots();  }
                             }   
   return(res);     
  }
Pirat
251
Pirat 2011.04.11 10:44  
KONDOR, спасибо за помощь !
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий