Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 3
0
        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");
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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}");
        }
Ejemplo n.º 7
0
        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();
        }
Ejemplo n.º 8
0
 /// <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));
 }