EmulationTrader и MarketTimeChangedInterval в одну миллисекунду.

EmulationTrader и MarketTimeChangedInterval в одну миллисекунду.
Atom
1/10/2012
apostar


Здравствуйте,

Имеется следующий код для тестирования стратегии:

[code=csharp] var emulationTrader = new EmulationTrader(allSecurities, new[] ) ; [/code]

При этом если используется [code=csharp]MarketTimeChangedInterval = TimeSpan.FromMilliseconds(1)[/code] то программа зависает после инициализации генераторов трейдов и стаканов, если же используется большее разрешение для MarketTimeChangedInterval, например [code=csharp]MarketTimeChangedInterval = TimeSpan.FromSeconds(1)[/code] то все работает нормально. Не подскажите, с чем это может быть связано?

Используется S# 4.0.14




Thanks:


Alexander

Avatar
Date: 1/10/2012
Reply


А действительно ли нужен такой MarketTimeChangedInterval для тестирования?

Thanks:

apostar

Avatar
Date: 1/11/2012
Reply


Идея следующая: Для того чтобы проверить корректность работы робота, есть две одновременно работающих стратегии: одна торговая (trading) и одна (dump quotes) которая записывает стаканы в файл по наступлению события Trader.QuotesChanged. А также есть сторонний софт (testing), который умеет обрабатывать файл созданный dump quotes стратегией и эмулировать работу торговой модели, реализованной в trading.

Чтобы убедится что trading работает правильно с математической точки зрения, результаты работы testing и trading (который в режиме тестирования работает с EmuationTrader и генераторами стаканов по файлу из dump quotes) должны совпасть. Поскольку генератор стаканов не может сам сгенерировать стакан в нужное ему время, я беру минимальное разрешение времени с которым может записаться стакан в dump quotes и возвращаю true из MarketDepthGenerator.IsTimeToGenerate в нужные мне моменты времени. Минимальное разрешение времени в моем случае - одна миллисекунда, а с ней EmulationTrader не хочет работать.

Возможно, Вы уже решали подобные задачи и можете посоветовать альтернативный подход, который был бы более "нативным" для S#.

Thanks:

Mikhail Sukhov

Avatar
Date: 1/11/2012
Reply


Неясен один момент. У вас есть стаканы и вы по ним тестируете или же стаканов нет и вы их эмулируете?

Thanks:

apostar

Avatar
Date: 1/11/2012
Reply


У меня есть стаканы, сохраненные в файл. При тестировании они попадают в EmulationTrader через написанный мной MarketDepthGenerator.

Thanks:

Mikhail Sukhov

Avatar
Date: 1/11/2012
Reply


[quote=apostar;15558]У меня есть стаканы, сохраненные в файл. При тестировании они попадают в EmulationTrader через написанный мной MarketDepthGenerator.[/quote]

Стаканы загружаются автоматически, через EmulationTrader.Storage. Как и сделки. MarketDepthGenerator нужен для генерации стакана. Другими словами, или загрузка из хранилища, или генерация.

Thanks:

apostar

Avatar
Date: 1/12/2012
Reply


Михаил, в этих терминах - генерация.

[code=csharp] ///

/// Market depth generator based on dump file. /// public sealed class DumpMarketDepthGenerator : MarketDepthGenerator { /// /// The piecewise constant interpolation curve. /// private readonly PciCurve curve;

    /// <summary>
    /// Сгенерировать маркет-данные.
    /// </summary>
    /// <param name="data">Маркет-данные.</param><param name="time">Текущее время.</param>
    public override void Generate(MarketDepth data, DateTime time)
    {
        .......
    }

[/code]

Thanks:

Mikhail Sukhov

Avatar
Date: 1/12/2012
Reply


Все правильно. Но если стаканы уже сохранены, генерировать их не нужно. И нет необходимости писать генератор свой.

Thanks:

apostar

Avatar
Date: 1/12/2012
Reply


Михаил, спасибо за ответ. Дело в том что стаканы сохранены в моем собственном формате, про который S# ничего не знает. Сохраненные стаканы загружаются и попадают в DumpMarketDepthGenerator как PciCurve curve.

Thanks:

Mikhail Sukhov

Avatar
Date: 1/12/2012
Reply


[quote=apostar;15582]Михаил, спасибо за ответ. Дело в том что стаканы сохранены в моем собственном формате, про который S# ничего не знает. Сохраненные стаканы загружаются и попадают в DumpMarketDepthGenerator как PciCurve curve.[/quote]

Тогда лучше подменить реализацию IMarketDataStorage через ITradingStorage.AddTradeStorage. Тогда вы напрямую сделки будете загружать из вашего хранилища через правильный механизм. Или, что еще правильнее, сохранять стаканы через вашу программу с помощью того же IMarketDataStorage

Thanks: apostar

apostar

Avatar
Date: 1/12/2012
Reply


Михаил, спасибо большое, попробую и отпишусь в этой ветке о результатах - вдруг кому-то еще пригодится эта информация.

Thanks:


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

loading
clippy