Example #1
0
        protected override CMState RouteNewOrder(Wrapper wrapper)
        {
            try
            {
                Order order = GetOrder(wrapper);
                try
                {
                    lock (tLock)
                    {
                        //RunUpperTick(order);
                        ExecutionReport exRep = OrderManager.PlaceOrder(order);
                        BitMexActiveOrders.Add(order.ClOrdId, order);
                        if (exRep.OrderID != null)
                        {
                            OrderIdMappers.Add(exRep.OrderID, order.ClOrdId);
                        }
                        //The new ER will arrive through the websockets
                        //ExecutionReportWrapper erWrapper = new ExecutionReportWrapper(exRep, order);
                        //OnMessageRcv(erWrapper);
                    }
                }
                catch (Exception ex)
                {
                    zHFT.OrderRouters.Bitmex.Common.DTO.ErrorMessage errMsg = JsonConvert.DeserializeObject <zHFT.OrderRouters.Bitmex.Common.DTO.ErrorMessage>(ex.Message);
                    ExecutionReportWrapper erWrapper = new ExecutionReportWrapper(GetRejectedExecutionReport(order, errMsg.error.message != null ? errMsg.error.message : ex.Message), order);
                    OnMessageRcv(erWrapper);
                }

                return(CMState.BuildSuccess());
            }
            catch (Exception ex)
            {
                return(CMState.BuildFail(ex));
            }
        }
Example #2
0
        protected void ProcessExecutionReports(WebSocketSubscriptionEvent subscrEvent)
        {
            WebSocketExecutionReportEvent reports = (WebSocketExecutionReportEvent)subscrEvent;

            foreach (zHFT.OrderRouters.Bitmex.Common.DTO.ExecutionReport execReportDTO in reports.data)
            {
                try
                {
                    string clOrdId = "";
                    if (OrderIdMappers.ContainsKey(execReportDTO.OrderID))
                    {
                        clOrdId = OrderIdMappers[execReportDTO.OrderID];

                        if (BitMexActiveOrders.ContainsKey(clOrdId))
                        {
                            Order order = BitMexActiveOrders[clOrdId];

                            lock (tLock)
                            {
                                if (execReportDTO.ExecType == ExecType.New.ToString())
                                {
                                    order.OrderId = execReportDTO.OrderID;
                                }

                                if (execReportDTO.ExecType == ExecType.Replaced.ToString())
                                {
                                    BitMexActiveOrders.Remove(clOrdId);
                                    order.ClOrdId        = order.PendingClOrdId;
                                    order.PendingClOrdId = null;
                                    BitMexActiveOrders.Add(order.ClOrdId, order);
                                    OrderIdMappers[execReportDTO.OrderID] = order.ClOrdId;
                                }

                                if (execReportDTO.ExecType == ExecType.Canceled.ToString() ||
                                    execReportDTO.ExecType == ExecType.Stopped.ToString() ||
                                    execReportDTO.ExecType == ExecType.Rejected.ToString() ||
                                    execReportDTO.ExecType == ExecType.Suspended.ToString() ||
                                    execReportDTO.ExecType == ExecType.Expired.ToString())
                                {
                                    BitMexActiveOrders.Remove(order.ClOrdId);
                                    OrderIdMappers.Remove(order.OrderId);
                                }
                            }

                            WSExecutionReportWrapper wrapper = new WSExecutionReportWrapper(execReportDTO, order);
                            OnMessageRcv(wrapper);
                        }
                    }
                    else
                    {
                        DoLog(string.Format("Unknown order processing execution report for OrderId {0} ", execReportDTO.OrderID), Main.Common.Util.Constants.MessageType.Information);
                    }
                }
                catch (Exception ex)
                {
                    DoLog(string.Format("Error processing execution report for ClOrdId {0}:{1} ", execReportDTO.ClOrdID, ex.Message), Main.Common.Util.Constants.MessageType.Error);
                }
            }
        }