Как найти самый последний ордер ???

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

Чет я трохи запутался

Как найти самый последний закрытый ордер в истории ??? интересует только он ... Помогите ...

DmitriyN
2314
DmitriyN  
VOLDEMAR:

Чет я трохи запутался

Как найти самый последний закрытый ордер в истории ??? интересует только он ... Помогите ...

Что найти? Магик? Лот?

Посмотрите тут.
Vladimir Pastushak
98164
Vladimir Pastushak  

весь ордер ...

Victor Nikolaev
Модератор
13941
Victor Nikolaev  
VOLDEMAR:

Чет я трохи запутался

Как найти самый последний закрытый ордер в истории ??? интересует только он ... Помогите ...


Найти ордер с максимальным временем закрытия
Vladimir Pastushak
98164
Vladimir Pastushak  
datetime time=0;
int totalh=OrdersHistoryTotal();
for (int iei=totalh; iei>=0; iei--)
{if(OrderSelect(iei, SELECT_BY_POS,MODE_HISTORY ))
{if(OrderSymbol()==Symbol() &&OrderMagicNumber()==magic )
{
if (OrderCloseTime()>time)
{
time=OrderCloseTime();
}

}}}

Тобиш так ?

Victor Nikolaev
Модератор
13941
Victor Nikolaev  

Тикет ордера сохранить надо было бы, что бы потом с ним (ордером) можно было бы работать

int time=0, ticket=-1;
int totalh=OrdersHistoryTotal()-1;
for (int iei=totalh; iei>=0; iei--)
  {
     if(OrderSelect(iei, SELECT_BY_POS,MODE_HISTORY ))
       {
          if(OrderSymbol()==Symbol() &&OrderMagicNumber()==magic )
            {
              if (OrderCloseTime()>time)
                {
                   time=OrderCloseTime();
                   ticket=OrderTicket();
                }
            }
      }
   }
Vladimir Pastushak
98164
Vladimir Pastushak  
Vinin:

Тикет ордера сохранить надо было бы, что бы потом с ним (ордером) можно было бы работать


не могу понять зачем в int totalh=OrdersHistoryTotal()-1; добавляют -1 и во многих циклах добавляют зачем ????
Victor Nikolaev
Модератор
13941
Victor Nikolaev  
VOLDEMAR:

не могу понять зачем в int totalh=OrdersHistoryTotal()-1; добавляют -1 и во многих циклах добавляют зачем ????


Что бы не было выхода за пределы массива

Размер массива OrdersHistoryTotal()

Номер максимального индекса OrdersHistoryTotal()-1

Nikolay Demko
14282
Nikolay Demko  
Vinin:


Что бы не было выхода за пределы массива

Размер массива OrdersHistoryTotal()

Номер максимального индекса OrdersHistoryTotal()-1

Вы тут на червёрке вообще расслабились что ли?

индекс OrdersHistoryTotal()-1 и есть номер последнего ордера, чего его циклом выбирать то?

if(OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY))
  {
   // и вперёд с шашкой на танки :)
  }

В историю уходят только закрытые ордера. Если в истории ещё нет закрытых ордеров то входа в зону if не произойдёт.

Евгений
361
Евгений  
VOLDEMAR:

Чет я трохи запутался

Как найти самый последний закрытый ордер в истории ??? интересует только он ... Помогите ...


Среди "закрытых" ордеров могут быть удаленные (отложенные ордера). О Магике и инструменте изначально вопроса не было.
Предлагаю свой вариант:

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start(){datetime t;int i,Ticket;
for(i=0;i<OrdersHistoryTotal();i++)
{if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
  {if(OrderType()>1)continue;
   switch(OrderType()){case 0:string n=" Buy ";break;case 1:n=" Sell ";break;}
   if(t<OrderCloseTime()){t=OrderCloseTime();Ticket=OrderTicket();}}}
Alert(OrderSymbol(),",  Ticket - ", Ticket, ", Type - ",n,", CloseTime - ",
TimeToStr(t,TIME_DATE|TIME_SECONDS));return(0);}
//+------------------------------------------------------------------+
Рустам
3624
Рустам  

В свете последних изменений в свежих билдах, ордера расположены строго по возрастающей (проверено). Поэтому если исходить из условий вопроса, то Николай прав, и последний ордер будет иметь номер OrdersTotal()-1 или OrdersHistoryTotal()-1;

Ессно если нужен фильтр по магику и символу то все немного усложняется, но не на много :

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int GetLastTicket(int typ=-1,int magic=-1,string sy=""){int i;
   for(i=OrdersHistoryTotal()-1;i>=0;i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
         if(sy  !=""){if(OrderSymbol()!=sy){continue;}}
         if(magic>=0){if(OrderMagicNumber()!=magic){continue;}}
         if(typ  >=0){if(OrderType()!=typ){continue;}}
         return(OrderTicket());
      }
   }
   return(0);
}
//+------------------------------------------------------------------+
2 Roll : постарайтесь не уплотнять так код, потом самому же легче будет разобраться.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий