Unidades de almacenamiento
Las unidades de almacenamiento en StockSharp son responsables de la ubicación física de los datos de mercado: en un disco local o en un servidor remoto. La interfaz base IMarketDataDrive define el contrato común para todas las implementaciones.
IMarketDataDrive -- Interfaz base
La interfaz IMarketDataDrive proporciona las siguientes capacidades clave:
- Path -- ruta al almacenamiento de datos.
- GetAvailableSecuritiesAsync() -- obtener una lista de todos los instrumentos disponibles en el almacenamiento.
- GetAvailableDataTypesAsync() -- obtener una lista de tipos de datos disponibles para un instrumento específico.
- GetStorageDrive() -- obtener una unidad de almacenamiento para un instrumento y tipo de datos específicos.
- VerifyAsync() -- verificar la integridad del almacenamiento.
- LookupSecuritiesAsync() -- buscar instrumentos por criterios especificados.
LocalMarketDataDrive -- Almacenamiento local de archivos
La clase LocalMarketDataDrive es la implementación principal de unidad que almacena datos en el disco local en el sistema de archivos.
Características clave
- Sistema de archivos -- los datos se organizan en una estructura jerárquica de directorios por instrumentos y fechas.
- Sistema de índices -- la clase interna
Indexproporciona acceso rápido a datos sin escanear el sistema de archivos. Los archivos de índice se almacenan en el formato{instrument_path}{file_name}Dates2.bin. - Seguridad de hilos -- el acceso a datos está protegido por mecanismos de bloqueo para un funcionamiento correcto en aplicaciones multihilo.
- Construcción de índices -- el método
BuildIndexAsync()permite reconstruir índices para mejorar el rendimiento después de operaciones masivas con datos.
Ejemplo de uso
// Crear una unidad local con una ruta especificada
var localDrive = new LocalMarketDataDrive(Path.Combine(
Directory.GetCurrentDirectory(), "Storage"));
// Usar con el registro de almacenamiento
var storageRegistry = new StorageRegistry
{
DefaultDrive = localDrive,
};
// Obtener la lista de instrumentos disponibles
await foreach (var secId in localDrive.GetAvailableSecuritiesAsync())
{
Console.WriteLine(secId);
}
RemoteMarketDataDrive -- Almacenamiento remoto
La clase RemoteMarketDataDrive permite conectarse a un servidor Hydra remoto para acceder a datos de mercado por red.
Ajustes de conexión
- dirección -- dirección del servidor remoto. El valor predeterminado es
127.0.0.1:5002. - Credentials -- credenciales de autenticación (Email y Password).
- TargetCompId -- identificador del componente de destino, por defecto
"StockSharpHydraMD". - SecurityBatchSize -- tamaño de lote al cargar instrumentos, por defecto 1000.
- Timeout -- tiempo de espera de conexión, por defecto 2 minutos.
Ejemplo de uso
// Crear una unidad remota
var remoteDrive = new RemoteMarketDataDrive
{
Address = "192.168.1.100:5002".To<EndPoint>(),
Credentials = { Email = "user", Password = "pass".Secure() }
};
// Obtener tipos de datos disponibles para un instrumento
var secId = "AAPL@NASDAQ".ToSecurityId();
await foreach (var dataType in remoteDrive.GetAvailableDataTypesAsync(secId, StorageFormats.Binary))
{
Console.WriteLine(dataType);
}
Para más detalles sobre el trabajo con almacenamiento remoto, consulte la sección Trabajo con almacenamiento remoto.
DriveCache -- Gestión de unidades
La clase DriveCache gestiona una colección de unidades de almacenamiento y proporciona caché para reutilización.
Métodos y propiedades clave
- GetDrive(path) -- obtener una unidad existente por ruta o crear una nueva.
- DeleteDrive(drive) -- eliminar una unidad de la caché.
- TryDefaultDrive -- el primer LocalMarketDataDrive disponible.
- NewDriveCreated -- evento de creación de nueva unidad.
- DriveDeleted -- evento de eliminación de unidad.
- Changed -- evento de cambios en la colección de unidades.
La clase implementa la interfaz IPersistable, lo que permite guardar y cargar configuraciones de unidades.
Ejemplo de uso
// Crear una caché con una unidad local predeterminada
var defaultDrive = new LocalMarketDataDrive(Path.Combine(
Directory.GetCurrentDirectory(), "Storage"));
var driveCache = new DriveCache(defaultDrive);
// Obtener o crear una unidad por ruta
var anotherDrive = driveCache.GetDrive(@"D:\MarketData");
// Suscribirse a eventos
driveCache.NewDriveCreated += drive =>
Console.WriteLine($"Drive created: {drive.Path}");