using System; using System.Collections.Generic; namespace MarketData.MarketDataModel.GainLoss { // The GainLossCompoundModelCollection contains both the active gain loss and the total gain loss time series data public class GainLossCompoundModelCollection : List { public GainLossCompoundModelCollection() { } public GainLossCompoundModelCollection(List items) { foreach(GainLossCompoundModel item in items)Add(item); } public GainLossCompoundModelCollection(GainLossCollection activeGainLossCollection,TotalGainLossCollection totalGainLossCollection) { if(null==activeGainLossCollection||null==totalGainLossCollection)return; Dictionary activeGainLossCollectionByDate=new Dictionary(); Dictionary totalGainLossCollectionByDate=new Dictionary(); foreach(GainLossItem gainLossItem in activeGainLossCollection)if(!activeGainLossCollectionByDate.ContainsKey(gainLossItem.Date))activeGainLossCollectionByDate.Add(gainLossItem.Date,gainLossItem); foreach(TotalGainLossItem gainLossItem in totalGainLossCollection)if(!totalGainLossCollectionByDate.ContainsKey(gainLossItem.Date))totalGainLossCollectionByDate.Add(gainLossItem.Date,gainLossItem); List dates=new List(activeGainLossCollectionByDate.Keys); dates.Sort(); foreach(DateTime date in dates) { GainLossItem activeGainLossItem=activeGainLossCollectionByDate[date]; if(!totalGainLossCollectionByDate.ContainsKey(date))continue; TotalGainLossItem totalGainLossItem=totalGainLossCollectionByDate[date]; GainLossCompoundModel gainLossModel=new GainLossCompoundModel(); gainLossModel.Date=activeGainLossItem.Date; gainLossModel.ActiveExposure=activeGainLossItem.Exposure; gainLossModel.ActiveGainLoss=activeGainLossItem.GainLoss; gainLossModel.ActiveGainLossPercent=activeGainLossItem.GainLossPercent; gainLossModel.TotalGainLoss=totalGainLossItem.TotalGainLoss; gainLossModel.TotalGainLossPercent=totalGainLossItem.TotalGainLossPercent; gainLossModel.TotalDividendsPaid=totalGainLossItem.TotalDividendsPaid; Add(gainLossModel); } } public DMAValues DMAValuesActiveGainLoss { get { DMAValues dmaValues = new DMAValues(); foreach (GainLossCompoundModel gainLoss in this) { dmaValues.Add(new DMAValue(gainLoss.Date,gainLoss.ActiveGainLoss)); } return dmaValues; } } public DMAValues DMAValuesTotalGainLoss { get { DMAValues dmaValues = new DMAValues(); foreach (GainLossCompoundModel gainLoss in this) { dmaValues.Add(new DMAValue(gainLoss.Date,gainLoss.TotalGainLoss)); } return dmaValues; } } public DMAValues DMAValuesActiveGainLossPercent { get { DMAValues dmaValues = new DMAValues(); foreach (GainLossCompoundModel gainLoss in this) { dmaValues.Add(new DMAValue(gainLoss.Date,gainLoss.ActiveGainLossPercent)); } return dmaValues; } } public DMAValues DMAValuesTotalGainLossPercent { get { DMAValues dmaValues = new DMAValues(); foreach (GainLossCompoundModel gainLoss in this) { dmaValues.Add(new DMAValue(gainLoss.Date,gainLoss.TotalGainLossPercent)); } return dmaValues; } } } }