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

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


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

Мне для торговли необходимо получать исторические свечные данные и тут бы метод закачки свечей с сайта финама как раз бы помог. Но я не могу разобраться в методах, поскольку:

  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


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

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