Как сделать отбор закрытых позиций в истории по магическому номеру?

 
В общем сегодня обнаружил, что перебор сделок в истории с фильтром по магическому номеру совсем необязательно покажет все закрытые позиции с этим магиком. Ну то есть иногда получается, что позиция открывалась с магическим номером, а в сделках в истории она уже без магического номера. Какие-то с номерами, какие-то без. Пока понять не могу, как так получается. 

Что интересно, если в терминале на вкладке история поставить отображение всех ордеров и сделок, то на тестовой сделке в графе ID эксперта ничего нет, а вот если поставить отображение только позиций, магик уже есть. Кто разбирается, подскажите, что тут за схема работает?
 
Неттинг?
 
JRandomTrader #:
Неттинг?

Есть разница? 

 

Возможно, у меня была похожая проблема. В том случае, если сделка была открыта советником, а закрыта руками, то сделка с признаком DEAL_ENTRY_OUT не будет содержать magic, что логично. Думаю, та же ситуация будет и в случаях, когда сделки будут закрыты биржей (например, стопаут).

Я проблему решил так: сначала нахожу все сделки с признаками закрытия (DEAL_ENTRY_INOUT,  DEAL_ENTRY_OUT, DEAL_ENTRY_OUT_BY) - для них определяю DEAL_POSITION_ID, а второй итерацией для всех этих позиций нахожу открывающие сделки и проверяю, какой у них magic. Вроде все работает корректно, но конечно гораздо медленнее. Тут уже что важнее для тебя, точный подсчет или скорость работы.

 
leon_17:
В общем сегодня обнаружил, что перебор сделок в истории с фильтром по магическому номеру совсем необязательно покажет все закрытые позиции с этим магиком. Ну то есть иногда получается, что позиция открывалась с магическим номером, а в сделках в истории она уже без магического номера. Какие-то с номерами, какие-то без.

Аналогично и с комментариями. Дополнительная сложность - CloseBy. Поэтому, как правило, пишутся торговые библиотеки, в которых учитываются и все подобные нюансы.

 
Maksim Emeliashin #:

Вроде все работает корректно, но конечно гораздо медленнее. Тут уже что важнее для тебя, точный подсчет или скорость работы.

Существуют быстрые решения через кеширование некоторых исторических данных. Поэтому может быть и быстро и точно.

 
Алексей Тарабанов #:

Есть разница? 

При неттинге "суммарная" позиция может наращиваться и сокращаться разными советниками с разными мэджиками.

 
Maksim Emeliashin #:

Возможно, у меня была похожая проблема. В том случае, если сделка была открыта советником, а закрыта руками, то сделка с признаком DEAL_ENTRY_OUT не будет содержать magic, что логично. Думаю, та же ситуация будет и в случаях, когда сделки будут закрыты биржей (например, стопаут).

Я проблему решил так: сначала нахожу все сделки с признаками закрытия (DEAL_ENTRY_INOUT,  DEAL_ENTRY_OUT, DEAL_ENTRY_OUT_BY) - для них определяю DEAL_POSITION_ID, а второй итерацией для всех этих позиций нахожу открывающие сделки и проверяю, какой у них magic. Вроде все работает корректно, но конечно гораздо медленнее. Тут уже что важнее для тебя, точный подсчет или скорость работы.

Спасибо! Ситуация стала гораздо понятнее. Только не до конца понял, предложенное вами решение.  Отобранные DEAL_POSITION_ID в массив складываете и потом... что?

fxsaber #:

Аналогично и с комментариями. Дополнительная сложность - CloseBy. Поэтому, как правило, пишутся торговые библиотеки, в которых учитываются и все подобные нюансы.

Код где-то можно посмотреть такой библиотеки? Меня интересует сам принцип отбора. 

JRandomTrader #:
Неттинг?

Хеджинг

 
leon_17 #:

Код где-то можно посмотреть такой библиотеки? Меня интересует сам принцип отбора.

По ссылке ниже.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

input long inMagic = 123;

void OnStart()
{
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderMagicNumber() == inMagic))
      OrderPrint();
}
 
JRandomTrader #:

При неттинге "суммарная" позиция может наращиваться и сокращаться разными советниками с разными мэджиками.

Я дал Вам повод? Удивили... Тема чуток в сторону 

 
fxsaber #:

По ссылке ниже.

Даа, глобальная работа! Спасибо, попробую поразбираться со временем...

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