← Zurück

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

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

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (10)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

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

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

Pyrkoff
Pyrkoff Autor

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

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

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

Pyrkoff
Pyrkoff Autor

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

Pyrkoff
Pyrkoff Autor

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

То незначительное количество сделок на реале, которые получали цены лучше заявок, видимо, как отметил [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
Mikhail Sukhov

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

Pyrkoff
Pyrkoff Autor

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

Михаил, в версии 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
Mikhail Sukhov

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

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

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

devruss
devruss

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

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