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


StockSharp взят с trunk rev 19463

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

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

_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.


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



Спасибо:


Mikhail Sukhov

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


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


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

Sergey Sokolov

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


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)
Спасибо:

Alexander

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


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

Sergey Sokolov

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


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

Sergey Sokolov

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


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


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

loading
clippy