/// <summary>
        /// Sends Market Data request to the provider
        /// </summary>
        public bool SubscribeTickData(Subscribe request)
        {
            try
            {
                // Get BW Stock Instance from the requested Symbol
                BWStock bwStock = _session.GetStock(request.Security.Symbol);

                // Register Quote Data
                //bwStock.OnLevel1Update2 += OnLevelOneUpdate;
                bwStock.OnLevel1Update3 += OnLevelOneUpdate;
                // Register Trade Data
                //bwStock.OnTrade2 += OnTradeUpdate;
                bwStock.OnTrade3 += OnTradeUpdate;
                // Send Subscription Request
                bwStock.Subscribe();

                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Sending market data request for: " + request.Security.Symbol, _type.FullName,
                                "SubscribeTickData");
                }

                return(true);
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "SubscribeTickData");
                return(false);
            }
        }
예제 #2
0
        void tl_newRegisterSymbols(string client, string symbols)
        {
            Basket b = BasketImpl.FromString(symbols);

            foreach (Security s in b)
            {
                // make sure we don't already have a subscription for this
                if (_symstk.Contains(s.symbol))
                {
                    continue;
                }
                BWStock stk = m_Session.GetStock(s.symbol);
                stk.Subscribe();
                stk.OnTrade += new BWStock.TradeHandler(stk_OnTrade);
                //stk.OnLevel2Update += new BWStock.Level2UpdateHandler(stk_OnLevel2Update);
                stk.OnLevel1Update += new BWStock.Level1UpdateHandler(stk_OnLevel1Update);
                _stocks.Add(stk);
                _symstk.Add(s.symbol);
                v("added level1 subscription for: " + s.symbol);
            }
            // get existing list
            Basket list = tl.AllClientBasket;

            // remove old subscriptions
            for (int i = 0; i < _symstk.Count; i++)
            {
                if (!list.ToString().Contains(_symstk[i]) && (_stocks[i] != null))
                {
                    debug(_symstk[i] + " not needed, removing...");
                    try
                    {
                        _stocks[i].Unsubscribe();
                        _stocks[i] = null;
                        _symstk[i] = string.Empty;
                    }
                    catch { }
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Called  when Order Reject is received from Blackwood
        /// </summary>
        private void OnOrderReject(object sender, MsgReject rejectmsg)
        {
            try
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Order rejected by Blackwood: " + rejectmsg.ToString(), _type.FullName, "OnOrderReject");
                }

                BWOrder rejectedOrder;

                // Get corresponding Local Order ID
                string localId = (from id in _localToBlackwoodIdsMap
                                  where id.Value.Equals(rejectmsg.ClientOrderID.Value.ToString())
                                  select id.Key).FirstOrDefault();

                if (localId == null)
                {
                    return;
                }

                // Remove from Ids Map
                string tempId;
                _localToBlackwoodIdsMap.TryRemove(localId, out tempId);

                // Remove Rejected Order from the List
                _bwOrders.TryRemove(rejectmsg.ClientOrderID.Value.ToString(), out rejectedOrder);

                Rejection rejection = new Rejection(new Security {
                    Symbol = rejectmsg.Symbol.Value
                }, _orderExecutionProviderName)
                {
                    OrderId        = localId,
                    RejectioReason = rejectmsg.Reason.Value,
                };

                // Raise Rejection reason
                if (OrderRejectionArrived != null)
                {
                    OrderRejectionArrived(rejection);
                }

                if (rejectmsg.Reason.Value.Equals("Not Shortable - Hard To Borrow"))
                {
                    // Get BW Stock Instance from the requested Symbol
                    BWStock bwStock = _session.GetStock(rejectmsg.Symbol.Value);

                    // Locate Stock
                    bwStock.LocateStock(rejectedOrder.Size);

                    if (Logger.IsDebugEnabled)
                    {
                        Logger.Debug(
                            "Locating " + rejectmsg.Symbol.Value + " sharess of" + rejectmsg.Symbol.Value,
                            _type.FullName, "OnOrderReject");
                    }
                    //_htbRejectID = orderReject.ClientOrderID;
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "OnOrderReject");
            }
        }