Exemple #1
0
        }// ProcessOrderAdded

        //
        //
        private void ProcessOrderDeleted(TT.OrderDeletedEventArgs eventArg)
        {
            Log.BeginEntry(LogLevel.Minor, "ProcessOrderDeleted:");
            OrderBookEventArgs outgoingEventArg = null;                 // outgoing event, if needed.

            TT.Order       ttOrder = eventArg.OldOrder;
            InstrumentName name;
            OrderBook      baseBook;

            if (m_TTKey2Name.TryGetValue(ttOrder.InstrumentKey, out name) && this.TryEnterBookWrite(name, out baseBook))
            {
                OrderBookTT book = (OrderBookTT)baseBook;
                string      tag;
                if (book.m_TagTT2Bre.TryGetValue(ttOrder.SiteOrderKey, out tag))
                {
                    Order deletedOrder;
                    if (book.TryDeleteOrder(tag, out deletedOrder))
                    {
                        outgoingEventArg       = new OrderBookEventArgs(this, name, OrderBookEventArgs.EventTypes.DeletedOrder); // Load out-going eventArg
                        outgoingEventArg.Order = deletedOrder;
                        Log.AppendEntry(" Deleted order {0} to book {1}.", deletedOrder, book);
                    }
                }
                this.ExitBookWrite(baseBook);
            }
            Log.EndEntry();
            if (outgoingEventArg != null)
            {
                OnBookChanged(outgoingEventArg);
            }
        }// ProcessOrderDelete()
Exemple #2
0
 protected void OnChanged(object sender, OrderBookEventArgs e)
 {
     if (Changed != null)
     {
         Changed(this, EventArgs.Empty);
     }
 }
Exemple #3
0
        private void OrderBookWebSocketHandler(ExchangeName exName, OrderBookEventArgs args)
        {
            var instrument = _wsInstruments[args.Instrument1];
            var exchange   = _wsExchanges[exName];

            if (!exchange.ValidOrderPrices(args, instrument))
            {
                return;
            }

            var priceArgs = new ExchangePricesEventArgs
            {
                CreatedAt      = DateTime.UtcNow,
                Timestamp      = args.Timestamp,
                Instrument1    = args.Instrument1,
                Instrument2    = args.Instrument2,
                OrderId        = args.OrderId,
                Exchange       = exchange.GetExchangeName(),
                IsOrderDeleted = args.IsOrderDeleted
            };

            Task.Run(() => _dbRepo.SaveOrderBook(priceArgs, args.OrderBook));

            instrument.InitExchangePrice(exchange, priceArgs);
            OnExchangePrices(null, priceArgs);
        }
Exemple #4
0
        private static void OnOrderBookChanged(object sender, OrderBookEventArgs e)
        {
            Ticker t = ((OrderBook)sender).Owner;

            OrderBookEntry ask = t.OrderBook.Asks[0];
            OrderBookEntry bid = t.OrderBook.Bids[0];
        }
Exemple #5
0
        }// OrderHub_BookCreated().

        //
        //
        // ****         OrderHub_BookChanged()          ****
        //
        private void OrderHub_BookChanged(object sender, EventArgs eventArgs)
        {
            OrderBookEventArgs     eventArg = (OrderBookEventArgs)eventArgs;
            OrderBookDepthListView view;

            if (m_OrderBookViews.TryGetValue(eventArg.Instrument, out view))
            {
                view.OrderHub_BookChanged(sender, eventArgs);
            }
        }
Exemple #6
0
        // *****************************************************************
        // ****                     Event Handlers                     ****
        // *****************************************************************
        //
        //
        //
        // ****         OrderHub_BookChanged()          ****
        //
        public void OrderHub_BookChanged(object sender, EventArgs eventArgs)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new EventHandler(OrderHub_BookChanged), new object[] { sender, eventArgs });
            }
            else
            {
                OrderBookEventArgs eventArg = (OrderBookEventArgs)eventArgs;
                Order order = eventArg.Order;
                if (eventArg.EventType == OrderBookEventArgs.EventTypes.NewOrder)
                {
                    m_OrderBook.TryAddOrder(order);

                    GLItem item = new GLItem();
                    m_GList[order.Side].Items.Add(item);
                    if (order.Side == 1)
                    {
                        item.SubItems[0].Text       = order.IPrice.ToString();
                        item.SubItems[1].Text       = order.Qty.ToString();
                        item.SubItems[2].ImageIndex = 0;
                        //item.SubItems[2].ImageAlignment = HorizontalAlignment.Center;
                        item.SubItems[3].Text = "Default";
                    }
                    else
                    {
                        item.SubItems[3].Text       = order.IPrice.ToString();
                        item.SubItems[2].Text       = order.Qty.ToString();
                        item.SubItems[1].ImageIndex = 0;
                        //item.SubItems[2].ImageAlignment = HorizontalAlignment.Center;
                        item.SubItems[0].Text = "Default";
                    }
                }
                else if (eventArg.EventType == OrderBookEventArgs.EventTypes.DeletedOrder)
                {
                    m_OrderBook.TryDeleteOrder(order.Tag, out order);
                    GLItem foundItem = null;
                    foreach (GLItem item in m_GList[order.Side].Items)
                    {
                        if (item.Text == order.Tag)
                        {
                            foundItem = item;
                        }
                    }
                    if (foundItem != null)
                    {
                        m_GList[order.Side].Items.Remove(foundItem);
                    }
                }
                else if (eventArg.EventType == OrderBookEventArgs.EventTypes.DeletedOrder)
                {
                    //m_OrderBook.TryDeleteOrder(eventArg.Order);
                }
            }
        }//OrderHub_BookChanged()
Exemple #7
0
 //
 // ****         OrderHub_BookDeleted()              ****
 //
 void OrderHub_BookDeleted(object sender, EventArgs eventArgs)
 {
     if (this.InvokeRequired)
     {
         this.Invoke(new EventHandler(OrderHub_BookCreated), new object[] { sender, eventArgs });
     }
     else
     {
         OrderBookEventArgs eventArg = (OrderBookEventArgs)eventArgs;
     }
 }
        private void SubscribeOrder(Channel channel, string eventName, EventHandler <OrderBookEventArgs> handler, OrderState state)
        {
            channel.Bind(eventName, json =>
            {
                var time            = DateTime.UtcNow;
                var order           = JsonConvert.DeserializeObject <BitstampOrderBook>(json);
                var orderBook       = new OrderBookEventArgs(order, state);
                orderBook.CreatedAt = time;

                handler(this, orderBook);
            });
        }
Exemple #9
0
        }//UpdateView()

        //
        //
        //
        //
        //
        #endregion//Private Methods



        #region External Event Handlers
        // *****************************************************************
        // ****                     Event Handlers                     ****
        // *****************************************************************
        //
        //
        //
        // ****         OrderHub_BookChanged()              ****
        //
        void OrderHub_BookChanged(object sender, EventArgs eventArgs)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new EventHandler(OrderHub_BookChanged), new object[] { sender, eventArgs });
            }
            else
            {
                OrderBookEventArgs eventArg = (OrderBookEventArgs)eventArgs;
                if (m_OrderBooks.TryUpdate(eventArg))
                {
                    UpdateView(eventArg);
                }
            }
        }
Exemple #10
0
 //
 //
 // ****         OrderHub_BookCreated()          ****
 //
 private void OrderHub_BookCreated(object sender, EventArgs eventArgs)
 {
     if (this.InvokeRequired)
     {
         this.Invoke(new EventHandler(OrderHub_BookCreated), new object[] { sender, eventArgs });
     }
     else
     {
         OrderBookEventArgs eventArg = (OrderBookEventArgs)eventArgs;
         if (!m_OrderBookViews.ContainsKey(eventArg.Instrument))
         {
             CreateOrderBookView(eventArg);
         }
     }
 }// OrderHub_BookCreated().
Exemple #11
0
        }// ProcessMarketFoundResource()

        //
        //
        //
        #endregion//Private HubEvent Handler


        #region Private Order Update Handlers
        // *****************************************************************
        // ****             Private Order Update Handlers               ****
        // *****************************************************************
        //
        //
        private void ProcessOrderAdded(TT.OrderAddedEventArgs eventArg)
        {
            Log.BeginEntry(LogLevel.Minor, "ProcessOrderAdded:");
            OrderBookEventArgs outgoingEventArg = null;

            TT.Order       ttOrder = eventArg.Order;
            InstrumentName name;
            OrderBook      book;

            if (m_TTKey2Name.TryGetValue(ttOrder.InstrumentKey, out name) && this.TryEnterBookWrite(name, out book))
            {   // We know this TTKey, and have an associated book!
                OrderBookTT booktt   = (OrderBookTT)book;
                Order       newOrder = booktt.CreateNewOrder();
                int         mktSign  = Misty.Lib.Utilities.QTMath.BuySign;
                newOrder.Side = Misty.Lib.Utilities.QTMath.BuySide;
                if (ttOrder.BuySell == TT.BuySell.Sell)
                {
                    mktSign       = Misty.Lib.Utilities.QTMath.SellSign;
                    newOrder.Side = Misty.Lib.Utilities.QTMath.SellSide;
                }
                newOrder.Qty    = mktSign * ttOrder.WorkingQuantity.ToInt();
                newOrder.IPrice = (int)Math.Round(ttOrder.LimitPrice.ToDouble() / book.MinimumPriceTick);
                int intPrice = ttOrder.LimitPrice.ToInt();  // for debugging
                if (book.TryAddOrder(newOrder))
                {
                    booktt.m_TagBre2TT.Add(newOrder.Tag, ttOrder.SiteOrderKey);
                    booktt.m_TagTT2Bre.Add(ttOrder.SiteOrderKey, newOrder.Tag);
                    outgoingEventArg       = new OrderBookEventArgs(this, name, OrderBookEventArgs.EventTypes.NewOrder); // Load out-going eventArg
                    outgoingEventArg.Order = newOrder;
                    Log.AppendEntry(" Added new order {0} to book {2}.", newOrder, ttOrder, book);
                }
                else
                {
                    Log.AppendEntry(" Failed to add order {0} to book {2}. Store order for later.", newOrder, ttOrder, book);
                    StoreTTEvent(eventArg, ttOrder.InstrumentKey);
                }
                this.ExitBookWrite(book);
            }
            else
            {                                                  // We have no book for this instrument.
                StoreTTEvent(eventArg, ttOrder.InstrumentKey); // Store order and request mkt details.
            }
            Log.EndEntry();
            if (outgoingEventArg != null)
            {
                OnBookChanged(outgoingEventArg);
            }
        }// ProcessOrderAdded
        public void SubscribeOrderBook(OrderBookEventArgs orderBookEventArgs)
        {
            if (orderBookEventArgs == null)
            {
                throw new ArgumentNullException(nameof(orderBookEventArgs));
            }

            var message = JsonConvert.SerializeObject(orderBookEventArgs.OrderBook);

            var strategyNotification = new StrategyNotification {
                Name = Strategy.Name, Message = message, NotificationLevel = NotificationLevel.OrderBook
            };

            StrategyOrderBookNotification(new StrategyNotificationEventArgs {
                StrategyNotification = strategyNotification
            });
        }
Exemple #13
0
        public bool ValidOrderPrices(OrderBookEventArgs args, Instrument ins)
        {
            double expectedAmount;

            var bidOrder = ins.CreateBidOrder(this, out expectedAmount);
            var askOrder = ins.CreateAskOrder(this, out expectedAmount);

            GetPrice(args.OrderBook.Bids, args.OrderBook.Asks, expectedAmount, bidOrder, askOrder);

            if (bidOrder.Price == 0 && askOrder.Price == 0)
            {
                return(false);
            }

            //if (!ins.CheckConstraint(bidOrder.Price, askOrder.Price, CurrencyRate))
            //    return false;

            return(ins.ValidOrderPrices(this, bidOrder, askOrder));
        }
Exemple #14
0
        }// InitializeListView()

        //
        //
        //
        // ****             TryCreate()             ****
        //
        /// <summary>
        /// This must be called by the UI thread.
        /// </summary>
        public static bool TryCreate(OrderBookEventArgs eventArgs, out OrderBookDepthListView newView)
        {
            // Validate
            newView = null;
            if (eventArgs.EventType != OrderBookEventArgs.EventTypes.CreatedBook)
            {
                return(false);
            }
            // Create object
            OrderBook newBook;
            bool      isSucessful = OrderBook.TryCreate(eventArgs, out newBook);

            if (isSucessful)
            {
                newView             = new OrderBookDepthListView();
                newView.m_OrderBook = newBook;
            }

            return(isSucessful);
        }//TryCreate()
Exemple #15
0
        }// AddHub()

        //
        //
        //
        //
        //
        #endregion//Public Methods


        #region Private Methods
        // *****************************************************************
        // ****                     Private Methods                     ****
        // *****************************************************************
        //
        //
        // ****             UpdateView()                ****
        //
        private void UpdateView(OrderBookEventArgs eventArg)
        {
            string s;

            switch (eventArg.EventType)
            {
            case OrderBookEventArgs.EventTypes.NewOrder:
                s = eventArg.Order.ToString();
                m_OrderDetails.Add(eventArg.Order, s);
                m_OrderList.Add(s);
                break;

            case OrderBookEventArgs.EventTypes.DeletedOrder:
                if (m_OrderDetails.TryGetValue(eventArg.Order, out s) && m_OrderList.Contains(s))
                {
                    m_OrderList.Remove(s);
                }
                break;
            }
        }//UpdateView()
Exemple #16
0
        protected override void OnMessage(object sender, MessageEventArgs e)
        {
            var obj = JsonConvert.DeserializeObject <XBtcResponse>(e.Data);

            if (String.Compare(obj.Response, "Login") == 0)
            {
                if (String.Compare(obj.Result.Info, "ok", true) != 0)
                {
                    Log.WriteError(obj.Result.Info, (int)GetExchangeName());
                }
            }
            else if (String.Compare(obj.Response, "FeedSubscribe") == 0)
            {
                //...
            }
            else if (String.Compare(obj.Response, "FeedTick") == 0)
            {
                var args = new OrderBookEventArgs(obj.Result);

                if (obj.Result.Symbol == "BTCUSD" && _btcOrderBookHandler != null)
                {
                    _btcOrderBookHandler(this, args);
                }
                else if (obj.Result.Symbol == "LTCUSD" && _ltcOrderBookHandler != null)
                {
                    _ltcOrderBookHandler(this, args);
                }
                else if (obj.Result.Symbol == "BCHUSD" && _bchOrderBookHandler != null)
                {
                    _bchOrderBookHandler(this, args);
                }
                else if (obj.Result.Symbol == "ETHUSD" && _ethOrderBookHandler != null)
                {
                    _ethOrderBookHandler(this, args);
                }
                else if (obj.Result.Symbol == "DSHUSD" && _dashOrderBookHandler != null)
                {
                    _dashOrderBookHandler(this, args);
                }
            }
        }
Exemple #17
0
        //
        //
        #endregion//Constructors


        #region no Properties
        // *****************************************************************
        // ****                     Properties                          ****
        // *****************************************************************
        //
        //
        #endregion//Properties


        #region no Public Methods
        // *****************************************************************
        // ****                     Public Methods                      ****
        // *****************************************************************
        //
        //
        //
        //
        //
        //
        #endregion//Public Methods


        #region no Private Methods
        // *****************************************************************
        // ****                     Private Methods                     ****
        // *****************************************************************
        //
        //
        //
        // ****         CreateOrderBookView()           ****
        //
        private void CreateOrderBookView(OrderBookEventArgs eventArg)
        {
            int nColumns = 2;

            OrderBookDepthListView view;

            if (OrderBookDepthListView.TryCreate(eventArg, out view) && m_OrderBookViews.TryAdd(eventArg.Instrument, view))
            {
                this.SuspendLayout();
                Size defaultSize = new Size(view.Size.Width, view.Size.Height);
                this.ClientSize = new Size(defaultSize.Width * nColumns, defaultSize.Height);

                // Place on screen

                int nY = (int)Math.Ceiling((1.0 * m_OrderBookViews.Count) / nColumns) - 1;
                int nX = (m_OrderBookViews.Count - 1) % nColumns;

                view.Location = new Point(nX * defaultSize.Width, nY * defaultSize.Height);
                this.Controls.Add(view);


                this.ResumeLayout(true);
            }
        }// CreateOrderBookView()
Exemple #18
0
 protected void OnOrderBook(object sender, OrderBookEventArgs e, CurrencyName instrument)
 {
     e.Instrument1 = instrument;
     _orderBookHandler(((IExchange)sender).GetExchangeName(), e);
 }
Exemple #19
0
 public void SubscribeOrderBook(OrderBookEventArgs orderBookEventArgs)
 {
     throw new NotImplementedException();
 }
Exemple #20
0
        }     //HubEventHandler()

        //

        //
        //
        // *****************************************************
        // ****             Process Request()               ****
        // *****************************************************
        private void ProcessRequest(OrderHubRequest eventArg)
        {
            Log.NewEntry(LogLevel.Minor, "ProcessRequest: {0}", eventArg);
            switch (eventArg.Request)
            {
            case OrderHubRequest.RequestType.RequestConnect:
                // We automatically connect to the TT Api once we get the call back from it.
                break;

            case OrderHubRequest.RequestType.RequestCreateFillBook:
                if (eventArg.Data[0] is TT.InstrumentKey)
                {
                    TT.InstrumentKey ttKey = (TT.InstrumentKey)eventArg.Data[0];
                    InstrumentName   name;
                    if (m_TTKey2Name.TryGetValue(ttKey, out name) && m_Books.ContainsKey(name))
                    {
                        Log.NewEntry(LogLevel.Minor, "ProcessRequest: Already have book for {1}. Ignoring {0}.", eventArg, name);
                    }
                    else
                    {
                        OrderBookTT book;
                        if (TryCreateNewBook(ttKey, out book))
                        {
                            Log.NewEntry(LogLevel.Minor, "ProcessRequest: Create book succeeded {0}.", book);
                            OrderBookEventArgs outgoingEventArg = new OrderBookEventArgs(this, book.m_InstrumentName, OrderBookEventArgs.EventTypes.CreatedBook);
                            OnBookCreated(outgoingEventArg);    // TODO: Load additional information needed for new book creation.
                            // Push out waiting events.
                            ConcurrentQueue <EventArgs> waitingTTOrders;
                            while (m_TTEventsToProcess.TryRemove(ttKey, out waitingTTOrders))             // this should only execute once, but if new orders are added concurrently could execute more!
                            {
                                EventArgs eventArg1;
                                while (waitingTTOrders.Count > 0)
                                {
                                    if (waitingTTOrders.TryDequeue(out eventArg1))
                                    {
                                        this.HubEventEnqueue(eventArg1);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                        else
                        {
                            Log.NewEntry(LogLevel.Minor, "ProcessRequest: Create book failed. Will try again.");
                            m_WaitingRequests.Enqueue(eventArg);                        // Store this request
                        }
                    }
                }
                break;

            case OrderHubRequest.RequestType.RequestShutdown:
                if (m_OrderListener != null)
                {
                    m_OrderListener.Dispose();
                    m_OrderListener = null;
                }
                base.Stop();
                break;

            default:
                break;
            } // switch request
        }     //ProcessRequest()