OnTradeTransaction - страница 7

 
fxsaber:

Согласен. Но, к сожалению, в MT5, в отличие от MT4, торговое окружение может не соответствовать реальности. Например, при исполнении отложенного ордера на несколько миллисекунд его может нигде не быть. И здесь даже OnTradeTransaction не поможет.

Может OnTrade, я так понимаю он генерируется в самом терминале уже на основе транзакций.

Или Вы хотите сказать что при срабатывании отложки в обработчике OnTrade можно не обнаружить новую открытую позицию?

 
Aleksey Mavrin:

Может OnTrade, я так понимаю он генерируется в самом терминале уже на основе транзакций.

Или Вы хотите сказать что при срабатывании отложки в обработчике OnTrade можно не обнаружить новую открытую позицию?

В любой On-функции. В этом смысле в MT5 дыра. Вряд ли будут латать ее.

 
fxsaber:

В любой On-функции. В этом смысле в MT5 дыра. Вряд ли будут латать ее.

Если так то печально. Теряется практически смысл OnTrade. Надо будет попроверять. В идеале при сработке отложки OnTrade должен вызваться примерно сколько раз:

для стопов:

- создан и отправлен рыночный ордер

- отложенный ордер перемещен в историю

- ордер выполнен записана сделка

- рыночный ордер перемещен в историю

- создана позиция

для лимитников:

- активирован лимитник записана сделка

- отложенный ордер перемещен в историю

- создана позиция

Если предположить, то на последней то всяко должна уже быть позиция, а не предыдущих логично что не должна, а?

Я в OnTrade вызывал функции проверки всех торговых состояний - сделок, позиций, ордеров. Вроде все ок пока работает, но у меня слишком сложных торговых операций не было.

 
Aleksey Mavrin:

Если так то печально. Теряется практически смысл OnTrade. Надо будет попроверять.

 
fxsaber:

ой-йой, зачем я залез на форум, тут столько проблем нерешённых))

Спасибо , ознакомлюсь. Пока прочитал выделенную, по моему это не проблема, а особенность. В Базах данных , да и вообще, понятие транзакции и означает, что ВСЕ

действия, необходимые для выполнения запроса И ПОДДЕРЖАНИЯ КОРРЕКТНОСТИ БД выполнены, и после транзакции можно работать с БД, ошибок не будет.

Если какое либо из действий (а чтобы даже записать строку в любую таблицу их тоже бывает надо сделать не одно и убедиться что предыдущие выполнены успешно)

неуспешно, изменения откатываются и транзакция не состоялась. К чему я это, наверное к тому, что ждать от МТ уровня СУБД не стоит :)

Тут все промежуточные операции надо смотреть и проверять, опять же где-то это даёт большую гибкость.

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

Проверю отпишу подробнее о результатах.

 
Aleksey Mavrin:

Но по моему всё логично - сервер сначала сообщает что ордер выполнен, терминал его удаляет в архив, потом (позже) сервер сообщает что открыл позицию

Ордера нет в истории и среди текущих. И позиции нет. Т.е нет ничего.

 
Aleksey Mavrin:

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

не скажу на этом форуме или еще где читал посты админа Рената (возможно форум квик), но он кажется писал, что единственная проверка которую проходит ордер на сервере - это обеспечение маржинальных требований, дальше ордер "улетает" через коннектор на биржу, тогда ситуация с неопределенностью исполнения ордера, в принципе и возможна, сервер же, то же не знает по какой цене исполнен ордер

 
кроме примера, который fxsaber привёл, на практике встречается ещё случай когда тикет есть и среди отложек, и среди открытых позиций. ситуация продолжается также несколько миллисекунд (в последних билдах, правда, не проверял). механизм проверки должен быть другой, готовьтесь заранее :)
 
Igor Zakharov:
кроме примера, который fxsaber привёл, на практике встречается ещё случай когда тикет есть и среди отложек, и среди открытых позиций. ситуация продолжается также несколько миллисекунд (в последних билдах, правда, не проверял). механизм проверки должен быть другой, готовьтесь заранее :)

Такую ситуацию обрабатываю так, что для MT4-советников все остается в MT5 так же, как в MT4. А вот с фантомными ордерами - нужно дописывать.

 

на "нормальных" роботах, случай который я описал, вообще не замечал; но в одном меня попросили сделать систему безопасности: условие было, что позиции всегда локированы (либо реальными позициями, либо отложенным ордером), т.е. количество лотов на покупку равно количеству лотов на продажу. Вот этот случай и познакомил меня с нюансами подсчета ордеров/позиций/сделок в пятёрке.

разница, как я объяснил это самому себе, :) в том, что четвёрка получая ответ от брокера сначала синхронизирует свои "таблицы" с открытыми ордерами и историей, а потом сообщает пользователю об ответе брокера. пятёрка сразу транслирует нам этот ответ, и параллельно правит свои "таблицы" (а все mql программы читают данные из этих "таблиц"). Именно этот момент мы ловим на миллисекундном таймере. Но тогда, почему в тестере мы на это не напарываемся?

А вообще, я смирился...