private List <DataBar> GetSymbolData(Symbol symbol) { // TODO : place here an intelligent update caching system. List <DataBar> resultingData = new List <DataBar>(); // A typical historical address looks like this (baseCurrency is "AA") // http://ichart.finance.yahoo.com/table.csv?s=AA&d=11&e=8&f=2008&g=d&a=0&b=2&c=1962&ignore=.csv StringBuilder queryBuilder = new StringBuilder("http://ichart.finance.yahoo.com/table.csv"); queryBuilder.AppendFormat("?s={0}&d={1}&e={2}&f={3}&a={4}&b={5}&c={6}", symbol.Name, _endDate.Month - 1, _endDate.Day, _endDate.Year, _startDate.Month - 1, _startDate.Day, _startDate.Year); string address = queryBuilder.ToString(); if (Uri.IsWellFormedUriString(queryBuilder.ToString(), UriKind.RelativeOrAbsolute) == false) { //address = Uri.EscapeUriString(address); //address = Uri.EscapeDataString(address); } using (WebClient client = new WebClient()) { try { string csvstring = client.DownloadString(address); TimeSpan timePeriod; using (System.IO.StringReader stringReader = new StringReader(csvstring)) { // First line is the format orderInfo. string formatInfo = stringReader.ReadLine(); int rows; CSVDataBarReaderWriter.LoadCSVFromReader(CSVDataBarReaderWriter.DataFormat.CSVYahooFinanceQuotes, stringReader, 0, 0, out timePeriod, out rows, resultingData); } } catch (Exception ex) { SystemMonitor.OperationError("Failed to retrieve stock quotes data [" + symbol + ", " + queryBuilder.ToString() + ", " + ex.Message + "]"); return(resultingData); } } // Yahoo provides the stock dataDelivery with the first row being the most current. resultingData.Reverse(); return(resultingData); }
public override void SaveToFile(string fileName) { if (_dataProvider == null) { return; } IDataBarHistoryProvider dataBarProvider = CurrentDataBarProvider; if (dataBarProvider == null) { return; } lock (dataBarProvider) { CSVDataBarReaderWriter reader = new CSVDataBarReaderWriter(fileName, CommonFinancial.CSVDataBarReaderWriter.DataFormat.CSVHistoricalFileDefault); reader.Write(dataBarProvider.BarsUnsafe); } }
public override void SaveToFile(string fileName) { lock (this) { CSVDataBarReaderWriter reader = new CSVDataBarReaderWriter(fileName, CSVDataBarReaderWriter.DataFormat.CSVHistoricalFileDefault); reader.Write(_data.AsReadOnly()); } }