コード例 #1
0
 public Symbol(string symbol, DateTime dateFrom, DateTime dateTo, FinamDataPeriod timeFrame)
 {
     this.Code         = symbol;
     this.InitDateTo   = dateTo;
     this.timeFrame    = timeFrame;
     this.InitDateFrom = dateFrom;
 }
コード例 #2
0
        private async Task <HashSet <Quote> > GetQuotes(Symbol symbol, int marketId, int em, DateTime dateFrom, DateTime dateTo, FinamDataPeriod period)
        {
            HashSet <Quote> resultSet = new HashSet <Quote>();

            HashSet <Quote> quotesFromFile = GetQuotesFromFile(symbol, marketId, em, dateFrom, dateTo, period);

            resultSet.UnionWith(quotesFromFile);

            var lastQuoteDate = dateFrom;

            foreach (Quote quote in resultSet)
            {
                if (quote.Date > lastQuoteDate)
                {
                    lastQuoteDate = quote.Date;
                }
            }

            if (lastQuoteDate < dateTo)
            {
                if (period == FinamDataPeriod.Monthly)
                {
                    if (dateTo.Subtract(lastQuoteDate).Days < 30)
                    {
                        return(resultSet);
                    }
                }

                if (period == FinamDataPeriod.Daily)
                {
                    if (dateTo.Subtract(lastQuoteDate).Days < 5)
                    {
                        return(resultSet);
                    }
                }

                string rawDataQuotesFromServer = await GetRawDataQuotesFromServer(symbol, marketId, em, lastQuoteDate, dateTo, period);

                AppendResponseToFile(symbol, rawDataQuotesFromServer, period);
                resultSet.UnionWith(ExtractQuotes(rawDataQuotesFromServer));
            }

            return(resultSet);
        }
コード例 #3
0
 public string PrepareGetQuotesRequest(string symbolName, int marketId, int em, FinamDataPeriod period, DateTime partDateFrom, DateTime partDateTo)
 {
     return($"http://export.finam.ru/" +
            $"{symbolName}_{partDateFrom.ToString("yyMMdd")}_{partDateTo.ToString("yyMMdd")}.txt?" +
            $"market={marketId}&" +
            $"em={em}&" +
            $"code={symbolName}&apply=0&" +
            $"df={partDateFrom.Day}&" +
            $"mf={partDateFrom.Month-1}&" +
            $"yf={partDateFrom.Year}&" +
            $"from={partDateFrom.ToShortDateString()}&" +
            $"dt={partDateTo.Day}&" +
            $"mt={partDateTo.Month-1}&" +
            $"yt={partDateTo.Year}&" +
            $"to={partDateTo.ToShortDateString()}&" +
            $"p={(int) period}&" +
            $"f={symbolName}_{partDateFrom.ToString("yyMMdd")}_{partDateTo.ToString("yyMMdd")}&" +
            "e=.txt&" +
            $"cn={symbolName}&" +
            $"dtf=1&" +
            $"tmf=1&" +
            "MSOR=1&mstime=on&mstimever=1&sep=1&sep2=1&datf=1");
 }
コード例 #4
0
        private static void AppendResponseToFile(Symbol symbol, string rawDataQuotes, FinamDataPeriod period)
        {
            var dataLines = rawDataQuotes.Split('\n');

            string[] s = dataLines[0].Replace("\n", "").Split(',');
            if (s.Length != 9)
            {
                throw new ApplicationException("Error " + dataLines[0]);
            }

            FilesHelper.AppendToFile($"{symbol.Code}_{period}", rawDataQuotes);
        }
コード例 #5
0
        private HashSet <Quote> GetQuotesFromFile(Symbol symbol, int marketId, int em, DateTime dateFrom, DateTime dateTo, FinamDataPeriod period)
        {
            string fileName = $"{symbol.Code}_{period}";

            if (!FilesHelper.IsFileExists(fileName))
            {
                return(new HashSet <Quote>());
            }

            HashSet <Quote> quotes = new HashSet <Quote>();
            string          text   = FilesHelper.ReadFromFile(fileName);

            foreach (string s in text.Split('\n'))
            {
                if (s == "")
                {
                    continue;
                }

                var quote = new Quote(s);
                if (quote.Date >= dateFrom.Date && quote.Date <= dateTo.Date)
                {
                    quotes.Add(quote);
                }
            }

            logger.Debug($"Loaded quotes from file: {symbol.Code} {dateFrom} - {dateTo} {period}");
            return(quotes);
        }
コード例 #6
0
        private async Task <string> GetRawDataQuotesFromServer(Symbol symbol, int marketId, int em, DateTime dateFrom, DateTime dateTo, FinamDataPeriod period)
        {
            string url           = PrepareGetQuotesRequest(symbol.Code, marketId, em, period, dateFrom, dateTo);
            string rawDataQuotes = await RequestsHelper.SendGetRequest(url);

            logger.Debug("Response from Finam is:\n" + rawDataQuotes);
            await Task.Delay(5000);

            return(rawDataQuotes);
        }
コード例 #7
0
        protected static async Task <Dictionary <string, Symbol> > LoadSymbols(string[] symbolsNames, DateTime dateFrom, DateTime dateTo, FinamDataPeriod period)
        {
            var resultMap = new Dictionary <string, Symbol>();

            var finam = new Finam();

            foreach (string symbolName in symbolsNames)
            {
                var symbol = new Symbol(symbolName, dateFrom, dateTo, period);
                symbol.Quotes = await finam.LoadQuotes(symbol);

                symbol.Dividends = await Dohod.GetDividendsBySymbol(symbol);

                resultMap.Add(symbolName, symbol);
            }

            return(resultMap);
        }