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


Загрузка исторических данных
Atom
1/16/2017


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

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

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



Thanks:


< 1 2 
Александр3012

Avatar
Date: 4/21/2017
Reply


Благодарю, буду ждать ответа.
Thanks:

Дмитрий_

Avatar
Date: 4/23/2017
Reply


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

Support

Avatar
Date: 4/24/2017
Reply


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

Thanks: Александр3012

Александр3012

Avatar
Date: 4/24/2017
Reply


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

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

}

}
}
Thanks:

Support

Avatar
Date: 4/25/2017
Reply


ок.
Thanks:
< 1 2 

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy