using MarketData.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MarketData.Generator.CMTrend { public class CMTCandidates : List { public CMTCandidates() { } public CMTCandidates(List cmtCandidates) { foreach(CMTCandidate cmtCandidate in cmtCandidates) Add(cmtCandidate); } public NVPCollections ToNVPCollections() { NVPCollections nvpCollections=new NVPCollections(); foreach(CMTCandidate candidate in this) { nvpCollections.Add(candidate.ToNVPCollection()); } return nvpCollections; } public static CMTCandidates FromNVPCollections(NVPCollections nvpCollections) { CMTCandidates candidates=new CMTCandidates(); foreach(NVPCollection nvpCollection in nvpCollections) { candidates.Add(CMTCandidate.FromNVPCollection(nvpCollection)); } return candidates; } public void AddFromNVPCollection(NVPCollection nvpCollection) { Add(CMTCandidate.FromNVPCollection(nvpCollection)); } public new void Sort() { List candidates=new CMTCandidates((from CMTCandidate mmCandidate in this select mmCandidate).OrderByDescending(x => x.Score).ToList()); this.Clear(); this.AddRange(candidates); } } public class CMTCandidate { public CMTCandidate() { Violation=false; } public String Symbol { get; set; } public DateTime AnalysisDate { get; set; } public double EPSSlope { get; set; } public double ProfitMarginSlope { get; set; } public double PriceSlope { get; set; } public double Volatility { get; set; } public long Volume { get; set; } public double RSquared{get;set;} public double Beta{get;set;} public int BetaMonths{get;set;} public bool Violation { get; set; } public double Slope { get; set; } public double Score { get; set; } public double AnnualizedReturn { get; set; } public double SharpeRatio { get; set; } public String Reason { get; set; } public virtual NVPCollection ToNVPCollection() { NVPCollection nvpCollection=new NVPCollection(); nvpCollection.Add(new NVP("Symbol",Symbol.ToString())); nvpCollection.Add(new NVP("AnalysisDate",AnalysisDate.ToString())); if(!double.IsNaN(EPSSlope)) nvpCollection.Add(new NVP("EPSSlope",EPSSlope.ToString())); if(!double.IsNaN(ProfitMarginSlope)) nvpCollection.Add(new NVP("ProfitMarginSlope",ProfitMarginSlope.ToString())); if(!double.IsNaN(PriceSlope)) nvpCollection.Add(new NVP("PriceSlope",PriceSlope.ToString())); if(!double.IsNaN(Volatility)) nvpCollection.Add(new NVP("Volatility",Volatility.ToString())); nvpCollection.Add(new NVP("Volume",Volume.ToString())); nvpCollection.Add(new NVP("Violation",Violation.ToString())); if(!double.IsNaN(Slope)) nvpCollection.Add(new NVP("Slope",Slope.ToString())); if(!double.IsNaN(Score)) nvpCollection.Add(new NVP("Score",Score.ToString())); if(!double.IsNaN(AnnualizedReturn)) nvpCollection.Add(new NVP("AnnualizedReturn",AnnualizedReturn.ToString())); if(!double.IsNaN(SharpeRatio)) nvpCollection.Add(new NVP("SharpeRatio",SharpeRatio.ToString())); if(!double.IsNaN(RSquared)) nvpCollection.Add(new NVP("RSquared",RSquared.ToString())); nvpCollection.Add(new NVP("BetaMonths",BetaMonths.ToString())); nvpCollection.Add(new NVP("Beta",Beta.ToString())); if(null!=Reason) nvpCollection.Add(new NVP("Reason",Reason.ToString())); return nvpCollection; } public static CMTCandidate FromNVPCollection(NVPCollection nvpCollection) { CMTCandidate candidate=new CMTCandidate(); NVPDictionary nvpDictionary=nvpCollection.ToDictionary(); if(nvpDictionary.ContainsKey("Symbol")) candidate.Symbol=nvpDictionary["Symbol"].Get(); if(nvpDictionary.ContainsKey("AnalysisDate")) candidate.AnalysisDate=nvpDictionary["AnalysisDate"].Get(); if(nvpDictionary.ContainsKey("EPSSlope")) candidate.EPSSlope=nvpDictionary["EPSSlope"].Get(); if(nvpDictionary.ContainsKey("ProfitMarginSlope")) candidate.ProfitMarginSlope=nvpDictionary["ProfitMarginSlope"].Get(); if(nvpDictionary.ContainsKey("PriceSlope")) candidate.PriceSlope=nvpDictionary["PriceSlope"].Get(); if(nvpDictionary.ContainsKey("Volatility")) candidate.Volatility=nvpDictionary["Volatility"].Get(); if(nvpDictionary.ContainsKey("Volume")) candidate.Volume=nvpDictionary["Volume"].Get(); if(nvpDictionary.ContainsKey("Violation")) candidate.Violation=nvpDictionary["Violation"].Get(); if(nvpDictionary.ContainsKey("Slope")) candidate.Slope=nvpDictionary["Slope"].Get(); if(nvpDictionary.ContainsKey("Score")) candidate.Score=nvpDictionary["Score"].Get(); if(nvpDictionary.ContainsKey("AnnualizedReturn")) candidate.AnnualizedReturn=nvpDictionary["AnnualizedReturn"].Get(); if(nvpDictionary.ContainsKey("SharpeRatio")) candidate.SharpeRatio=nvpDictionary["SharpeRatio"].Get(); if(nvpDictionary.ContainsKey("RSquared")) candidate.RSquared=nvpDictionary["RSquared"].Get(); if(nvpDictionary.ContainsKey("BetaMonths")) candidate.BetaMonths=nvpDictionary["BetaMonths"].Get(); if(nvpDictionary.ContainsKey("Beta")) candidate.Beta=nvpDictionary["Beta"].Get(); if(nvpDictionary.ContainsKey("Reason")) candidate.Reason=nvpDictionary["Reason"].Get(); return candidate; } public static String Header() { StringBuilder sb=new StringBuilder(); sb.Append("Symbol,AnalysisDate,PriceSlope,ProfitMarginSlope,EPSSlope,Volatility,Volume,Slope,Score,AnnualizedReturn,SharpeRatio,RSquared,Beta,BetaMonths"); return sb.ToString(); } public override String ToString() { StringBuilder sb=new StringBuilder(); sb.Append(Symbol).Append(",").Append(AnalysisDate.ToShortDateString()).Append(",").Append(PriceSlope).Append(",").Append(ProfitMarginSlope).Append(",").Append(EPSSlope).Append(",").Append(Volatility).Append(",").Append(Volume).Append(",").Append(Slope).Append(",").Append(Score).Append(",").Append(AnnualizedReturn).Append(",").Append(SharpeRatio).Append(","); sb.Append(RSquared).Append(",").Append(Beta).Append(",").Append(BetaMonths); return sb.ToString(); } } }