А что тут сложного ?
Выбираешь все ордера за время работы советника (ну или так, чтобы заведомо последний ордер был выбран), перебираешь магики и время закрытия, выбираешь последний.
А что тут сложного ?
Выбираешь все ордера за время работы советника (ну или так, чтобы заведомо последний ордер был выбран), перебираешь магики и время закрытия, выбираешь последний.
а по подробнее и с примером кода можно? Я не мега-программист...
Вопрос, как выбрать последний закрытый ордер ........, который по факту закрылся не последним?
Это как? Что такое "по факту"? Есть еще какое-то закрытие "не по факту"?
Объясняю на арбузах. Надо выбрать самый большой (с самым большим временем открытия) полосатый (магик). Этап 1. Идем вдоль грядки и ищем полосатый. Нашли - кладем в корзинку. Отдыхаем, съедаем бутерброд. Этап 2. Идем с того места дальше. А если забыли - с самого начала. В корзинке полосатый арбуз. Если видим полосатый - сравниваем с корзинкиным. Если меньше - идем дальше. Если больше - вытряхиваем из корзинки и кладем найденный. Идем дальше...
Лучше всего написать и отлаживать скрипт. Сначала Этап 1. Получится - переходим к Этап 2.
double FindLastCloseOrder(int Mag) { double Lotest=0; datetime t=0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderCloseTime()>t) { if(OrderMagicNumber()==Mag) { Lotest=OrderLots(); } t=OrderCloseTime(); } } } return(Lotest); }Этот код возвращает лотность нужного Вам закрытого ордера, можете поменять на свой параметр...
Это как? Что такое "по факту"? Есть еще какое-то закрытие "не по факту"?
Есть советник с n-количеством разных стратегий, отсюда и магики на одной паре разные, вот нужно сделать так, чтобы он находил последний закрытый ордер определённой стратегии из всей этой кучи закрытых ордеров, так понятнее?
Этот код возвращает лотность нужного Вам закрытого ордера, можете поменять на свой параметр...
здесь не совсем верно, он найдёт последний закрытый ордер и проверит, совпадает ли магик с моим магиком, а если нужный мне ордер будет 3-им из закрывшихся, то он его не найдёт,
я думаю использовать, что-то типа:
while (OrderMagicNumber()==magic3) //перебор всех ордеров до тех пор, пока не найдёт нужный { (условие) }
но тут проблема в том, а если пустая история?...
Объясняю на арбузах. Надо выбрать самый большой (с самым большим временем открытия) полосатый (магик). Этап 1. Идем вдоль грядки и ищем полосатый. Нашли - кладем в корзинку. Отдыхаем, съедаем бутерброд. Этап 2. Идем с того места дальше. А если забыли - с самого начала. В корзинке полосатый арбуз. Если видим полосатый - сравниваем с корзинкиным. Если меньше - идем дальше. Если больше - вытряхиваем из корзинки и кладем найденный. Идем дальше...
Лучше всего написать и отлаживать скрипт. Сначала Этап 1. Получится - переходим к Этап 2.
с 2-мя условиями, да, скорее так и нужно, вот как это реализовать?...
с 2-мя условиями, да, скорее так и нужно, вот как это реализовать?...
//+----------------поиск последнего по времени ордера----------------------------+ int findlastcltime(int magik) { int ticket=0; datetime cltime=0; datetime oldcltime=0; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==magik) cltime=OrderCloseTime(); if(oldcltime<cltime) { oldcltime = cltime(); ticket = OrderTicket(); } } } return(ticket); }
Вот используйте шаблонную функцию с ячейкой памяти, обычно кучу таких вот мелких функции сводят в одну, а вместо ячейки памяти используется уже глоб массив

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всех приветствую!
Пример, есть история сделок:
1. EUR\USD sell magic1
2. EUR\USD buy magic5
3. EUR\USD sell magic3
4. EUR\USD sell magic2
5. EUR\USD buy magic4
Вопрос, как выбрать последний закрытый ордер с определённым магиком, например EUR\USD sell magic3, который по факту закрылся не последним?
Интересует реализация на языке mql4