예제 #1
0
 static async Task DownloadHistoryCsv(string tickers)
 {
     var setting      = new YahooHistoryCsvSetting("SPY");
     var downloader   = new YahooHistoryCsvDownloader(setting);
     var earningDates = await downloader.BatchDownloadFilesTaskAsync(
         setting.GetUrls(tickers)).ConfigureAwait(false);
 }
예제 #2
0
        public async Task YahooHistoryCsvDownloaderTest()
        {
            var task = GetScheduledTasks();

            Debug.Write(task);
            var setting    = new YahooHistoryCsvSetting("QQQ");
            var downloader = new YahooHistoryCsvDownloader(setting);
            var url        = setting.GetUrl();

            Debug.WriteLine(url);
            var file = await downloader.DownloadFileTaskAsync().ConfigureAwait(false);

            var files = await downloader.BatchDownloadFilesTaskAsync(setting.GetUrls("AAPL,YAHOO,MSFT,GOOGL")).ConfigureAwait(false);

            Debug.WriteLine(file.ToString());
            foreach (var filestr in files)
            {
                Debug.WriteLine(filestr.ToString());
            }
        }
예제 #3
0
        public async Task YahooHistoryCsvStreamDownloaderTest()
        {
            var task = GetScheduledTasks();

            Debug.Write(task);
            var setting = new YahooHistoryCsvSetting("QQQ");

            setting.Start = new DateTime(2014, 5, 1);
            setting.End   = new DateTime(2014, 12, 31);
            var downloader = new YahooHistoryCsvDownloader(setting);
            var url        = setting.GetUrl();

            Debug.WriteLine(url);
            var data = await downloader.DownloadObjectStreamTaskAsync().ConfigureAwait(false);

            var datas = await downloader.BatchDownloadObjectsStreamTaskAsync(setting.GetUrls("AAPL,YHOO,MSFT,GOOGL")).ConfigureAwait(false);

//BatchDownloadObjectsStreamTaskAsync //BatchDownloadObjectsTaskAsync
            Debug.WriteLine(data.ToString());
            foreach (var data1 in datas)
            {
                Debug.WriteLine(data1.ToString());
            }
        }
예제 #4
0
 public YahooHistoryCsvDownloader(YahooHistoryCsvSetting setting)
     : base(setting)
 {
 }
예제 #5
0
        public async Task YahooHistoryCvsDownloaderDataAnalysisTest()
        {
            //tickers
            var allTickers = tickers.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            List <PriceStatisticsAggregate> list = new List <PriceStatisticsAggregate>();

            foreach (var ticker in allTickers)
            {
                try
                {
                    var setting    = new YahooHistoryCsvSetting(ticker.Trim(), -100);
                    var downloader = new YahooHistoryCsvDownloader(setting);
                    var data       = await downloader.DownloadObjectStreamTaskAsync().ConfigureAwait(false);

                    DateTime endDate    = DateTime.Now;         // new DateTime(2015, 1, 29);//DateTime.Now.AddDays(-100);
                    DateTime startDate  = endDate.AddDays(-72); //DateTime.Now.AddDays(-100);
                    var      filterData = data.Where(point => point.Timestamp >= startDate && point.Timestamp <= endDate).ToList();
                    PriceStatisticsAggregate analysis = new PriceStatisticsAggregate(setting.Ticker, filterData);
                    analysis.SlideWindow = 5;
                    analysis.Partition();
                    analysis.RunPartitionAnalysis();

                    list.Add(analysis);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ticker + " " + ex.Message);
                }
            }
            var orderByVolumePartitions = list.OrderByDescending(item => item.Strength);/*.Where(a => //a.TotalNetChangeHandPercentage > 0
                                                                                         * (((a.MaxUpPercent.AverageDailyGainInDollar + a.MaxDownPercent.AverageDailyGainInDollar) > 0 ) &&
                                                                                         * ((a.UpdayAverageGain + a.DowndayAverageGain) > 0) &&
                                                                                         * a.TotalChangeHandPercentage >= 0.6)
                                                                                         * )
                                                                                         * .OrderByDescending(aggregate => aggregate.TotalChangeHandPercentage);*/

            foreach (var aggregate in orderByVolumePartitions)
            {
                try
                {
                    Console.WriteLine(aggregate.Ticker);
                    foreach (var partition in aggregate.Partitions)
                    {
                        Console.WriteLine("{0} {1} days  {2:MM/dd/yyyy} {3:MM/dd/yyyy} daily gain: {4:f2} stdev: {5:f2} - TOTAL gain {6:f2}  change hand {7:p}",
                                          partition.Direction,
                                          partition.Count,
                                          partition.DataRange.First().Timestamp,
                                          partition.DataRange.Last().Timestamp,
                                          partition.AverageDailyGainInDollar,
                                          partition.StDevStrength,
                                          partition.DataRange.Last().Close - partition.DataRange.First().Open,
                                          partition.ChangeHandPercentage
                                          );
                    }

                    Console.WriteLine("{0} days, Expected {1:p} up gain {2:f2} Direction {3} average up {4:f2} - daily average up {5:f2}",
                                      aggregate.MaxUpPercent.Count,
                                      aggregate.MaxUpPercent.PriceRangePercent,
                                      aggregate.MaxUpPercent.PriceRange,
                                      aggregate.MaxUpPercent.Direction,
                                      aggregate.MaxUpPercent.AverageDailyGainInDollar,
                                      aggregate.UpdayAverageGain
                                      );

                    Console.WriteLine("{0} days, Expected {1:p} down loss {2:f2}  Direction {3} average down {4:f2} -  daily average down {5:f3}",
                                      aggregate.MaxDownPercent.Count,
                                      aggregate.MaxDownPercent.PriceRangePercent,
                                      aggregate.MaxDownPercent.PriceRange,
                                      aggregate.MaxDownPercent.Direction,
                                      aggregate.MaxDownPercent.AverageDailyGainInDollar,
                                      aggregate.DowndayAverageGain
                                      );
                    Console.WriteLine("Total Change Hand Percentage {0:p}", aggregate.TotalChangeHandPercentage);

                    PriceDataPoint prev = null;
                    foreach (var point in aggregate.MaxDrawDowns(5))
                    {
                        if (prev != null)
                        {
                            Console.WriteLine("after {0} trading days", point.Index - prev.Index);
                        }
                        Console.WriteLine("Big drawdown {0:p} on {1} {2}", point.Change, point.Timestamp.ToShortDateString(), point.Timestamp.DayOfWeek);
                        prev = point;
                    }

                    foreach (var point in aggregate.MaxJumpups(5))
                    {
                        if (prev != null)
                        {
                            Console.WriteLine("after {0} trading days", point.Index - prev.Index);
                        }
                        Console.WriteLine("Big jump {0:p} on {1} {2}", point.Change, point.Timestamp.ToShortDateString(), point.Timestamp.DayOfWeek);
                        prev = point;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(aggregate.Ticker + " " + ex.Message);
                }
            }
        }