Esempio n. 1
0
        internal static SuccessfulTradingHistoryEntry Execute(TradeRequest buyRequest, TradeRequest sellRequest, int time)
        {
            Contract.Requires<ArgumentNullException>(buyRequest != null);
            Contract.Requires<ArgumentNullException>(sellRequest != null);
            Contract.Requires<ArgumentException>(buyRequest.Type == TradeRequestType.Buy);
            Contract.Requires<ArgumentException>(sellRequest.Type == TradeRequestType.Sell);
            Contract.Requires<ArgumentException>(buyRequest.Good == sellRequest.Good);
            Contract.Requires<ArgumentException>(buyRequest.Price >= sellRequest.Price);

            var amount = Math.Min(buyRequest.Amount, sellRequest.Amount);
            var price = (buyRequest.Price + sellRequest.Price) / 2;
            var totalPrice = price * amount;

            buyRequest._store.Add(buyRequest.Good, amount);
            buyRequest._store.Money += (buyRequest.Price - price) * amount;
            buyRequest.Amount -= amount;
            buyRequest._soldAmount += amount;
            buyRequest._soldTotalPrice += totalPrice;

            sellRequest._store.Money += totalPrice;
            sellRequest.Amount -= amount;
            sellRequest._soldAmount += amount;
            sellRequest._soldTotalPrice += totalPrice;
            return new SuccessfulTradingHistoryEntry(buyRequest.Good, amount, buyRequest.Price, sellRequest.Price, time);
        }
Esempio n. 2
0
 public TradeRequest CreateTradeRequest(TradeRequestType type, Good good, float amount, float price)
 {
     var request = new TradeRequest(this, type, good, amount, price);
     if (type == TradeRequestType.Sell)
     {
         Add(good, -amount);
     }
     else
     {
         Money -= amount * price;
     }
     return request;
 }
Esempio n. 3
0
        public void ExecuteAndFinishTest()
        {
            var buyTraderMock = new Mock<ITrader>();
            var sellTraderMock = new Mock<ITrader>();
            var buyStoreMock = SetUpStoreMock(new Mock<IStore>(), buyTraderMock);
            var sellStoreMock = SetUpStoreMock(new Mock<IStore>(), sellTraderMock);

            var good = new Good("Good");

            var buy = new TradeRequest(buyStoreMock.Object, TradeRequestType.Buy, good, 20f, 3f);
            var sell = new TradeRequest(sellStoreMock.Object, TradeRequestType.Sell, good, 10f, 1f);

            //execute
            var logEntry = TradeRequest.Execute(buy, sell, 0);

            // check requests
            Assert.IsFalse(buy.IsEmpty);
            Assert.IsTrue(sell.IsEmpty);
            Assert.AreEqual(10f, buyStoreMock.Object.Money);
            Assert.AreEqual(20f, sellStoreMock.Object.Money);
            buyStoreMock.Verify(o => o.Add(good, 10f));

            // check log entry
            Assert.AreEqual(10f, logEntry.Amount);
            Assert.AreEqual(3f, logEntry.BuyPrice);
            Assert.AreEqual(1f, logEntry.SellPrice);
            Assert.AreEqual(2f, logEntry.Price);
            Assert.AreEqual(good, logEntry.Good);
            Assert.AreEqual(0, logEntry.Time);

            //finish
            var logEntry2 = buy.Finish(0);
            Assert.IsNull(sell.Finish(0));

            // check requests
            Assert.IsTrue(buy.IsEmpty);
            Assert.AreEqual(40f, buyStoreMock.Object.Money);
            buyTraderMock.Verify(o => o.OnTradeRequestFinish(TradeRequestType.Buy, good, 20, 3f, 10, 20f));
            sellTraderMock.Verify(o => o.OnTradeRequestFinish(TradeRequestType.Sell, good, 10, 1f, 10, 20f));

            // check log entry 2
            Assert.AreEqual(10f, logEntry2.Amount);
            Assert.AreEqual(3f, logEntry2.Price);
            Assert.AreEqual(TradeRequestType.Buy, logEntry2.Type);
            Assert.AreEqual(good, logEntry2.Good);
            Assert.AreEqual(0, logEntry2.Time);
        }
 public FailedTradingHistoryEntry(TradeRequest tradeRequest, int time)
     : this(tradeRequest.Good, tradeRequest.Amount, tradeRequest.Type, tradeRequest.Price, time)
 {
     Contract.Requires<ArgumentNullException>(tradeRequest != null);
 }
Esempio n. 5
0
 public void RegisterTradeRequest(TradeRequest request)
 {
     Contract.Requires<ArgumentNullException>(request != null);
     throw new NotImplementedException();
 }
Esempio n. 6
0
 public void RegisterTradeRequest(TradeRequest request)
 {
     _tradeRequests.Add(request);
 }