Example #1
0
        private void FIXCancelOrder(MessageFIX4_2 packet)
        {
            var symbol = Factory.Symbol.LookupSymbol(packet.Symbol);

            if (!ProviderSimulator.IsOrderServerOnline)
            {
                throw new LimeException("Order server offline testing for Lime not yet implemeneted");
                if (debug)
                {
                    log.Debug(symbol + ": Cannot cancel order by client id: " + packet.OriginalClientOrderId + ". Order Server Offline.");
                }
                OnRejectCancel(packet.Symbol, packet.ClientOrderId, packet.OriginalClientOrderId, symbol + ": Order Server Offline");
                return;
            }
            var simulator = simulators[SimulatorType.RejectSymbol];

            if (FixFactory != null && simulator.CheckFrequencyAndSymbol(symbol))
            {
                if (debug)
                {
                    log.Debug("Simulating cancel order reject of 35=" + packet.MessageType);
                }
                OnRejectCancel(packet.Symbol, packet.ClientOrderId, packet.OriginalClientOrderId, "Testing reject of cancel order.");
                return;
            }
            simulator = simulators[SimulatorType.ServerOfflineReject];
            if (FixFactory != null && simulator.CheckFrequency())
            {
                throw new LimeException("Order server offline testing for Lime not yet implemeneted");
                if (debug)
                {
                    log.Debug("Simulating order server offline business reject of 35=" + packet.MessageType);
                }
                OnBusinessRejectOrder(packet.ClientOrderId, "Server offline for cancel order.");
                ProviderSimulator.SwitchBrokerState("offline", false);
                ProviderSimulator.SetOrderServerOffline();
                return;
            }
            if (debug)
            {
                log.Debug("FIXCancelOrder() for " + packet.Symbol + ". Original client id: " + packet.OriginalClientOrderId);
            }
            CreateOrChangeOrder origOrder = null;

            try
            {
                long origClientId;
                if (!long.TryParse(packet.OriginalClientOrderId, out origClientId))
                {
                    log.Error("original client order id " + packet.OriginalClientOrderId +
                              " cannot be converted to long: " + packet);
                    origClientId = 0;
                }
                origOrder = ProviderSimulator.GetOrderById(symbol, origClientId);
            }
            catch (ApplicationException)
            {
                if (debug)
                {
                    log.Debug(symbol + ": Cannot cancel order by client id: " + packet.OriginalClientOrderId + ". Probably already filled or canceled.");
                }
                OnRejectCancel(packet.Symbol, packet.ClientOrderId, packet.OriginalClientOrderId, "No such order");
                return;
            }
            var cancelOrder = ConstructCancelOrder(packet, packet.ClientOrderId);

            cancelOrder.OriginalOrder = origOrder;
            ProviderSimulator.CancelOrder(cancelOrder);
            ProcessCancelOrder(cancelOrder);
            ProviderSimulator.TryProcessAdustments(cancelOrder);
            return;
        }
Example #2
0
        private void FIXChangeOrder(MessageFIX4_2 packet)
        {
            var symbol = Factory.Symbol.LookupSymbol(packet.Symbol);
            var order  = ConstructOrder(packet, packet.ClientOrderId);

            if (!ProviderSimulator.IsOrderServerOnline)
            {
                throw new LimeException("Order server offline testing for Lime not yet implemeneted");
                log.Info(symbol + ": Rejected " + packet.ClientOrderId + ". Order server offline.");
                OnRejectOrder(order, symbol + ": Order Server Offline.");
                return;
            }
            var simulator = simulators[SimulatorType.RejectSymbol];

            if (FixFactory != null && simulator.CheckFrequencyAndSymbol(symbol))
            {
                if (debug)
                {
                    log.Debug("Simulating create order reject of 35=" + packet.MessageType);
                }
                OnRejectOrder(order, "Testing reject of change order.");
                return;
            }
            simulator = simulators[SimulatorType.ServerOfflineReject];
            if (FixFactory != null && simulator.CheckFrequency())
            {
                throw new LimeException("Order server offline testing for Lime not yet implemeneted");
                if (debug)
                {
                    log.Debug("Simulating order server offline business reject of 35=" + packet.MessageType);
                }
                OnBusinessRejectOrder(packet.ClientOrderId, "Server offline for change order.");
                ProviderSimulator.SwitchBrokerState("offline", false);
                ProviderSimulator.SetOrderServerOffline();
                return;
            }
            CreateOrChangeOrder origOrder = null;

            if (debug)
            {
                log.Debug("FIXChangeOrder() for " + packet.Symbol + ". Client id: " + packet.ClientOrderId + ". Original client id: " + packet.OriginalClientOrderId);
            }
            try
            {
                long origClientId;
                if (!long.TryParse(packet.OriginalClientOrderId, out origClientId))
                {
                    log.Error("original client order id " + packet.OriginalClientOrderId + " cannot be converted to long: " + packet);
                    origClientId = 0;
                }
                origOrder = ProviderSimulator.GetOrderById(symbol, origClientId);
            }
            catch (ApplicationException ex)
            {
                if (debug)
                {
                    log.Debug(symbol + ": Rejected " + packet.ClientOrderId + ". Cannot change order: " + packet.OriginalClientOrderId + ". Already filled or canceled.  Message: " + ex.Message);
                }
                OnRejectOrder(order, symbol + ": Cannot change order. Probably already filled or canceled.");
                return;
            }
            order.OriginalOrder = origOrder;
#if VERIFYSIDE
            if (order.Side != origOrder.Side)
            {
                var message = symbol + ": Cannot change " + origOrder.Side + " to " + order.Side;
                log.Error(message);
                OnRejectOrder(order, false, message);
                return;
            }
            if (order.Type != origOrder.Type)
            {
                var message = symbol + ": Cannot change " + origOrder.Type + " to " + order.Type;
                log.Error(message);
                OnRejectOrder(order, false, message);
                return;
            }
#endif
            ProviderSimulator.ChangeOrder(order);
            ProcessChangeOrder(order);
        }