весь ордер ...
Чет я трохи запутался
Как найти самый последний закрытый ордер в истории ??? интересует только он ... Помогите ...
Найти ордер с максимальным временем закрытия
}}}
Тобиш так ?
Тикет ордера сохранить надо было бы, что бы потом с ним (ордером) можно было бы работать
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(); } } } }
Тикет ордера сохранить надо было бы, что бы потом с ним (ордером) можно было бы работать
не могу понять зачем в int totalh=OrdersHistoryTotal()-1; добавляют -1 и во многих циклах добавляют зачем ????
не могу понять зачем в int totalh=OrdersHistoryTotal()-1; добавляют -1 и во многих циклах добавляют зачем ????
Что бы не было выхода за пределы массива
Размер массива OrdersHistoryTotal()
Номер максимального индекса OrdersHistoryTotal()-1
Что бы не было выхода за пределы массива
Размер массива OrdersHistoryTotal()
Номер максимального индекса OrdersHistoryTotal()-1
Вы тут на червёрке вообще расслабились что ли?
индекс OrdersHistoryTotal()-1 и есть номер последнего ордера, чего его циклом выбирать то?
if(OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY)) { // и вперёд с шашкой на танки :) }
В историю уходят только закрытые ордера. Если в истории ещё нет закрытых ордеров то входа в зону if не произойдёт.
Чет я трохи запутался
Как найти самый последний закрытый ордер в истории ??? интересует только он ... Помогите ...
Среди "закрытых" ордеров могут быть удаленные (отложенные ордера). О Магике и инструменте изначально вопроса не было.
Предлагаю свой вариант:
//+------------------------------------------------------------------+ //| 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);} //+------------------------------------------------------------------+
В свете последних изменений в свежих билдах, ордера расположены строго по возрастающей (проверено). Поэтому если исходить из условий вопроса, то Николай прав, и последний ордер будет иметь номер 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 : постарайтесь не уплотнять так код, потом самому же легче будет разобраться.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Чет я трохи запутался
Как найти самый последний закрытый ордер в истории ??? интересует только он ... Помогите ...