/// <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"); } }
/// <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"); } }
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(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; }