コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
 public override void SaveToFile(string fileName)
 {
     lock (this)
     {
         CSVDataBarReaderWriter reader = new CSVDataBarReaderWriter(fileName, CSVDataBarReaderWriter.DataFormat.CSVHistoricalFileDefault);
         reader.Write(_data.AsReadOnly());
     }
 }