Table of Contents

Работа с удаленным хранилищем

Введение

В дополнение к локальному хранилищу, API предоставляет возможность работы с удаленным хранилищем маркет-данных. Это особенно полезно при использовании Hydra в серверном режиме или при подключении к Hydra серверу.

Подключение к удаленному хранилищу

Для работы с удаленным хранилищем используется класс RemoteMarketDataDrive.

// Создание RemoteMarketDataDrive
var remoteDrive = new RemoteMarketDataDrive(RemoteMarketDataDrive.DefaultAddress, new FixMessageAdapter(new IncrementalIdGenerator()))
{
    Credentials = { Email = "hydra_user", Password = "hydra_user".To<SecureString>() }
};

// Этот код создает экземпляр RemoteMarketDataDrive для подключения к удаленному хранилищу.
// Используется адрес по умолчанию и FixMessageAdapter для коммуникации.
// Также устанавливаются учетные данные для аутентификации.

Загрузка информации о инструментах

Перед загрузкой маркет-данных, необходимо получить информацию о доступных инструментах.

// Загрузка информации о инструментах
var exchangeInfoProvider = new InMemoryExchangeInfoProvider();
remoteDrive.LookupSecurities(Extensions.LookupAllCriteriaMessage, registry.Securities,
    s => securityStorage.Save(s.ToSecurity(exchangeInfoProvider), false), () => false,
    (c, t) => Console.WriteLine($"Downloaded [{c}]/[{t}]"));

var securities = securityStorage.LookupAll();

// Этот код загружает информацию о всех доступных инструментах с удаленного хранилища.
// Загруженные инструменты сохраняются в локальное хранилище и выводятся в консоль.

Загрузка маркет-данных

После получения информации об инструментах, можно приступить к загрузке маркет-данных.

// Загрузка маркет-данных
foreach (var dataType in remoteDrive.GetAvailableDataTypes(secId, format))
{
    var localStorage = storageRegistry.GetStorage(secId, dataType.MessageType, dataType.Arg, localDrive, format);
    var remoteStorage = remoteDrive.GetStorageDrive(secId, dataType, format);

    // ... (код загрузки данных)
}

// Этот цикл перебирает все доступные типы данных для указанного инструмента.
// Для каждого типа данных создается локальное хранилище и получается удаленное хранилище.

Сохранение данных локально

Загруженные данные могут быть сохранены локально для дальнейшего использования.

// Сохранение данных локально
foreach (var dateTime in dates)
{
    using (var stream = remoteStorage.LoadStream(dateTime))
    {
        if (stream == Stream.Null)
            continue;

        localStorage.Drive.SaveStream(dateTime, stream);
    }

    // ... (код вывода данных)
}

// Этот код загружает данные за каждую дату из удаленного хранилища и сохраняет их в локальное хранилище.

Использование данных для тестирования

Загруженные и сохраненные локально данные могут быть использованы для тестирования торговых стратегий с помощью HistoryEmulationConnector.

var connector = new HistoryEmulationConnector(secProvider, new[] { pf }, new StorageRegistry { DefaultDrive = remoteDrive });

Получение диапазонов доступных дат

// Работа с различными типами данных
foreach (var dataType in remoteDrive.GetAvailableDataTypes(secId, format))
{
    // ... (код обработки каждого типа данных)

    // Обработка ошибок и логирование
    Console.WriteLine($"Remote {dataType}: {remoteStorage.Dates.FirstOrDefault()}-{remoteStorage.Dates.LastOrDefault()}");
    Console.WriteLine($"{dataType}={dateTime}");
}

Заключение

Работа с удаленным хранилищем маркет-данных в API предоставляет гибкие возможности для получения и использования исторических данных. Это позволяет эффективно тестировать торговые стратегии и проводить анализ рынка, используя обширные наборы данных, доступные через Hydra сервер.