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


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


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

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

по логу видно текущий бест аск:
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 секунды спустя.



Спасибо:




18 Ответов
President

Фотография
Благотворитель
Дата: 22.07.2011
Ответить


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

pyhta4og

Фотография
Дата: 22.07.2011
Ответить


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

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

Alexander

Фотография
Дата: 22.07.2011
Ответить


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

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


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

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

President

Фотография
Благотворитель
Дата: 22.07.2011
Ответить


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

так что или бага или сильные тормоза
Автор топика
Спасибо:

pyhta4og

Фотография
Дата: 27.07.2011
Ответить


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


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

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


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

Спасибо:

Alexander

Фотография
Дата: 27.07.2011
Ответить


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


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

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


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




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


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

President

Фотография
Благотворитель
Дата: 04.08.2011
Ответить


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

hobo

Фотография
Дата: 30.08.2011
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 08.09.2011
Ответить


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


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

hobo

Фотография
Дата: 09.09.2011
Ответить


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

Alexander

Фотография
Дата: 09.09.2011
Ответить


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


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

hobo

Фотография
Дата: 09.09.2011
Ответить


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

Alexander

Фотография
Дата: 10.09.2011
Ответить


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


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

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

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

hobo

Фотография
Дата: 10.09.2011
Ответить


Бид по 172575.
Посылаем заявку селл с ценой 171575.
Исполняется по 171575.
Спасибо:

Alexander

Фотография
Дата: 10.09.2011
Ответить


hobo Перейти
Бид по 172575.
Посылаем заявку селл с ценой 171575.
Исполняется по 171575.


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

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

hobo

Фотография
Дата: 10.09.2011
Ответить


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

Alexander

Фотография
Дата: 11.09.2011
Ответить


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

hobo

Фотография
Дата: 15.09.2011
Ответить


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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy