private IEnumerable <ScreeningResult> ConvertToScreeningResult(DataTable dt, ScreeningParams Params) { return(dt.AsEnumerable().Where(row => (Convert.ToDouble(row["PER"]) >= Params.MinPER && Convert.ToDouble(row["PER"]) <= Params.MaxPER || !Params.UsePER) && (Convert.ToDouble(row["PBR"]) >= Params.MinPBR && Convert.ToDouble(row["PBR"]) <= Params.MaxPBR || !Params.UsePBR) && (Convert.ToDouble(row["ROE"]) >= Params.MinROE && Convert.ToDouble(row["ROE"]) <= Params.MaxROE || !Params.UseROE) && (Convert.ToDouble(row["DebtRatio"]) >= Params.MinDebtRatio && Convert.ToDouble(row["DebtRatio"]) <= Params.MaxDebtRatio || !Params.UseDebtRatio) && (Convert.ToDouble(row["AggregateValue"]) >= (Params.MinAggregateValue * 100000000) && Convert.ToDouble(row["AggregateValue"]) <= (Params.MaxAggregateValue * 100000000) || !Params.UseAggregateValue) && (!((Convert.ToString(row["SectorName"]) == "금융지원 서비스업" || Convert.ToString(row["SectorName"]) == "기타 금융업" || Convert.ToString(row["SectorName"]) == "투자기관" || Convert.ToString(row["SectorName"]) == "은행 및 저축기관")) || !Params.OnlyNonFinance) ).Select(row => { Screener screener = new Screener(Convert.ToDouble(row["PER"]), Convert.ToDouble(row["PBR"]), Convert.ToDouble(row["DebtRatio"])); double score = screener.Scoring(); return new ScreeningResult { ISIN = Convert.ToString(row[0]), Name = Convert.ToString(row[1]), Date = Convert.ToDateTime(row["Date"]).ToShortDateString(), Score = score.ToString("0.00", CultureInfo.InvariantCulture), Price = String.Format("{0:#,###}", Convert.ToInt32(row["Price"])), EPS = String.Format("{0:#,###}", Convert.ToInt32(row["EPS"])), PER = Convert.ToDouble(row["PER"]).ToString("0.00", CultureInfo.InvariantCulture), PBR = Convert.ToDouble(row["PBR"]).ToString("0.00", CultureInfo.InvariantCulture), ROE = Convert.ToDouble(row["ROE"]).ToString("0.00", CultureInfo.InvariantCulture), DebtRatio = Convert.ToDouble(row["DebtRatio"]).ToString("0.00", CultureInfo.InvariantCulture), StockNumber = String.Format("{0:#,###}", Convert.ToInt32(row["StockNumber"])), NetProfit = String.Format("{0:#,###}", Convert.ToDouble(row["NetProfit"])), AggregateValue = String.Format("{0:#,###}", Convert.ToDouble(row["AggregateValue"]) / 100000000) }; })); }
private void Click_BnRunScreening(object sender, RoutedEventArgs e) { screeningParams = new ScreeningParams(); screeningParams.MinPER = Convert.ToDouble(TbPERMin.Text); screeningParams.MaxPER = Convert.ToDouble(TbPERMax.Text); screeningParams.MinPBR = Convert.ToDouble(TbPBRMin.Text); screeningParams.MaxPBR = Convert.ToDouble(TbPBRMax.Text); screeningParams.MinROE = Convert.ToDouble(TbROEMin.Text); screeningParams.MaxROE = Convert.ToDouble(TbROEMax.Text); screeningParams.MinDebtRatio = Convert.ToDouble(TbDebtRatioMin.Text); screeningParams.MaxDebtRatio = Convert.ToDouble(TbDebtRatioMax.Text); screeningParams.MinAggregateValue = Convert.ToDouble(TbMarketCapMin.Text); screeningParams.MaxAggregateValue = Convert.ToDouble(TbMarketCapMax.Text); screeningParams.UsePER = CbEnablePER.IsChecked == true ? true : false; screeningParams.UsePBR = CbEnablePBR.IsChecked == true ? true : false; screeningParams.UseROE = CbEnableROE.IsChecked == true ? true : false; screeningParams.UseDebtRatio = CbEnableDebtRatio.IsChecked == true ? true : false; screeningParams.UseAggregateValue = CbEnableMarketCap.IsChecked == true ? true : false; screeningParams.OnlyNonFinance = CbExceptFinanceCompany.IsChecked == true ? true : false; DataTable defaultTable = edenIF.GetScreeningBasis(); IEnumerable <ScreeningResult> screeningResult = ConvertToScreeningResult(defaultTable, screeningParams); screeningResult = screeningResult.OrderByDescending(p => p.Score); // convert screening result table DGScreeningResult.ItemsSource = ConvertToDataTable(screeningResult).DefaultView; }