Закрытие ордеров mql4

 
приветсвую всех. подскажите пожалуйста как закрыть ордера по тикету  ?   MQL4 .я попытался написать но он закрывает только первый ордер и потом пишет что тикет не известен.заранее спасибо!
 
shunos111:
приветсвую всех. подскажите пожалуйста как закрыть ордера по тикету  ?   MQL4 .я попытался написать но он закрывает только первый ордер и потом пишет что тикет не известен.заранее спасибо!

В функции OrderSelect(.........)

вместо  SELECT_BY_TICKET

ставьте  SELECT_BY_POS


И вставляйте код с помощью кнопочки


 
shunos111:
приветсвую всех. подскажите пожалуйста как закрыть ордера по тикету  ?   MQL4 .я попытался написать но он закрывает только первый ордер и потом пишет что тикет не известен.заранее спасибо!

у каждого ордера свой уникальный тикет

если Вы закрыли один, то для закрытия следующего ордера по тикету, также нужно знать этот тикет.

 
спасибо!  сейчас  попробую
 
//+------------------------------------------------------------------+
//|                                                           17.mq4 |
//|                                                                1 |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Хасан"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict






//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    b();
   
    MaxPrice();
   
  }
//+------------------------------------------------------------------+

double TsenaPoslednegoOrdera()
{
    int oldticket,ticket =0;
    double oldopenprice =0;
    for (int cnt = OrdersTotal() - 1; cnt>=0;cnt--)
    {
        if ( OrderSelect( cnt,SELECT_BY_POS,MODE_TRADES))
        {
            if(OrderSymbol() == Symbol()&& OrderType() == OP_BUY)
            {
                oldticket = OrderTicket();
                if (oldticket > ticket)
                {
                    ticket = oldticket;
                    oldopenprice = OrderOpenPrice();
                }
            }
        }
    }
    return (oldopenprice);
}

void b()
{
 
if(OrdersTotal()==0)
{
   OrderSend(Symbol(),OP_BUY,0.01,Ask,200,0,0,"",1,0,Blue);
}

double b = NormalizeDouble(TsenaPoslednegoOrdera()-Ask >= 20*Point*10,Digits);
if(OrdersTotal()==1 && b)
{
   OrderSend(Symbol(),OP_BUY,0.01,Ask,200,0,0,"",1,0,Blue);
}
}

void MaxPrice()
{      
   double maxprice = 999999,m;
   int ticb;
   for (int k=OrdersTotal()-1; k>=0; k--)
    {
      if (OrderSelect(k,SELECT_BY_TICKET,MODE_TRADES))
      {      
      if (OrderSymbol() == Symbol() ) 
       {
      if (OrderType()==OP_BUY)
        {                 
        m = OrderOpenPrice();                
        if( m < maxprice)
         {                  
           maxprice = m;
           ticb = OrderTicket() ;
         }
       
                                         
        if (OrdersTotal() ==2)
         {                   
          OrderClose(ticb, OrderLots(),Bid , 200,White);               
         }
    
        }
      }  
    }   
  }
 
}  
 
не получается. я хотел закрывать ордер у которого самая высокая цена . но получается что закрывается только один первый ордер и всё
 
может данные переменных нужно обновлять . но я не знаю как нужно обновлять данные переменных
 

здесь будет минимальная:

        m = OrderOpenPrice();                
        if( m < maxprice)
         {                  
           maxprice = m;
 

здесь сравниваются тикеты. непонятно зачем

                oldticket = OrderTicket();
                if (oldticket > ticket)
                {
                    ticket = oldticket;
                    oldopenprice = OrderOpenPrice();
 
закрывает правильно но только один раз. а нужно чтобы  закрывался каждый ордер из двух у которого самая высокая цена
 

maxprice=0;
.....
m = OrderOpenPrice();                
if( m > maxprice) maxprice = m;//максимальная

Причина обращения: