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


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

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

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




Спасибо:


Mikhail Sukhov

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


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

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

Спасибо:

Pyrkoff

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


Михаил Сухов:

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

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

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

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

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

Спасибо:

Mikhail Sukhov

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


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

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

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

Спасибо:

Pyrkoff

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


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

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

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

Спасибо:

Mikhail Sukhov

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


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

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

Спасибо:

devruss

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


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

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

Спасибо:

Pyrkoff

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


Михаил Сухов: Не может быть такого как "практически всегда".

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

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


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:


Цена заявки Buy 118320, BestPair у заявки {Бид 118310 64} {Оффер 118320 3}, Цена сделки 118310, BestPair у сделки {Бид 118310 63} {Оффер 118330 24}
Цена заявки Sell 118320, BestPair у заявки {Бид 118310 45} {Оффер 118320 5}, Цена сделки 118330, BestPair у сделки {Бид 118310 48} {Оффер 118330 18}
Цена заявки Buy 118340, BestPair у заявки {Бид 118340 8} {Оффер 118350 41}, Цена сделки 118330, BestPair у сделки {Бид 118330 7} {Оффер 118340 10}
Цена заявки Sell 118340, BestPair у заявки {Бид 118330 7} {Оффер 118340 10}, Цена сделки 118350, BestPair у сделки {Бид 118330 14} {Оффер 118350 143}
Цена заявки Buy 118330, BestPair у заявки {Бид 118330 14} {Оффер 118350 143}, Цена сделки 118320, BestPair у сделки {Бид 118320 31} {Оффер 118340 21}
Цена заявки Sell 118340, BestPair у заявки {Бид 118320 31} {Оффер 118340 21}, Цена сделки 118350, BestPair у сделки {Бид 118340 5} {Оффер 118350 35}
Цена заявки Buy 118370, BestPair у заявки {Бид 118370 4} {Оффер 118380 23}, Цена сделки 118360, BestPair у сделки {Бид 118360 13} {Оффер 118380 21}
Цена заявки Sell 118370, BestPair у заявки {Бид 118360 10} {Оффер 118370 2}, Цена сделки 118380, BestPair у сделки {Бид 118360 11} {Оффер 118380 9}
Цена заявки Buy 118380, BestPair у заявки {Бид 118380 6} {Оффер 118390 13}, Цена сделки 118370, BestPair у сделки {Бид 118380 4} {Оффер 118400 27}
Цена заявки Sell 118390, BestPair у заявки {Бид 118380 5} {Оффер 118390 4}, Цена сделки 118400, BestPair у сделки {Бид 118380 18} {Оффер 118400 29}
Цена заявки Buy 118380, BestPair у заявки {Бид 118380 18} {Оффер 118400 29}, Цена сделки 118370, BestPair у сделки {Бид 118370 4} {Оффер 118380 9}
Цена заявки Sell 118340, BestPair у заявки {Бид 118330 12} {Оффер 118340 9}, Цена сделки 118350, BestPair у сделки {Бид 118330 17} {Оффер 118350 7}
Цена заявки Buy 118340, BestPair у заявки {Бид 118340 1} {Оффер 118350 6}, Цена сделки 118330, BestPair у сделки {Бид 118330 21} {Оффер 118350 10}
Цена заявки Sell 118340, BestPair у заявки {Бид 118330 4} {Оффер 118340 6}, Цена сделки 118350, BestPair у сделки {Бид 118330 8} {Оффер 118340 1}
Цена заявки Buy 118340, BestPair у заявки {Бид 118330 9} {Оффер 118340 9}, Цена сделки 118330, BestPair у сделки {Бид 118330 3} {Оффер 118340 5}
Цена заявки Sell 118330, BestPair у заявки {Бид 118320 26} {Оффер 118330 26}, Цена сделки 118340, BestPair у сделки {Бид 118320 11} {Оффер 118330 8}
Цена заявки Buy 118350, BestPair у заявки {Бид 118350 5} {Оффер 118360 2}, Цена сделки 118340, BestPair у сделки {Бид 118340 2} {Оффер 118350 7}
Цена заявки Sell 118350, BestPair у заявки {Бид 118340 2} {Оффер 118350 7}, Цена сделки 118360, BestPair у сделки {Бид 118350 10} {Оффер 118360 11}
Цена заявки Buy 118370, BestPair у заявки {Бид 118370 13} {Оффер 118380 12}, Цена сделки 118360, BestPair у сделки {Бид 118370 13} {Оффер 118380 4}
Цена заявки Sell 118350, BestPair у заявки {Бид 118340 6} {Оффер 118350 10}, Цена сделки 118360, BestPair у сделки {Бид 118350 29} {Оффер 118360 13}
Цена заявки Buy 118350, BestPair у заявки {Бид 118360 3} {Оффер 118370 4}, Цена сделки 118340, BestPair у сделки {Бид 118340 20} {Оффер 118360 38}
Цена заявки Sell 118310, BestPair у заявки {Бид 118300 77} {Оффер 118320 12}, Цена сделки 118320, BestPair у сделки {Бид 118310 5} {Оффер 118320 12}
Цена заявки Buy 118300, BestPair у заявки {Бид 118310 5} {Оффер 118320 12}, Цена сделки 118290, BestPair у сделки {Бид 118290 72} {Оффер 118310 12}
Цена заявки Sell 118270, BestPair у заявки {Бид 118260 22} {Оффер 118270 9}, Цена сделки 118280, BestPair у сделки {Бид 118270 3} {Оффер 118280 8}
Цена заявки Buy 118300, BestPair у заявки {Бид 118300 3} {Оффер 118310 3}, Цена сделки 118290, BestPair у сделки {Бид 118290 11} {Оффер 118300 6}
Цена заявки Sell 118300, BestPair у заявки {Бид 118290 10} {Оффер 118300 7}, Цена сделки 118310, BestPair у сделки {Бид 118290 8} {Оффер 118300 1}
Цена заявки Buy 118300, BestPair у заявки {Бид 118290 20} {Оффер 118310 8}, Цена сделки 118290, BestPair у сделки {Бид 118290 20} {Оффер 118310 8}
Цена заявки Sell 118280, BestPair у заявки {Бид 118270 18} {Оффер 118290 12}, Цена сделки 118290, BestPair у сделки {Бид 118280 3} {Оффер 118290 3}
Цена заявки Buy 118290, BestPair у заявки {Бид 118290 6} {Оффер 118300 94}, Цена сделки 118280, BestPair у сделки {Бид 118270 12} {Оффер 118290 23}
Цена заявки Sell 118270, BestPair у заявки {Бид 118260 15} {Оффер 118270 5}, Цена сделки 118280, BestPair у сделки {Бид 118260 11} {Оффер 118270 5}
Цена заявки Buy 118270, BestPair у заявки {Бид 118270 11} {Оффер 118290 26}, Цена сделки 118260, BestPair у сделки {Бид 118260 20} {Оффер 118280 42}
Цена заявки Sell 118260, BestPair у заявки {Бид 118250 11} {Оффер 118260 13}, Цена сделки 118270, BestPair у сделки {Бид 118250 8} {Оффер 118270 15}
Цена заявки Buy 118260, BestPair у заявки {Бид 118260 2} {Оффер 118270 9}, Цена сделки 118250, BestPair у сделки {Бид 118250 17} {Оффер 118270 9}
Цена заявки Sell 118260, BestPair у заявки {Бид 118250 12} {Оффер 118260 1}, Цена сделки 118270, BestPair у сделки {Бид 118250 11} {Оффер 118270 10}
Цена заявки Buy 118250, BestPair у заявки {Бид 118250 11} {Оффер 118270 10}, Цена сделки 118240, BestPair у сделки {Бид 118240 32} {Оффер 118270 13}
Цена заявки Sell 118250, BestPair у заявки {Бид 118240 23} {Оффер 118250 3}, Цена сделки 118260, BestPair у сделки {Бид 118240 22} {Оффер 118260 16}
Цена заявки Buy 118270, BestPair у заявки {Бид 118270 2} {Оффер 118280 50}, Цена сделки 118260, BestPair у сделки {Бид 118260 9} {Оффер 118270 5}
Цена заявки Sell 118250, BestPair у заявки {Бид 118240 26} {Оффер 118250 5}, Цена сделки 118260, BestPair у сделки {Бид 118240 24} {Оффер 118260 12}
Цена заявки Buy 118340, BestPair у заявки {Бид 118340 106} {Оффер 118350 13}, Цена сделки 118330, BestPair у сделки {Бид 118330 26} {Оффер 118340 6}
Цена заявки Sell 118310, BestPair у заявки {Бид 118300 15} {Оффер 118310 5}, Цена сделки 118320, BestPair у сделки {Бид 118310 190} {Оффер 118320 11}
Цена заявки Buy 118350, BestPair у заявки {Бид 118350 8} {Оффер 118370 117}, Цена сделки 118340, BestPair у сделки {Бид 118340 21} {Оффер 118360 9}
Цена заявки Sell 118340, BestPair у заявки {Бид 118330 4} {Оффер 118340 5}, Цена сделки 118350, BestPair у сделки {Бид 118330 4} {Оффер 118340 5}
Цена заявки Buy 118360, BestPair у заявки {Бид 118350 20} {Оффер 118360 1}, Цена сделки 118350, BestPair у сделки {Бид 118350 20} {Оффер 118370 85}
Цена заявки Sell 118360, BestPair у заявки {Бид 118350 2} {Оффер 118360 3}, Цена сделки 118370, BestPair у сделки {Бид 118360 231} {Оффер 118370 84}
Цена заявки Buy 118370, BestPair у заявки {Бид 118370 9} {Оффер 118390 53}, Цена сделки 118360, BestPair у сделки {Бид 118370 5} {Оффер 118380 3}
Цена заявки Sell 118370, BestPair у заявки {Бид 118370 16} {Оффер 118390 52}, Цена сделки 118390, BestPair у сделки {Бид 118370 18} {Оффер 118390 52}
Цена заявки Buy 118370, BestPair у заявки {Бид 118370 18} {Оффер 118390 44}, Цена сделки 118360, BestPair у сделки {Бид 118360 18} {Оффер 118380 16}
Цена заявки Sell 118370, BestPair у заявки {Бид 118360 8} {Оффер 118370 8}, Цена сделки 118380, BestPair у сделки {Бид 118380 9} {Оффер 118390 38}
Цена заявки Buy 118370, BestPair у заявки {Бид 118360 17} {Оффер 118380 13}, Цена сделки 118360, BestPair у сделки {Бид 118360 13} {Оффер 118370 6}
Цена заявки Sell 118370, BestPair у заявки {Бид 118360 13} {Оффер 118370 6}, Цена сделки 118380, BestPair у сделки {Бид 118370 6} {Оффер 118380 54}
Цена заявки Buy 118400, BestPair у заявки {Бид 118400 3} {Оффер 118410 31}, Цена сделки 118390, BestPair у сделки {Бид 118400 3} {Оффер 118410 31}
Цена заявки Sell 118410, BestPair у заявки {Бид 118400 3} {Оффер 118410 31}, Цена сделки 118420, BestPair у сделки {Бид 118390 3} {Оффер 118420 33}
Цена заявки Buy 118410, BestPair у заявки {Бид 118410 1} {Оффер 118420 59}, Цена сделки 118400, BestPair у сделки {Бид 118400 11} {Оффер 118410 3}
Цена заявки Sell 118400, BestPair у заявки {Бид 118390 1} {Оффер 118400 6}, Цена сделки 118410, BestPair у сделки {Бид 118390 1} {Оффер 118400 6}
Цена заявки Buy 118400, BestPair у заявки {Бид 118390 1} {Оффер 118400 6}, Цена сделки 118390, BestPair у сделки {Бид 118390 7} {Оффер 118410 18}
Цена заявки Sell 118400, BestPair у заявки {Бид 118390 2} {Оффер 118400 1}, Цена сделки 118410, BestPair у сделки {Бид 118390 9} {Оффер 118410 18}
Цена заявки Buy 118390, BestPair у заявки {Бид 118390 9} {Оффер 118410 18}, Цена сделки 118380, BestPair у сделки {Бид 118380 4} {Оффер 118390 4}
Цена заявки Sell 118390, BestPair у заявки {Бид 118380 4} {Оффер 118390 4}, Цена сделки 118400, BestPair у сделки {Бид 118380 5} {Оффер 118390 3}
Цена заявки Buy 118400, BestPair у заявки {Бид 118390 3} {Оффер 118400 10}, Цена сделки 118390, BestPair у сделки {Бид 118390 6} {Оффер 118400 12}
Цена заявки Sell 118400, BestPair у заявки {Бид 118390 6} {Оффер 118400 12}, Цена сделки 118410, BestPair у сделки {Бид 118400 6} {Оффер 118410 16}
Цена заявки Buy 118410, BestPair у заявки {Бид 118410 8} {Оффер 118420 52}, Цена сделки 118400, BestPair у сделки {Бид 118410 5} {Оффер 118420 52}
Цена заявки Sell 118410, BestPair у заявки {Бид 118400 12} {Оффер 118420 51}, Цена сделки 118420, BestPair у сделки {Бид 118380 23} {Оффер 118390 15}
Цена заявки Buy 118400, BestPair у заявки {Бид 118400 23} {Оффер 118410 3}, Цена сделки 118390, BestPair у сделки {Бид 118390 1} {Оффер 118400 12}
Цена заявки Sell 118380, BestPair у заявки {Бид 118370 2} {Оффер 118380 6}, Цена сделки 118390, BestPair у сделки {Бид 118370 19} {Оффер 118390 21}
Цена заявки Buy 118370, BestPair у заявки {Бид 118370 19} {Оффер 118390 21}, Цена сделки 118360, BestPair у сделки {Бид 118370 2} {Оффер 118380 7}
Цена заявки Sell 118340, BestPair у заявки {Бид 118330 13} {Оффер 118350 64}, Цена сделки 118350, BestPair у сделки {Бид 118330 15} {Оффер 118350 65}

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

Спасибо:

Mikhail Sukhov

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


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

Спасибо: Pyrkoff

Pyrkoff

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


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

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

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


        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();
        }

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

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

Спасибо:

Mikhail Sukhov

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


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

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

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

Спасибо:


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

loading
clippy