Esempio n. 1
0
        protected override void DoRequestMarketDataOrderBook(Object param)
        {
            string symbol = (string)param;

            try
            {
                DoLog(string.Format("@{0}:Requesting market data order book por symbol {1}", BitmexConfiguration.Name, symbol), Main.Common.Util.Constants.MessageType.Information);
                if (ActiveSecuritiesOrderBook.Values.Where(x => x.Active).Any(x => x.Symbol == symbol))
                {
                    lock (tLock)
                    {
                        PriceLevelHandler.GetPriceLevelDict(symbol).Clear();
                        WSMarketDataManager.SubscribeOrderBookL2(symbol);
                    }
                }
                else
                {
                    DoLog(string.Format("@{0}:Unsubscribing market data order book  for symbol {1}", BitmexConfiguration.Name, symbol), Main.Common.Util.Constants.MessageType.Information);
                }
            }
            catch (Exception ex)
            {
                DoLog(string.Format("@{0}: Error Requesting market data order book  por symbol {1}:{2}", BitmexConfiguration.Name, symbol, ex.Message), Main.Common.Util.Constants.MessageType.Error);
            }
        }
Esempio n. 2
0
        protected void CancelMarketDataOrderBook(Security sec)
        {
            DoLog(string.Format("@{0}:Requesting Unsubscribe Market Data order book On Demand for Symbol: {0}", GetConfig().Name, sec.Symbol), Main.Common.Util.Constants.MessageType.Information);

            if (ActiveSecuritiesOrderBook.Values.Any(x => x.Symbol == sec.Symbol))
            {
                lock (ActiveSecuritiesOrderBook)
                {
                    DoRemove(ActiveSecuritiesOrderBook, sec.Symbol);
                    WSMarketDataManager.UnsubscribeOrderBookL2(sec.Symbol);
                    PriceLevelHandler.GetPriceLevelDict(sec.Symbol).Clear();
                }
            }
            else
            {
                throw new Exception(string.Format("@{0}: Could not find active security to unsubscribe order book for symbol {1}", GetConfig().Name, sec.Symbol));
            }
        }
Esempio n. 3
0
 protected void ProcessPriceLevelIds(string action, zHFT.InstructionBasedMarketClient.BitMex.Common.DTO.OrderBookEntry entry)
 {
     //First we have to process the price level Ids
     if (action == "partial")
     {
         if (!PriceLevelHandler.GetPriceLevelDict(entry.symbol).ContainsKey(entry.id))
         {
             PriceLevelHandler.GetPriceLevelDict(entry.symbol).Add(entry.id, entry.price);
         }
         else
         {
             DoLog(string.Format("@{0}:WARNING1:Received PARTIAL Price Level for a price leven that already existed", BitmexConfiguration.Name), Main.Common.Util.Constants.MessageType.Error);
         }
     }
     else if (action == "insert")
     {
         if (!PriceLevelHandler.GetPriceLevelDict(entry.symbol).ContainsKey(entry.id))
         {
             PriceLevelHandler.GetPriceLevelDict(entry.symbol).Add(entry.id, entry.price);
         }
         else
         {
             DoLog(string.Format("@{0}:WARNING1:Received INSERT Price Level for a price leven that already existed", BitmexConfiguration.Name), Main.Common.Util.Constants.MessageType.Error);
         }
     }
     else if (action == "update" || action == "delete")
     {
         if (PriceLevelHandler.GetPriceLevelDict(entry.symbol).ContainsKey(entry.id))
         {
             decimal priceLevel = PriceLevelHandler.GetPriceLevelDict(entry.symbol)[entry.id];
             entry.price = priceLevel;
         }
         else
         {
             DoLog(string.Format("@{0}:WARNING2 :Received UPDATE/REMOVE Price Level for a price leven that did not existed", BitmexConfiguration.Name), Main.Common.Util.Constants.MessageType.Error);
         }
     }
     else
     {
         DoLog(string.Format("Received message for unknown action : {0}", action), Main.Common.Util.Constants.MessageType.Error);
     }
 }
Esempio n. 4
0
        public override bool Initialize(OnMessageReceived pOnMessageRcv, OnLogMessage pOnLogMsg, string configFile)
        {
            try
            {
                this.OnMessageRcv += pOnMessageRcv;
                this.OnLogMsg     += pOnLogMsg;

                if (LoadConfig(configFile))
                {
                    DoLog("Initializing WSMarketDataManager @ BitMexInstructionBasedMarketClient", Main.Common.Util.Constants.MessageType.Information);
                    WSMarketDataManager   = new MarketDataManager(BitmexConfiguration.WebsocketURL, true);
                    RESTMarketDataManager = new zHFT.InstructionBasedMarketClient.BitMex.DAL.MarketDataManager(BitmexConfiguration.RESTURL);
                    DoLog(string.Format("Connected: {0} - Error Message: {1}", WSMarketDataManager.AuthSubscriptionResult.Success, WSMarketDataManager.AuthSubscriptionResult.ErrorMessage), Main.Common.Util.Constants.MessageType.Information);
                    DoLog("Initializing SecurityListManager @ BitMexInstructionBasedMarketClient", Main.Common.Util.Constants.MessageType.Information);
                    SecurityListManager = new DAL.REST.SecurityListManager(BitmexConfiguration.RESTURL);

                    PriceLevelHandler = new PriceLevelHandler();

                    //Securities = SecurityListManager.GetActiveSecurityList();

                    //ProcessContractSize(Securities);
                    DoLog("Assigning events @ BitMexInstructionBasedMarketClient", Main.Common.Util.Constants.MessageType.Information);

                    OrderBookHandler = new OrderBookHandler();

                    WSMarketDataManager.SubscribeResponseRequest(
                        BaseManager._ORDERBOOK_L2,
                        OrderBookSubscriptionResponse,
                        new object[] { });


                    WSMarketDataManager.SubscribeResponseRequest(
                        BaseManager._TRADE,
                        TradeSubscriptionResponse,
                        new object[] { });


                    WSMarketDataManager.SubscribeResponseRequest(
                        BaseManager._QUOTE,
                        QuoteSubscriptionResponse,
                        new object[] { });

                    WSMarketDataManager.SubscribeEvents(BaseManager._ORDERBOOK_L2, UpdateOrderBook);
                    WSMarketDataManager.SubscribeEvents(BaseManager._TRADE, UpdateTrade);
                    WSMarketDataManager.SubscribeEvents(BaseManager._QUOTE, UpdateQuotes);

                    ActiveSecuritiesQuotes    = new Dictionary <int, Security>();
                    ActiveSecuritiesTrades    = new Dictionary <int, Security>();
                    ActiveSecuritiesOrderBook = new Dictionary <int, Security>();
                    ContractsTimeStamps       = new Dictionary <int, DateTime>();
                    return(true);
                }
                else
                {
                    DoLog("Error initializing config file " + configFile, Main.Common.Util.Constants.MessageType.Error);
                    return(false);
                }
            }
            catch (Exception ex)
            {
                DoLog("Critical error initializing " + configFile + ":" + ex.Message, Main.Common.Util.Constants.MessageType.Error);
                return(false);
            }
        }