예제 #1
0
        /// <summary>
        /// Sends Market Order on the given Order Execution Provider
        /// </summary>
        /// <param name="marketOrder">TradeHub MarketOrder</param>
        public void SendMarketOrder(MarketOrder marketOrder)
        {
            try
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Sending Market Order on Blackwood." + marketOrder, _type.FullName, "SendMarketOrder");
                }

                OrderSide tempSide    = BlackwoodTypeConvertor.OrderSideConvertor.GetBlackwoodOrderSide(marketOrder.OrderSide);
                TIMEOUT   tempTimeout = BlackwoodTypeConvertor.OrderTifConvertor.GetBlackwoodOrderTif(marketOrder.OrderTif);

                if (tempSide.Equals(ORDER_SIDE.NONE))
                {
                    Logger.Info("Invalid Order Side", _type.FullName, "SendMarketOrder");
                    return;
                }

                // Create Blackwood Order
                //BWOrder bwOrder = new BWOrder(_session, marketOrder.Security.Symbol, tempSide,
                //                              (uint)marketOrder.OrderSize, 0, 0,
                //                              ORDER_TYPE.MARKET, (int)tempTimeout, FEED_ID.NONE, false,
                //                              (uint)marketOrder.OrderSize);
                BWOrder bwOrder = new BWOrder(_session, marketOrder.Security.Symbol, tempSide,
                                              (uint)marketOrder.OrderSize, 0, OrderType.MARKET, (int)tempTimeout, FeedId.NONE, false,
                                              (uint)marketOrder.OrderSize);
                // Set OPG Venue
                DetermineAndSetTraderDestinationsMarket(bwOrder, marketOrder.Exchange);

                // Send Order to gateway
                bwOrder.Send();

                // Update Local IDs Map
                _localToBlackwoodIdsMap.TryAdd(marketOrder.OrderID, bwOrder.ClientOrderID.ToString());

                // Update BW-Orders Map
                _bwOrders.TryAdd(bwOrder.ClientOrderID.ToString(), bwOrder);

                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug("BW-Order ID: " + bwOrder.OrderID + " | BW-ClientOrder ID: " + bwOrder.ClientOrderID,
                                 _type.FullName, "SendMarketOrder");
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "SendMarketOrder");
            }
        }
예제 #2
0
        /// <summary>
        /// Sends Limit Order on the given Order Execution Provider
        /// </summary>
        /// <param name="limitOrder">TradeHub LimitOrder</param>
        public void SendLimitOrder(LimitOrder limitOrder)
        {
            try
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Sending Limit Order on Blackwood." + limitOrder, _type.FullName, "SendLimitOrder");
                }

                OrderSide tempSide    = BlackwoodTypeConvertor.OrderSideConvertor.GetBlackwoodOrderSide(limitOrder.OrderSide);
                TIMEOUT   tempTimeout = BlackwoodTypeConvertor.OrderTifConvertor.GetBlackwoodOrderTif(limitOrder.OrderTif);

                if (tempSide.Equals(ORDER_SIDE.NONE))
                {
                    Logger.Info("Invalid Order Side", _type.FullName, "SendLimitOrder");
                    return;
                }

                // NOTE: FFED_ID is fixed to ARCA according to StockTrader code
                // Create Blackwood Order
                //BWOrder bwOrder = new BWOrder(_session, limitOrder.Security.Symbol, tempSide,
                //                              (uint)limitOrder.OrderSize, (double)limitOrder.LimitPrice, 0,
                //                              ORDER_TYPE.LIMIT, (int)tempTimeout, FEED_ID.ARCA, false,
                //                              (uint)limitOrder.OrderSize);
                BWOrder bwOrder = new BWOrder(_session, limitOrder.Security.Symbol, tempSide,
                                              (uint)limitOrder.OrderSize, (double)limitOrder.LimitPrice, 0, OrderType.LIMIT, (int)tempTimeout,
                                              FeedId.ARCA, false, (uint)limitOrder.OrderSize);

                // Send Order to gateway
                bwOrder.Send();

                // Update Local IDs Map
                _localToBlackwoodIdsMap.TryAdd(limitOrder.OrderID, bwOrder.ClientOrderID.ToString());

                // Update BW-Orders Map
                _bwOrders.TryAdd(bwOrder.ClientOrderID.ToString(), bwOrder);

                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug("BW-Order ID: " + bwOrder.OrderID + " | BW-ClientOrder ID: " + bwOrder.ClientOrderID,
                                 _type.FullName, "SendLimitOrder");
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "SendLimitOrder");
            }
        }
예제 #3
0
        long ServerBlackwood_newSendOrderRequest(Order o)
        {
            v(o.symbol + " received sendorder request for: " + o.ToString());
            if ((o.id != 0) && !isunique(o))
            {
                v(o.symbol + " dropping duplicate order: " + o.ToString());
                return((long)MessageTypes.DUPLICATE_ORDERID);
            }
            if (o.id == 0)
            {
                o.id = _id.AssignId;
            }
            int         orderCID       = (int)o.id;
            string      sSymbol        = o.symbol;
            ORDER_SIDE  orderSide      = (o.side ? ORDER_SIDE.SIDE_BUY : ORDER_SIDE.SIDE_SELL);
            BWVenue     orderVenue     = getVenueFromBW(o);
            BWOrderType orderType      = (o.isStop ? (o.isLimit ? BWOrderType.STOP_LIMIT : BWOrderType.STOP_MARKET) : (o.isLimit ? BWOrderType.LIMIT : BWOrderType.MARKET));
            int         orderTIF       = (int)getDurationFromBW(o);
            uint        orderSize      = (uint)o.UnsignedSize;
            int         orderReserve   = o.UnsignedSize;
            float       orderPrice     = (float)o.price;
            float       orderStopPrice = (float)o.stopp;
            // create a new BWOrder with these parameters
            BWOrder bwOrder = new BWOrder(m_Session, sSymbol, orderSide, orderSize, orderPrice, orderType, orderTIF, orderVenue, false, orderSize);

            bwOrder.CustomID = orderCID;
            bwOrder.SmartID  = orderCID;
            // subscribe to this order's events
            bwOrder.BWOrderUpdateEvent += new BWOrder.BWOrderUpdateHandler(bwOrder_BWOrderUpdateEvent);
            // add a BWStock object for this symbol to the list of stocks that have had orders placed
            // so that it can be referred to for position management
            try
            {
                // GetStock throws an exception if not connected to Market Data
                BWStock stock = m_Session.GetStock(bwOrder.Symbol);
            }
            catch (ClientPortalConnectionException e)
            {
                debug(e.Message);
            }
            // send the order
            bwOrder.Send();
            _bwOrdIds.Add(o.id, 0);
            v(o.symbol + " sent order: " + o.ToString());
            return((long)MessageTypes.OK);
        }
예제 #4
0
 long ServerBlackwood_newSendOrderRequest(Order o)
 {
     v(o.symbol + " received sendorder request for: " + o.ToString());
     if ((o.id != 0) && !isunique(o))
     {
         v(o.symbol + " dropping duplicate order: " + o.ToString());
         return (long)MessageTypes.DUPLICATE_ORDERID;
     }
     if (o.id == 0)
         o.id = _id.AssignId;
     int orderCID = (int)o.id;
     string sSymbol = o.symbol;
     ORDER_SIDE orderSide = (o.side ? ORDER_SIDE.SIDE_BUY : ORDER_SIDE.SIDE_SELL);
     BWVenue orderVenue = getVenueFromBW(o);
     BWOrderType orderType = (o.isStop ? (o.isLimit ? BWOrderType.STOP_LIMIT : BWOrderType.STOP_MARKET) : (o.isLimit ? BWOrderType.LIMIT : BWOrderType.MARKET));
     int orderTIF = (int)getDurationFromBW(o);
     uint  orderSize = (uint)o.UnsignedSize;
     int orderReserve = o.UnsignedSize;
     float orderPrice = (float)o.price;
     float orderStopPrice = (float)o.stopp;
     // create a new BWOrder with these parameters
     BWOrder bwOrder = new BWOrder(m_Session, sSymbol, orderSide, orderSize, orderPrice, orderType, orderTIF, orderVenue, false, orderSize);
     bwOrder.CustomID = orderCID;
     bwOrder.SmartID = orderCID;
     // subscribe to this order's events
     bwOrder.BWOrderUpdateEvent += new BWOrder.BWOrderUpdateHandler(bwOrder_BWOrderUpdateEvent);
     // add a BWStock object for this symbol to the list of stocks that have had orders placed
     // so that it can be referred to for position management
     try
     {
         // GetStock throws an exception if not connected to Market Data
         BWStock stock = m_Session.GetStock(bwOrder.Symbol);
     }
     catch (ClientPortalConnectionException e)
     {
         debug(e.Message);
     }
     // send the order
     bwOrder.Send();
     _bwOrdIds.Add(o.id, 0);
     v(o.symbol + " sent order: " + o.ToString());
     return (long)MessageTypes.OK;
 }
        long ServerBlackwood_newSendOrderRequest(Order o)
        {
            v(String.Format("{0} received sendorder request for: {1}",o.symbol, o.ToString()));
            if ((o.id != 0) && !isunique(o))
            {
                v(String.Format("{0} dropping duplicate order: {1}",o.symbol, o.ToString()));
                return (long)MessageTypes.DUPLICATE_ORDERID;
            }
            if (o.id == 0)
            {
                o.id = _id.AssignId;
                v(String.Format("No order id for {0}...assigning [{1}]", o.symbol, o.id));
            }

            string sSymbol = o.symbol;
            ORDER_SIDE orderSide = (o.side ? ORDER_SIDE.BUY : ORDER_SIDE.SELL);
            FEED_ID orderVenue = getVenueFromBW(o); // need to add pegged order types
            ORDER_TYPE orderType = (o.isStop ? (o.isLimit ? ORDER_TYPE.STOP_LIMIT : ORDER_TYPE.STOP_MARKET) : (o.isLimit ? ORDER_TYPE.LIMIT : ORDER_TYPE.MARKET));
            int orderTIF = (int)getDurationFromBW(o);
            uint orderSize = (uint)o.UnsignedSize;
            int orderReserve = o.UnsignedSize;
            double orderPrice = System.Convert.ToDouble(o.price);
            double orderStopPrice = System.Convert.ToDouble(o.stopp);
            // create a new BWOrder with these parameters
            BWOrder bwOrder = new BWOrder(m_Session, sSymbol, orderSide, orderSize, orderPrice, orderType, orderTIF, orderVenue, false, orderSize);

            SENDORDERUPDATE(bwOrder, o);

            // check market connection
            try
            {
                // GetStock throws an exception if not connected to Market Data
                BWStock stock = m_Session.GetStock(bwOrder.Symbol);
            }
            catch (ClientPortalConnectionException e)
            {
                debug(e.Message);
            }
            // send the order
            bwOrder.Send();
            debug(String.Format("{0} sent order @ ${1}", bwOrder.Symbol, orderPrice));
            return (long)MessageTypes.OK;
        }