public async Task ExitTradeAsync(PositionItem position, OrderStatusChangedMessage message) { var trade = _trades.SingleOrDefault(x => x.Symbol == message.Symbol); if (trade == null || !position.IsOpen) { Log.Debug("Could not find open trade or position for {0}", message.Symbol); return; } var exit = new Exit { Trade = trade }; MapMessageDetails(exit, message); await _tradeRepository.AddExitAsync(exit).ConfigureAwait(false); if (!AnyRemainingShares(message)) { await CloseOpenTradeAsync(trade, message).ConfigureAwait(false); } }