using MarketData.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MarketData.Generator.Momentum { public class MomentumRejectionStatistics { public MomentumRejectionStatistics() { TotalItems=0; SymbolHeldList=new List(); NoTradeListList=new List(); NoFundamentalList=new List(); MarketCapLimitList=new List(); EBITDAScreenList=new List(); PEScreenList=new List(); MaxPEScreenList=new List(); RevenuePerShareScreenList=new List(); FinancialSectorScreenList=new List(); OneDayPriceScreenList=new List(); PennyStockScreenList=new List(); TradeDateHistoricalPricingScreenList=new List(); LiquidityScreenList=new List(); LowSlopePricesScreenList=new List(); HighBetaBenchmarkSlopeScreenList=new List(); MACDWeakSellScreenList=new List(); MACDStrongSellScreenList=new List(); StochasticsStrongSellScreenList=new List(); StochasticsWeakSellScreenList=new List(); AnalystRatingsScreenList=new List(); StartDateOfReturnsHistoricalPricingScreenList=new List(); OutliersInReturnsScreenList=new List(); NegativeReturnsScreenList=new List(); OverExtendedScreenList=new List(); } public double TotalItems{get;set;} public List SymbolHeldList{get;set;} public List NoTradeListList{get;set;} public List NoFundamentalList{get;set;} public List MarketCapLimitList{get;set;} public List EBITDAScreenList{get;set;} public List PEScreenList{get;set;} public List MaxPEScreenList{get;set;} public List RevenuePerShareScreenList{get;set;} public List FinancialSectorScreenList{get;set;} public List OneDayPriceScreenList{get;set;} public List PennyStockScreenList{get;set;} public List TradeDateHistoricalPricingScreenList{get;set;} public List LiquidityScreenList{get;set;} public List LowSlopePricesScreenList{get;set;} public List HighBetaBenchmarkSlopeScreenList{get;set;} public List MACDWeakSellScreenList{get;set;} public List MACDStrongSellScreenList{get;set;} public List StochasticsStrongSellScreenList{get;set;} public List StochasticsWeakSellScreenList{get;set;} public List AnalystRatingsScreenList{get;set;} public List StartDateOfReturnsHistoricalPricingScreenList{get;set;} public List OutliersInReturnsScreenList{get;set;} public List NegativeReturnsScreenList{get;set;} public List OverExtendedScreenList { get; set; } public double Count(List list) { return list.Count; } public void DisplayStatistics(bool displayDetail=false) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("**** Momentum Candidate Rejection Statistics ****")); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Total Candidates,{0}",TotalItems)); if(displayDetail) { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("SymbolHeld,{0},{1}%,{2}",Utility.FormatNumber(Count(SymbolHeldList),0,true),Utility.FormatNumber((Count(SymbolHeldList)/TotalItems)*100,3),Utility.ListToString(SymbolHeldList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("NoTradeList,{0},{1}%,{2}",Utility.FormatNumber(Count(NoTradeListList),0,true),Utility.FormatNumber((Count(NoTradeListList)/TotalItems)*100,3),Utility.ListToString(NoTradeListList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("NoFundamental,{0},{1}%,{2}",Utility.FormatNumber(Count(NoFundamentalList),0,true),Utility.FormatNumber((Count(NoFundamentalList)/TotalItems)*100,3),Utility.ListToString(NoFundamentalList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("MarketCapLimit,{0},{1}%,{2}",Utility.FormatNumber(Count(MarketCapLimitList),0,true),Utility.FormatNumber((Count(MarketCapLimitList)/TotalItems)*100,3),Utility.ListToString(MarketCapLimitList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("EBITDAScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(EBITDAScreenList),0,true),Utility.FormatNumber((Count(EBITDAScreenList)/TotalItems)*100,3),Utility.ListToString(EBITDAScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("PEScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(PEScreenList),0,true),Utility.FormatNumber((Count(PEScreenList)/TotalItems)*100,3),Utility.ListToString(PEScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("MaxPEScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(MaxPEScreenList),0,true),Utility.FormatNumber((Count(MaxPEScreenList)/TotalItems)*100,3),Utility.ListToString(MaxPEScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("RevenuePerShareScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(RevenuePerShareScreenList),0,true),Utility.FormatNumber((Count(RevenuePerShareScreenList)/TotalItems)*100,3),Utility.ListToString(RevenuePerShareScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("FinancialSectorScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(FinancialSectorScreenList),0,true),Utility.FormatNumber((Count(FinancialSectorScreenList)/TotalItems)*100,3),Utility.ListToString(FinancialSectorScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("OneDayPriceScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(OneDayPriceScreenList),0,true),Utility.FormatNumber((Count(OneDayPriceScreenList)/TotalItems)*100,3),Utility.ListToString(OneDayPriceScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("PennyStockScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(PennyStockScreenList),0,true),Utility.FormatNumber((Count(PennyStockScreenList)/TotalItems)*100,3),Utility.ListToString(PennyStockScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("TradeDateHistoricalPricingScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(TradeDateHistoricalPricingScreenList),0,true),Utility.FormatNumber((Count(TradeDateHistoricalPricingScreenList)/TotalItems)*100,3),Utility.ListToString(TradeDateHistoricalPricingScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("LiquidityScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(LiquidityScreenList),0,true),Utility.FormatNumber((Count(LiquidityScreenList)/TotalItems)*100,3),Utility.ListToString(LiquidityScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("LowSlopePricesScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(LowSlopePricesScreenList),0,true),Utility.FormatNumber((Count(LowSlopePricesScreenList)/TotalItems)*100,3),Utility.ListToString(LowSlopePricesScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("HighBetaBenchmarkSlopeScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(HighBetaBenchmarkSlopeScreenList),0,true),Utility.FormatNumber((Count(HighBetaBenchmarkSlopeScreenList)/TotalItems)*100,3),Utility.ListToString(HighBetaBenchmarkSlopeScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("MACDWeakSellScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(MACDWeakSellScreenList),0,true),Utility.FormatNumber((Count(MACDWeakSellScreenList)/TotalItems)*100,3),Utility.ListToString(MACDWeakSellScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("MACDStrongSellScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(MACDStrongSellScreenList),0,true),Utility.FormatNumber((Count(MACDStrongSellScreenList)/TotalItems)*100,3),Utility.ListToString(MACDStrongSellScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("StochasticsStrongSellScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(StochasticsStrongSellScreenList),0,true),Utility.FormatNumber((Count(StochasticsStrongSellScreenList)/TotalItems)*100,3),Utility.ListToString(StochasticsStrongSellScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("StochasticsWeakSellScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(StochasticsWeakSellScreenList),0,true),Utility.FormatNumber((Count(StochasticsWeakSellScreenList)/TotalItems)*100,3),Utility.ListToString(StochasticsWeakSellScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("AnalystRatingsScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(AnalystRatingsScreenList),0,true),Utility.FormatNumber((Count(AnalystRatingsScreenList)/TotalItems)*100,3),Utility.ListToString(AnalystRatingsScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("StartDateOfReturnsHistoricalPricingScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(StartDateOfReturnsHistoricalPricingScreenList),0,true),Utility.FormatNumber((Count(StartDateOfReturnsHistoricalPricingScreenList)/TotalItems)*100,3),Utility.ListToString(StartDateOfReturnsHistoricalPricingScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("OutliersInReturnsScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(OutliersInReturnsScreenList),0,true),Utility.FormatNumber((Count(OutliersInReturnsScreenList)/TotalItems)*100,3),Utility.ListToString(OutliersInReturnsScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("NegativeReturnsScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(NegativeReturnsScreenList),0,true),Utility.FormatNumber((Count(NegativeReturnsScreenList)/TotalItems)*100,3),Utility.ListToString(NegativeReturnsScreenList))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("OverExtendedScreen,{0},{1}%,{2}",Utility.FormatNumber(Count(OverExtendedScreenList),0,true),Utility.FormatNumber((Count(OverExtendedScreenList)/TotalItems)*100,3),Utility.ListToString(OverExtendedScreenList))); } else { MDTrace.WriteLine(LogLevel.DEBUG,String.Format("SymbolHeld,{0},{1}%",Utility.FormatNumber(Count(SymbolHeldList),0,true),Utility.FormatNumber((Count(SymbolHeldList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("NoTradeList,{0},{1}%",Utility.FormatNumber(Count(NoTradeListList),0,true),Utility.FormatNumber((Count(NoTradeListList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("NoFundamental,{0},{1}%",Utility.FormatNumber(Count(NoFundamentalList),0,true),Utility.FormatNumber((Count(NoFundamentalList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("MarketCapLimit,{0},{1}%",Utility.FormatNumber(Count(MarketCapLimitList),0,true),Utility.FormatNumber((Count(MarketCapLimitList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("EBITDAScreen,{0},{1}%",Utility.FormatNumber(Count(EBITDAScreenList),0,true),Utility.FormatNumber((Count(EBITDAScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("PEScreen,{0},{1}%",Utility.FormatNumber(Count(PEScreenList),0,true),Utility.FormatNumber((Count(PEScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("MaxPEScreen,{0},{1}%",Utility.FormatNumber(Count(MaxPEScreenList),0,true),Utility.FormatNumber((Count(MaxPEScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("RevenuePerShareScreen,{0},{1}%",Utility.FormatNumber(Count(RevenuePerShareScreenList),0,true),Utility.FormatNumber((Count(RevenuePerShareScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("FinancialSectorScreen,{0},{1}%",Utility.FormatNumber(Count(FinancialSectorScreenList),0,true),Utility.FormatNumber((Count(FinancialSectorScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("OneDayPriceScreen,{0},{1}%",Utility.FormatNumber(Count(OneDayPriceScreenList),0,true),Utility.FormatNumber((Count(OneDayPriceScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("PennyStockScreen,{0},{1}%",Utility.FormatNumber(Count(PennyStockScreenList),0,true),Utility.FormatNumber((Count(PennyStockScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("TradeDateHistoricalPricingScreen,{0},{1}%",Utility.FormatNumber(Count(TradeDateHistoricalPricingScreenList),0,true),Utility.FormatNumber((Count(TradeDateHistoricalPricingScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("LiquidityScreen,{0},{1}%",Utility.FormatNumber(Count(LiquidityScreenList),0,true),Utility.FormatNumber((Count(LiquidityScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("LowSlopePricesScreen,{0},{1}%",Utility.FormatNumber(Count(LowSlopePricesScreenList),0,true),Utility.FormatNumber((Count(LowSlopePricesScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("HighBetaBenchmarkSlopeScreen,{0},{1}%",Utility.FormatNumber(Count(HighBetaBenchmarkSlopeScreenList),0,true),Utility.FormatNumber((Count(HighBetaBenchmarkSlopeScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("MACDWeakSellScreen,{0},{1}%",Utility.FormatNumber(Count(MACDWeakSellScreenList),0,true),Utility.FormatNumber((Count(MACDWeakSellScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("MACDStrongSellScreen,{0},{1}%",Utility.FormatNumber(Count(MACDStrongSellScreenList),0,true),Utility.FormatNumber((Count(MACDStrongSellScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("StochasticsStrongSellScreen,{0},{1}%",Utility.FormatNumber(Count(StochasticsStrongSellScreenList),0,true),Utility.FormatNumber((Count(StochasticsStrongSellScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("StochasticsWeakSellScreen,{0},{1}%",Utility.FormatNumber(Count(StochasticsWeakSellScreenList),0,true),Utility.FormatNumber((Count(StochasticsWeakSellScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("AnalystRatingsScreen,{0},{1}%",Utility.FormatNumber(Count(AnalystRatingsScreenList),0,true),Utility.FormatNumber((Count(AnalystRatingsScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("StartDateOfReturnsHistoricalPricingScreen,{0},{1}%",Utility.FormatNumber(Count(StartDateOfReturnsHistoricalPricingScreenList),0,true),Utility.FormatNumber((Count(StartDateOfReturnsHistoricalPricingScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("OutliersInReturnsScreen,{0},{1}%",Utility.FormatNumber(Count(OutliersInReturnsScreenList),0,true),Utility.FormatNumber((Count(OutliersInReturnsScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("NegativeReturnsScreen,{0},{1}%",Utility.FormatNumber(Count(NegativeReturnsScreenList),0,true),Utility.FormatNumber((Count(NegativeReturnsScreenList)/TotalItems)*100,3))); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("OverExtendedScreen,{0},{1}%",Utility.FormatNumber(Count(OverExtendedScreenList),0,true),Utility.FormatNumber((Count(OverExtendedScreenList)/TotalItems)*100,3))); } } } }