Получение исторических данных
API предоставляет возможность получать исторические свечи, которые можно использовать как для тестирования, так и для построения индикаторов.
Работа с историческими свечами через Connector
Для получения свечей через 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();
...
- Для того, чтобы получить исторические свечи, необходимо вызвать метод 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);
...
- Исторические свечи передаются через событие Connector.CandleSeriesProcessing:
...
Connector.CandleSeriesProcessing += ProcessCandle;
...
- Появившиеся свечи можно отрисовывать через графический контрол.
Работа с историческими свечами через MessageAdapter
Для получения свечей через MessageAdapter необходимо созлать соответствующий MessageAdapter.
Например, инициализация адаптера для Interactive Brokers описана в пункте Инициализация адаптера Interactive Brokers и выглядит следующим образом:
...
var messageAdapter = new InteractiveBrokersMessageAdapter(Connector.TransactionIdGenerator)
{
Address = "<Your Address>".To<EndPoint>(),
};
...
- Оборачиваем адаптер 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;
}
...
- Теперь по полученному идентификатору инструмента получаем свечи из адаптера:
...
var candles = adapter.GetCandles(eurUsd.SecurityId, TimeSpan.FromDays(1), DateTimeOffset.Now.AddDays(-100), DateTimeOffset.Now);
foreach (var candle in candles)
{
Console.WriteLine(candle);
}
...