private OrderTransaction CreateTrade(OrderTransaction buytrans, OrderTransaction selltrans) { var l = new OrderTransaction(); if (buytrans == null && selltrans == null) { return(l); } if (buytrans.Amount >= 0) { throw new ArgumentException("Buy trans amount >= 0"); } if (selltrans.Amount <= 0) { throw new ArgumentException("Sell trans amount <= 0"); } if (buytrans.Quantity <= 0) { throw new ArgumentException("Buy quantity <= 0"); } if (selltrans.Quantity >= 0) { throw new ArgumentException("Sell quantity >= 0"); } MatchedTrade trade = new MatchedTrade { Id = ++tradeId, Symbol = buytrans.Symbol, DescriptionOfProperty = string.Format("{0} {1}", buytrans.Quantity, buytrans.Symbol), DateAcquired = buytrans.TradeDate, DateSoldOrDisposed = selltrans.TradeDate, AdjustmentAmount = 0, ReportedToIrs = true, ReportedToMe = true, Brokerage = selltrans.Broker, BuyOrderId = buytrans.OrderId, SellOrderId = selltrans.OrderId }; // Buy quantities are positive, sell quantities are negative // Buy Amount is negative, sell Amount is positive. // commission and fees are always negative if (Math.Abs(buytrans.Quantity) == Math.Abs(selltrans.Quantity)) { trade.Quantity = buytrans.Quantity; trade.Proceeds = Math.Abs(selltrans.Net); trade.CostOrBasis = Math.Abs(buytrans.Net); //Long Term Short Term TimeSpan diff = trade.DateSoldOrDisposed.Subtract(trade.DateAcquired); if (diff.TotalDays > 365) { trade.LongTermGain = true; } //if (trade.DateSoldOrDisposed.Year == 2014) TotalCommission += buytrans.Commission; TotalCommission += selltrans.Commission; LastTradeCommission = buytrans.Commission + selltrans.Commission; TotalProfit += trade.GainOrLoss; //if (Math.Abs(trade.GainOrLoss) > 1000) // throw new Exception("Invalid gain or loss"); trade.CumulativeProfit = TotalProfit; Trades.Add(trade); } return(l); }
private OrderTransaction CreateTrade(OrderTransaction buytrans, OrderTransaction selltrans) { var l = new OrderTransaction(); if (buytrans == null && selltrans == null) return l; if (buytrans.Amount >= 0) throw new ArgumentException("Buy trans amount >= 0"); if (selltrans.Amount <= 0) throw new ArgumentException("Sell trans amount <= 0"); if (buytrans.Quantity <= 0) throw new ArgumentException("Buy quantity <= 0"); if (selltrans.Quantity >= 0) throw new ArgumentException("Sell quantity >= 0"); MatchedTrade trade = new MatchedTrade { Id = ++tradeId, Symbol = buytrans.Symbol, DescriptionOfProperty = string.Format("{0} {1}", buytrans.Quantity, buytrans.Symbol), DateAcquired = buytrans.TradeDate, DateSoldOrDisposed = selltrans.TradeDate, AdjustmentAmount = 0, ReportedToIrs = true, ReportedToMe = true, Brokerage = selltrans.Broker, BuyOrderId = buytrans.OrderId, SellOrderId = selltrans.OrderId }; // Buy quantities are positive, sell quantities are negative // Buy Amount is negative, sell Amount is positive. // commission and fees are always negative if (Math.Abs(buytrans.Quantity) == Math.Abs(selltrans.Quantity)) { trade.Quantity = buytrans.Quantity; trade.Proceeds = Math.Abs(selltrans.Net); trade.CostOrBasis = Math.Abs(buytrans.Net); //Long Term Short Term TimeSpan diff = trade.DateSoldOrDisposed.Subtract(trade.DateAcquired); if (diff.TotalDays > 365) trade.LongTermGain = true; //if (trade.DateSoldOrDisposed.Year == 2014) TotalCommission += buytrans.Commission; TotalCommission += selltrans.Commission; LastTradeCommission = buytrans.Commission + selltrans.Commission; TotalProfit += trade.GainOrLoss; //if (Math.Abs(trade.GainOrLoss) > 1000) // throw new Exception("Invalid gain or loss"); trade.CumulativeProfit = TotalProfit; Trades.Add(trade); } return l; }