public double GetRealizedGainsStock() { if (Trades != null) { List <Trade> stockTrades = Trades.FindAll(trade => trade.Security is Stock); Stack <Trade> buyStack = new Stack <Trade>(); double relizedGains = 0; foreach (var trade in stockTrades) { if (trade.TradeAction == TradeAction.BUY) { buyStack.Push(trade); } else { Trade averege = AverageBuyTrades(buyStack); relizedGains += (trade.TradePricePerContract - averege.TradePricePerContract) * trade.TradeContractCount; averege.TradeContractCount -= trade.TradeContractCount; buyStack = new Stack <Trade>(); if (averege.TradeContractCount > 0) { buyStack.Push(averege); } } } return(relizedGains); } return(0); }
public double GetRealizedGainsDividends() { if (Trades != null) { List <Trade> dividends = Trades.FindAll(trade => trade.Security is Dividend); return(dividends.Sum(dividend => dividend.TradeContractCount * dividend.TradePricePerContract)); } else { return(0); } }
public double GetRealizedGainsOptionPremium() { if (Trades != null) { List <Trade> buys = Trades.FindAll(trade => trade.TradeAction == TradeAction.BUY && trade.Security is Option); List <Trade> sells = Trades.FindAll(trade => trade.TradeAction == TradeAction.SELL && trade.Security is Option); double totalSellCost = sells.Sum(sell => sell.TradeContractCount * sell.TradePricePerContract); double totalBuyCost = buys.Sum(buy => buy.TradeContractCount * buy.TradePricePerContract); return(totalSellCost - totalBuyCost); } return(0); }
public List <Trade> GetTrades(string asset) { return(Trades.FindAll(t => t.Asset == asset).ToList()); }