Для изменения размера нажмите или перетащите
Хранилище сообщений

Наряду с использованием хранилищ торговых объектов, можно использовать хранилища сообщений. Работа с этими хранилищами также осуществляется через интерфейс IMarketDataStorageTData. Например, для работы со свечами можно использовать хранилище типа IMarketDataStorage<CandleMessage>. IStorageRegistry также содержит набор методов для получения нужных хранилищ сообщений. Так хранилище временных свечей можно получить, как показано в следующем фрагменте кода.

C#
var security = new Security() { Id = "RIM5@FORTS" };
var candleMessageStorage = _storage.GetCandleMessageStorage(typeof(TimeFrameCandleMessage), security, TimeSpan.FromMinutes(1));

Далее с хранилищем можно работать при помощи методов IMarketDataStorageLoad(DateTime) и/или IMarketDataStorageSave(IEnumerable), как показано в примере в предыдущем разделе.

Обратите внимание, что S# позволяет приводить типы хранилища торговых объектов к соответствующим типам хранилищ сообщений и наоборот. Например, IMarketDataStorage<MarketDepth> можно привести к типу IMarketDataStorage<QuoteChangeMessage> и наборот.

C#
var security = new Security() { Id = "RIM5@FORTS" };

var depthStorage = _storage.GetMarketDepthStorage(_security);
var quoteMessageStorage = depthStorage as IMarketDataStorage<QuoteChangeMessage>;

var quoteMessageStorage1 = _storage.GetQuoteMessageStorage(_security);
var depthStorage1 = quoteMessageStorage1 as IMarketDataStorage<MarketDepth>;

Следует обратить внимание на актуальность использования хранилища сообщений для хранения собственных заявок и сделок. Дело в том, что для этих торговых объектов нет соответсвующих хранилищ. В этом случае придется использовать хранилище сообщений IMarketDataStorage<ExecutionMessage>. В следующем примере покано, как сохранить в хранилище собственные сделки.

Пример сохранения собственных сделок

  1. Сначала создается экземпляр коннектора, а также хранилище. Кроме того мы определяем идентификатор инструменты, с которым будем работать и декларируем переменную для хранилища транзакций. Само хранилище транзакций для заданного инструмета будет получено в событии получения инструментов при помощи метода IStorageRegistryGetTransactionStorage.

    C#
    // Создаем коннектор
    var connector = new QuikTrader();
    
    // Путь к корневой папке хранилища
    var storagePath = @"....";
    
    var securityId = "RIM5@FORTS";
    
    // Создаем хранилище
    var storage = new StorageRegistry() { DefaultDrive = new LocalMarketDataDrive(storagePath) };
    
    // Декларируем хранилище транзакций
    IMarketDataStorage<ExecutionMessage> tranStorage = null;
    
    // В обработчике событии получения инстументов
    // получаем хранилище транзакций для заданного инструмента
    connector.NewSecurities += securities =>
    {
        securities.ForEach(s =>
        {
            if (s.Id == securityId)
                tranStorage = _storage.GetTransactionStorage(s);
        });
    };
  2. Сохранение собственных сделок будет выполняться в обработчике события IConnectorNewMyTrades при помощи метода IMarketDataStorageSave(IEnumerable). Перед сохранением список собственных сделок приводится к типу IEnumerable<ExecutionMessage>. Сама процедура выставления заявок в этим примере опущена.

    C#
    // сохраняем сделки в хранилище
    connector.NewMyTrades += trades =>
    {
        tranStorage.Save((IEnumerable<ExecutionMessage>)trades);
    };
См. также

Другие ресурсы