Trabalhar com Armazenamento Remoto

Introdução

Além do armazenamento local, a API disponibiliza a capacidade de trabalhar com armazenamento remoto de dados de mercado. Isto é especialmente útil ao utilizar o Hydra em modo servidor ou ao ligar a um servidor Hydra.

Ligar ao Armazenamento Remoto

Para trabalhar com armazenamento remoto, use a classe RemoteMarketDataDrive.

// Criar RemoteMarketDataDrive
var remoteDrive = new RemoteMarketDataDrive(RemoteMarketDataDrive.DefaultAddress, new FixMessageAdapter(new IncrementalIdGenerator()))
{
	Credentials = { Email = "hydra_user", Password = "hydra_user".To<SecureString>() }
};

// Este código cria uma instância de RemoteMarketDataDrive para conectar ao armazenamento remoto.
// Ele usa o endereço padrão e FixMessageAdapter para comunicação.
// As credenciais são definidas para autenticação.

Carregar Informação de Instrumentos

Antes de carregar dados de mercado, é necessário obter informação sobre os instrumentos disponíveis.

// Carregar informações de instrumentos
var exchangeInfoProvider = new InMemoryExchangeInfoProvider();
remoteDrive.LookupSecurities(Extensions.LookupAllCriteriaMessage, registry.Securities,
	s => securityStorage.Save(s.ToSecurity(exchangeInfoProvider), false), () => false,
	(c, t) => Console.WriteLine($"Transferido [{c}]/[{t}]"));

var securities = securityStorage.LookupAll();

// Este código carrega informações sobre todos os instrumentos disponíveis do armazenamento remoto.
// Os instrumentos carregados são salvos no armazenamento local e exibidos no console.

Carregar Dados de Mercado

Depois de obter a informação dos instrumentos, pode avançar para o carregamento dos dados de mercado.

// Carregar dados de mercado
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);

	// ... (data loading code)
}

// Este loop percorre todos os tipos de dados disponíveis para o instrumento especificado.
// Para cada tipo de dados, é criado um armazenamento local e o armazenamento remoto é acedido.

Guardar Dados Localmente

Os dados carregados podem ser guardados localmente para utilização posterior.

// Salvar dados localmente
foreach (var dateTime in dates)
{
	using (var stream = remoteStorage.LoadStream(dateTime))
	{
		if (stream == Stream.Null)
			continue;

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

	// ... (data output code)
}

// Este código carrega dados de cada data do armazenamento remoto e os salva no armazenamento local.

Usar Dados para Testes

Os dados carregados e guardados localmente podem ser usados para testar estratégias de negociação com o HistoryEmulationConnector.

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

Obter Intervalos de Datas Disponíveis

// Trabalhar com vários tipos de dados
foreach (var dataType in remoteDrive.GetAvailableDataTypes(secId, format))
{
	// ... (data processing code)

	// Tratamento de erros e logging
	Console.WriteLine($"Remote {dataType}: {remoteStorage.Dates.FirstOrDefault()}-{remoteStorage.Dates.LastOrDefault()}");
	Console.WriteLine($"{dataType}={dateTime}");
}

Conclusão

A funcionalidade de armazenamento remoto de dados de mercado da API fornece capacidades flexíveis para obter e usar dados históricos. Isto permite testar estratégias de negociação e analisar o mercado de forma eficiente usando conjuntos de dados extensos disponíveis através do servidor Hydra.