Obtención de datos históricos
StockSharp API proporciona mecanismos cómodos para obtener datos históricos, que se pueden usar tanto para probar estrategias de trading como para construir Indicadores.
Obtención de datos históricos mediante Connector
Configuración de la conexión
Para obtener datos históricos, primero debe configurar una conexión con el sistema de trading:
// Crear una instancia de Connector
var connector = new Connector();
// Agregar un adaptador para conectar con Binance
var messageAdapter = new BinanceMessageAdapter(connector.TransactionIdGenerator)
{
Key = "<Your API Key>",
Secret = "<Your Secret Key>",
};
connector.Adapter.InnerAdapters.Add(messageAdapter);
// Conectar
connector.Connect();
La conexión también se puede configurar mediante la interfaz gráfica, como se describe en la sección Ventana de configuración de conexión.
Suscripción a velas históricas
Para recibir velas históricas, debe crear una suscripción y especificar los parámetros de los datos solicitados:
// Crear una suscripción para velas de 5 minutos del instrumento seleccionado
var subscription = new Subscription(
DataType.TimeFrame(TimeSpan.FromMinutes(5)),
security)
{
MarketData =
{
// Especificar el período para el que se obtendrán datos históricos
From = DateTime.Now.Subtract(TimeSpan.FromDays(30)),
To = DateTime.Now,
// Establecer la bandera para recibir solo velas completadas
IsFinishedOnly = true
}
};
// Suscribirse al evento de recepción de velas
connector.CandleReceived += OnCandleReceived;
// Iniciar la suscripción
connector.Subscribe(subscription);
// Manejador del evento de recepción de velas
private void OnCandleReceived(Subscription subscription, ICandleMessage candle)
{
// Comprobar que la vela pertenece a nuestra suscripción
if (subscription != _subscription)
return;
// Procesar la vela recibida
Console.WriteLine($"Vela recibida: {candle.OpenTime}, O:{candle.OpenPrice}, H:{candle.HighPrice}, L:{candle.LowPrice}, C:{candle.ClosePrice}, V:{candle.TotalVolume}");
// Para mostrar en el gráfico, puede usar:
// Chart.Draw(_candleElement, candle);
}
Uso de velas para gráficos
Las velas recibidas se pueden mostrar en un gráfico mediante los componentes gráficos integrados de StockSharp:
// Crear y configurar elementos del gráfico
var chart = new Chart();
var area = new ChartArea();
var candleElement = new ChartCandleElement();
// Agregar área y elemento al gráfico
chart.AddArea(area);
chart.AddElement(area, candleElement, subscription);
// En el manejador CandleReceived, dibujar velas
private void OnCandleReceived(Subscription subscription, ICandleMessage candle)
{
// Comprobar que la vela pertenece a nuestra suscripción
if (subscription != _subscription)
return;
// Si necesita mostrar solo velas completadas
if (candle.State == CandleStates.Finished)
{
var chartData = new ChartDrawData();
chartData.Group(candle.OpenTime).Add(candleElement, candle);
chart.Draw(chartData);
}
}
Obtención de otros tipos de datos históricos
De forma similar, puede obtener otros tipos de datos históricos:
Obtención de ticks históricos
var tickSubscription = new Subscription(DataType.Ticks, security)
{
MarketData =
{
From = DateTime.Now.Subtract(TimeSpan.FromDays(1)),
To = DateTime.Now
}
};
connector.TickTradeReceived += (subscription, tick) =>
{
if (subscription == tickSubscription)
Console.WriteLine($"Tick: {tick.ServerTime}, Precio: {tick.Price}, Volumen: {tick.Volume}");
};
connector.Subscribe(tickSubscription);
Obtención de libros de órdenes históricos
var depthSubscription = new Subscription(DataType.MarketDepth, security)
{
MarketData =
{
From = DateTime.Now.Subtract(TimeSpan.FromHours(1)),
To = DateTime.Now
}
};
connector.OrderBookReceived += (subscription, depth) =>
{
if (subscription == depthSubscription)
Console.WriteLine($"Libro de órdenes: {depth.ServerTime}, mejor bid: {depth.GetBestBid()?.Price}, mejor ask: {depth.GetBestAsk()?.Price}");
};
connector.Subscribe(depthSubscription);