Table of Contents

Получение исторических данных

API предоставляет возможность получать исторические свечи, которые можно использовать как для тестирования, так и для построения индикаторов.

Работа с историческими свечами через Connector

  1. Для получения свечей через Connector необходимо создать Connector и добавить в него соответствующий MessageAdapter. Как это сделать с помощью специального контрола описано в пункте Окно настройки подключений.

    Также добавить соответствующий MessageAdapter в Connector можно через код. Например, инициализация адаптера для Interactive Brokers описана в пункте Инициализация адаптера Interactive Brokers и выглядит следующим образом:

Connector Connector = new Connector();				
...				
var messageAdapter = new InteractiveBrokersMessageAdapter(Connector.TransactionIdGenerator)
{
	Address = "<Your Address>".To<EndPoint>(),
};
Connector.Adapter.InnerAdapters.Add(messageAdapter);
...	
Connector.Connect();
...
   							
  1. Для того, чтобы получить исторические свечи, необходимо вызвать метод TraderHelper.SubscribeCandles(StockSharp.Algo.ISubscriptionProvider provider, StockSharp.Algo.Candles.CandleSeries series, System.Nullable<System.DateTimeOffset> from, System.Nullable<System.DateTimeOffset> to, System.Nullable<System.Int64> count, System.Nullable<System.Int64> transactionId, StockSharp.Messages.IMessageAdapter adapter, System.Nullable<System.Int64> skip, System.Nullable<StockSharp.Messages.FillGapsDays> fillGaps ):
...
var tf = (TimeSpan)CandlesPeriods.SelectedItem;
var series = new CandleSeries(typeof(TimeFrameCandle), SelectedSecurity, tf);
Connector.SubscribeCandles(SelectedSecurity, DateTime.Now.Subtract(TimeSpan.FromTicks(tf.Ticks * 100)), DateTime.Now);
...
   			
  1. Исторические свечи передаются через событие Connector.CandleSeriesProcessing:
...
Connector.CandleSeriesProcessing += ProcessCandle;
...
   			
  1. Появившиеся свечи можно отрисовывать через графический контрол.

Работа с историческими свечами через MessageAdapter

  1. Для получения свечей через MessageAdapter необходимо созлать соответствующий MessageAdapter.

    Например, инициализация адаптера для Interactive Brokers описана в пункте Инициализация адаптера Interactive Brokers и выглядит следующим образом:

   		
...         
var messageAdapter = new InteractiveBrokersMessageAdapter(Connector.TransactionIdGenerator)
{
	Address = "<Your Address>".To<EndPoint>(),
};
...
   							
  1. Оборачиваем адаптер Interactive Brokers в адаптер системных идентификатор инструментов SecurityNativeIdMessageAdapter. Это необходимо в том случае, если торговая система работает с числовыми или любыми другими идентификаторами инструментов, отличных от обычного строкового представления.
   	
...
SecurityNativeIdMessageAdapter _securityAdapter;

if (adapter.IsNativeIdentifiers)
	_securityAdapter = new SecurityNativeIdMessageAdapter(adapter, new InMemoryNativeIdStorage());

var securities = _securityAdapter.GetSecurities(new SecurityLookupMessage
{
	SecurityId = new SecurityId
	{
		SecurityCode = "EUR"
	}
});

SecurityMessage eurUsd = null;

foreach (var security in securities)
{
	if (security.SecurityId.SecurityCode.CompareIgnoreCase("EURUSD"))
		eurUsd = security;
}
...
   							
  1. Теперь по полученному идентификатору инструмента получаем свечи из адаптера:
...
var candles = adapter.GetCandles(eurUsd.SecurityId, TimeSpan.FromDays(1), DateTimeOffset.Now.AddDays(-100), DateTimeOffset.Now);
foreach (var candle in candles)
{
	Console.WriteLine(candle);
}
...
   			

См. также

Свечи