Заполнение заявок у MarketEmulator

Заполнение заявок у MarketEmulator
Atom
9/19/2014
Pyrkoff


При тестировании на RealTimeEmulationTrader при значении настройки у MarketEmulator MatchOnTouch = false заполнение заявок происходит путем «прошивания» уровня цены заявки. При этом цена полученной сделки принимает значение лучше, чем была выставлена цена у лимитированной заявки, что не отражает реальную картину. В связи с тем, что на реальном рынке цена сделки практически всегда соответствует цене заявки.

Подскажите, пожалуйста, каким образом сделать, чтобы при значении настройки MatchOnTouch = false у MarketEmulator заполнение заявок происходило по ценам самих заявок (как при MatchOnTouch = true, но с «прошиванием» уровня цены заявки, а не касанием)?

PS. Речь идет о лимитированных заявках выставленных единичным лотом.



Thanks:


Mikhail Sukhov

Avatar
Date: 9/19/2014
Reply


Pyrkoff
на реальном рынке цена сделки практически всегда соответствует цене заявки.


Вы же клиент обучения? Скачайте участок ОЛ с контакта, постройте распределение по цене заявки и сделки. И увидите, что это не так.
Thanks:

Pyrkoff

Avatar
Date: 9/22/2014
Reply


Михаил Сухов
Pyrkoff
на реальном рынке цена сделки практически всегда соответствует цене заявки.


Вы же клиент обучения? Скачайте участок ОЛ с контакта, постройте распределение по цене заявки и сделки. И увидите, что это не так.


Выразился не совсем так. С ордер логом согласен, я имел в виду свои заявки, они в 99% случаев исполняются по ценам самих заявок на реале, потому что выставляются всегда ниже бида в случае бая и выше аска в случае селла.
А вот если рассматривать эмуляцию при MatchOnTouch = false, то там исполнение, как я уже писал, происходит всегда лучше цены заявки. И в результате получается, что к каждой сделке «приклеивается» пункт, которого на реале практически никогда не встретить.

При включенной опции MatchOnTouch = false исполнение заявки дожидается, когда цена прошьет ее уровень. Рынок уровень прошивает, происходит исполнение, но, как мне кажется логичным, оно должно происходить по цене заявки, а не по цене на сколько данный уровень прошьется. Всё это естественно применимо для заявок, которые выставляются ниже рынка в случае бая и выше в случае селла.

Подскажите, каким образом можно повлиять на цену исполнения заявок?

Thanks:

Mikhail Sukhov

Avatar
Date: 9/23/2014
Reply


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

Если вы стоите в стакане, и по вам ударяют, то цена ваших сделок будет всегда = цене заявки.

Если вы ударяете по стакану, то цена ваших сделок будет >= лучшей противоположной цене и <= цене заявки.
Thanks:

Pyrkoff

Avatar
Date: 9/24/2014
Reply


Михаил Сухов
Если вы стоите в стакане, и по вам ударяют, то цена ваших сделок будет всегда = цене заявки.


Вот я как раз об этом, я выставляю отложку, то есть «стою в стакане». По мне «ударяют», то есть прошивают уровень моей заявки, и на реале практически всегда цена сделки получается равной цене заявки. А вот у MarketEmulator при MatchOnTouch = false в таком случае сделка принимает значение цены лучше, чем у заявки.

По моему мнению, это достаточно оптимистический сценарий, который очень редко встречается на реальном рынке, поэтому присутствует необходимость данный момент подправить.


Thanks:

Mikhail Sukhov

Avatar
Date: 9/24/2014
Reply


Pyrkoff

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


Мы о разных вещах видимо говорим. Не может быть такого как "практически всегда".
Thanks:

devruss

Avatar
Date: 9/24/2014
Reply


покажи лог с примером: выведи цены, best bid/ask, отдельно момент выставления заявки, как цена прошивает ордер и тут же цену исполнения.

Если эта ошибка существует, то ты только что убил всем пользователям продукта большинство интрадей стратегий, не говоря про HFT=) Хотя я сам все проверял, у меня было нормально. Единственный момент, когда цена исполнения может быть лучше, чем в лимином приказе - это когда например рынок идет наверх, ты ставишь лимитный приказ на продажу, и до того как он реально поставился на биржу, рынок проходит твой уровень и твой приказ исполняется как бы "по рынку", т.е. по текущим ценам. Такое случается live на сильных движениях, например
Thanks:

Pyrkoff

Avatar
Date: 9/25/2014
Reply


Михаил Сухов

Не может быть такого как "практически всегда".


То незначительное количество сделок на реале, которые получали цены лучше заявок, видимо, как отметил [USERLINK]devruss[/USERLINK], попросту не успевали вовремя выставляться в нужное место. Спасибо, с этим понятно.

Используя следующий код:
Code

this.WhenNewMyTrades()
    .Do(ProcessMyTrades)
    .Apply(this);
this.WhenOrderRegistered()
    .Do(ProcessOrders)
    .Apply(this);

private void ProcessOrders(Order order)
{
    order.Comment = Security.BestPair.ToString();
}

private void ProcessMyTrades(IEnumerable<MyTrade> myTrades)
{
    foreach (var trade in myTrades)
    {
        Debug.Print("Цена заявки {0} {1}, BestPair у заявки {2}, Цена сделки {3}, BestPair у сделки {4}",
					trade.Order.Direction, 	trade.Order.Price, trade.Order.Comment, trade.Trade.Price, Security.BestPair)    	
    }            
}


вывожу лог исполнения сделок у MarketEmulator при MatchOnTouch = false:


Как видно из представленного примера исполнение всегда проходит лучше цены заявки..
Thanks:

Mikhail Sukhov

Avatar
Date: 9/27/2014
Reply


Действительно, была ошибка. Будет фикс.
Thanks: Pyrkoff

Pyrkoff

Avatar
Date: 10/13/2014
Reply


Михаил Сухов
Действительно, была ошибка. Будет фикс.


Михаил, в версии 4.2.26.0 произведен фикс указанной выше проблемы. Замечательно!

Используя код:
Code

        private decimal sum;
        protected override void OnStopped()
        {
            MyTrades.ForEach(t =>sum = sum + Math.Abs(t.Trade.Price - t.Order.Price));
            Debug.Print("Общий результат {0}", sum);

            base.OnStopped();
        }


при остановке стратегии результат во всех случаях прогона отличен от ноля.
Что явно подтверждает, что проблема не была решена в полной мере!

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






Thanks:

Mikhail Sukhov

Avatar
Date: 10/13/2014
Reply


Pyrkoff

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


Полное отсутствие - это нереально поведение.

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


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy