public void addSellOrder(Double sale_price, int sale_size)
        {
            if (BuyOrders.Count > 0)
            {
//                var SortedBuyOrders = BuyOrders.OrderByDescending(BuyOrder => BuyOrder.Price).ThenBy(BuyOrder => BuyOrder.TimeStamp).ToList();
//                BuyOrders = SortedBuyOrders;

                SellOrder sale;
                foreach (BuyOrder buy_order in BuyOrders)
                {
                    // if we have buy order with the same price do the trasaction and add it into Transaction list
                    if (buy_order.Price >= sale_price)
                    {
                        if (buy_order.Size == sale_size)
                        {
                            // do full transacqion
                            // do not add to sellOrders list
                            // remove buyOrder from the buyOrders list
                            sale = new SellOrder(sale_price, sale_size);
                            Transactions.Add(sale);
                            BuyOrders.Remove(buy_order);
                            lastSale = sale_price;
                            break;
                        }
                        else if (buy_order.Size > sale_size)
                        {
                            // do partial transacqion
                            // do not add to sellOrders list
                            // update buyOrder size to the remaining size in buyOrders list
                            int remainingSize = buy_order.Size - sale_size;
                            sale = new SellOrder(sale_price, sale_size);
                            Transactions.Add(sale);
                            buy_order.Size = remainingSize;
                            lastSale       = sale_price;
                            break;
                        }
                        else if (buy_order.Size < sale_size)
                        {
                            // do partial transacqion
                            // remove buyOrder from the buyOrders list
                            // add to sellOrders for the remaining size in sellOrders list
                            int remainingSize = sale_size - buy_order.Size;
                            sale = new SellOrder(sale_price, buy_order.Size);
                            Transactions.Add(sale);
                            BuyOrders.Remove(buy_order);
                            lastSale = sale_price;

                            addSellOrder(sale_price, remainingSize);

                            break;


                            //     SellOrder sellOrder = new SellOrder(sale_price, remainingSize);
                            //     SellOrders.Add(sellOrder);
                            //      var SortedSellOrders = SellOrders.OrderBy(SellOrder => SellOrder.Price).ThenBy(SellOrder => SellOrder.TimeStamp).ToList();
                            //     SellOrders = SortedSellOrders;
                        }
                    }
                    else
                    {
                        SellOrder sellOrder = new SellOrder(sale_price, sale_size);
                        SellOrders.Add(sellOrder);
                        var SortedSellOrders = SellOrders.OrderBy(SellOrder => SellOrder.Price).ThenBy(SellOrder => SellOrder.TimeStamp).ToList();
                        SellOrders = SortedSellOrders;
                        break;
                    }
                }
            }
            else
            {
                SellOrder sellOrder = new SellOrder(sale_price, sale_size);
                SellOrders.Add(sellOrder);
                var SortedSellOrders = SellOrders.OrderBy(SellOrder => SellOrder.Price).ThenBy(SellOrder => SellOrder.TimeStamp).ToList();
                SellOrders = SortedSellOrders;
            }
            // market.Notify();
        }