Exemple #1
0
    private void HandleOrderResponse(OrderResponse response)
    {
        try
        {
            foreach (Order o in response.Data)
            {
                _orderStatsHandler.HandleOrder(o);
            }

            var bs = _orderStatsHandler.GetBindingSource();
            _view.bSRCOrders = bs;
        }
        catch (Exception exc)
        {
            Log.Error(exc.Message);
        }
    }
Exemple #2
0
        private void HandleOrderResponse(OrderResponse response)
        {
            // Continue without action when there is no Data
            if (response.Data.Count() == 0)
            {
                return;
            }

            try
            {
                // TODO: If error occurs because of access to multiple thread due to account A and B inflow, add mutex here...

                var           acc         = (response.Data.First().Account == Accounts[MTAccount.A]) ? ZoneRecoveryAccount.A : ZoneRecoveryAccount.B;
                List <string> ClOrdIdList = new List <string>();

                if (response.Action == BitmexAction.Insert || response.Action == BitmexAction.Partial)
                {
                    foreach (Order o in response.Data)
                    {
                        _orderStatsHandler.HandleNewOrder(o, acc);
                        ClOrdIdList.Add(o.ClOrdId);
                    }
                }
                else if (response.Action == BitmexAction.Update)
                {
                    foreach (Order o in response.Data)
                    {
                        var statusChanged = _orderStatsHandler.HandleUpdateOrder(o, acc);
                        if (statusChanged)
                        {
                            ClOrdIdList.Add(o.ClOrdId);
                        }
                    }
                }
                else if (response.Action == BitmexAction.Delete)
                {
                    foreach (Order o in response.Data)
                    {
                        _orderStatsHandler.HandleDeleteOrder(o, acc);
                    }
                }
                else if (response.Action == BitmexAction.Undefined)
                {
                    Log.Warning($"HandleOrderResponse: order response ");

                    foreach (Order o in response.Data)
                    {
                        _orderStatsHandler.HandleNewOrder(o, acc);
                    }
                }

                // Update the UI
                var bs = _orderStatsHandler.GetBindingSource(acc);

                if (acc == ZoneRecoveryAccount.A)
                {
                    _view.bSRCOrdersA     = bs;
                    _view.TabOrdersATitle = $"Orders [{bs.Count.ToString()}]";
                }
                else if (acc == ZoneRecoveryAccount.B)
                {
                    _view.bSRCOrdersB     = bs;
                    _view.TabOrdersBTitle = $"Orders [{bs.Count.ToString()}]";
                }

                // Calculate...
                if (CalculatorEnabled && ZRCalculator != null && ZRCalculator.SwitchedOn)
                {
                    Dictionary <string, decimal> dict = _orderBookStatsComputer.GetBidAsk();
                    if (dict != null)
                    {
                        ZRCalculator.UpdatePrices(dict);
                    }

                    ZRCalculator.Evaluate(acc, ClOrdIdList);
                }

                SetZRStats();
            }
            catch (Exception exc)
            {
                string message = $"[HandleOrderResponse]: {exc.Message}";
                Log.Error(message);
                Console.WriteLine(message);
            }
        }