← Back

[3.0.11] History Testing

В Trader.NewTrades сделки приходят в прямом порядке, а в MarketDepthGenerator.Generate(MarketDepth data, Security security, IEnumerable<Trade> trades) сделки в trades записаны в обратном порядке.

Возможно фича, но по-моему баг.

  1. При сведении сделки допустим стакана

OFFER 200 BID 100

c виртуальной заявкой SELL 50 сделка будет по цене TRADE=100

Таким образом перекос засчитывается в пользу заявки стратегии.

Нельзя переделать чтобы сделка засчитывалась по цене 100 (т.е. на худший для стратегии случай)?

Иначе получаются слишком оптимистичные результаты тестирования.

Comments (5)

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

Mikhail Sukhov
Mikhail Sukhov
  1. Порядок данных в событиях не детерминирован. Так что и не бага и не фича. Просто так получилось.

pyhta4og: c виртуальной заявкой SELL 50 сделка будет по цене TRADE=100

Таким образом перекос засчитывается в пользу заявки стратегии.

Нельзя переделать чтобы сделка засчитывалась по цене 100 (т.е. на худший для стратегии случай)?

Наверное, описка. Предлагаете сделку по цене 50?

pyhta4og
pyhta4og Author
  1. C учетом того что ByTrendMarketGenerator использует эти сделки для построения стакана, лучще была бы таже последовательность что и в событии NewTrades

  2. Нет, именно по 100. Поясню почему.

Я сделал кастомный генератор стакана, который генерирует стакан для последовательности сделок вверх как лучший бид=максимальная цена, для последовательности сделок вниз лучший аск=минимальная цена. Это приводит к следующей картинке

Здесь розовые квадраты на цене 150030 - виртуальная заявка на продажу. Красные квадраты - это заявки аск в стакане, зеленые - заявки бид в стакане.

Этот стакан - очередная попытка более-менее. корректной симуляции лимиток, о чем мы уже много писали, но решения устраивающего всех так и не нашли.

Так вот, сгенерировал я стакан 150085/150090 в надежде что моя лимитка исполнится ровно по своей цене 150030. А она исполняется по 150085. Понятно, что в реальности она исполнится по 150030. Отсюда и просьба.

Mikhail Sukhov
Mikhail Sukhov

pyhta4og: Так вот, сгенерировал я стакан 150085/150090 в надежде что моя лимитка исполнится ровно по своей цене 150030. А она исполняется по 150085. Понятно, что в реальности она исполнится по 150030. Отсюда и просьба.

Да, понятно. Видимо, для истории недостаточно одного стакана в момент времени. Для правильного матчинга нужны и предыдущие стаканы, чтобы правильно рассчитать динамику.

Все выглядит так, будто это фича реквест к 3.1.🙂 Право же, для 3.0 уже нужен релиз.

Nord
Nord

То есть когда мы в цикле foreach (var trade in trades) {

            }

обрабатываем сделки они не обязательно в том порядке в каком были в квике?

Mikhail Sukhov
Mikhail Sukhov

Nord: То есть когда мы в цикле foreach (var trade in trades) {

            }

обрабатываем сделки они не обязательно в том порядке в каком были в квике?

Да, не обязательно. Просто так получается, что они идут в том порядке (ДДЕ присылает упорядоченно). Но сам порядок никто не контролирует больше.