Exemple #1
0
        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;
                }
            }
        }
Exemple #2
0
        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;
                }
            }
        }