Получение истории по OrderCloseBy через MQL - страница 2

 
Stanislav Korotky:
Я чуть выше написал конкретный вопрос - как вытащить лоты по порядку, начиная с buy 0.41, sell 0.54 и т.д. из лога. Может и я туплю. Ну так просветите, плиз.
Как буду в кондиции, посмотрю конкретно в коде, где там может быть затык. Пока в упор его не ощущаю.
 
Stanislav Korotky:
Я чуть выше написал конкретный вопрос - как вытащить лоты по порядку, начиная с buy 0.41, sell 0.54 и т.д. из лога. Может и я туплю. Ну так просветите, плиз.

К сожалению, в тестере и в онлайн МТ4 разный алгоритм расстановки комментариев. Приведенный мною код работает именно в онлайн. В онлайн у закрытого ордера buy 0.41 будет комментарий "partial close", если первым в OrderCloseBy будет указан его тикет, и "close hedge by", если вторым. А вот у оставшегося ордера sell 0.13 в любом случае (и в тестере тоже) будет комментарий "from #".

В тестере отличие от онлайн только в комментариях ордеров, оказавшихся в истории. Так, если указать в OrderCloseBy первым ордер с бОльшим объемом, то у этого ордера в истории счета не будет вообще никакого комментария. В истории он будет выглядеть как просто закрытый ордер. То есть узнать о встречном закрытии можно будет только при сопоставлении данных от трех ордеров:

1. Рабочий ордер sell 0.13 указывает в комментарии (from #2) на закрытый ордер sell 0.41.

2. Закрытый ордер buy 0.00 указывает в комментарии (close hedge by #2) на тот же ордер.

Другая история, если в OrderCloseBy первым указать ордер с меньшим объемом. Тогда у закрытого ордера buy появится объем (0.41) и комментарий "to #2". 

 
Ihor Herasko:

К сожалению, в тестере и в онлайн МТ4 разный алгоритм расстановки комментариев. Приведенный мною код работает именно в онлайн. В онлайн у закрытого ордера buy 0.41 будет комментарий "partial close", если первым в OrderCloseBy будет указан его тикет, и "close hedge by", если вторым. А вот у оставшегося ордера sell 0.13 в любом случае (и в тестере тоже) будет комментарий "from #".

В тестере отличие от онлайн только в комментариях ордеров, оказавшихся в истории. Так, если указать в OrderCloseBy первым ордер с бОльшим объемом, то у этого ордера в истории счета не будет вообще никакого комментария. В истории он будет выглядеть как просто закрытый ордер. То есть узнать о встречном закрытии можно будет только при сопоставлении данных от трех ордеров:

1. Рабочий ордер sell 0.13 указывает в комментарии (from #2) на закрытый ордер sell 0.41.

2. Закрытый ордер buy 0.00 указывает в комментарии (close hedge by #2) на тот же ордер.

Другая история, если в OrderCloseBy первым указать ордер с меньшим объемом. Тогда у закрытого ордера buy появится объем (0.41) и комментарий "to #2". 



все верно.

просто топикстартер больше по теории,

не хочет ни смотреть, ни пробовать ничего что советуют люди, пришедшие к этим ответам практикой.
 
o_O:


все верно.

просто топикстартер больше по теории,

не хочет ни смотреть, ни пробовать ничего что советуют люди, пришедшие к этим ответам практикой.

Вы заделались модератором чтобы хамить? Очень удобно.

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

Нормальные люди учатся на опыте других. Также нормальная документация должна была бы содержать все то, что другие добрые люди озвучили. Им спасибо.

 
Ihor Herasko:

В тестере отличие от онлайн только в комментариях ордеров, оказавшихся в истории. Так, если указать в OrderCloseBy первым ордер с бОльшим объемом, то у этого ордера в истории счета не будет вообще никакого комментария. В истории он будет выглядеть как просто закрытый ордер. То есть узнать о встречном закрытии можно будет только при сопоставлении данных от трех ордеров:

1. Рабочий ордер sell 0.13 указывает в комментарии (from #2) на закрытый ордер sell 0.41.

2. Закрытый ордер buy 0.00 указывает в комментарии (close hedge by #2) на тот же ордер.

Другая история, если в OrderCloseBy первым указать ордер с меньшим объемом. Тогда у закрытого ордера buy появится объем (0.41) и комментарий "to #2". 

Идея понятна, но конкретный случай лога почему-то не подпадает ни под один описанный вариант. Я не вижу ни коммента "from #" (если бы первый ордер был большего объема), ни коммента "to #" (если бы первый ордер был меньшего объема). В логе нет ни sell 0.13 (по первому варианту), ни buy 0.41 (по второму).
 

Stanislav Korotky:
Я не вижу ни коммента "from #" (если бы первый ордер был большего объема),

Насколько я понял, лог Вы привели, используя список истории счета. Поэтому не удивительно, что в нем нет ордера sell 0.13, т. к. он является рабочим. Возьмите список рабочих ордеров. В нем увидите комментарий "from #". Также еще раз обращу внимание на тот факт, что наличие комментария "from #" у этого ордера никак не связано с очередностью указания тикетов при встречном закрытии.

ни коммента "to #" (если бы первый ордер был меньшего объема). В логе нет ни sell 0.13 (по первому варианту), ни buy 0.41 (по второму).

Комментария "to #" в приведенном случае нет, т. к. закрытие происходило по первому варианту (в OrderCloseBy первым указан ордер с бОльшим объемом). Поэтому вычисление соответствия в тестере будет происходить по другому алгоритму:

1. Рабочий ордер sell 0.13 указывает в комментарии (from #2) на закрытый ордер sell 0.41.

2. Закрытый ордер buy 0.00 указывает в комментарии (close hedge by #2) на тот же ордер.

Таким образом, нужно одновременно сканировать оба списка: истории и рабочих ордеров.

 
Stanislav Korotky:

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

Нужно в любой момент одиночного прогона построить такую же таблицу, как "Результаты" в тестере?
 
fxsaber:
Нужно в любой момент одиночного прогона построить такую же таблицу, как "Результаты" в тестере?
Да. Как выяснилось, это невозможно сделать постфактум и нужно мониторить ордера постоянно.
 
Stanislav Korotky:
Да. Как выяснилось, это невозможно сделать постфактум и нужно мониторить ордера постоянно.
Ну тогда пытаться не буду, хоть и не убедили.
 
Stanislav Korotky:
Да. Как выяснилось, это невозможно сделать постфактум и нужно мониторить ордера постоянно.
Можно и постфактум. Ведь в конце прогона все рабочие ордера будут отображены в истории счета.
Причина обращения: