using StockSharp.Algo;
using StockSharp.Algo.Candles.Compression;
using StockSharp.Algo.History.Russian.Finam;
using StockSharp.Algo.Storages;
using StockSharp.BusinessEntities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FinamLoader
{
class Program
{
///
/// Хранилище инструментов Финама
///
private class FinamSecurityStorage : CollectionSecurityProvider, ISecurityStorage
{
public FinamSecurityStorage(Security security)
: base(new[] { security })
{
}
void ISecurityStorage.Save(Security security)
{
}
void ISecurityStorage.Delete(Security security)
{
throw new NotSupportedException();
}
void ISecurityStorage.DeleteBy(Security criteria)
{
throw new NotSupportedException();
}
IEnumerable ISecurityStorage.GetSecurityIds()
{
return Enumerable.Empty();
}
}
static void Main(string[] args)
{
Security security = new Security
{
Id = "SBER@TQBR",
Board = ExchangeBoard.Micex
};
// Создаем экземпляр класса FinamHistorySource. Этот объект управляет получением данных с Финама.
FinamHistorySource _finamHistorySource = new FinamHistorySource();
// Создаем жранилище для нативных идентификаторов (родные идентификаторы инструментов Финама)
var nativeIdStorage = new InMemoryNativeIdStorage();
bool isCanceled = false;
// Обновляет
// _finamHistorySource.Refresh(new FinamSecurityStorage(security), nativeIdStorage, security, newsec, canceled);
// Выполняем обновление хранилища инструментов Финама
// Перед добавлением каждого инструмента в хранилище вызывается функция (делегат) isCanceled, если функция возвращает false, то обновление
// хранилища продолжается, если true, то прерывается.
// При добавлении нового инструмента в хранилище вызывается функция (делегат) newSecurity.
_finamHistorySource.Refresh(new FinamSecurityStorage(security), nativeIdStorage, security, s => isCanceled = s.Id == security.Id, () => isCanceled);
var timeFrame = TimeSpan.FromMinutes(1);
var now = DateTime.Now;
var end = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0);
var start = end.AddDays(-1);
// Запрашиваем свечи с Финама
var candles = _finamHistorySource.GetCandles(security, nativeIdStorage, timeFrame, start, end);
Console.Read();
}
}
}