Ejemplo n.º 1
0
        public IEnumerable<IStockBonus> GetStockBonus(string stockCode)
        {
            string url = string.Format(@"http://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_ShareBonus/stockid/{0}.phtml", stockCode);

            string pageHtml = PageReader.GetPageSource(url);
            if (string.IsNullOrEmpty(pageHtml))
                return null;

            var htmlDocument = new HtmlDocument();
            htmlDocument.LoadHtml(pageHtml);

            HtmlNode titleNode = htmlDocument.DocumentNode.SelectSingleNode("//title");
            //string name = titleNode.InnerText.Substring(0, titleNode.InnerText.IndexOf("("));

            HtmlNode nodeSharebonus_1 = htmlDocument.GetElementbyId("sharebonus_1");
            HtmlNode nodeSharebonus_2 = htmlDocument.GetElementbyId("sharebonus_2");

            List<IStockBonus> lstStockBonus = new List<IStockBonus>();

            var lstNodes1 = nodeSharebonus_1.SelectNodes("tbody/tr");
            foreach (var item in lstNodes1)
            {
                var nodes = item.SelectNodes("td");
                string urlDetails = string.Format(@"http://vip.stock.finance.sina.com.cn/{0}", item.SelectSingleNode("td/a").Attributes["href"].Value);
                var stockBonus = new StockBonus()
                {
                    //Code = stockCode,
                    //ShortName = name,
                    DateOfDeclaration = DateTime.Parse(nodes[0].InnerText),// 公告日期
                    Type = BounsType.ProfitSharing,// 分红类型
                    ExdividendDate = DateTime.Parse(nodes[5].InnerText),// 除权除息日
                    RegisterDate = DateTime.Parse(nodes[6].InnerText), // 股权登记日
                };

                StockBonusDetailsParser(urlDetails, ref stockBonus);
                lstStockBonus.Add(stockBonus);
            }

            var lstNodes2 = nodeSharebonus_2.SelectNodes("tbody/tr");
            foreach (var item in lstNodes2)
            {
                var nodes = item.SelectNodes("td");
                string urlDetails = string.Format(@"http://vip.stock.finance.sina.com.cn/{0}", item.SelectSingleNode("td/a").Attributes["href"].Value);
                var stockBonus = new StockBonus()
                {
                    //Code = stockCode,
                    //ShortName = name,
                    DateOfDeclaration = DateTime.Parse(nodes[0].InnerText),// 公告日期
                    Type = BounsType.StockOption,// 配股类型
                    ExdividendDate = DateTime.Parse(nodes[4].InnerText),// 除权除息日
                    RegisterDate = DateTime.Parse(nodes[5].InnerText), // 股权登记日
                };

                StockBonusDetailsParser(urlDetails, ref stockBonus);
                lstStockBonus.Add(stockBonus);
            }

            return lstStockBonus;
        }
Ejemplo n.º 2
0
        public void TestStockBonusReadAndWrite()
        {
            StockBonus insertData = new StockBonus()
            {
                ActualDispatchRate = 0,
                BAndHDividendAfterTax = 0,
                BAndHPreTaxDividend = 0,
                BonusRate = 0,
                CapitalStockBaseDate = new DateTime(2015, 7, 2),
                CapitalStockBeforeDispatch = 0,
                CapitalSurplusIncreaseRate = 0,
                ConvertibleBondDate = new DateTime(2015, 7, 2),
                DateOfDeclaration = new DateTime(2015, 6, 25),
                Description = "",
                DispatchExpiryDate = new DateTime(2015, 7, 2),
                DispatchListingDate = new DateTime(2015, 7, 2),
                DispatchPrice = 0,
                DispatchRate = 0,
                DividendAfterTax = 0,
                ExchangeRate = 0,
                ExdividendDate = new DateTime(2015, 7, 2),
                ExpirationDate = new DateTime(2015, 7, 2),
                IncreaseRate = 0,
                IssuingObject = "",
                LastTradingDay = new DateTime(2015, 7, 2),
                PreTaxDividend = 0,
                RegisterDate = new DateTime(2015, 7, 2),
                ReserveSurplusIncreaseRate = 0,
                ResolutionOfShareholdersMeetingDate = new DateTime(2015, 7, 2),
                ShareSplitCount = 0,
                StartOrArriveDate = new DateTime(2015, 7, 2),
                TotalDispatch = 0,
                TransferredAllottedPrice = 0,
                TransferredAllottedRate = 0,
                Type = BounsType.ProfitSharing
            };
            string fileName = "StockBonusData.sdf";
            string fullPath = Path.Combine(directory, fileName);

            // Add
            using (IRepositoryContext context = ContextFactory.Create(ContextType.StockBonus, fullPath))
            {
                var repository = new Repository<StockBonus>(context);
                repository.Add(insertData);
                repository.UnitOfWork.Commit();
            }

            // Read
            StockBonus readData;
            using (IRepositoryContext context = ContextFactory.Create(ContextType.StockBonus, fullPath))
            {
                var repository = new Repository<StockBonus>(context);
                readData = repository.Get(insertData.DateOfDeclaration);
            }
            Assert.IsNotNull(readData);
            Assert.AreEqual(insertData.DateOfDeclaration, readData.DateOfDeclaration);

            // update
            StockBonus updatedData = readData;
            updatedData.PreTaxDividend = 10;
            using (IRepositoryContext context = ContextFactory.Create(ContextType.StockBonus, fullPath))
            {
                var repository = new Repository<StockBonus>(context);
                repository.Update(updatedData);
                repository.UnitOfWork.Commit();
            }
            // Read
            using (IRepositoryContext context = ContextFactory.Create(ContextType.StockBonus, fullPath))
            {
                var repository = new Repository<StockBonus>(context);
                readData = repository.Get(insertData.DateOfDeclaration);
            }
            Assert.AreEqual(readData.PreTaxDividend, 10);
        }
Ejemplo n.º 3
0
        private void StockBonusDetailsParser(string url, ref StockBonus data)
        {
            string pageHtml = PageReader.GetPageSource(url);
            if (string.IsNullOrEmpty(pageHtml))
                return;

            var htmlDocument = new HtmlDocument();
            htmlDocument.LoadHtml(pageHtml);

            HtmlNode sharebonusdetail = htmlDocument.GetElementbyId("sharebonusdetail");
            var lstTdNodes = sharebonusdetail.SelectNodes("tr/td");

            double PreTaxDividend = 0;// 税前红利(10派)(报价币种)
            if (double.TryParse(lstTdNodes[1].InnerText, out PreTaxDividend))
                data.PreTaxDividend = PreTaxDividend;
            double DividendAfterTax = 0;// 税后红利(10派)(报价币种)
            if (double.TryParse(lstTdNodes[3].InnerText, out DividendAfterTax))
                data.DividendAfterTax = DividendAfterTax;
            double BAndHPreTaxDividend = 0;// B、H股税前红利(人民币)
            if (double.TryParse(lstTdNodes[5].InnerText, out BAndHPreTaxDividend))
                data.BAndHPreTaxDividend = BAndHPreTaxDividend;
            double BAndHDividendAfterTax = 0;// B、H股税后红利(人民币)
            if (double.TryParse(lstTdNodes[7].InnerText, out BAndHDividendAfterTax))
                data.BAndHDividendAfterTax = BAndHDividendAfterTax;
            double BonusRate = 0;// 送股比例(10送)
            if (double.TryParse(lstTdNodes[9].InnerText, out BonusRate))
                data.BonusRate = BonusRate;

            double IncreaseRate = 0;// 转增比例(10转增)
            if (double.TryParse(lstTdNodes[11].InnerText, out IncreaseRate))
                data.IncreaseRate = IncreaseRate;
            double ReserveSurplusIncreaseRate = 0;// 盈余公积金转增比例(10转增)
            if (double.TryParse(lstTdNodes[13].InnerText, out ReserveSurplusIncreaseRate))
                data.ReserveSurplusIncreaseRate = ReserveSurplusIncreaseRate;
            double CapitalSurplusIncreaseRate = 0;// 资本公积金转增比例(10转增)
            if (double.TryParse(lstTdNodes[15].InnerText, out CapitalSurplusIncreaseRate))
                data.CapitalSurplusIncreaseRate = CapitalSurplusIncreaseRate;
            string IssuingObject = lstTdNodes[17].InnerText;// 发放对象
            data.IssuingObject = string.IsNullOrEmpty(IssuingObject) ? string.Empty : IssuingObject;
            DateTime CapitalStockBaseDate = DateTime.MaxValue;// 股本基准日
            if (DateTime.TryParse(lstTdNodes[19].InnerText, out CapitalStockBaseDate))
                data.CapitalStockBaseDate = CapitalStockBaseDate;

            DateTime LastTradingDay = DateTime.MaxValue;// 最后交易日
            if (DateTime.TryParse(lstTdNodes[21].InnerText, out LastTradingDay))
                data.LastTradingDay = LastTradingDay;
            DateTime StartOrArriveDate = DateTime.MaxValue;// 红利/配股起始日(送、转股到账日)
            if (DateTime.TryParse(lstTdNodes[27].InnerText, out StartOrArriveDate))
                data.StartOrArriveDate = StartOrArriveDate;
            DateTime ExpirationDate = DateTime.MaxValue;// 红利/配股终止日
            if (DateTime.TryParse(lstTdNodes[29].InnerText, out ExpirationDate))
                data.ExpirationDate = ExpirationDate;

            DateTime DispatchListingDate = DateTime.MaxValue;// 配股上市日
            if (DateTime.TryParse(lstTdNodes[31].InnerText, out DispatchListingDate))
                data.DispatchListingDate = DispatchListingDate;
            DateTime ResolutionOfShareholdersMeetingDate = DateTime.MaxValue;// 股东大会决议公告日期
            if (DateTime.TryParse(lstTdNodes[33].InnerText, out ResolutionOfShareholdersMeetingDate))
                data.ResolutionOfShareholdersMeetingDate = ResolutionOfShareholdersMeetingDate;
            DateTime ConvertibleBondDate = DateTime.MaxValue;// 可转债享受权益转股截止日
            if (DateTime.TryParse(lstTdNodes[35].InnerText, out ConvertibleBondDate))
                data.ConvertibleBondDate = ConvertibleBondDate;
            double DispatchRate = 0;// 配股比例(10配)
            if (double.TryParse(lstTdNodes[37].InnerText, out DispatchRate))
                data.DispatchRate = DispatchRate;
            double DispatchPrice = 0;// 配股价
            if (double.TryParse(lstTdNodes[39].InnerText, out DispatchPrice))
                data.DispatchPrice = DispatchPrice;

            double TransferredAllottedRate = 0;// 转配比例
            if (double.TryParse(lstTdNodes[41].InnerText, out TransferredAllottedRate))
                data.TransferredAllottedRate = TransferredAllottedRate;
            double TransferredAllottedPrice = 0;// 转配价
            if (double.TryParse(lstTdNodes[43].InnerText, out TransferredAllottedPrice))
                data.TransferredAllottedPrice = TransferredAllottedPrice;
            DateTime DispatchExpiryDate = DateTime.MaxValue;// 配股有效期
            if (DateTime.TryParse(lstTdNodes[45].InnerText, out DispatchExpiryDate))
                data.DispatchExpiryDate = DispatchExpiryDate;
            double TotalDispatch = 0;// 实际配股数 (万股)
            if (double.TryParse(lstTdNodes[47].InnerText, out TotalDispatch))
                data.TotalDispatch = TotalDispatch;
            double CapitalStockBeforeDispatch = 0;// 配股前总股本 (万股)
            if (double.TryParse(lstTdNodes[49].InnerText, out CapitalStockBeforeDispatch))
                data.CapitalStockBeforeDispatch = CapitalStockBeforeDispatch;

            double ActualDispatchRate = 0;// 实际配股比例
            if (double.TryParse(lstTdNodes[51].InnerText, out ActualDispatchRate))
                data.ActualDispatchRate = ActualDispatchRate;
            double ShareSplitCount = 0;// 每股拆细数
            if (double.TryParse(lstTdNodes[53].InnerText, out ShareSplitCount))
                data.ShareSplitCount = ShareSplitCount;
            double ExchangeRate = 0;// 外币折算汇率
            if (double.TryParse(lstTdNodes[55].InnerText, out ExchangeRate))
                data.ExchangeRate = ExchangeRate;
            string Description = lstTdNodes[57].InnerText;// 权息说明
            data.Description = string.IsNullOrEmpty(Description) ? string.Empty : Description;
        }
Ejemplo n.º 4
0
        public IEnumerable<IStockBonus> GetAll()
        {
            List<StockBonus> result = new List<StockBonus>();
            string sql = string.Format("SELECT * FROM {0}", tableName);

            using (SqlCeConnection conn = new SqlCeConnection(ConnectionString))
            {
                conn.Open();

                using (SqlCeCommand cmd = new SqlCeCommand(sql, conn))
                {
                    SqlCeDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        StockBonus dbo = new StockBonus
                        {
                            ActualDispatchRate = Double.Parse(reader[colActualDispatchRate].ToString().Trim()),
                            BAndHDividendAfterTax = Double.Parse(reader[colBAndHDividendAfterTax].ToString().Trim()),
                            BAndHPreTaxDividend = Double.Parse(reader[colBAndHPreTaxDividend].ToString().Trim()),
                            BonusRate = Double.Parse(reader[colBonusRate].ToString().Trim()),
                            CapitalStockBaseDate = DateTime.Parse(reader[colCapitalStockBaseDate].ToString().Trim()),
                            CapitalStockBeforeDispatch = Double.Parse(reader[colCapitalStockBeforeDispatch].ToString().Trim()),
                            CapitalSurplusIncreaseRate = Double.Parse(reader[colCapitalSurplusIncreaseRate].ToString().Trim()),
                            ConvertibleBondDate = DateTime.Parse(reader[colConvertibleBondDate].ToString().Trim()),
                            DateOfDeclaration = DateTime.Parse(reader[colDateOfDeclaration].ToString().Trim()),
                            Description = reader[colDescription].ToString().Trim(),
                            DispatchExpiryDate = DateTime.Parse(reader[colDispatchExpiryDate].ToString().Trim()),
                            DispatchListingDate = DateTime.Parse(reader[colDispatchListingDate].ToString().Trim()),
                            DispatchPrice = Double.Parse(reader[colDispatchPrice].ToString().Trim()),
                            DispatchRate = Double.Parse(reader[colDispatchRate].ToString().Trim()),
                            DividendAfterTax = Double.Parse(reader[colDividendAfterTax].ToString().Trim()),
                            ExchangeRate = Double.Parse(reader[colExchangeRate].ToString().Trim()),
                            ExdividendDate = DateTime.Parse(reader[colExdividendDate].ToString().Trim()),
                            ExpirationDate = DateTime.Parse(reader[colExpirationDate].ToString().Trim()),
                            IncreaseRate = Double.Parse(reader[colIncreaseRate].ToString().Trim()),
                            IssuingObject = reader[colIssuingObject].ToString().Trim(),
                            LastTradingDay = DateTime.Parse(reader[colLastTradingDay].ToString().Trim()),
                            PreTaxDividend = Double.Parse(reader[colPreTaxDividend].ToString().Trim()),
                            RegisterDate = DateTime.Parse(reader[colRegisterDate].ToString().Trim()),
                            ReserveSurplusIncreaseRate = Double.Parse(reader[colReserveSurplusIncreaseRate].ToString().Trim()),
                            ResolutionOfShareholdersMeetingDate = DateTime.Parse(reader[colResolutionOfShareholdersMeetingDate].ToString().Trim()),
                            ShareSplitCount = Double.Parse(reader[colShareSplitCount].ToString().Trim()),
                            StartOrArriveDate = DateTime.Parse(reader[colStartOrArriveDate].ToString().Trim()),
                            TotalDispatch = Double.Parse(reader[colTotalDispatch].ToString().Trim()),
                            TransferredAllottedPrice = Double.Parse(reader[colTransferredAllottedPrice].ToString().Trim()),
                            TransferredAllottedRate = Double.Parse(reader[colTransferredAllottedRate].ToString().Trim()),
                            Type = (BounsType)Int32.Parse(reader[colType].ToString().Trim())
                        };
                        result.Add(dbo);
                    }
                    reader.Close();
                }

                conn.Close();
            }
            return result;
        }