Obter Dados Históricos
A API StockSharp fornece mecanismos convenientes para obter dados históricos, que podem ser utilizados tanto para testar estratégias de negociação como para construir Indicadores.
Obter Dados Históricos via Connector
Configurar a Ligação
Para obter dados históricos, primeiro tem de configurar uma ligação ao sistema de negociação:
// Criar uma instância de Connector
var connector = new Connector();
// Adicionar um adaptador para ligação à Binance
var messageAdapter = new BinanceMessageAdapter(connector.TransactionIdGenerator)
{
Key = "<Your API Key>",
Secret = "<Your Secret Key>",
};
connector.Adapter.InnerAdapters.Add(messageAdapter);
// Ligar
connector.Connect();
A ligação também pode ser configurada utilizando a interface gráfica, conforme descrito na secção Janela de definições de ligação.
Subscrever Velas Históricas
Para receber velas históricas, tem de criar uma subscrição e especificar os parâmetros dos dados pedidos:
// Criar uma subscrição para velas de 5 minutos para o instrumento seleccionado
var subscription = new Subscription(
DataType.TimeFrame(TimeSpan.FromMinutes(5)),
security)
{
MarketData =
{
// Especificar o período para o qual obter dados históricos
From = DateTime.Now.Subtract(TimeSpan.FromDays(30)),
To = DateTime.Now,
// Definir a flag para receber apenas velas concluídas
IsFinishedOnly = true
}
};
// Subscrever o evento de vela recebida
connector.CandleReceived += OnCandleReceived;
// Iniciar a subscrição
connector.Subscribe(subscription);
// Manipulador do evento para receber velas
private void OnCandleReceived(Subscription subscription, ICandleMessage candle)
{
// Verificar se a vela pertence à nossa subscrição
if (subscription != _subscription)
return;
// Processar a vela recebida
Console.WriteLine($"Candle recebido: {candle.OpenTime}, O:{candle.OpenPrice}, H:{candle.HighPrice}, L:{candle.LowPrice}, C:{candle.ClosePrice}, V:{candle.TotalVolume}");
// Para apresentação no gráfico, pode utilizar:
// Chart.Draw(_candleElement, candle);
}
Utilizar Velas em Gráficos
As velas recebidas podem ser apresentadas num gráfico utilizando os componentes gráficos incorporados do StockSharp:
// Criar e configurar elementos do gráfico
var chart = new Chart();
var area = new ChartArea();
var candleElement = new ChartCandleElement();
// Adicionar área e elemento ao gráfico
chart.AddArea(area);
chart.AddElement(area, candleElement, subscription);
// No manipulador do evento CandleReceived, desenhar velas
private void OnCandleReceived(Subscription subscription, ICandleMessage candle)
{
// Verificar se a vela pertence à nossa subscrição
if (subscription != _subscription)
return;
// Se precisar de apresentar apenas velas concluídas
if (candle.State == CandleStates.Finished)
{
var chartData = new ChartDrawData();
chartData.Group(candle.OpenTime).Add(candleElement, candle);
chart.Draw(chartData);
}
}
Obter Outros Tipos de Dados Históricos
De modo semelhante, pode obter outros tipos de dados históricos:
Obter 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}, Preço: {tick.Price}, Volume: {tick.Volume}");
};
connector.Subscribe(tickSubscription);
Obter Livros de Ofertas 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($"Livro de ofertas: {depth.ServerTime}, melhor bid: {depth.GetBestBid()?.Price}, melhor ask: {depth.GetBestAsk()?.Price}");
};
connector.Subscribe(depthSubscription);