internal double ProfitInPosition(TransactionPairBinary binary, double price) { if (binary.Completed) { price = binary.ExitPrice; } return(profitLossCalculation.CalculateProfit(binary.Direction, binary.EntryPrice, price)); }
public void ExitComboTrade(LogicalFill fill) { TransactionPairBinary comboTrade = comboTradesBinary.Tail; comboTrade.Exit(fill.Price, fill.Time, fill.PostedTime, model.Chart.ChartBars.BarCount, fill.OrderId, fill.OrderSerialNumber); comboTradesBinary.Tail = comboTrade; double pnl = profitLoss.CalculateProfit(comboTrade.Direction, comboTrade.EntryPrice, comboTrade.ExitPrice); pnl = Math.Round(pnl, 2); Equity.OnChangeClosedEquity(pnl); if (trace) { log.Trace("Exit Trade: " + comboTrade); } if (tradeDebug && !model.QuietMode) { tradeLog.Debug(model.Name + "," + Equity.ClosedEquity + "," + pnl + "," + comboTrade); } if (model is Strategy) { Strategy strategy = (Strategy)model; LogicalOrder filledOrder; if (!strategy.TryGetOrderById(fill.OrderId, out filledOrder)) { throw new ApplicationException("A fill for order id: " + fill.OrderId + " was incorrectly routed to: " + strategy.Name); } strategy.OnExitTrade(fill, filledOrder); } if (model is Portfolio) { var portfolio = (Portfolio)model; portfolio.OnExitTrade(); } }
private double CalcProfitLoss(TransactionPairBinary binary) { double result; if (profitLoss2Calculation == null) { result = profitLossCalculation.CalculateProfit(binary.Direction, binary.EntryPrice, binary.ExitPrice); } else { double profitLoss; double costs; profitLoss2Calculation.CalculateProfit(binary, out profitLoss, out costs); result = profitLoss - costs; } return(result.Round()); }