Ejemplo n.º 1
0
        //We update an orderBook in memory and publish
        protected void UpdateOrderBook(WebSocketSubscriptionEvent subscrEvent)
        {
            if (subscrEvent is WebSocketErrorMessage)
            {
                ProcessSubscrError((WebSocketErrorMessage)subscrEvent);
                return;
            }

            WebSocketOrderBookL2Event orderBookEvent = (WebSocketOrderBookL2Event)subscrEvent;

            try
            {
                zHFT.InstructionBasedMarketClient.BitMex.Common.DTO.OrderBookEntry[] bids = orderBookEvent.data.Where(x => x.IsBuy()).OrderByDescending(x => x.price).ToArray();
                zHFT.InstructionBasedMarketClient.BitMex.Common.DTO.OrderBookEntry[] asks = orderBookEvent.data.Where(x => x.IsSell()).OrderBy(x => x.price).ToArray();


                SendOrderBookEntries(orderBookEvent.action, bids, asks);
                OrderBookHandler.DoUpdateOrderBooks(orderBookEvent.action, bids, asks);

                //string symbol = "";
                //if (bids.Length > 0)
                //    symbol = bids[0].symbol;
                //else if (asks.Length > 0)
                //    symbol = asks[0].symbol;
                //else
                //    return;

                //if (ActiveSecuritiesQuotes.Values.Any(x => x.Symbol == symbol) && OrderBookHandler.OrderBooks.ContainsKey(symbol))
                //{
                //    Security sec = ActiveSecuritiesQuotes.Values.Where(x => x.Symbol == symbol).FirstOrDefault();

                //    OrderBookDictionary dict = OrderBookHandler.OrderBooks[symbol];
                //    zHFT.InstructionBasedMarketClient.BitMex.Common.DTO.OrderBookEntry bestBid = dict.Entries.Values.Where(x => x.IsBuy() && x.size > 0).OrderByDescending(x => x.price).FirstOrDefault();
                //    zHFT.InstructionBasedMarketClient.BitMex.Common.DTO.OrderBookEntry bestAsk = dict.Entries.Values.Where(x => x.IsSell() && x.size > 0).OrderBy(x => x.price).FirstOrDefault();

                //    sec.MarketData.BestBidPrice = Convert.ToDouble(bestBid.price);
                //    sec.MarketData.BestBidSize = Convert.ToInt64(bestBid.size);
                //    sec.MarketData.BestAskPrice = Convert.ToDouble(bestAsk.price);
                //    sec.MarketData.BestAskSize = Convert.ToInt64(bestAsk.size);

                //    //DoLog(string.Format("@{5}:Publishing Market Data  for symbol {0}: Best Bid Size={1} Best Bid Price={2} Best Ask Size={3} Best Ask Price={4}",
                //    //                    symbol, bestBid.size.ToString("##.########"), bestBid.price.ToString("##.##"),
                //    //                          bestAsk.size.ToString("##.########"), bestAsk.price.ToString("##.##"),
                //    //                    BitmexConfiguration.Name), Main.Common.Util.Constants.MessageType.Information);



                //    MarketDataWrapper wrapper = new MarketDataWrapper(sec, GetConfig());
                //    OnMessageRcv(wrapper);


                //}
            }
            catch (Exception ex)
            {
                DoLog(string.Format("@{0}:Error processing order book :{1}", BitmexConfiguration.Name, ex.Message), Main.Common.Util.Constants.MessageType.Error);
            }
        }
        public async Task OpenAndClosePrices()
        {
            var listForPrices = new List <TickPrice>();
            var listForBooks  = new List <OrderBook>();

            var tickPriceHandler = new TickPriceHandler(listForPrices);
            var orderBookHandler = new OrderBookHandler(listForBooks);

            Exchange = new LykkeExchange(config, null, tickPriceHandler, orderBookHandler, _tradeHandler, new LogToConsole());

            var exchange = Exchange;

            exchange.Start();
            await Task.Delay(TimeSpan.FromSeconds(10));

            exchange.Stop();

            Assert.True(listForPrices.Any());
        }
Ejemplo n.º 3
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);
            }
        }