Уважаемая техподдержка, добрый день. Собрал на новой библиотеке 4.3.23 пример для закачки свечей с финама, подправил его под нее, все заработало, но вот такая непонятная штука происходит: Закачиваю свечи для сбера - все работает, качаешь фьючерс - выдает ошибку. "Необработанное исключение типа "System.ArgumentException" в StockSharp.Algo.History.dll Дополнительные сведения: Инструмент RIM7@FORTS не содержит идентификатор Finam (market)." Подскажите как победить эту беду. Ошибка выпадает на предпоследней строчке "var candles = _finamHistorySource.GetCandles(security, timeFrame, start, end);"
namespace свечи_с_финама_4._3._23
{
class Program
{
/// <summary>
/// Хранилище инструментов Финама
/// </summary>
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<string> ISecurityStorage.GetSecurityIds()
//{
// return Enumerable.Empty<string>();
//}
}
private class ExchangeInfoProvider : IExchangeInfoProvider
{
public IEnumerable<ExchangeBoard> Boards { get { throw new NotImplementedException(); } }
public IEnumerable<Exchange> Exchanges { get { throw new NotImplementedException(); } }
public event Action<ExchangeBoard> BoardAdded;
public event Action<Exchange> ExchangeAdded;
public Exchange GetExchange(string code)
{
throw new NotImplementedException();
}
public ExchangeBoard GetExchangeBoard(string code)
{
switch (code)
{
case "TQBR":
return ExchangeBoard.MicexTqbr;
case "TQBS":
return ExchangeBoard.MicexTqbs;
default:
break;
}
return ExchangeBoard.Micex;
}
public void Save(ExchangeBoard board)
{
throw new NotImplementedException();
}
public void Save(Exchange exchange)
{
throw new NotImplementedException();
}
//я добавил, не были реализованы члены интерфеса
public event Action<Exchange> ExchangeRemoved;
public event Action<ExchangeBoard> BoardRemoved;
public void Delete(ExchangeBoard board)
{
throw new NotImplementedException();
}
public void Delete(Exchange exchange)
{
throw new NotImplementedException();
}
}
static void Main(string[] args)
{
//Security security = new Security
//{
// Id = "SBER@TQBR",
// Board = ExchangeBoard.Micex
//};
Security security = new Security
{
Id = "RIM7@FORTS",
Board = ExchangeBoard.Forts
};
// Создаем жранилище для нативных идентификаторов (родные идентификаторы инструментов Финама)
var nativeIdStorage = new InMemoryNativeIdStorage();
bool isCanceled = false;
// Обновляет
// _finamHistorySource.Refresh(new FinamSecurityStorage(security), nativeIdStorage, security, newsec, canceled);
IExchangeInfoProvider exchangeInfoProvider = new ExchangeInfoProvider();
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
// Создаем экземпляр класса FinamHistorySource. Этот объект управляет получением данных с Финама.
FinamHistorySource _finamHistorySource = new FinamHistorySource(nativeIdStorage, exchangeInfoProvider);
// Задаем папку, где будут сохранены запрошенные данные.. Если папку не задавать, то
// на диске данные сохранены не будут
//_finamHistorySource.DumpFolder = @"D:/трейдинг роботы/4.3.19.5/Исторические Свечи/DataHist";
_finamHistorySource.DumpFolder = "DataHist";
// Выполняем обновление хранилища инструментов Финама
// Перед добавлением каждого инструмента в хранилище вызывается функция (делегат) isCanceled, если функция возвращает false, то обновление
// хранилища продолжается, если true, то прерывается.
// При добавлении нового инструмента в хранилище вызывается функция (делегат) newSecurity.
_finamHistorySource.Refresh(new FinamSecurityStorage(security), 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, timeFrame, start, end);
Console.Read();
}
}
}