Не работает эмулятор

Не работает эмулятор
Atom
9/24/2012
Sergey Sokolov


StockSharp взят с trunk rev 19463

При попытке тестирования стратегии на истории возникли слеюующие проблемы:

1) Не генерируются стаканы (есть только история сделок). Вот как регистрирую генератор:
Code

_trader = new EmulationTrader(new[] {security}, new[] {portfolio}) {
    MarketTimeChangedInterval = TimeSpan.FromSeconds(1),
    StorageRegistry = storageRegistry,
    UseMarketDepth = true,
    //UseMarketDepth = false,
};

_trader.RegisterMarketDepth(new TrendMarketDepthGenerator(security) {
    GenerateDepthOnEachTrade = true,
    Interval = TimeSpan.FromSeconds(1),
    MaxSpreadStepCount = 10,
    UseTradeVolume = true
});

_trader.Connect();
_trader.StartExport();

_trader.RegisterTrades(security);
_trader.RegisterMarketDepth(security);
_trader.RegisterSecurity(security);

Стаканов и Security.BestBid/Ask нет при любом UseMarketDepth, но при UseMarketDepth=true в ProcessDataError приходит огромное количество исключений вида ArgumentException("node")

2) Исполнение заявок.

  • Самая первая заявка, посланная в эмулятор после старта, даже если она успешно исполняется, после завершения не возвращает информацию о трейдах (_order.GetTrades().Any()==false)
  • Лимитные заявки по цене (LastTrade.Price + проскальзывание) исполняются всегда по самой худшей цене, а если проскальзывание небольшое, то исполняются не всегда (хотя это наверно нормально)
  • Заявки order.Type = OrderTypes.Market исполняются так же как и лимитники, а если установить цену в 0, то вообще не исполняются.
  • Неисполненная заявка некоторое время висит в эмуляторе в активном состоянии а затем автоматически отменяется (видимо на границе сессий в 18:45), причем выставление order.ExpiryDate = DateTime.MaxValue не помогает.


3) Неверный расчет PnL. Для RIU2 размер шага 5, стоимость шага 3.1. С такими параметрами при позиции в 5 контрактов и изменении цены примерно на 5000 пунктов, PnL изменился почти на 30000.


Если кто знает, на какой из последних версий стаканы/заявки работают корректно, просьба написать.



Thanks:


Mikhail Sukhov

Avatar
Date: 9/24/2012
Reply


Sergey Sokolov
Стаканов и Security.BestBid/Ask нет при любом UseMarketDepth, но при UseMarketDepth=true в ProcessDataError приходит огромное количество исключений вида ArgumentException("node")


Это самая ценная информация. Стек трейс.
Thanks:

Sergey Sokolov

Avatar
Date: 9/24/2012
Reply


ProcessDataError: System.ArgumentException: node
at StockSharp.Algo.Testing.MarketEmulator.#=qsDZKrWdiDpmLBDPZ$6rbRA==(#=q3udKpCOalDAG9i_Fiaji7GyIRzsiGf0m_bQcxngCAvhnp31RRWCAfTLkvbAzkIqH #=qgEJD6KXip0EN0NL2tPleyA==)
at #=q3udKpCOalDAG9i_Fiaji7GyIRzsiGf0m_bQcxngCAvhnp31RRWCAfTLkvbAzkIqH.Emulate(MarketEmulator #=qLJs1r8OnbZIsuPt7wHYPBA==)
at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg)
Thanks:

Alexander

Avatar
Date: 9/27/2012
Reply


Проблема с последней версией на codeplex ушла?
Thanks:

Sergey Sokolov

Avatar
Date: 9/27/2012
Reply


Проблема с генерацией стаканов ушла.
Если использовать UseMarketDepth=true, то вроде тестирование работает нормально. PnL тоже на первый взгляд считается корректно.
Протестировать остальные перечисленные в первом посте проблемы + протестировать работу с UseMarketDepth=false пока не могу, код в переходном состоянии. Как смогу, напишу.
Thanks:

Sergey Sokolov

Avatar
Date: 10/2/2012
Reply


Перетестировал на сегодняшнем транке.
1) Стаканы работают
2) Исполнение заявок при использовании генератора стаканов TrendMarketDepthGenerator до сих пор работает не совсем так как должно бы, на мой взгляд. Даже при самых нереалистично-благоприятных настройках (MaxSpreadStepCount=MinSpreadStepCount=1, MinVolume=100) среднее проскальзывание около 60 пунктов на РИ для эмуляции рыночных ордеров лимитными с заведомо худшей ценой (проскальзывание считается как средняя разница между последней сделкой в момент отправки заявки и ценой исполнения ордера). Переписывался с Михаилом на эту тему, он посоветовал пару обходных решений, но пока еще не протестировал.
3) Расчет PnL похож на правду.
Thanks:


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

loading
clippy