Новая версия платформы MetaTrader 5 build 2715: Общие улучшения - страница 26

 
Andrey Khatimlianskii:

Вот тут МТ4Orders мог бы просто игнорить повторную отправку закрывающих ордеров, наверное.

Игнорить торговые приказы - нельзя, т.к. есть нюансы.

Вот этот запись в логе

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 2715: Общие улучшения

Andrey Khatimlianskii, 2021.01.12 14:41

HK      0       09:04:44.263    CommunityPower MT5 (WING21,M5)  Result.comment = Order to close this position already exists 199.197 ms
GK      0       09:04:44.263    CommunityPower MT5 (WING21,M5)  Result.request_id = 1228

говорит, что Вы спамили сервер. Ошибку возвращал сам сервер. Если сделать OrderCheck на стороне Терминала, то он вернет true.


Нюанс такой. MT4Orders не просто так Алертит, потому что чревата такая ситуация.

  1. Нужно закрыть 0.1 лота от позы на лот. Делается OrderClose - висит маркет. Раз не закрылось, делается повторный OrderClose. Пока шел приказ до сервера, первый маркет исполнился. В итоге получаем, что закрылось на 0.2 лота.
Баг брокера, безусловно, нужно обходить, если такая возможность есть.

А после определенного тайм-аута — сам пытаться отменить старый закрывающий ордер (хотя, не факт, что это ему удастся).

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

 
Andrey Khatimlianskii:

CreateBlock вызывается исключительно с передачей константных 0 и 1.

В Release-варианте ошибка есть?

 
Igor Makanu:

по моему несложно сделать временную переменную целого типа и присвоить datetime, чтобы посмотреть под отладчиком

Да, не очень сложно. При желании можно даже усложнить.

 
Igor Makanu:

по моему несложно сделать временную переменную целого типа и присвоить datetime, чтобы посмотреть под отладчиком

Во время отладки не сделать. А если несколько полей структуры datetime, то еще и запаришься делать временные переменные.

 
Edgar Akhmadeev:
В отладчике хотелось бы видеть для datetime не только строку типа D'2020.09.27 00:00:00', но и целое число.

В общем - хочется видеть и "сырые" и "выходные" данные.

Частные случаи -

datetime (1601164800 + D'2020.09.27 00:00:00' )

char[] (20, 56, 34... + "String").

 
fxsaber:

Игнорить торговые приказы - нельзя, т.к. есть нюансы.

Вот этот запись в логе

говорит, что Вы спамили сервер. Ошибку возвращал сам сервер. Если сделать OrderCheck на стороне Терминала, то он вернет true.

Но ордер-то был виден в терминале. Почему отправка на сервер?


fxsaber:

Баг брокера, безусловно, нужно обходить, если такая возможность есть.

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

Предполагаю, что у этого брокера на демо будет то же самое на границах торговых сессий (как минимум, для этого инструмента).

Но не уверен, что стоит тратить время — MQ это не интересно, для себя обход я написал. Всего не предусмотрим.

Спасибо!

 
fxsaber:

В Release-варианте ошибка есть?

Не стал экспериментирвать, откатился...

 
Andrey Khatimlianskii:

Не стал экспериментирвать, откатился...

Так а предупредить коллег?

 
Andrey Khatimlianskii:

Но ордер-то был виден в терминале. Почему отправка на сервер?

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

Из другой области: можете отправить 10 асинхронных OrderCloseAsync. Все они уйдут на сервер.

для себя обход я написал. Всего не предусмотрим.

Хорошо бы код посмотреть.

 
fxsaber:

Если закрывающий ордер висит, то, конечно, попытка выставить еще один будет вызывать ошибку.

В этой ситуации валидно сдвинуть тейк на текущую позицию. Но будет ли MT5 исполнять такой тейк, когда висит закрывающий ордер - вопрос.

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

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