← Back

[BUG] Лимитированные заявки исполняются по неправильной цене!

Тестирование на реале.

Ситуация ниже похожа на багу:

по логу видно текущий бест аск: 22.07.2011 11:47:36.825 BestAsk:197005,00; BestBid:197000,00

далее видно отправку мною лимитированного(!) ордера на продажу по 197010,00 22.07.2011 11:47:36.828 RegisterOrder: Ok! sec=RIU1 dir=SELL vol=1 price=197010,00

далее в логе видно новые бест аски - либо я установил эти уровни либо я присоединился к этим уровням в стакане 22.07.2011 11:47:37.785 BestAsk:197010,00; BestBid:197000,00 22.07.2011 11:47:38.859 BestAsk:197010,00; BestBid:197000,00 22.07.2011 11:47:39.782 BestAsk:197010,00; BestBid:197000,00

а далее видно что мой ордер исполнился по более высокой цене - как будто он только что долетел до стакана и был выполнен по маркету 22.07.2011 11:47:40.456 Trade id=3 sec=RIU1 dir=SELL vol=1 price=197015

22.07.2011 11:47:40.966 BestAsk:197030,00; BestBid:197015,00

т.о. либо бага в алгоритме выполнения ордеров, либо их выполнение тормозит - т.е. ордер как-будто "долетел" только 3-4 секунды спустя.

Comments (18)

Login or Create account, Log in or register to leave a comment

President
President Author

сейчас смотрю логи и вижу аналогичные задержки и по 7 секунд

pyhta4og
pyhta4og

Ваш limit-sell на 197010 дождался в эмуляторе прихода Bid=197015. Стало возможным исполнить вашу заявку. Поскольку неразумный человек кинул лимитку на покупку (BId=197015) выше вашего Ask, то ваша заявка исполнилась по лучшей цене. А его - ровно по той что он заказывал.

Почему вам это не нравится?

Alexander
Alexander

pyhta4og: Ваш limit-sell на 197010 дождался в эмуляторе прихода Bid=197015. Стало возможным исполнить вашу заявку. Поскольку неразумный человек кинул лимитку на покупку (BId=197015) выше вашего Ask, то ваша заявка исполнилась по лучшей цене. А его - ровно по той что он заказывал.

Почему вам это не нравится?

В реале исполнится по 197010 потому что. Если приходит Bid с ценой >= цены лимит - надо исполнять по цене лимит, имхо.

представь ситуацию: мы ставим лимит офер на 100, кто-то кидает бид по 110. должно исполняться ведь по 100, а не по 110.

President
President Author

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

так что или бага или сильные тормоза

pyhta4og
pyhta4og

Т.е. я правильно понял, что общественность считает, что если мы кинули Аск на 197010, и она висит, а потом чел кинул Бид на 197015 и наш Аск 197010 лучший, то и нас и чела надо филить по 197010? А собственно почему не по 197015?

С точки зрения биржи есть пара заявок которые можно свести. Она Может свести челу продажу по 197015, нам покупку по 197010 и 5 пунктов положить себе в карман. Но это уж как-то слишком жирно для биржи.

Поэтому мне кажется она кому-то из двух этих участников зафилит по лУчшей цене чем участник заказывал. А поскольку я первый кинул, то логично что мне - я первый в очереди. Поэтому мы и закодили, что нас пофилят по 197015.

Если вы не согласны со мной, напишите как делать. Можно тупо сымиитировать жадную биржу, т.е. в данной ситуации филить наш Аск на 197010 ровно по 197010 provided that есть живой BID>=197010

Alexander
Alexander

pyhta4og: Т.е. я правильно понял, что общественность считает, что если мы кинули Аск на 197010, и она висит, а потом чел кинул Бид на 197015 и наш Аск 197010 лучший, то и нас и чела надо филить по 197010? А собственно почему не по 197015?

С точки зрения биржи есть пара заявок которые можно свести. Она Может свести челу продажу по 197015, нам покупку по 197010 и 5 пунктов положить себе в карман. Но это уж как-то слишком жирно для биржи.

Поэтому мне кажется она кому-то из двух этих участников зафилит по лУчшей цене чем участник заказывал. А поскольку я первый кинул, то логично что мне - я первый в очереди. Поэтому мы и закодили, что нас пофилят по 197015.

Если вы не согласны со мной, напишите как делать. Можно тупо сымиитировать жадную биржу, т.е. в данной ситуации филить наш Аск на 197010 ровно по 197010 provided that есть живой BID>=197010

Это только не общественность считает, а биржа считает так :) Если стоит аск по 10, а кто-то кинул бид по 1000 - то исполнится наша заявка именно по той лимитной цене, которую мы указали - 10, но никак не 1000.

Если заявки лимитные и объёмы второй заявки не больше объёма первой заявки - то всегда сделка исполняется по цене первой заявки. Если объём второй заявки больше объёма первой заявки - то просто будет собран стакан до цены не хуже чем у второй заявки. Если останется какой-то объём неисполненным - по цене второй заявки будет выставлена заявка с остатком объёма.

President
President Author

По крайней мере при тестировании на истории бага работает и в другую сторону - отправляю приказ на продажу по цене 1234, рассчитывая на исполнение по рынку в этот момент Ask=10311.60, Bid=10310.00 а получаю трейд по цене 1234

hobo
hobo

В 3.2.10(может и раньше) опять это поведение вернулось: при регистрации Sell, цена сделки равна цене лимитированной заявки, даже если она хуже бида.

Mikhail Sukhov
Mikhail Sukhov

hobo: В 3.2.10(может и раньше) опять это поведение вернулось: при регистрации Sell, цена сделки равна цене лимитированной заявки, даже если она хуже бида.

Возобновим тогда выяснение. Тестирование - это EmulationTrader или RealTimeTrader? Если первое, то стаканы которые сохранены или которые сгенерированы?

hobo
hobo

EmulationTrader. Сгенерированы через TrendMarketDepthGenerator. Собственно вот пример стакана на момент заявки, самой заявки и сделки по ней.

Alexander
Alexander

hobo: EmulationTrader. Сгенерированы через TrendMarketDepthGenerator. Собственно вот пример стакана на момент заявки, самой заявки и сделки по ней.

А здесь-то в чём неправильная работа?

hobo
hobo

Здесь - это где, на картинке? На картинке все правильно, это иллюстрация того, что "при регистрации Sell, цена сделки равна цене лимитированной заявки, даже если она хуже бида" Или здесь означает, что цена сделки правильная по вашему мнению?

Alexander
Alexander

hobo: Здесь - это где, на картинке? На картинке все правильно, это иллюстрация того, что "при регистрации Sell, цена сделки равна цене лимитированной заявки, даже если она хуже бида" Или здесь означает, что цена сделки правильная по вашему мнению?

На картинке, на мой взгляд, всё верно - бид по 172575. Посылаем заявку селл с ценой 172575. Исполняется по 172575.

Можете объяснить где неточность и ошибка? Или я просто в 4 утра уже не соображаю ))

Если ошибки нет - привидите пример с ошибкой.

hobo
hobo

Бид по 172575. Посылаем заявку селл с ценой 17<mark>1</mark>575. Исполняется по 17<mark>1</mark>575.

Alexander
Alexander

hobo: Бид по 172575. Посылаем заявку селл с ценой 17<mark>1</mark>575. Исполняется по 17<mark>1</mark>575.

Всё, не заметил. Багу подтверждаю.

Последний вопрос - начиная с какой версии стало наблюдаться? В первых 3.2 такое же поведение было?

hobo
hobo

Ура😀 Давно не тестировал, по всей видимости в 3.2.8. все еще работало как надо.

Alexander
Alexander

Просьба протестировать на 3.2.11 и отписаться.

hobo
hobo

Проверил. Цены нормальные теперь.