Beispiel #1
0
        private bool MakeDeal(ConfirmedDeal confirmedDeal)
        {
            IExchangeUser seller = GetUserByUniqueId(confirmedDeal.SellerUniqueId);
            IExchangeUser buyer  = GetUserByUniqueId(confirmedDeal.BuyerUniqueId);

            seller.DeattachShares(confirmedDeal.Deal);
            buyer.TakeShares(confirmedDeal.Deal);

            return(_bank.TransferMoney(buyer, seller, confirmedDeal.Deal.SharesCost, out double comission));
        }
Beispiel #2
0
        private ICollection <ConfirmedDeal> TryMatchOffers(
            ICollection <SellDealOffer> sellDealOffers,
            ICollection <BuyDealOffer> buyDealOffers,
            ref List <DealOffer> remainOffers)
        {
            // Список итоговых сопоставленных сделок
            var deals = new List <ConfirmedDeal>();

            // Пробегаемся по списку предложений о продаже
            foreach (SellDealOffer sell in sellDealOffers)
            {
                BuyDealOffer buy = buyDealOffers.FirstOrDefault(b => IsDealsMatched(sell, b));
                if (buy == null)
                {
                    // Если сделка не состоялась
                    continue;
                }

                // если предложения о покупке и продаже совпадают, то добавляем в список подтвержденных сделок
                // при этом корректиуем показатели сделки о продаже, чтобы совпадали

                sell.Deal.ShareCount = buy.Deal.ShareCount <= sell.Deal.ShareCount
                    ? buy.Deal.ShareCount
                    : sell.Deal.ShareCount;
                sell.Deal.SharesCost = sell.Deal.SharePrice * sell.Deal.ShareCount;

                var confirmedDeal = new ConfirmedDeal
                {
                    BuyerUniqueId  = buy.UniqueExhcangeUserId,
                    SellerUniqueId = sell.UniqueExhcangeUserId,
                    Deal           = sell.Deal
                };
                deals.Add(confirmedDeal);

                // Убираем из общего списка предложений те, которые свершились
                remainOffers.Remove(buy);
                remainOffers.Remove(sell);
            }
            return(deals);
        }