Скачать MetaTrader 5

Время истечения отложенного ордера задается включительно или нет?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нужен программист? Cервис Фриланс найдет его!
Stanislav Korotky
17884
Stanislav Korotky 2016.11.10 23:31 

Прогнал в тестере эксперт, который выставляет отложенные ордера. Для них задается срок экспирации. После автоматического истечения ордеров распечатываю их с помощью OrderPrint. Согласно логам получается, что OrderCloseTime для таких ордеров на 1 бар позже срока экспирации (тестирование по ценам открытия на H1). Отсюда вопрос: значит ли, что дата истечения на самом деле указывает последнее время действия ордера? Тогда наблюдаемое поведение правильно, но документация неточна. Если же время истечения - это именно время, когда ордер нужно снимать, то тогда имхо время закрытия должно с ним совпадать. Получается баг.

В документации сейчас написано:

Если до этого времени ордер не сработает, он будет удален автоматически. 

Получается, что сниматься он должен именно в указанные дату/время экспирации, и тогда OrderCloseTime не может быть больше. 

Часть лога для примера:

#2 2016.09.01 00:00:00 sell stop 0.01 GBPJPY 135.386 135.856 0.000 2016.09.01 03:00:00 135.672 0.00 0.00 0.00 expiration 0 expiration 2016.09.01 02:00
#1 2016.09.01 00:00:00 buy stop 0.01 GBPJPY 136.265 135.856 0.000 2016.09.01 03:00:00 135.722 0.00 0.00 0.00 expiration 0 expiration 2016.09.01 02:00

Красным подчеркнуто время удаления, синим - время истечения.
 

fxsaber
4402
fxsaber 2016.11.10 23:51  
Stanislav Korotky:

Получается, что сниматься он должен именно в указанные дату/время экспирации, и тогда OrderCloseTime не может быть больше.

Вроде, это фича тестера. Если сделать OrderDelete, то ClosePrice будет равен следующему бару. Это в каком-то смысле и логично, потому что неизвестно, в какое время текущего бара шло удаление.

Для Expiration эту фичу отключать нельзя, т.к. на момент наступления бара, который равен Expiration, ордер на Open-цене исполниться может. 

Stanislav Korotky
17884
Stanislav Korotky 2016.11.10 23:59  
fxsaber:

Вроде, это фича тестера. Если сделать OrderDelete, то ClosePrice будет равен следующему бару. Это в каком-то смысле и логично, потому что неизвестно, в какое время текущего бара шло удаление.

Для Expiration эту фичу отключать нельзя, т.к. на момент наступления бара, который равен Expiration, ордер на Open-цене исполниться может. 

Спасибо за наводку. Хотя ИМХО этот как раз не логично. Почему ордер не может быть удален в начале именно того бара, когда была вызвана функция OrderDelete или сработала автоэкспирация? Время известно. В реальности, если указано удалить в 9:00, то будет удален в 9:00 и дальнейшее развитие этого бара нас не колышет. Я даже больше скажу - согласно "отквоченной" документации ("до этого времени") - бар целиком не должен нас колышить, включая его цену открытия - не имеет права он уже срабатывать.
fxsaber
4402
fxsaber 2016.11.11 00:08  

Экспирацию осуществляет торговый сервер. При этом отложенник может висеть на третьей стороне.

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

Ihor Herasko
9034
Ihor Herasko 2016.11.11 11:10  
Stanislav Korotky:

Согласно логам получается, что OrderCloseTime для таких ордеров на 1 бар позже срока экспирации (тестирование по ценам открытия на H1).  

В режиме теста "По ценам открытия" все операции будут иметь время начала следующего бара после фактического исполнения операции, т. к. в этом режиме на один бар приходится только один тик. Проверьте в режиме "Все тики" - там все будет точно.
Stanislav Korotky
17884
Stanislav Korotky 2016.11.12 17:12  
Ihor Herasko:
В режиме теста "По ценам открытия" все операции будут иметь время начала следующего бара после фактического исполнения операции, т. к. в этом режиме на один бар приходится только один тик. Проверьте в режиме "Все тики" - там все будет точно.
Ну, эта логика мне не понятна. Пусть будет один тик на бар. Если задано время экспирации, совпадающее с временем бара, тестер должен удалить на этом тике ордер (одного тика достаточно). Могу догадываться, что MQ специально сделали задержку на бар, чтобы имитировать распределенность серверной части (как рассказал fxsaber).
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий