public Symbol(string symbol, DateTime dateFrom, DateTime dateTo, FinamDataPeriod timeFrame) { this.Code = symbol; this.InitDateTo = dateTo; this.timeFrame = timeFrame; this.InitDateFrom = dateFrom; }
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); }
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"); }
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); }
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); }
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); }
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); }