Beispiel #1
0
 public void AddUpdateOrder(ulong orderID, OrderInfo order)
 {
     if (order.status == OrderStatus.Filled || order.status == OrderStatus.Cancelled || order.status == OrderStatus.Rejected)
     {
         Lvl2TableObj oldOrd;
         if (_orderDict.TryRemove(orderID, out oldOrd))
         {
             lock (_bindingList)
             {
                 _bindingList.Remove(oldOrd);
             }
         }
     }
     else if (_orderDict.ContainsKey(orderID))
     {
         _orderDict[orderID].UpdateOrder(order);
     }
     else
     {
         Lvl2TableObj obj = new Lvl2TableObj(order, orderID);
         _orderDict.TryAdd(orderID, obj);
         lock (_bindingList)
         {
             _bindingList.Add(obj);
         }
     }
 }
Beispiel #2
0
        private void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            if (_perfEnabled)
            {
                PerfAnalyzer.startTime(_perfLabel + "_RowColoringTime");
            }
            GridView view = sender as GridView;

            Lvl2TableObj cellObject = null;

            lock (_bindingList)
            {
                if (_bindingList.Count > gridView1.GetDataSourceRowIndex(e.RowHandle))
                {
                    cellObject = _bindingList[gridView1.GetDataSourceRowIndex(e.RowHandle)];
                }
            }
            if (cellObject != null)
            {
                if (cellObject.IsOurOrder)
                {
                    if (e.Column.Caption.Equals("Exch"))
                    {
                        e.Appearance.BackColor = Color.Red;
                        e.Appearance.ForeColor = Color.White;
                    }
                    else
                    {
                        e.Appearance.BackColor = Color.Black;
                        e.Appearance.ForeColor = Color.White;
                    }
                }
                else
                {
                    float px = cellObject.Price;
                    for (int j = 0; j < _sortedPriceLvls.Length; j++)
                    {
                        if (_sortedPriceLvls.ElementAt(j) == px)
                        {
                            e.Appearance.BackColor = _priceLevelBGColors[j % 6];
                        }
                    }
                }
                if (_perfEnabled)
                {
                    PerfAnalyzer.endTime(_perfLabel + "_RowColoringTime");
                }
            }
        }
Beispiel #3
0
 private void gridView1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
 {
     if (e.Button == System.Windows.Forms.MouseButtons.Left)
     {
         _mouseUpHit = gridView1.CalcHitInfo(new Point(e.X, e.Y));
         if (_mouseUpHit.InDataRow)
         {
             Lvl2TableObj selected = _bindingList[gridView1.GetDataSourceRowIndex(_mouseUpHit.RowHandle)];
             if (_mouseUpHit.Column.Caption.Equals("Exch") && selected.IsOurOrder && selected.OrderID == _mouseDownOrderID)
             {
                 OnOrderCancel?.Invoke(selected.OrderID);
             }
         }
     }
 }
Beispiel #4
0
 private void gridView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
 {
     if (e.Button == System.Windows.Forms.MouseButtons.Left)
     {
         _mouseDownOrderID = 0;
         _mouseDownHit     = gridView1.CalcHitInfo(new Point(e.X, e.Y));
         if (_mouseDownHit.InDataRow)
         {
             Lvl2TableObj selected = _bindingList[gridView1.GetDataSourceRowIndex(_mouseDownHit.RowHandle)];
             if (_mouseDownHit.Column.Caption.Equals("Exch") && (selected.IsOurOrder))
             {
                 _mouseDownOrderID = selected.OrderID;
             }
             OnRowClicked?.Invoke(selected.Exch, selected.Price, selected.Size);
         }
     }
 }
Beispiel #5
0
        private void RepopulateGrid()
        {
            QuoteBookStruct book = mergeQuoteBooks();

            //if the book is empty, remove all exchange quotes (can't just clear list or our orders will be removes as well)
            if ((_buy && book.NumBid == 0 || (!_buy && book.NumAsk == 0)))
            {
                foreach (byte key in _exchBookDict.Keys)
                {
                    Lvl2TableObj obj;
                    _exchBookDict.TryRemove(key, out obj);
                    lock (_bindingList)
                    {
                        _bindingList.Remove(obj);
                    }
                }
            }
            else
            {
                //if any exchange has a quote in our dictionary, but not the latest quotebook, it doesn't exist anymore, so remove it
                foreach (byte key in _exchBookDict.Keys)
                {
                    if ((_buy && !book.BidExch.Contains(key)) ||
                        (!_buy && !book.AskExch.Contains(key)))
                    {
                        Lvl2TableObj obj;
                        _exchBookDict.TryRemove(key, out obj);
                        lock (_bindingList)
                        {
                            _bindingList.Remove(obj);
                        }
                    }
                }
            }

            if (_perfEnabled)
            {
                PerfAnalyzer.startTime(_perfLabel + "_SetAllOrdersTime");
            }
            _priceLevels.Clear();
            List <OrderBook> books = ConvertQuoteBookToOrders(book);

            foreach (OrderBook b in books)
            {
                _priceLevels.Add(b._ordprc);
                if (_exchBookDict.ContainsKey(b._exch))
                {
                    _exchBookDict[b._exch].UpdateQuote(b);
                }
                else
                {
                    Lvl2TableObj obj = new Lvl2TableObj(b);
                    _exchBookDict.TryAdd(b._exch, obj);
                    lock (_bindingList)
                    {
                        _bindingList.Add(obj);
                    }
                }
            }
            _sortedPriceLvls = _buy ? _priceLevels.Reverse().ToArray() : _priceLevels.ToArray();
            if (_perfEnabled)
            {
                PerfAnalyzer.endTime(_perfLabel + "_SetAllOrdersTime");
            }
        }