예제 #1
0
        public void SendPrevQuotedOrder(string strSymbol, double dLots, char chSide, string strQuoteID)
        {
            try
            {
                if (m_SessionID == null)
                {
                    return;
                }

                string strCIOrdID = "KYO" + DateTime.UtcNow.ToString("yyyyMMddHHmmssffff");

                QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle(
                    new ClOrdID(strCIOrdID),
                    new Symbol(strSymbol),
                    new Side(chSide),
                    new TransactTime(DateTime.UtcNow),
                    new OrdType(OrdType.PREVIOUSLY_QUOTED));
                newOrderSingle.Set(new HandlInst(HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE_NO_BROKER_INTERVENTION));
                newOrderSingle.Set(new OrderQty(Convert.ToDecimal(dLots * Math.Pow(10, 5))));
                newOrderSingle.Set(new TimeInForce(TimeInForce.IMMEDIATE_OR_CANCEL));
                newOrderSingle.Set(new QuoteID(strQuoteID));
                Session.SendToTarget(newOrderSingle, m_SessionID);
                Logger.Instance().Log($"REQUEST (SendPreviouslyQuotedOrder) => Symbol: {strSymbol}, Lots: {dLots}, Type: {new Side(chSide)}, QuoteID: {strQuoteID}");
            }
            catch (Exception ex)
            {
                Logger.Instance().LogToFile(ex.ToString());
            }
        }
예제 #2
0
        public static QuickFix.FIX44.OrderCancelReplaceRequest OrderCancelReplaceRequest(
            Dictionary <int, string> customFields,
            QuickFix.FIX44.NewOrderSingle nos, int newQty, decimal newPrice)
        {
            QuickFix.FIX44.OrderCancelReplaceRequest ocrq = new QuickFix.FIX44.OrderCancelReplaceRequest(
                new QuickFix.Fields.OrigClOrdID(nos.ClOrdID.Obj),
                GenerateClOrdID(),
                nos.Symbol,
                nos.Side,
                new QuickFix.Fields.TransactTime(DateTime.Now),
                nos.OrdType);

            ocrq.HandlInst = new QuickFix.Fields.HandlInst(QuickFix.Fields.HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE);
            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);
        }
예제 #3
0
        /// <summary>
        /// Create a NewOrderSingle message.
        /// </summary>
        /// <param name="customFields"></param>
        /// <param name="orderType"></param>
        /// <param name="side"></param>
        /// <param name="symbol"></param>
        /// <param name="orderQty"></param>
        /// <param name="tif"></param>
        /// <param name="price">ignored if orderType=Market</param>
        /// <returns></returns>
        static public QuickFix.FIX44.NewOrderSingle NewOrderSingle(
            Dictionary <int, string> customFields,
            OrderType orderType, Side side, string symbol,
            int orderQty, TimeInForce tif, decimal price)
        {
            // hard-coded fields
            QuickFix.Fields.HandlInst fHandlInst = new QuickFix.Fields.HandlInst(QuickFix.Fields.HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE);

            // from params
            QuickFix.Fields.OrdType      fOrdType      = FixEnumTranslator.ToField(orderType);
            QuickFix.Fields.Side         fSide         = FixEnumTranslator.ToField(side);
            QuickFix.Fields.Symbol       fSymbol       = new QuickFix.Fields.Symbol(symbol);
            QuickFix.Fields.TransactTime fTransactTime = new QuickFix.Fields.TransactTime(DateTime.Now);
            QuickFix.Fields.ClOrdID      fClOrdID      = GenerateClOrdID();

            QuickFix.FIX44.NewOrderSingle nos = new QuickFix.FIX44.NewOrderSingle(
                fClOrdID, fSymbol, fSide, fTransactTime, fOrdType);
            nos.OrderQty    = new QuickFix.Fields.OrderQty(orderQty);
            nos.TimeInForce = FixEnumTranslator.ToField(tif);

            if (orderType == OrderType.Limit)
            {
                nos.Price = new QuickFix.Fields.Price(price);
            }

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

            return(nos);
        }
예제 #4
0
        public void LimitBuy()
        {
            UnitTestContext context = new UnitTestContext();

            context.Login();

            OrderViewModel vm = new OrderViewModel(context.App, new FIXApplication.NullFixStrategy());

            vm.OrderType        = FIXApplication.Enums.OrderType.Limit;
            vm.Symbol           = "LIM";
            vm.OrderQtyString   = "9";
            vm.LimitPriceString = "3.45";
            vm.SendBuyCommand.Execute(null);

            // messaging of sent order
            Assert.AreEqual(1, context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType].Count);
            QuickFix.FIX44.NewOrderSingle msg = context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType][0] as QuickFix.FIX44.NewOrderSingle;
            Assert.AreEqual("LIM", msg.Symbol.Obj);
            Assert.AreEqual(9, msg.OrderQty.Obj);
            Assert.AreEqual(3.45m, msg.Price.Obj);
            Assert.AreEqual(QuickFix.Fields.OrdType.LIMIT, msg.OrdType.Obj);
            Assert.AreEqual(QuickFix.Fields.Side.BUY, msg.Side.Obj);

            // what's in the grid
            Assert.AreEqual(1, vm.Orders.Count);
            OrderRecord o = vm.Orders.First();

            Assert.AreEqual("LIM", o.Symbol);
            Assert.AreEqual(3.45m, o.Price);
            Assert.AreEqual("Limit", o.OrdType);
            Assert.AreEqual("Buy", o.Side);
        }
예제 #5
0
        public void DefaultBuyOrder()
        {
            UnitTestContext context = new UnitTestContext();

            context.Login();

            OrderViewModel vm = new OrderViewModel(context.App, new FIXApplication.NullFixStrategy());

            vm.SendBuyCommand.Execute(null);

            // messaging of sent order
            Assert.AreEqual(1, context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType].Count);
            QuickFix.FIX44.NewOrderSingle msg = context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType][0] as QuickFix.FIX44.NewOrderSingle;
            Assert.AreEqual("IBM", msg.Symbol.Obj);
            Assert.AreEqual(5, msg.OrderQty.Obj);
            Assert.AreEqual(QuickFix.Fields.OrdType.MARKET, msg.OrdType.Obj);
            Assert.AreEqual(QuickFix.Fields.Side.BUY, msg.Side.Obj);

            // what's in the grid
            Assert.AreEqual(1, vm.Orders.Count);
            OrderRecord o = vm.Orders.First();

            Assert.AreEqual("IBM", o.Symbol);
            Assert.AreEqual(-1, o.Price);
            Assert.AreEqual("Market", o.OrdType);
            Assert.AreEqual("Buy", o.Side);
        }
예제 #6
0
        public void OnMessage(QuickFix.FIX44.NewOrderSingle n, SessionID s)
        {
            Symbol   symbol   = n.Symbol;
            Side     side     = n.Side;
            OrdType  ordType  = n.OrdType;
            OrderQty orderQty = n.OrderQty;
            Price    price    = new Price(DEFAULT_MARKET_PRICE);
            ClOrdID  clOrdID  = n.ClOrdID;

            switch (ordType.getValue())
            {
            case OrdType.LIMIT:
                price = n.Price;
                if (price.Obj == 0)
                {
                    throw new IncorrectTagValue(price.Tag);
                }
                break;

            case OrdType.MARKET: break;

            default: throw new IncorrectTagValue(ordType.Tag);
            }

            QuickFix.FIX44.ExecutionReport exReport = new QuickFix.FIX44.ExecutionReport(
                new OrderID(GenOrderID()),
                new ExecID(GenExecID()),
                new ExecType(ExecType.FILL),
                new OrdStatus(OrdStatus.FILLED),
                symbol, //shouldn't be here?
                side,
                new LeavesQty(0),
                new CumQty(orderQty.getValue()),
                new AvgPx(price.getValue()));

            exReport.Set(clOrdID);
            exReport.Set(symbol);
            exReport.Set(orderQty);
            exReport.Set(new LastQty(orderQty.getValue()));
            exReport.Set(new LastPx(price.getValue()));

            if (n.IsSetAccount())
            {
                exReport.SetField(n.Account);
            }

            try
            {
                Session.SendToTarget(exReport, s);
            }
            catch (SessionNotFound ex)
            {
                Console.WriteLine("==session not found exception!==");
                Console.WriteLine(ex.ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
예제 #7
0
        private void SendOrder(Side side)
        {
            try
            {
                Trace.WriteLine(String.Format("Send New Order: Type={0} Side={1} Symbol=[{2}] Qty=[{3}] LimitPrice=[{4}] TIF={5}",
                                              this.OrderType.ToString(), side.ToString(), this.Symbol,
                                              this.OrderQtyString, this.LimitPriceString, this.TimeInForce.ToString()));

                Dictionary <int, string> customFieldsDict = new Dictionary <int, string>();
                foreach (CustomFieldRecord cfr in this.CustomFields)
                {
                    customFieldsDict[cfr.Tag] = cfr.Value;
                }

                int     orderQty   = int.Parse(this.OrderQtyString);
                decimal limitPrice = decimal.Parse(this.LimitPriceString);

                QuickFix.FIX44.NewOrderSingle nos = MessageCreator44.NewOrderSingle(
                    customFieldsDict,
                    this.OrderType, side, this.Symbol, orderQty, this.TimeInForce, limitPrice);

                OrderRecord r = new OrderRecord(nos);
                lock (_ordersLock)
                {
                    Orders.Add(r);
                }

                _qfapp.Send(nos);
            }
            catch (Exception e)
            {
                Trace.WriteLine("Failed to send order\n" + e.ToString());
            }
        }
예제 #8
0
        private QuickFix.FIX44.NewOrderSingle QueryNewOrderSingle44()
        {
            QuickFix.Fields.OrdType ordType = null;

            QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle(
                QueryClOrdID(),
                QuerySymbol(),
                QuerySide(),
                new TransactTime(DateTime.Now),
                ordType = QueryOrdType());

            newOrderSingle.Set(new HandlInst('1'));
            newOrderSingle.Set(QueryOrderQty());
            newOrderSingle.Set(QueryTimeInForce());
            if (ordType.getValue() == OrdType.LIMIT || ordType.getValue() == OrdType.STOP_LIMIT)
            {
                newOrderSingle.Set(QueryPrice());
            }
            if (ordType.getValue() == OrdType.STOP || ordType.getValue() == OrdType.STOP_LIMIT)
            {
                newOrderSingle.Set(QueryStopPx());
            }

            return(newOrderSingle);
        }
 public QuickFix.FIX44.NewOrderSingle createOrder(long orderQty, Side side, string symbol = "MFM")
 {
     QuickFix.FIX44.NewOrderSingle order = new QuickFix.FIX44.NewOrderSingle();
     order.ClOrdID      = new ClOrdID(symbol + DateTime.Now.TimeOfDay);
     order.TransactTime = new TransactTime(DateTime.Now, true);
     order.Symbol       = new Symbol(symbol);
     order.OrderQty     = new OrderQty(orderQty);
     order.OrdType      = new OrdType(OrdType.MARKET);
     order.Side         = side;
     return(order);
 }
예제 #10
0
        /// <summary>
        ///  Translate FIX44 NewOrderSingle message to OrderData
        /// </summary>
        /// <param name="n">The message</param>
        /// <returns>The order data</returns>
        /// <exception cref="QuickFix.IncorrectTagValue"></exception>
        public static OrderData Translate(QuickFix.FIX44.NewOrderSingle n)
        {
            ValidateIsSupportedOrderType(n.OrdType);

            return(TranslateOrderImpl(n.Symbol,
                                      n.Side,
                                      n.OrdType,
                                      n.OrderQty,
                                      n.Price,
                                      n.ClOrdID,
                                      n.IsSetAccount() ? n.Account : null));
        }
예제 #11
0
        private void QueryEnterOrder()
        {
            Console.WriteLine("\nNewOrderSingle");

            QuickFix.FIX44.NewOrderSingle m = QueryNewOrderSingle44();

            if (m != null && QueryConfirm("Send order"))
            {
                m.Header.GetString(Tags.BeginString);

                SendMessage(m);
            }
        }
예제 #12
0
 /// <summary>
 /// Create FIX request for new limit order
 /// </summary>
 /// <param name="vol"></param>
 /// <param name="price"></param>
 /// <param name="side"></param>
 /// <returns></returns>
 public static Message CreateNewOrderRequest(double vol, double price, char side, char type)
 {
     QuickFix.FIX44.NewOrderSingle newOrderSingleRequest = new QuickFix.FIX44.NewOrderSingle();
     newOrderSingleRequest.Set(new Account(AccountUtil.APIKey + "," + AccountUtil.SecretKey));
     newOrderSingleRequest.Set(new ClOrdID(GetFreeID));
     newOrderSingleRequest.Set(new OrderQty(new decimal(vol)));
     newOrderSingleRequest.Set(new OrdType(type));
     newOrderSingleRequest.Set(new Price(new decimal(price)));
     newOrderSingleRequest.Set(new Side(side));
     newOrderSingleRequest.Set(TradeSymbol);
     newOrderSingleRequest.Set(new TransactTime(DateTime.Now));
     return(newOrderSingleRequest);
 }
예제 #13
0
        private QuickFix.FIX44.NewOrderSingle QueryNewOrderSingle44()
        {
            QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle();
            newOrderSingle.ClOrdID = new ClOrdID(DateTime.Now.Millisecond.ToString());
            var noContraBrokersGroup = new QuickFix.FIX44.ExecutionReport.NoContraBrokersGroup();

            noContraBrokersGroup.Set(QueryPool());
            newOrderSingle.AddGroup(noContraBrokersGroup);
            newOrderSingle.Symbol  = QuerySymbol();
            newOrderSingle.Side    = QuerySide();
            newOrderSingle.OrdType = new OrdType(OrdType.MARKET);
            newOrderSingle.Set(QueryOrderQty());
            newOrderSingle.Set(new TimeInForce(TimeInForce.FILL_OR_KILL));
            return(newOrderSingle);
        }
예제 #14
0
        private void QueryEnterOrder()
        {
            Console.WriteLine("\nNewOrderSingle");

            QuickFix.FIX44.NewOrderSingle m = QueryNewOrderSingle44();

            if (m != null && QueryConfirm("Send order"))
            {
                m.Header.GetField(Tags.BeginString);
                var transactTime = DateTime.UtcNow;
                this._orderClientTimestamp.Add(m.ClOrdID.getValue(), transactTime);
                m.TransactTime = new TransactTime(transactTime);
                SendMessage(m, ".OD");
            }
        }
예제 #15
0
 public static Message CreateOrderBookRequest(decimal price, char side, bool open)
 {
     QuickFix.FIX44.NewOrderSingle newOrderSingleRequest = new QuickFix.FIX44.NewOrderSingle();
     newOrderSingleRequest.Set(AccountUtil.Account);
     newOrderSingleRequest.Set(new ClOrdID("111"));
     newOrderSingleRequest.Set(new OrderQty(1));
     newOrderSingleRequest.Set(new OrdType('2'));
     newOrderSingleRequest.Set(new Price(price));
     newOrderSingleRequest.Set(new Side(side));
     newOrderSingleRequest.Set(new PositionEffect(open ? 'O' : 'C'));
     newOrderSingleRequest.Set(new Symbol("quarter"));
     newOrderSingleRequest.Set(new Currency("btc_usd"));
     newOrderSingleRequest.Set(new SecurityType(SecurityType.FUTURE));
     newOrderSingleRequest.Set(new MarginRatio(20));
     newOrderSingleRequest.Set(new TransactTime());
     return(newOrderSingleRequest);
 }
예제 #16
0
        public void OnMessage(QuickFix.FIX44.NewOrderSingle n, SessionID s)
        {
            Symbol   symbol   = n.Symbol;
            Side     side     = n.Side;
            OrdType  ordType  = n.OrdType;
            OrderQty orderQty = n.OrderQty;
            Price    price    = new Price(DEFAULT_MARKET_PRICE);
            ClOrdID  clOrdID  = n.ClOrdID;

            switch (ordType.getValue())
            {
            case OrdType.LIMIT:
                price = n.Price;
                if (price.Obj == 0)
                {
                    throw new IncorrectTagValue(price.Tag);
                }
                break;

            case OrdType.MARKET: break;

            default: throw new IncorrectTagValue(ordType.Tag);
            }

            // Send Status New
            SendExecution(s, OrdStatus.NEW, ExecType.NEW, n, n.OrderQty.getValue(), 0, 0, 0, 0);
            Thread.Sleep(1000);

            // Send Status Partially Filled
            decimal filledQty = Math.Abs(Math.Round(n.OrderQty.getValue() / 4, 2));
            decimal cumQty    = filledQty;

            SendExecution(s, OrdStatus.PARTIALLY_FILLED, ExecType.PARTIAL_FILL, n, filledQty, filledQty, price.getValue(), filledQty, price.getValue());
            Thread.Sleep(1000);

            // Send Status Partially Filled
            filledQty = Math.Abs(Math.Round(n.OrderQty.getValue() / 4, 2));
            cumQty   += filledQty;
            SendExecution(s, OrdStatus.PARTIALLY_FILLED, ExecType.PARTIAL_FILL, n, n.OrderQty.getValue() - cumQty, cumQty, price.getValue(), filledQty, price.getValue());
            Thread.Sleep(1000);

            // Send Status Fully Filled
            filledQty = n.OrderQty.getValue() - cumQty;
            cumQty   += filledQty;
            SendExecution(s, OrdStatus.FILLED, ExecType.FILL, n, 0, cumQty, price.getValue(), filledQty, price.getValue());
        }
예제 #17
0
        public void OnMessage(QuickFix.FIX44.NewOrderSingle ord, SessionID sessionID)
        {
            Symbol   symbol   = ord.Symbol;
            Side     side     = ord.Side;
            OrdType  ordType  = ord.OrdType;
            OrderQty orderQty = ord.OrderQty;
            Price    price    = new Price(10);
            //q isso?
            ClOrdID clOrdID = ord.ClOrdID;

            QuickFix.FIX44.ExecutionReport exReport = new QuickFix.FIX44.ExecutionReport(
                new OrderID(GenOrderID()),
                new ExecID(GenExecID()),
                new ExecType(ExecType.FILL),
                new OrdStatus(OrdStatus.FILLED),
                symbol,
                side,
                new LeavesQty(0),
                new CumQty(orderQty.getValue()),
                new AvgPx(price.getValue())
                );
            exReport.ClOrdID  = clOrdID;
            exReport.Symbol   = symbol;
            exReport.OrderQty = orderQty;
            exReport.LastQty  = new LastQty(orderQty.getValue());
            exReport.LastPx   = new LastPx(price.getValue());

            if (ord.IsSetAccount())
            {
                exReport.Account = ord.Account;
            }
            try
            {
                Session.SendToTarget(exReport, sessionID);
            }
            catch (SessionNotFound ex)
            {
                Console.WriteLine("==session not found exception!==");
                Console.WriteLine(ex.ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
예제 #18
0
        public OrderRecord(QuickFix.FIX44.NewOrderSingle nos)
        {
            OriginalNOS = nos;

            decimal price = -1;

            if (nos.OrdType.Obj == QuickFix.Fields.OrdType.LIMIT && nos.IsSetPrice())
            {
                price = nos.Price.Obj;
            }

            ClOrdID = nos.ClOrdID.Obj;
            Symbol  = nos.Symbol.Obj;
            Side    = FIXApplication.FixEnumTranslator.Translate(nos.Side);
            OrdType = FIXApplication.FixEnumTranslator.Translate(nos.OrdType);
            Price   = price;
            Status  = "New";
        }
예제 #19
0
        public OrderRecord(QuickFix.FIX44.NewOrderSingle nos)
        {
            OriginalNos = nos;

            decimal price = -1;

            if (nos.OrdType.Obj == QuickFix.Fields.OrdType.LIMIT && nos.IsSetPrice())
            {
                price = nos.Price.Obj;
            }

            ClOrdID  = nos.ClOrdID.Obj;
            Symbol   = nos.Symbol.Obj;
            Side     = Services.TranslateFixFields.Translate(nos.Side);
            OrdType  = Services.TranslateFixFields.Translate(nos.OrdType);
            Price    = price;
            Quantity = nos.OrderQty.Obj;
            Status   = OrderStatus.New;
        }
예제 #20
0
        private void AddOrder(string exchange, string orderId, string symbol, bool isBuy, decimal amount, decimal price, ESymbolSource symbolSource)
        {
            var newOrder = new QuickFix.FIX44.NewOrderSingle();

            newOrder.ClOrdID = new QuickFix.Fields.ClOrdID(orderId);
            //newOrder.ExecInst
            newOrder.ExDestination    = new QuickFix.Fields.ExDestination(exchange);
            newOrder.Symbol           = new QuickFix.Fields.Symbol(symbol);
            newOrder.SecurityID       = new QuickFix.Fields.SecurityID(symbol);
            newOrder.SecurityIDSource = new QuickFix.Fields.SecurityIDSource(symbolSource.ToString("D"));
            newOrder.SecurityExchange = new QuickFix.Fields.SecurityExchange(exchange);
            newOrder.Side             = new QuickFix.Fields.Side(isBuy ? '1' : '2'); //BUY : SELL
            newOrder.TransactTime     = new QuickFix.Fields.TransactTime(DateTime.Now.ToUniversalTime());
            newOrder.OrderQty         = new QuickFix.Fields.OrderQty(amount);
            newOrder.OrdType          = new QuickFix.Fields.OrdType('2');     //LIMIT
            newOrder.Price            = new QuickFix.Fields.Price(price);
            newOrder.TimeInForce      = new QuickFix.Fields.TimeInForce('1'); //GTC
            newOrder.ClOrdLinkID      = new QuickFix.Fields.ClOrdLinkID(orderId);
            //newOrder.ExpireTime //GTD
            SendMessage(newOrder);
        }
예제 #21
0
        public OrderRecord(QuickFix.FIX44.ExecutionReport msg)
        {
            // If creating from an ExecutionReport then it's from an incoming message
            // and therefore we shouldn't need the NOS details that don't exist anyway
            OriginalNos = null;

            ClOrdID = msg.ClOrdID.Obj;
            OrderID = msg.OrderID.Obj;
            Symbol  = msg.Symbol.Obj;
            Side    = Services.TranslateFixFields.Translate(msg.Side);
            //OrdType = FIXApplication.FixEnumTranslator.Translate(msg.OrdType);
            OrdType = OrderType.Limit; // Not specified in ExecutionReport
            //Price = msg.Price.Obj; // Not specified in ExecutionReport
            Price    = msg.AvgPx.Obj;  // TODO We may need to be smarter, updates should use LastPx but what about new orders?
            Quantity = msg.LeavesQty.Obj;
            Status   = Services.TranslateFixFields.Translate(msg.OrdStatus);
            if (Status == OrderStatus.Rejected && msg.IsSetOrdRejReason())
            {
                RejectReason = msg.OrdRejReason.ToString();
            }
        }
예제 #22
0
        /**
         * new Order request
         * @throws IOException
         */
        public static Message createOrderBookRequest()
        {
            //this new Order request type (D)
            QuickFix.FIX44.NewOrderSingle newOrderSingleRequest = new QuickFix.FIX44.NewOrderSingle();
            //In there you should Set your partner and securitykey must contain a comma
            newOrderSingleRequest.Set(new Account(AccountUtil.apiKey+","+AccountUtil.sercretKey));
            //this is your unique id you can fill any string
            newOrderSingleRequest.Set(new ClOrdID("123"));
            //the amount you want to operate (buy or sell)
            newOrderSingleRequest.Set(new OrderQty(1));
            //There is operate type. "1" means marker price order,"2" means limit price order
            newOrderSingleRequest.Set(new OrdType('1'));

            newOrderSingleRequest.Set(new Price(10));
            //1 means buy;2 means sell
            newOrderSingleRequest.Set(new Side('1'));
            //type BTC/CNY or LTC/CNY other formart not supported
            newOrderSingleRequest.Set(new Symbol("LTC/CNY"));
            //time
            newOrderSingleRequest.Set(new TransactTime());
            return newOrderSingleRequest;
        }
예제 #23
0
        /**
         * new Order request
         * @throws IOException
         */
        public static Message createOrderBookRequest()
        {
            //this new Order request type (D)
            QuickFix.FIX44.NewOrderSingle newOrderSingleRequest = new QuickFix.FIX44.NewOrderSingle();
            //In there you should Set your partner and securitykey must contain a comma
            newOrderSingleRequest.Set(new Account(AccountUtil.apiKey + "," + AccountUtil.sercretKey));
            //this is your unique id you can fill any string
            newOrderSingleRequest.Set(new ClOrdID("123"));
            //the amount you want to operate (buy or sell)
            newOrderSingleRequest.Set(new OrderQty(1));
            //There is operate type. "1" means marker price order,"2" means limit price order
            newOrderSingleRequest.Set(new OrdType('1'));

            newOrderSingleRequest.Set(new Price(10));
            //1 means buy;2 means sell
            newOrderSingleRequest.Set(new Side('1'));
            //type BTC/CNY or LTC/CNY other formart not supported
            newOrderSingleRequest.Set(new Symbol("LTC/CNY"));
            //time
            newOrderSingleRequest.Set(new TransactTime());
            return(newOrderSingleRequest);
        }
예제 #24
0
        public void SendLimitOrder(string strSymbol, double dLots, double dPrice, char chSide)
        {
            if (m_SessionID == null)
            {
                return;
            }

            string strCIOrdID = "KYO" + DateTime.UtcNow.ToString("yyyyMMddHHmmssffff");

            QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle(
                new ClOrdID(strCIOrdID),
                new Symbol(strSymbol),
                new Side(chSide),
                new TransactTime(DateTime.UtcNow),
                new OrdType(OrdType.LIMIT));
            newOrderSingle.Set(new HandlInst(HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE_NO_BROKER_INTERVENTION));
            newOrderSingle.Set(new Price(Convert.ToDecimal(dPrice)));
            newOrderSingle.Set(new OrderQty(Convert.ToDecimal(dLots * Math.Pow(10, 5))));
            newOrderSingle.Set(new TimeInForce(TimeInForce.GOOD_TILL_CANCEL));
            Session.SendToTarget(newOrderSingle, m_SessionID);
            Logger.Instance().Log($"REQUEST (SendLimitOrder) => Symbol: {strSymbol}, Lots: {dLots}, Price: {dPrice}, Type: {new Side(chSide)}");
        }
예제 #25
0
        public void SendOrder(OrderModel order)
        {
            var orderSingle = new QuickFix.FIX44.NewOrderSingle
            {
                Symbol       = new Symbol(order.TickerSymbol),
                ClOrdID      = new ClOrdID(order.ClOrderId),
                Side         = new Side(order.Side),
                OrderQty     = new OrderQty(order.Quantity),
                OrdType      = new OrdType(order.Type),
                TimeInForce  = new TimeInForce(order.TIF),
                Account      = new Account(order.Allocation.ToString()),
                StopPx       = new StopPx(order.StopPrice),
                Price        = new Price(order.LimitPrice),
                Commission   = new Commission(order.CommissionAndFees),
                TransactTime = new TransactTime(order.OrderDate)
            };

            if (_session != null)
            {
                _ = _session.Send(orderSingle);
            }
        }
예제 #26
0
        public void OrderUpdate()
        {
            UnitTestContext context = new UnitTestContext();

            context.Login();

            OrderViewModel vm = new OrderViewModel(context.App, new FIXApplication.NullFixStrategy());

            // send an order with default arguments
            vm.SendBuyCommand.Execute(null);
            Assert.AreEqual(1, context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType].Count);
            QuickFix.FIX44.NewOrderSingle msg = context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType][0] as QuickFix.FIX44.NewOrderSingle;

            // verify grid content (redundant with earlier tests, but whatever)
            Assert.AreEqual(1, vm.Orders.Count);
            OrderRecord or = vm.Orders.First();

            Assert.AreEqual("IBM", or.Symbol);
            Assert.AreEqual(-1, or.Price);
            Assert.AreEqual("Market", or.OrdType);
            Assert.AreEqual("Buy", or.Side);
            Assert.AreEqual("New", or.Status);

            // send an execution report that will update the grid
            QuickFix.FIX44.ExecutionReport r = CreateExReport(
                or.ClOrdID, "foo", QuickFix.Fields.ExecTransType.NEW, QuickFix.Fields.ExecType.FILL,
                QuickFix.Fields.OrdStatus.FILLED, "IBM", QuickFix.Fields.Side.BUY, 0, 0, 0);
            r.LastPx  = new QuickFix.Fields.LastPx(999m);
            r.ClOrdID = new QuickFix.Fields.ClOrdID(msg.ClOrdID.Obj);

            context.App.FromApp(r, context.Session.SessionID);

            // check that it got changed
            Assert.AreEqual(1, vm.Orders.Count);
            Assert.AreEqual(999, or.Price);
            Assert.AreEqual("Filled", or.Status);
        }
예제 #27
0
        private void SendExecution(SessionID s, char ordStatus, char execType, QuickFix.FIX44.NewOrderSingle n, decimal leavesQty, decimal cumQty, decimal avgPx, decimal lastQty, decimal lastPrice)
        {
            QuickFix.FIX44.ExecutionReport exReport = new QuickFix.FIX44.ExecutionReport(
                new OrderID(GenOrderID()),
                new ExecID(GenExecID()),
                new ExecType(execType),
                new OrdStatus(ordStatus),
                n.Symbol, //shouldn't be here?
                n.Side,
                new LeavesQty(leavesQty),
                new CumQty(cumQty),
                new AvgPx(avgPx));

            exReport.ClOrdID = new ClOrdID(n.ClOrdID.getValue());
            exReport.Set(new LastQty(lastQty));
            exReport.Set(new LastPx(lastPrice));

            if (n.IsSetAccount())
            {
                exReport.SetField(n.Account);
            }

            try
            {
                Session.SendToTarget(exReport, s);
            }
            catch (SessionNotFound ex)
            {
                Console.WriteLine("==session not found exception!==");
                Console.WriteLine(ex.ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
예제 #28
0
        public QuickFix.Message CreateNewOrderSingle(string clOrderId, string symbol, Fwk.Main.Common.Enums.Side?side, Fwk.Main.Common.Enums.OrdType?ordType,
                                                     Fwk.Main.Common.Enums.SettlType?settlType, Fwk.Main.Common.Enums.TimeInForce?timeInForce, DateTime?effectiveTime,
                                                     double?ordQty, double?price, double?stopPx, string account, string exchange)
        {
            QuickFix.FIX44.NewOrderSingle nos = new QuickFix.FIX44.NewOrderSingle();


            if (!string.IsNullOrEmpty(account))
            {
                nos.SetField(new Account(account));
            }

            if (!string.IsNullOrEmpty(clOrderId))
            {
                nos.SetField(new ClOrdID(clOrderId));
            }

            if (!string.IsNullOrEmpty(exchange))
            {
                nos.SetField(new SecurityExchange(exchange));
            }

            if (effectiveTime != null)
            {
                nos.SetField(new TransactTime(effectiveTime.Value));
            }

            if (!string.IsNullOrEmpty(symbol))
            {
                nos.SetField(new Symbol(symbol));
            }

            if (ordQty != null)
            {
                nos.SetField(new OrderQty(Convert.ToDecimal(ordQty.Value)));
            }

            if (ordType != null)
            {
                nos.SetField(new QuickFix.Fields.OrdType(Convert.ToChar(ordType.Value)));
            }

            if (price != null)
            {
                nos.SetField(new Price(Convert.ToDecimal(price.Value)));
            }

            if (stopPx != null)
            {
                nos.SetField(new StopPx(Convert.ToDecimal(stopPx.Value)));
            }

            if (side != null)
            {
                nos.SetField(new QuickFix.Fields.Side(Convert.ToChar(side.Value)));
            }

            if (timeInForce.HasValue)
            {
                nos.SetField(new QuickFix.Fields.TimeInForce(Convert.ToChar(timeInForce.Value)));
            }

            return(nos);
        }
 public void sendOrderRequest(QuickFix.FIX44.NewOrderSingle order)
 {
     logger.Info("Order Details: " + order.ToString());
     Session.SendToTarget(order, session.SessionID);
 }
예제 #30
0
        private void TransmitNewOrderSingle()
        {
            QuickFix.FIX44.NewOrderSingle msg = new QuickFix.FIX44.NewOrderSingle(
                new ClOrdID("woooot"),
                new Symbol("IBM"),
                new Side(Side.BUY),
                new TransactTime(DateTime.Now),
                new OrdType(OrdType.MARKET));

            msg.Set(new OrderQty(99));

            SendMessage(msg);
        }
예제 #31
0
        private QuickFix.FIX44.NewOrderSingle QueryNewOrderSingle44()
        {
            QuickFix.Fields.OrdType ordType = null;

            QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle(
                QueryClOrdID(),
                QuerySymbol(),
                QuerySide(),
                new TransactTime(DateTime.Now),
                ordType = QueryOrdType());

            newOrderSingle.Set(new HandlInst('1'));
            newOrderSingle.Set(QueryOrderQty());
            newOrderSingle.Set(QueryTimeInForce());
            if (ordType.getValue() == OrdType.LIMIT || ordType.getValue() == OrdType.STOP_LIMIT)
                newOrderSingle.Set(QueryPrice());
            if (ordType.getValue() == OrdType.STOP || ordType.getValue() == OrdType.STOP_LIMIT)
                newOrderSingle.Set(QueryStopPx());

            return newOrderSingle;
        }
예제 #32
0
 public void OnMessage(QuickFix.FIX44.NewOrderSingle nos, SessionID sessionID)
 {
     ProcessNOS(nos, sessionID);
 }
예제 #33
0
 public void ProcessOrderCancelReplaceRequest(QuickFix.FIX44.NewOrderSingle nos, QuickFix.FIX44.OrderCancelReplaceRequest msg)
 {
 }