Загрузка исторических данных
Atom
16.01.2017


Здравствуйте!

Мне для торговли необходимо получать исторические свечные данные и тут бы метод закачки свечей с сайта финама как раз бы помог.
Но я не могу разобраться в методах, поскольку:
1) Видео-урок 4 устарел. Последняя версия библиотеки (4.3.19.5) используют модифицированную функцию GetCandle , одним из параметров которой является интерфейс INativeIdStorage. Кроме того все последующие версии библиотек ( после с 4.2.10) не используют явно заданное хранилище, которое описывается в видео-уроке. (хотелось бы понять как это сейчас работает. Нужно создавать свой класс для реализации интерфейса?).
2) Попытка запустить проект загрузки исторических данных (CandleDownloadUsing) из разных решений StockSharp.Edu не увенчалась успехом – в большинстве случаях в предшествующих версиях библиотек при выполнении метода GetCandle вызывается исключение – “не удалось соединиться с удаленным сервером”. Почему появляется такое исключение? Сменились адреса серверов?
3) Проект CandleDownloadUsing в последней версии вообще не модифицирован, что вызывает исключение при обращении к несуществующим полям.

Есть возможность сделать рабочий пример CandleDownloadUsing с расширенными комментариями?



Спасибо:




15 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 17.01.2017
Ответить


Чтобы ваши сообщения были видны технической поддержке, предлагаем вам пройти процедуру, описанную здесь http://stocksharp.ru/articles/7809/support-20/
Спасибо:

Support

Фотография
Дата: 27.01.2017
Ответить


Пример во вложении... Также можете посмотреть пример SampleHistoryTesting.
Спасибо: swnike

Александр3012

Фотография
Курсы
Дата: 14.03.2017
Ответить


Благодарю, с nativeIdStorage, вроде, стало понятнее, но пример во вложении не работает, видимо он собран на устаревшей версии библиотеки. Теперь в FinamHistorySource метод Refresh требует ещё провайдер бирж, что это и зачем - опять не понятно. Большая просьба, сделайте на свежей библиотеке маленькую программку качающую исторические свечи с финама или любого ресурса, чтоб можно было разобраться и поправить в своих роботов, а то в курсах все устаревшее, а без информации не специалисту разобраться не просто.
Спасибо:

Support

Фотография
Дата: 15.03.2017
Ответить


Какую версию s# используете?
Спасибо:

Александр3012

Фотография
Курсы
Дата: 15.03.2017
Ответить


4.3.21
Спасибо:

Александр3012

Фотография
Курсы
Дата: 15.03.2017
Ответить


4.3.21
Спасибо:

Александр3012

Фотография
Курсы
Дата: 16.03.2017
Ответить


Уважаемая техподдержка, ответьте что-нибудь. Разъясните на примере или просто словами. Не понятно как с новой библиотекой закачивать исторические данные.
Спасибо:

Support

Фотография
Дата: 16.03.2017
Ответить


Реализуйте IExchangeInfoProvider как показано в следующем примере или используйте предыдущую версию...

Спасибо:

Александр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();

}

}
}
Спасибо:

Support

Фотография
Дата: 21.04.2017
Ответить


Проверим..
Спасибо:

Александр3012

Фотография
Курсы
Дата: 21.04.2017
Ответить


Благодарю, буду ждать ответа.
Спасибо:

Дмитрий Антипов

Фотография
Курсы
Дата: 23.04.2017
Ответить


Чтобы закачать фьючерс - создавайте инструмент так
var si = new Security
{
Id = "SPFB.Si@FORTS",
Board = ExchangeBoard.Forts
};
var rts = new Security
{
Id = "SPFB.RTS@FORTS",
Board = ExchangeBoard.Forts
};
Спасибо: Александр3012

Support

Фотография
Дата: 24.04.2017
Ответить


Вот так сделайте:

Спасибо: Александр3012

Александр3012

Фотография
Курсы
Дата: 24.04.2017
Ответить


Благодарствую, все работает. Выкладываю, может кому пригодится.

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();
}

}



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;
case "FORTS":
return ExchangeBoard.Forts;
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
//};

//var security = new Security
//{
// Id = "SPFB.Si@FORTS",
// Board = ExchangeBoard.Forts
//};

var security = new Security
{
Id = "SPFB.RTS@FORTS",
Board = ExchangeBoard.Forts
};

// Создаем жранилище для нативных идентификаторов (родные идентификаторы инструментов Финама)
var nativeIdStorage = new InMemoryNativeIdStorage();

bool isCanceled = false;

IExchangeInfoProvider exchangeInfoProvider = new ExchangeInfoProvider();
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

// Создаем экземпляр класса FinamHistorySource. Этот объект управляет получением данных с Финама.
FinamHistorySource _finamHistorySource = new FinamHistorySource(nativeIdStorage, exchangeInfoProvider);

// Задаем папку, где будут сохранены запрошенные данные.. Если папку не задавать, то
// на диске данные сохранены не будут
//_finamHistorySource.DumpFolder = @"D:/трейдинг роботы/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();

}

}
}
Спасибо:

Support

Фотография
Дата: 25.04.2017
Ответить


ок.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy