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()); } }
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); } } }