Example #1
0
        public static QuickFix.FIX42.OrderCancelReplaceRequest OrderCancelReplaceRequest(
            Dictionary <int, string> customFields,
            QuickFix.FIX42.NewOrderSingle nos, int newQty, decimal newPrice)
        {
            QuickFix.FIX42.OrderCancelReplaceRequest ocrq = new QuickFix.FIX42.OrderCancelReplaceRequest(
                new QuickFix.Fields.OrigClOrdID(nos.ClOrdID.Obj),
                GenerateClOrdID(),
                new QuickFix.Fields.HandlInst(QuickFix.Fields.HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE),
                nos.Symbol,
                nos.Side,
                new QuickFix.Fields.TransactTime(DateTime.Now),
                nos.OrdType);

            ocrq.OrderQty = new QuickFix.Fields.OrderQty(newQty);

            if (nos.OrdType.Obj != QuickFix.Fields.OrdType.MARKET)
            {
                ocrq.Price = new QuickFix.Fields.Price(newPrice);
            }

            // other fields to relay
            ocrq.TimeInForce = nos.TimeInForce;

            // add custom fields
            foreach (KeyValuePair <int, string> p in customFields)
            {
                ocrq.SetField(new QuickFix.Fields.StringField(p.Key, p.Value));
            }

            return(ocrq);
        }
        public void OnMessage(QuickFix.FIX42.OrderCancelReplaceRequest msg, QuickFix.SessionID session)
        {
            try
            {
                // qty set ?
                int qty = -1;
                if (msg.IsSetOrderQty())
                {
                    qty = Convert.ToInt32(msg.OrderQty.getValue());
                }
                else if (msg.IsSetCashOrderQty())
                {
                    qty = Convert.ToInt32(msg.CashOrderQty.getValue());
                }
                if (qty < 0)
                {
                    RejectCancelRequest(session, msg.ClOrdID, msg.OrigClOrdID, null, "Qty nor CashOrderQty field is not set", QuickFix.Fields.CxlRejReason.BROKER_OPTION, true);
                    return;
                }

                double price  = (msg.IsSetPrice() ? Convert.ToDouble(msg.Price.getValue()) : 0);
                double stopPx = (msg.IsSetStopPx() ? Convert.ToDouble(msg.StopPx.getValue()) : 0);

                ProcessOrderCancelRequest(session, msg.ClOrdID, msg.OrigClOrdID, true, qty, price, stopPx);
            }
            catch (Exception e)
            {
                RejectCancelRequest(session, msg.ClOrdID, msg.OrigClOrdID, null, "OnMessage(QuickFix.FIX42.OrderCancelReplaceRequest msg, QuickFix.SessionID session) : internal error : " + e.ToString()
                                    , QuickFix.Fields.CxlRejReason.OTHER, true);
            }
        }
Example #3
0
        public void OnMessage(QuickFix.FIX42.OrderCancelReplaceRequest msg, SessionID s)
        {
            string orderid = (msg.IsSetOrderID()) ? msg.OrderID.Obj : "unknown orderID";

            QuickFix.FIX42.OrderCancelReject ocj = new QuickFix.FIX42.OrderCancelReject(
                new OrderID(orderid), msg.ClOrdID, msg.OrigClOrdID, new OrdStatus(OrdStatus.REJECTED), new CxlRejResponseTo(CxlRejResponseTo.ORDER_CANCEL_REPLACE_REQUEST));
            ocj.CxlRejReason = new CxlRejReason(CxlRejReason.UNKNOWN_ORDER);
            ocj.Text         = new Text("Executor does not support order cancel/replaces");

            try
            {
                Session.SendToTarget(ocj, s);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
Example #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="or"></param>
        /// <param name="newQty"></param>
        /// <param name="newPrice">ignored if not applicable for order type</param>
        /// <param name="customFields">other custom fields to be added</param>
        public void CancelReplaceOrder(OrderRecord or, int newQty, decimal newPrice, Dictionary <int, string> customFields)
        {
            try
            {
                QuickFix.FIX42.OrderCancelReplaceRequest ocrq = MessageCreator42.OrderCancelReplaceRequest(
                    customFields, or.OriginalNOS, newQty, newPrice);

                ocrq.OrderID = new QuickFix.Fields.OrderID(or.OrderID);

                _strategy.ProcessOrderCancelReplaceRequest(or.OriginalNOS, ocrq);

                _qfapp.Send(ocrq);
            }
            catch (Exception e)
            {
                Trace.WriteLine(e.ToString());
            }
        }
Example #5
0
        private QuickFix.FIX42.OrderCancelReplaceRequest QueryCancelReplaceRequest42()
        {
            QuickFix.FIX42.OrderCancelReplaceRequest ocrr = new QuickFix.FIX42.OrderCancelReplaceRequest(
                QueryOrigClOrdID(),
                QueryClOrdID(),
                new HandlInst('1'),
                QuerySymbol(),
                QuerySide(),
                new TransactTime(DateTime.Now),
                QueryOrdType());

            if (QueryConfirm("New price"))
            {
                ocrr.Set(QueryPrice());
            }
            if (QueryConfirm("New quantity"))
            {
                ocrr.Set(QueryOrderQty());
            }

            QueryHeader(ocrr.Header);
            return(ocrr);
        }
Example #6
0
        public int amendOrder(ref OrderStruct os)
        {
            if (!isOrderAmendPossible(os.OrderStatus))
            {
                return(-1);
            }
            OrderDAO ord      = new OrderDAO();
            int      newOrdID = ord.amendOrder(ref os); // OrderID is the last FixAccepted version

            Console.WriteLine("TODO: Send FIX - cancel for os.LinkedOrderID ; Send FIX - New for os.ID");
            OrigClOrdID origCLOrdID = new OrigClOrdID(Convert.ToString(os.ID));
            ClOrdID     OrdId       = new ClOrdID(Convert.ToString(newOrdID));
            string      symboldata  = sanitiseField(os.symbol);
            Symbol      symbol      = new Symbol(symboldata);
            Side        side        = new Side(Side.BUY);

            if (os.direction == 'S')
            {
                side = new Side(Side.SELL);
            }
            OrdType ordType = new OrdType(OrdType.LIMIT);

            if (os.orderType == 1)
            {
                ordType = new OrdType(OrdType.MARKET);
            }
            var orderMod = new QuickFix.FIX42.OrderCancelReplaceRequest(origCLOrdID, OrdId, new HandlInst('1'), symbol, side, new TransactTime(DateTime.Now.ToUniversalTime()), ordType);
            int Qty      = (int)os.quantity;

            orderMod.Price = new Price((decimal)os.price);
            orderMod.SetField(new OrderQty(Qty));
            Console.WriteLine("Modifying origOrdId/FixAcceptedID : " + os.ID + " newOrderID : " + newOrdID);
            Console.WriteLine("symboldata : " + symboldata + " side : " + side + " Price : " + os.price + " qty : " + os.quantity);
            Session.SendToTarget(orderMod, FixClient.MySess);
            return(os.OrderNo);
        }
Example #7
0
        public static QuickFix.FIX42.OrderCancelReplaceRequest OrderCancelReplaceRequest(
            Dictionary<int, string> customFields,
            QuickFix.FIX42.NewOrderSingle nos, int newQty, decimal newPrice)
        {
            QuickFix.FIX42.OrderCancelReplaceRequest ocrq = new QuickFix.FIX42.OrderCancelReplaceRequest(
                new QuickFix.Fields.OrigClOrdID(nos.ClOrdID.Obj),
                GenerateClOrdID(),
                new QuickFix.Fields.HandlInst(QuickFix.Fields.HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE),
                nos.Symbol,
                nos.Side,
                new QuickFix.Fields.TransactTime(DateTime.Now),
                nos.OrdType);

            ocrq.OrderQty = new QuickFix.Fields.OrderQty(newQty);

            if(nos.OrdType.Obj!=QuickFix.Fields.OrdType.MARKET)
                ocrq.Price = new QuickFix.Fields.Price(newPrice);

            // other fields to relay
            ocrq.TimeInForce = nos.TimeInForce;

            // add custom fields
            foreach (KeyValuePair<int, string> p in customFields)
                ocrq.SetField(new QuickFix.Fields.StringField(p.Key, p.Value));

            return ocrq;
        }
Example #8
0
 public void ProcessOrderCancelReplaceRequest(QuickFix.FIX42.NewOrderSingle nos, QuickFix.FIX42.OrderCancelReplaceRequest msg)
 {
 }
Example #9
0
 public void OnMessage(QuickFix.FIX42.OrderCancelReplaceRequest msg, SessionID sessionID)
 {
     _fix42MessageHandler.OnMessage(msg, sessionID);
 }
Example #10
0
        private QuickFix.FIX42.OrderCancelReplaceRequest QueryCancelReplaceRequest42()
        {
            QuickFix.FIX42.OrderCancelReplaceRequest ocrr = new QuickFix.FIX42.OrderCancelReplaceRequest(
                QueryOrigClOrdID(),
                QueryClOrdID(),
                new HandlInst('1'),
                QuerySymbol(),
                QuerySide(),
                new TransactTime(DateTime.Now),
                QueryOrdType());

            if(QueryConfirm("New price"))
                ocrr.Set( QueryPrice());
            if(QueryConfirm("New quantity"))
                ocrr.Set(QueryOrderQty());

            QueryHeader(ocrr.Header);
            return ocrr;
        }