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