示例#1
0
        public void SettingNewPriceWhileOrderActiveResultsInMarketOrderCancelAndCreatesNewOrder()
        {
            const decimal totalQ = 25;
            const decimal clipQ = 10;

            const string orderID = "OrderID";

            var expected = DefaultFakeOrderRecord(quantity: totalQ);

            var newPrice = expected.Price + 10;

            var mockServer = new Mock<IServerFacade>();
            mockServer.Setup(s => s.CreateOrder(It.IsAny<OrderRecord>())).Returns(true);

            var updatedOrders = new UpdatedOrders();
            mockServer.Setup(s => s.UpdateOrder(It.IsAny<OrderRecord>(), It.IsAny<OrderRecord>()))
                      .Returns(true)
                      .Callback<OrderRecord, OrderRecord>(updatedOrders.AddUpdate);

            const decimal priceDelta = 0;
            var iceberg = new IcebergOrder(mockServer.Object,
                                           expected.Symbol,
                                           expected.ClOrdID,
                                           expected.Side,
                                           expected.Quantity,
                                           clipQ,
                                           expected.Price,
                                           priceDelta);

            iceberg.Activate();
            iceberg.ActivatedMarketOrderAccepted(orderID);

            iceberg.SetNewOrderPrice(newPrice);

            mockServer.Verify(s => s.CreateOrder(It.IsAny<OrderRecord>()),
                              Times.Once());

            mockServer.Verify(s => s.UpdateOrder(It.IsAny<OrderRecord>(), It.IsAny<OrderRecord>()),
                              Times.Once());

            Assert.AreEqual(1,
                            updatedOrders.OldRecords.Count,
                            "Incorrect number of old orders in update callback");
            var old = updatedOrders.OldRecords[0];
            Assert.AreEqual(expected.ClOrdID,
                            old.ClOrdID,
                            "Incorrect ClOrdID for old record when updating");

            Assert.AreEqual(1,
                            updatedOrders.NewRecords.Count,
                            "Incorrect number of new orders in update callback");
            var update = updatedOrders.NewRecords[0];
            Assert.AreEqual(newPrice, update.Price, "Updated order price incorrect");
        }
示例#2
0
        public void SettingNewPriceWhileWaitingForMarketOrderAcceptanceThrows()
        {
            const decimal totalQ = 25;
            const decimal clipQ = 10;

            var expected = DefaultFakeOrderRecord(quantity: totalQ);
            var mockServer = new Mock<IServerFacade>();
            mockServer.Setup(s => s.CreateOrder(It.IsAny<OrderRecord>())).Returns(true);

            const decimal priceDelta = 0;
            var iceberg = new IcebergOrder(mockServer.Object,
                                           expected.Symbol,
                                           expected.ClOrdID,
                                           expected.Side,
                                           expected.Quantity,
                                           clipQ,
                                           expected.Price,
                                           priceDelta);

            iceberg.Activate();
            Assert.Throws<ApplicationException>(() => iceberg.SetNewOrderPrice(100));
        }
示例#3
0
        public void SettingNewPriceBeforeActivatingShouldNotNeedToUpdateServerOrder()
        {
            const decimal totalQ = 25;
            const decimal clipQ = 10;

            var expected = DefaultFakeOrderRecord(quantity: totalQ);
            var mockServer = new Mock<IServerFacade>();

            const decimal priceDelta = 0;
            var iceberg = new IcebergOrder(mockServer.Object,
                                           expected.Symbol,
                                           expected.ClOrdID,
                                           expected.Side,
                                           expected.Quantity,
                                           clipQ,
                                           expected.Price,
                                           priceDelta);

            var newPrice = expected.Price + 10;
            iceberg.SetNewOrderPrice(newPrice);
            Assert.AreEqual(newPrice, iceberg.CurrentPrice, "Price not updated correctly");

            mockServer.Verify(s => s.CreateOrder(It.IsAny<OrderRecord>()), Times.Never());
        }