private void CheckOrderState() { var buyOrder = _activeOrders.First(x => x.Side == OrderSide.Buy); var sellOrder = _activeOrders.First(x => x.Side == OrderSide.Sell); var config = _configStore.Config; foreach (var i in Enumerable.Range(1, config.MaxRetryCount)) { Sleep(config.OrderStatusCheckInterval); Log.Info($">>Order check attempt {i}."); Log.Info(">>Checking if both legs are done or not..."); try { _brokerAdapterRouter.Refresh(buyOrder); _brokerAdapterRouter.Refresh(sellOrder); } catch (Exception ex) { Log.Warn(ex.Message); Log.Debug(ex); } if (buyOrder.Status != OrderStatus.Filled) { Log.Warn($"Buy leg is not filled yet. Pending size is {buyOrder.PendingSize}."); } if (sellOrder.Status != OrderStatus.Filled) { Log.Warn($"Sell leg is not filled yet. Pending size is {sellOrder.PendingSize}."); } if (buyOrder.Status == OrderStatus.Filled && sellOrder.Status == OrderStatus.Filled) { var profit = Math.Round(sellOrder.FilledSize * sellOrder.AverageFilledPrice - buyOrder.FilledSize * buyOrder.AverageFilledPrice); Log.Info(">>Both legs are successfully filled."); Log.Info($">>Buy filled price is {buyOrder.AverageFilledPrice}."); Log.Info($">>Sell filled price is {sellOrder.AverageFilledPrice}."); Log.Info($">>Profit is {profit}."); break; } if (i == config.MaxRetryCount) { Log.Warn("Max retry count reached. Cancelling the pending orders."); if (buyOrder.Status != OrderStatus.Filled) { _brokerAdapterRouter.Cancel(buyOrder); } if (sellOrder.Status != OrderStatus.Filled) { _brokerAdapterRouter.Cancel(sellOrder); } break; } } }
private void CheckOrderState() { var buyOrder = _activeOrders.First(x => x.Side == OrderSide.Buy); var sellOrder = _activeOrders.First(x => x.Side == OrderSide.Sell); var config = _configStore.Config; foreach (var i in Enumerable.Range(1, config.MaxRetryCount)) { Sleep(config.OrderStatusCheckInterval); Log.Info(Resources.OrderCheckAttempt, i); Log.Info(Resources.CheckingIfBothLegsAreDoneOrNot); try { _brokerAdapterRouter.Refresh(buyOrder); _brokerAdapterRouter.Refresh(sellOrder); } catch (Exception ex) { Log.Warn(ex.Message); Log.Debug(ex); } if (buyOrder.Status != OrderStatus.Filled) { Log.Warn(Resources.BuyLegIsNotFilledYetPendingSizeIs, sellOrder.PendingSize); } if (sellOrder.Status != OrderStatus.Filled) { Log.Warn(Resources.SellLegIsNotFilledYetPendingSizeIs, sellOrder.PendingSize); } if (buyOrder.Status == OrderStatus.Filled && sellOrder.Status == OrderStatus.Filled) { var profit = Math.Round(sellOrder.FilledSize * sellOrder.AverageFilledPrice - buyOrder.FilledSize * buyOrder.AverageFilledPrice); Log.Info(Resources.BothLegsAreSuccessfullyFilled); Log.Info(Resources.BuyFillPriceIs, buyOrder.AverageFilledPrice); Log.Info(Resources.SellFillPriceIs, sellOrder.AverageFilledPrice); Log.Info(Resources.ProfitIs, profit); break; } if (i == config.MaxRetryCount) { Log.Warn(Resources.MaxRetryCountReachedCancellingThePendingOrders); if (buyOrder.Status != OrderStatus.Filled) { _brokerAdapterRouter.Cancel(buyOrder); } if (sellOrder.Status != OrderStatus.Filled) { _brokerAdapterRouter.Cancel(sellOrder); } break; } } }