public static async Task <ChannelConfig> LoadChannelConfig(this AppCfg cfg) { var channelCfg = new ChannelConfig(); var csv = await new WebClient().DownloadStringTaskAsync(cfg.YtReader.SeedsUrl); var seedData = CsvExtensions.ReadFromCsv <SeedChannel>(csv); channelCfg.Seeds.AddRange(cfg.LimitedToSeedChannels != null ? seedData.Where(s => cfg.LimitedToSeedChannels.Contains(s.Id)) : seedData); //channelCfg.Excluded.AddRange(cfg.CrawlConfigDir.Combine("ChannelExclude.csv").ReadFromCsv<InfluencerOverride>()); return(channelCfg); }
public void ReadConstituentsAsyncTest(int outStockCount) { var tickers = CsvExtensions.ReadConstituents(Constants.DataConstituentsCsv, new Dictionary <string, string> { { "Symbol", "Symbol" }, { "Name", "Name" }, { "Sector", "Sector" }, }); Assert.AreEqual(tickers.Count, outStockCount, "Stock count doesn't match"); }
public void Initialize() { _prices = CsvExtensions.ReadCsv(Constants.DataAllStocks5YrCsv, new Dictionary <string, string> { { "date", "StartTime" }, { "open", "Open" }, { "high", "High" }, { "low", "Low" }, { "close", "Close" }, { "volume", "Volume" }, { "Name", "Symbol" } }); Assert.IsNotNull(_prices, "Failed to read CSV file"); }
private static List <CbcBeer> LoadCsv(String path) { var beers = new List <CbcBeer>(); using (var reader = CsvExtensions.ReadFileAsCsv(path, Encoding.GetEncoding("windows-1252"))) { while (reader.Read()) { beers.Add(new CbcBeer { SessionName = reader.GetString(0), BreweryName = reader.GetString(1), BeerName = reader.GetString(2), StyleName = reader.GetString(3), ABV = reader.GetDecimal(4), Id = reader.GetString(5), SessionNumber = CbcFacebookReader.GetSessionNumber(reader.GetString(0)) }); } } return(beers); }
static async Task Main(string[] args) { var yfService = new YahooService(); var symbol = "MSFT"; //var result = await yfService.GetHistoricalDataAsync(Frequency.OneDay // , new DateTime(2020, 9, 1, 12, 0, 0) // , new DateTime(2020, 9, 25, 12, 0, 0) // , "MSFT"); //var result = await yfService.GetHistoricalDataAsyncYahoo(Interval.OneDay // , new DateTime(2020, 9, 1, 12, 0, 0) // , new DateTime(2020, 9, 25, 12, 0, 0) // , "MSFT", true); //var fundamentalData = await yfService.GetFundamentalDataAsync("MSFT"); //foreach (var result in fundamentalData.QuoteSummary.Result) //{ // //var assetProfile = result.AssetProfile; // //foreach (var assetProfileCompanyOfficer in assetProfile.CompanyOfficers) // //{ // //} // var recommendation = result.RecommendationTrend; // foreach (var trend in recommendation.Trend) // { // } // var c = result.CashflowStatementHistory; // foreach (var cCashFlowStatement in c.CashFlowStatements) // { // } // var i = result.IndexTrend; // foreach (var iEstimate in i.Estimates) // { // } // var d = result.DefaultKeyStatistics; // var it = result.IndustryTrend; // var itt = result.IncomeStatementHistory; // var fo = result.FundOwnership; // var sd = result.SummaryDetail; // var sdd = result.InsiderHolders; // foreach (var sddHolder in sdd.Holders) // { // } // var sddd = result.CalendarEvents; // var ds = result.UpgradeDowngradeHistory; // var dd = result.BalanceSheetHistory; // foreach (var ddBalanceSheetStatement in dd.BalanceSheetStatements) // { // } //} //var hs = await yfService.GetHistoricalDataAsyncYahoo(Interval.OneDay, new DateTime(2010, 1, 1), // new DateTime(2020, 1, 1), "MSFT", true); //await hs.Prices.WriteCsvAsync(@"c:\temp\MSFT.csv"); //var options = await yfService.GetOptionsContractAsync("MSFT", DateTime.Now.AddDays(1)); //var msftPrices = await yfService.GetHistoricalDataAsync("MSFT", 30); //var calcReturn = ((msftPrices.Last().Close - msftPrices.First().Open) / msftPrices.First().Open) * 100; var list = await yfService.CalculateReturnsAsync(new[] { "MSFT", "AAPL" }, 30); var sorted = list.Sort(); var avg = list.Average(); //list.GroupBy(c => symbol) //var prices = await yfService.GetHistoricalDataAsync(symbol, 30); //await prices.ToList().ReadCsvAsync(@"C:\Temp\MSFT.csv"); // Console.ReadLine(); var prices = await CsvExtensions.ReadCsvAsync("Data\\all_stocks_5yr.csv", new Dictionary <string, string> { { "date", "StartTime" }, { "open", "Open" }, { "high", "High" }, { "low", "Low" }, { "close", "Close" }, { "volume", "Volume" }, { "Name", "Symbol" } }); //var momentum = prices.CalculateMomentum(new DateTime(2017, 1, 1), 50); //var stockNames = prices.GetStockNames(); //var returns = prices.CalculateReturns(); //var orderedReturns = returns.OrderBy(c => c.ReturnPercentage); //var m = prices.SlidingWindow(500, 300, 50); }
private static void Targil() { var prices = CsvExtensions.ReadCsv( @"C:\Users\eykapah\Downloads\AMZN_09_07_2020-10_07_2020_1sec - Copy.csv", new Dictionary <string, string> { { "Date_time", "StartTime" }, { "Open", "Open" }, { "Close", "Close" }, { "High", "High" }, { "Low", "Low" }, { "Volume", "Volume" } }, "AMZN"); // 1 var maxVolume = prices.Max(p => p.Volume); Console.WriteLine($"#1: {maxVolume}"); // 2 var maxDiff = float.MinValue; foreach (var price in prices) { maxDiff = Math.Max(Math.Abs(price.High) - Math.Abs(price.Low), maxDiff); } Console.WriteLine($"#2: {maxDiff}"); // 3 var sortedPrices = prices.OrderBy(c => c.StartTime).ToList(); var totalSeconds = (sortedPrices.Last().StartTime - sortedPrices.First().StartTime).TotalSeconds; Console.WriteLine($"#3: {totalSeconds}"); // 4 var groupedPrices = from p in prices group new { p.StartTime, p.Volume } by p.StartTime.ToString("g") into newPrice select newPrice; var max = double.MinValue; foreach (var groupedPrice in groupedPrices) { max = Math.Max(groupedPrice.Sum(c => c.Volume), max); } Console.WriteLine($"#4: Max volume for one minute: {max}"); // 5 var tenMinutesCandle = from p in prices let newCandle = p.StartTime.MakeCandleOf(10) group new { p.StartTime, p.High, p.Low } by newCandle into newPrice select newPrice; var maxCloseOpenDiff = double.MinValue; foreach (var g in tenMinutesCandle) { var maxHigh = g.Max(c => c.High); var minLow = g.Min(c => c.Low); maxCloseOpenDiff = Math.Max(maxHigh - minLow, maxCloseOpenDiff); } Console.WriteLine($"#5: Max Close % Open diff for 10 minute candles: {maxCloseOpenDiff}"); var fiveYearsPrices = CsvExtensions.ReadCsv(@"Data\\all_stocks_5yr.csv", new Dictionary <string, string> { { "date", "StartTime" }, { "open", "Open" }, { "high", "High" }, { "low", "Low" }, { "close", "Close" }, { "volume", "Volume" }, { "Name", "Symbol" } }); // 6 var fiveYearsGroup = from p in fiveYearsPrices group p by new { p.StartTime.Year, p.StartTime.Month } into yearMonthPrice let year = yearMonthPrice.Key.Year let month = yearMonthPrice.Key.Month let priceList = yearMonthPrice.ToList() let profits = _priceManager.CalculateProfits(yearMonthPrice.ToList()) select new { Year = year, Month = month, Prices = priceList, Profits = profits, Avg = profits.Select(c => c.ProfitPercentage).Sum() / profits.Count }; var minAvg = fiveYearsGroup.Min(c => c.Avg); var minRecord = fiveYearsGroup.First(c => c.Avg == minAvg); Console.WriteLine($"#6: Lowest average: {minAvg}, Date: {minRecord.Year}-{minRecord.Month}"); // 7 var specificPrices = fiveYearsPrices.OrderBy(c => c.StartTime) .Where(c => c.StartTime.Year >= 2013 && c.StartTime.Year < 2015).ToList(); var top100Stocks = _priceManager.CalculateProfits(specificPrices) .OrderByDescending(c => c.ProfitPercentage) .Take(100) .ToList(); Console.WriteLine($"#7: Top 100 stocks for 2013-2015"); top100Stocks.ForEach(c => Console.WriteLine($"{c.Symbol} ({c.ProfitPercentage})")); // 8 var topStocks = top100Stocks.Select(c => c.Symbol).ToList(); var januaryStocks = fiveYearsPrices .Where(c => c.StartTime.Month == 1 && c.StartTime.Year == 2015 && topStocks.Contains(c.Symbol)).ToList(); var januaryProfitsTop100 = _priceManager.CalculateProfits(januaryStocks).Average(); var januaryAllStocks = fiveYearsPrices .Where(c => c.StartTime.Month == 1 && c.StartTime.Year == 2015).ToList(); var januaryProfitsAll = _priceManager.CalculateProfits(januaryAllStocks).Average(); Console.WriteLine("#8: Profits in January 2015"); Console.WriteLine($"Average top 100: {januaryProfitsTop100}"); Console.WriteLine($"All stocks: {januaryProfitsAll}"); // 9 var year2015 = fiveYearsPrices .Where(c => c.StartTime.Year == 2015 && topStocks.Contains(c.Symbol)).ToList(); var year2015ProfitAvg = _priceManager.CalculateProfits(year2015).Average(); var year2015AllStocks = fiveYearsPrices.Where(c => c.StartTime.Year == 2015).ToList(); var year2015AllProfitAvg = _priceManager.CalculateProfits(year2015AllStocks).Average(); Console.WriteLine($"#9: Profits in 2015"); Console.WriteLine($"Top 100 stocks: {year2015ProfitAvg}"); Console.WriteLine($"All stocks: {year2015AllProfitAvg}"); }
static async Task Main(string[] args) { IStockDataService yahooService = new YahooService(); _priceManager = new PriceManager(yahooService); var prices = CsvExtensions.ReadCsv( @"Data\\all_stocks_5yr.csv", new Dictionary <string, string> { { "date", "StartTime" }, { "open", "Open" }, { "close", "Close" }, { "high", "High" }, { "low", "Low" }, { "volume", "Volume" }, { "Name", "Symbol" } }); var aalPrice = prices.Where(c => c.Symbol.Equals("AAL")).SortByStartTime(); var open = aalPrice.Select(c => (double)c.Open).ToArray(); var high = aalPrice.Select(c => (double)c.High).ToArray(); var low = aalPrice.Select(c => (double)c.Low).ToArray(); var close = aalPrice.Select(c => (double)c.Close).ToArray(); var volume = aalPrice.Select(c => c.Volume).ToArray(); var lstm = new Lstm(open, high, low, close, volume); lstm.Print(); var scale = lstm.CalculateScale(); var min = lstm.CalculateMin(); var stochasticOsc = new StochasticOsc(); var sData = stochasticOsc.Run(GetData()); var plt = new Plot(600, 400); var slow = sData.Select(c => c.SlowValue).ToArray(); var vals = sData.Select(c => c.Value).ToArray(); //var xs = sData.Select(p => p.StartTime.ToOADate()).ToArray(); plt.PlotSignalXY(sData.Select(p => p.StartTime.ToOADate()).ToArray(), slow, label: "slow", color: Color.Red, lineWidth: 2, lineStyle: LineStyle.Solid, markerSize: 0); plt.PlotSignalXY(sData.Select(p => p.StartTime.ToOADate()).ToArray(), vals, label: "fast", color: Color.Black, lineWidth: 2, lineStyle: LineStyle.Solid); plt.Title("IBM Stochastic"); plt.YLabel("Stochastic Unit"); plt.XLabel("Date"); plt.Ticks(dateTimeX: true); //plt.Legend(); plt.AxisBounds(minY: 0, maxY: 100); plt.AxisAuto(verticalMargin: 0.01); plt.Add(new PlottableHLine(20, Color.Black, 1, "", false, 20, 20, LineStyle.Solid)); plt.Add(new PlottableHLine(80, Color.Black, 1, "", false, 80, 80, LineStyle.Solid)); plt.SaveFig("IBM Slow Stochastic Chart.png"); return; //var list = stochasticService.Run(sData); //await TargilAsync(); //var tickerManager = new TickerManager(yahooService, _priceManager); //var tickers = CsvExtensions.ReadConstituentsAsync("Data\\constituents.csv", new Dictionary<string, string> //{ // {"Symbol", "Symbol"}, // {"Name", "Name"}, // {"Sector", "Sector"}, //}).Result; //var msftTicker = tickerManager.GetTickerBySymbol(tickers, "MSFT"); //var prices = await _priceManager.GetPricesAsync( // msftTicker, // new DateTime(2020, 4, 13), // new DateTime(2020, 6, 26), // Interval.OneDay, // false); //var offsetPercent = 1; //var vals = stochasticService.Run(prices); //var plt = new ScottPlot.Plot(600, 400); //plt.PlotSignal(vals.Select(c => (double)c.Value).ToArray()); //plt.Title("Signal Plot Quickstart (5 million points)"); //plt.YLabel("Vertical Units"); //plt.XLabel("Horizontal Units"); //plt.SaveFig("Quickstart_Quickstart_Signal_5MillionPoints.png"); return; //var offsetPercent = 0.5; //var supportPoints = _priceManager.GetSupportExtremaGroups(prices, ExtremaType.Minimum, offsetPercent); //var p = prices.Last(); //Console.WriteLine($"Curret value: {p.Close}"); //Console.WriteLine("Support Points"); //supportPoints.Print(ExtremaType.Minimum); //Console.WriteLine(); //Console.WriteLine("Reject Points"); //rejectPoints.Print(ExtremaType.Maximum); //var daysMomentum = _priceManager.GetDaysMomentum(prices); //daysMomentum.Print(); }
/// <summary> /// Exports the provided data in format defined in the export configuration as csv file /// </summary> /// <param name="exportConfiguration"></param> /// <param name="data"></param> /// <returns></returns> public Stream Export(IExportConfiguration <TData> exportConfiguration, List <TData> data) { return(CsvExtensions.Export(exportConfiguration as ExportConfiguration <TData>, data)); }