using System; using System.Collections.Generic; using System.Linq; using System.Text; using MarketData.Utils; using MarketData.DataAccess; namespace MarketData.MarketDataModel { public class LotAggregator { private LotAggregator() { } // combine multipe trades that share a common date, side, and price // This is used specifically for the trade indicators in the Bollinger bands. public static PortfolioTrades CombineLots(List portfolioTrades) { Dictionary lots=new Dictionary(); if (null == portfolioTrades||0==portfolioTrades.Count) return null; for(int index=0;indexx.TradeDate).ToList()); return combinedLots; } } // ********************************************************************************************************************************************************* public class PortfolioTrade { private int tradeId=-1; private String symbol; private DateTime tradeDate; private double shares; private double price; private double commission; private String buySell; private String account; private String status; private double sellPrice=double.NaN; private DateTime sellDate=Utility.Epoch; public int TradeId { get {return tradeId ;} set { tradeId = value; ;} } public String Symbol { get { return symbol; } set { symbol = value; } } public DateTime TradeDate { get { return tradeDate; } set { tradeDate = value; } } public double Shares { get { return shares; } set { shares = value; } } public double Exposure() { return Price*Shares; } public String BuySell { get { return buySell; } set { buySell = value; } } public String Status { get { return status; } set { status = value; } } public bool IsOpen { get { return status.ToUpper().Equals("OPEN"); } } public bool IsClosed { get { return !IsOpen; } } public String Account { get { return account; } set{account=value;} } public DateTime SellDate { get { return sellDate; } set { sellDate = value; } } public double SellPrice { get { return sellPrice;} set { sellPrice = value;} } public double Price { get { return price; } set { price = value; } } public double Commission { get { return commission; } set { commission = value; } } public virtual NVPCollection ToNVPCollection() { NVPCollection nvpCollection=new NVPCollection(); nvpCollection.Add(new NVP("TradeId",TradeId.ToString())); if(null!=Symbol)nvpCollection.Add(new NVP("Symbol",Symbol.ToString())); nvpCollection.Add(new NVP("TradeDate",TradeDate.ToString())); nvpCollection.Add(new NVP("Shares",Shares.ToString())); nvpCollection.Add(new NVP("Commission",Commission.ToString())); if(null!=BuySell)nvpCollection.Add(new NVP("BuySell",BuySell.ToString())); if(null!=Account)nvpCollection.Add(new NVP("Account",Account.ToString())); if(null!=Status)nvpCollection.Add(new NVP("Status",Status.ToString())); nvpCollection.Add(new NVP("SellPrice",SellPrice.ToString())); nvpCollection.Add(new NVP("SellDate",SellDate.ToString())); nvpCollection.Add(new NVP("Price",Price.ToString())); return nvpCollection; } public static PortfolioTrade FromNVPCollection(NVPCollection nvpCollection) { PortfolioTrade portfolioTrade=new PortfolioTrade(); NVPDictionary nvpDictionary=nvpCollection.ToDictionary(); portfolioTrade.TradeId=nvpDictionary["TradeId"].Get(); portfolioTrade.Symbol=nvpDictionary["Symbol"].Get(); portfolioTrade.TradeDate=nvpDictionary["TradeDate"].Get(); portfolioTrade.Shares=nvpDictionary["Shares"].Get(); portfolioTrade.Commission=nvpDictionary["Commission"].Get(); if(nvpDictionary.ContainsKey("BuySell"))portfolioTrade.BuySell=nvpDictionary["BuySell"].Get(); if(nvpDictionary.ContainsKey("Account"))portfolioTrade.Account=nvpDictionary["Account"].Get(); if(nvpDictionary.ContainsKey("Status"))portfolioTrade.Status=nvpDictionary["Status"].Get(); portfolioTrade.SellPrice=nvpDictionary["SellPrice"].Get(); portfolioTrade.SellDate=nvpDictionary["SellDate"].Get(); portfolioTrade.Price=nvpDictionary["Price"].Get(); return portfolioTrade; } } }