Пример #1
0
        static void Main(string[] args)
        {
            //HtmlWeb web = new HtmlWeb();
            WebClient       webClient = new WebClient();
            DividendHistory dividend  = new DividendHistory();
            DataURL         data      = new DataURL();


            List <string> Week = new List <string>()
            {
                "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-28", "2020-01-29", "2020-01-30", "2020-01-31"
            };

            List <string> fileList = new List <string>();

            foreach (var day in Week)
            {
                Console.WriteLine(day);
                Calendar calendar = new Calendar(day);
                var      stocks   = calendar.GetCalendar();



                //DailyPrice daily = new DailyPrice("aapl", "01/01/2018");

                // daily.GetHistoricalData();

                fileList.Add("Ex-Date,Symbol, Speed, Reliability, Grade, Dividend, Yield");
                foreach (var stock in stocks)
                {
                    CurrentPrice currentPrice = new CurrentPrice(stock.Symbol);
                    Rating       rating       = new Rating(stock.Symbol);
                    var          url          = data.GetDivHistory(stock.Symbol);
                    var          history      = webClient.DownloadString(url);
                    var          records      = dividend.GetHistory(history);

                    var final = rating.GetRating();
                    fileList.Add($"{stock.ExDate},{stock.Symbol},{Math.Round(final.Speed, 1)},{Math.Round(final.Reliability, 1)},{final.Grade},{records[0].Amount:C},{records[0].Amount / currentPrice.GetInfo():P}");
                    Console.WriteLine(stock.Symbol);
                }

                //if (final.Reliability > 6 && records[0].Amount / currentPrice.GetInfo() > .02)
                //{

                //}
            }
            File.WriteAllLines("Dividend.csv", fileList);
            Console.ReadLine();
        }
Пример #2
0
        public List <DividendHistory> GetHistory(string history)
        {
            int start = history.IndexOf('[', 0);
            int end   = history.IndexOf(']', start);
            var rows  = history.Substring(start, end - start).Split('}').ToArray();
            List <DividendHistory> dividends = new List <DividendHistory>();

            foreach (var row in rows)
            {
                DividendHistory dividend = new DividendHistory();
                for (int i = 0; i < 5; i++)
                {
                    if (row.Contains(Categories[i]))
                    {
                        var stepOne   = row.IndexOf(':', row.IndexOf(Categories[i])) + 2;
                        var stepTwo   = row.IndexOf('"', stepOne);
                        var dataEntry = row.Substring(stepOne, stepTwo - stepOne).Replace('$', ' ').Replace('"', ' ').Replace('}', ' ').TrimStart().TrimEnd();
                        switch (i)
                        {
                        case 0:
                            dividend.ExDate = Convert.ToDateTime(DateClean(dataEntry));
                            break;

                        case 1:
                            dividend.Type = dataEntry;
                            break;

                        case 2:
                            dividend.Amount = Convert.ToDouble(dataEntry);
                            break;

                        case 3:
                            dividend.Record = Convert.ToDateTime(DateClean(dataEntry));
                            break;

                        case 4:
                            dividend.Payment = Convert.ToDateTime(DateClean(dataEntry));
                            break;
                        }
                    }
                }
                dividends.Add(dividend);
            }
            return(dividends);
        }
Пример #3
0
        public Rating GetRating()
        {
            Rating FinalRating = new Rating();

            // Get Dividend History
            var divHistory = new DividendHistory().GetHistory(web.DownloadString(data.GetDivHistory(Symbol)));

            // Check # Entries  i => 10 continue
            bool tenOrMore = divHistory.Count >= 10;

            if (tenOrMore)
            {
                var        topTen = divHistory.GetRange(0, 10);
                DailyPrice daily  = new DailyPrice(Symbol, topTen[9].ExDate.AddDays(-1).ToShortDateString());

                // Get Historical Data: Start date == index 9
                var dailyPrice = daily.GetHistoricalData();


                List <Rating> RatingList = new List <Rating>();
                //Iterate through Exdates
                for (int i = 0; i < dailyPrice.Count; i++)
                {
                    //Console.WriteLine($"{i}");
                    for (int L = 9; L > 0; L--)
                    {
                        try
                        {
                            if (dailyPrice[i].Date == topTen[L].ExDate.AddDays(-1))
                            {
                                //Console.WriteLine($"{dailyPrice[i].Date}");
                                Rating rating = new Rating();
                                var    range  = dailyPrice.GetRange(i - 6, 5);

                                for (int j = 4; j >= 0; j--)
                                {
                                    if (range[j].High >= dailyPrice[i].Close)
                                    {
                                        switch (j)
                                        {
                                        case 0:
                                            rating.Speed = 1;
                                            break;

                                        case 1:
                                            rating.Speed = 2;
                                            break;

                                        case 2:
                                            rating.Speed = 3;
                                            break;

                                        case 3:
                                            rating.Speed = 4;
                                            break;

                                        case 4:
                                            rating.Speed = 5;
                                            break;

                                        default:
                                            rating.Speed = 0;
                                            break;
                                        }
                                        break;
                                    }
                                }
                                RatingList.Add(rating);
                            }
                        }
                        catch (ArgumentOutOfRangeException)
                        {
                            Console.WriteLine("Out of Range");
                        }
                        //Console.WriteLine($"{topTen[L].ExDate}");
                    }
                }

                FinalRating.Reliability = 0;
                foreach (var ratingItem in RatingList)
                {
                    if (ratingItem.Speed > 0)
                    {
                        FinalRating.Reliability += 1;
                    }
                }
                FinalRating.Speed = SpeedAverage(RatingList);
                FinalRating.Grade = GetGrade(FinalRating.Reliability, FinalRating.Speed);

                // Stock recovery in 5 days
            }
            return(FinalRating);
        }