使用远程存储

介绍

除了本地存储,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($"已下载 [{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 测试交易策略。

// 使用 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服务器提供的广泛数据集进行交易策略的高效测试和市场分析。