| Александр3012 
 
   
 
						
						
					 | Date: 3/14/2017 
 
 
	
			Благодарю, с nativeIdStorage, вроде, стало понятнее, но пример во вложении не работает, видимо он собран на устаревшей версии библиотеки. Теперь в FinamHistorySource метод Refresh требует ещё провайдер бирж, что это и зачем - опять не понятно. Большая просьба, сделайте на свежей библиотеке маленькую программку качающую исторические свечи с финама или любого ресурса, чтоб можно было разобраться и поправить в своих роботов, а то в курсах все устаревшее, а без информации не специалисту разобраться не просто.
			
			
			
			
		
 | 
			
				| Александр3012 
 
   
 
						
						
					 | Date: 4/20/2017 
						
							|  |  |  |   |  
 
 
	
			Уважаемая техподдержка, добрый день. Собрал на новой библиотеке 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();
 
 }
 
 }
 }
 
 |