ORDER_POSITION_ID - страница 17

 

OrderGetInteger -работает исключительно с отложенными ордерами в рынке

HistoryOrderGetInteger -работает с исполненными ордерами в истории

 

Кому ещё интересно, код, исполняемый файл и лог эксперта во вложении.

МТ-5 ФОРТС

Выводы:

1. Пока ордер полностью не исполнился или не снят - НИКАКОЙ истори по нему нет.

2. А у частично исполненого ордера ORDER_POSITION_ID не ставится.

Всем спасибо, разобрался. 

Файлы:
Test_orders.zip  26 kb
 
йSerj_Che:
HI 0 10:29:25.468 Trades : exchange buy 2.00 SBRF-9.14 at market
JE 0 10:29:25.531 Trades : accepted exchange buy 2.00 SBRF-9.14 at market
NM 0 10:29:25.562 Trades : exchange buy 2.00 SBRF-9.14 at market placed for execution in 88 ms
MN 0 10:29:25.562 Trades : deal #4522433 buy 2.00 SBRF-9.14 at 6903 done (based on order #4988264)
IE 0 10:29:26.640 Trades : exchange sell 2.00 SBPR-9.14 at market
DL 0 10:29:26.734 Trades : accepted exchange sell 2.00 SBPR-9.14 at market
MQ 0 10:29:26.734 Trades : exchange sell 2.00 SBPR-9.14 at market placed for execution in 92 ms
KF 0 10:29:26.734 Trades : deal #4522434 sell 1.00 SBPR-9.14 at 5255 done (based on order #4988265)

DK 0 10:29:26.734 Trades : deal #4522435 sell 1.00 SBPR-9.14 at 5255 done (based on order #4988265)

теперь оно - частичное исполнение. 

Ребята, да вы что? Этот листинг показывает что один ордер ( #4988265 ) исполнился двумя сделками ( #4522435 &  #4522434) и не имеет отношение к частичному исполнению.

Вот как это происходит, допустим мы хотим купить 50 контрактов VTBR-9.14 по рынку. Купить мы можем только у поставщиков ликвидности, тех ребят что выставляют лимитные заявки на продажу. Их уровень и объем видны в верхней половине стакана. Смотрим его:

 

Выставляем ордер на покупку. Наш ордер могут выполнить только 4 разных продавца. Те что разместили лимитные заявки на продажу на различных торговых уровнях.  Видно что купить мы можем 1 контракт по цене 3874, 40 контрактов по цене 3875, 1 контракт по цене 3876 и 28 контрактов по цене 3877. Значит, наш ордер исполнят сразу 4 продавца, четырьмя сделками:

№ сделки
Цена

Объем/

доступный объем

Совокупный

Объем 

Время 
1
3874
1/1
 1 12:21:341
2
3875
40/40
 41 12:21:351 
3
3876
1/1
 42 12:21:363 
4
3878
8/28
 50 12:21:365 

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

Частичное исполнение

Допустим мы хотим купить 100 контрактов VTBR-9.14 по цене не хуже чем 3873. Выставляем BuyLimit объемом 100 контрактов на уровень 3873. Однако к моменту выставления заявки уже имеются несколько продавцов, которые продают свои контракты по более лучшей цене, чем указана в нашем ордере:

Объем
Цена
1
3871
3
3872
1
3872
39
3872
263872
  

Сразу после выставления этого лимитного ордера, произойдут трейды в количестве 5 штук, которые частично исполнят нашу лимитную заявку в объеме 70 контрактов (1+3+1+39+26).

Совершенные трейды попадут в историю сделок, при этом сам лимитный ордер по-прежнему будет активен и наблюдатся в вкладке "торговля" в таком виде:

 

После того как наш ордер слижет лимитные заявки противоположенного направления, его цена будет лучшим предложением для желающих продать свои контракты:

Объем
Цена
30 (Это наша заявлка)
3873
2 (предложения других участников хуже)
3872
12
3871

Т.к. наше предложение лучше, а рынок ликвиден, наш ордер начнут исполнять другие участники рынка, с помощью встречных, рыночных или отложенных ордеров.

Через некоторое время ордер исполнится и перейдет во кладу "История". 

Если рассмотреть весь процесс во времени получится следующее:

1. Выставляем лимитный ордер. Его время установки соответствует ORDER_TIME_SETUP_MSC.

2. Начинают срабатывать сделки, инициированные этим ордером. Эти сделки сразу попадают в историю. Сам ордер еще находится на вкладке "Торговля" и выглядит так, как это показано на рисунке выше.

3. Спустя некоторое время все сделки срабатывают, ордер набирает необходимый объем и переносится в историю ордеров. Его время исполнения ORDER_TIME_DONE в общем случае соответствует последней совершенной сделке.

Ордер, по каким-то причинам (нехватка ликвидности, истечение срока действия ордера), может не набрать нужный объем. В таком случае он перенесется в историю в состоянии "частично исполнен". Т.е. не весь заявленный в нем объем будет исполнен сделками.

Обратите внимание на скриншот этого ордера:

 

Ордер исполнялся в течении 25 секунд (!) и все это время находился на вкладке активных ордеров. И лишь с последним трейдом был перенесен в историю. Его ORDER_TIME_DONE соответственно стал равен времени последнего трейда.

 

P/S Как я и обещал( по поводу опубликования ответа сервисдеск).

Ответа от сервисдеск не будет, т.к я снял свою заявку за ненадобностью. 

Спасибо komposter-у, за предложение написать тестового советника с

подробными логами. 

 
papaklass:

 Нормально!? А Integer-а, который возился с Вами целый вечер и заставлял Вас ДУМАТЬ, не хотите поблагодарить?

Вот и помогай после такого отношения... 

Хотите продолжить?
 
papaklass:

 Нормально!? А Integer-а, который возился с Вами целый вечер и заставлял Вас ДУМАТЬ, не хотите поблагодарить?

Вот и помогай после такого отношения... 

В этом его ошибка, надо было не помогать думать, а сделать за него.
 
sandex:
В этом его ошибка, надо было не помогать думать, а сделать за него.

sandex:

вы не в той части смотрите, OrderGetInteger(ORDER_POSITION_ID) -вы пытаетесь смотреть в той части которая не участвовала в открытии/изменении/закрытии позиции

 вам надо смотреть вот так HistoryOrderGetInteger(ticket,ORDER_POSITION_ID)

-----------------

Ваше высказывание? 

Хотите продолжить? 

 
Mikalas:

sandex:

вы не в той части смотрите, OrderGetInteger(ORDER_POSITION_ID) -вы пытаетесь смотреть в той части которая не участвовала в открытии/изменении/закрытии позиции

 вам надо смотреть вот так HistoryOrderGetInteger(ticket,ORDER_POSITION_ID)

-----------------

Ваше высказывание? 

Хотите продолжить? 

Зачем? Зачем вы это делаете? Типа человек написал чепуху? Не было бы этой чепухи, если бы вы свою чепуху не писали. Вы же писали, что запись об ордере появляется в истории ордеров и при этом он висит в рынке.

Хотите продолжить? 

 

Завершение, думаю последнее.

Ни на одном форуме, где я раньше участвовал и участвую

нет такого отношения форумчан друг к другу!

Форум - это сообщество людей-единомышленников, решающих (обсуждающих) СОВМЕСТНО

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

Все люди - РАЗНЫЕ, один "на лету схватывает" суть вопроса, а другому нужно время,

чтобы осмыслить и разобраться.

Подумайте на досуге об этом! 

P/S А спасибо Yurich-у и komposter-у я сказал, именно за то, что

ни одного лишнего слова они не сказали, только по делу и с уважением

к человеку( пусть даже он не прав или заблуждается).

Вот они - пример настоящих форумчан! 

 
papaklass:

Я уже уселся в партере. Жду с нетерпением.... :)

Саша, это очень удобная поза для получения пинка...