public async Task HandleTrade(string orderId, decimal tradeSize) { await _semaphoreSlim.WaitAsync(); try { var level = GetLevelbyOrder(orderId); if (level == null) { Console.WriteLine($"ERROR: Cannot found level by orderId: {orderId}"); return; } //level.CompensateSize += tradeSize; var isOrderOpen = await _trader.CheckOrderIsOpenedAsync(orderId, _symbol); if (isOrderOpen) { return; } Console.WriteLine($"execute level. Price: {level.PriceBuy}, Side: {level.Side}, Id: {level.CurrentOrderId}"); _levelsByOrder.Remove(orderId); level.Revert(); } finally { _semaphoreSlim.Release(); } }
public async Task HandleTrade(string orderId) { var isOrderOpen = await _trader.CheckOrderIsOpenedAsync(orderId, _symbol); if (isOrderOpen) { return; } if (!_levelsByOrder.TryGetValue(orderId, out var level)) { Console.WriteLine($"ERROR: Cannot found level by orderId: {orderId}"); return; } Console.WriteLine($"execute level. Side: {level.Side}, Type: {level.Type}, Id: {level.CurrentOrderId}"); _levelsByOrder.Remove(orderId); level.CurrentOrderId = string.Empty; level.Status = MarketLevelStatus.Empty; level.Type = level.Type == MarketLevelType.Direct ? MarketLevelType.Compensate : MarketLevelType.Direct; }