Как получить финансовые результаты по закрытым позициям? - страница 2

 
Alexey Viktorov #:

Совсем всё неправильно.

А как правильно получить идентификатор самой последней закрытой позиции? Чтобы затем выбрать сделки по этому идентификатору (как рекомендуется в выделении)?

Тикета нужной сделки под рукой нет. 

 
Janis Ozols #:

А как правильно получить идентификатор самой последней закрытой позиции? Чтобы затем выбрать сделки по этому идентификатору (как рекомендуется в выделении)?

Тикета нужной сделки под рукой нет. 

Поиск по форуму  в помощь.

Ордера позиции сделки в МТ5
 
Roman Shiredchenko #:

Ордера позиции сделки в МТ5

Статью читал. Вот фрагмент оттуда (взятый с учётом того, что предлагалось в предыдущих постах):


На данный момент у меня вопрос по пункту 1 — как получить идентификатор самой последней закрытой позиции?

Если я правильно понимаю, для этого необходимо таки организовать перебор закрытых сделок в поисках самой поздней с типом DEAL_ENTRY_OUT.
Если ошибаюсь, поправьте, пожалуйста.

Сталкиваюсь с необходимостью работы с историей первый раз. Очень хочется сразу научиться делать это правильно.

 
Janis Ozols #:

как получить идентификатор самой последней закрытой позиции?

#include <HistoryPosition.mqh> // https://www.mql5.com/ru/blogs/post/755007

void OnStart()
{
  const int Total = HistoryPositionsTotal(); // Всего позиций.
  
  if (HistoryPositionGetTicket(Total - 1)) // Тикет последней позиции.
    Print(HistoryPositionGetInteger(POSITION_HISTORY_IDENTIFIER)); // Идентификатор позиции.
}
 
fxsaber #:
Спсб. Тож возьму к сеье в библиотеку данные   сохраню.
 
fxsaber #:
Еще можно так.

Благодарю! Очень интересная реализация. Начал изучать и обнаружил, что она основана на библиотеке MT4Orders, которая сама по себе достаточно объёмная и к её изучению я пока не приступил (но планирую).

На данном этапе я хочу найти самое лаконичное и грамотное решение без использования сторонних библиотек для поиска идентификатора последней закрытой позиции в случае, когда тикет последней закрывающей сделки неизвестен.

 
Janis Ozols #:

Благодарю! Очень интересная реализация. Начал изучать и обнаружил, что она основана на библиотеке MT4Orders, которая сама по себе достаточно объёмная и к её изучению я пока не приступил (но планирую).

На данном этапе я хочу найти самое лаконичное и грамотное решение без использования сторонних библиотек для поиска идентификатора последней закрытой позиции в случае, когда тикет последней закрывающей сделки неизвестен.

В этом разобраться совершенно невозможно.

Что касается вашего вопроса, то очень важно в какой момент вы хотите найти этот тикет?

Если в произвольное время, то без перебора истории никак не обойтись. Как минимум надо выбрать сделки закрытые за какое-то последнее время и их перебрать.

Если же во время работы советника, то советую обратить внимание на функцию события 

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
 
Janis Ozols #:

для поиска идентификатора последней закрытой позиции в случае, когда тикет последней закрывающей сделки неизвестен.

Для информации. Могут быть две позиции: сначала одна открылась и закрылась, затем другая открылась и закрылась. И обе будут иметь одинаковый идентификатор.

Почти все здесь ведут речь о простых ситуациях. Разруливать же сложные ситуации правильно и быстро - это нелаконичный код.


Скорее всего, вам и не нужны сложные. Поэтому идентификатор последней закрытой позиции (ее куска) - это идентификатор последней не DEAL_ENTRY_IN-сделки. С конца перебираете сделки до первой такой.

 
fxsaber #:
Скорее всего, вам и не нужны сложные. Поэтому идентификатор последней закрытой позиции (ее куска) - это идентификатор последней не DEAL_ENTRY_IN-сделки. С конца перебираете сделки до первой такой.
Да, всё верно! Сделаю именно так.