public void TestOrderCanceledTriggeredAfterNotSendingOrder()
        {
            var orderCreator = new OrderCreator();
            var manager      = new StrategyManager(orderCreator);

            using var monitoredManager = manager.Monitor();
            orderCreator.Limit(new SOrderParameters()).Send(20);
            manager.TriggerOrders(new Bar()
            {
                Low = 21
            });
            orderCreator.Limit(new SOrderParameters()).Send(20);
            manager.TriggerOrders(new Bar()
            {
                Low = 22
            });

            monitoredManager.Should()
            .Raise("OrderValidated")
            .WithArgs <OrderInfo>(info => info.Price == 20)
            .OnlyOnce();
            monitoredManager.Should().NotRaise("OrderCanceled");
            Assert.Equal(0, manager.StrategyInfo.MarketPosition);

            // If we don't send the order again, it should be canceled
            manager.TriggerOrders(new Bar()
            {
                Low = 23
            });
            monitoredManager.Should().Raise("OrderCanceled");
            Assert.Equal(0, manager.StrategyInfo.MarketPosition);
        }
        public void TestOrderValidatedTriggeredAgain()
        {
            var orderCreator = new OrderCreator();
            var manager      = new StrategyManager(orderCreator);

            using var monitoredManager = manager.Monitor();
            orderCreator.Limit(new SOrderParameters()).Send(20);
            manager.TriggerOrders(new Bar()
            {
                Low = 19
            });

            Assert.Equal(100, manager.StrategyInfo.MarketPosition);
            monitoredManager.Should()
            .Raise("OrderValidated")
            .WithArgs <OrderInfo>(info => info.Price == 20)
            .OnlyOnce()
            .Reset();

            // The same order is allowed to be sent again after being filled
            orderCreator.Limit(new SOrderParameters()).Send(20);
            monitoredManager.Should()
            .Raise("OrderValidated")
            .WithArgs <OrderInfo>(info => info.Price == 20)
            .OnlyOnce();
        }
        public void TestOrderValidatedTriggeredOnlyOnce()
        {
            var orderCreator = new OrderCreator();
            var manager      = new StrategyManager(orderCreator);

            using var monitoredManager = manager.Monitor();
            orderCreator.Limit(new SOrderParameters()).Send(20);
            orderCreator.Limit(new SOrderParameters()).Send(20);

            monitoredManager.Should()
            .Raise("OrderValidated")
            .WithArgs <OrderInfo>(info => info.Price == 20)
            .OnlyOnce();
        }
        public void TestLimitOrderNotTriggeredImmediately()
        {
            var orderCreator = new OrderCreator();
            var manager      = new StrategyManager(orderCreator);

            orderCreator.Limit(new SOrderParameters(EOrderAction.Buy)).Send(40);

            Assert.Equal(0, manager.StrategyInfo.MarketPosition);
        }
        public void TestLimitBuyOrderTriggered()
        {
            var orderCreator = new OrderCreator();
            var manager      = new StrategyManager(orderCreator);

            orderCreator.Limit(new SOrderParameters(EOrderAction.Buy)).Send(40);
            manager.TriggerOrders(new Bar()
            {
                Low = 39
            });

            Assert.Equal(100, manager.StrategyInfo.MarketPosition);
        }
        public void TestLimitSellOrderTriggered()
        {
            var orderCreator = new OrderCreator();
            var manager      = new StrategyManager(orderCreator);

            orderCreator.Limit(new SOrderParameters(EOrderAction.SellShort)).Send(40);
            manager.TriggerOrders(new Bar()
            {
                High = 41
            });

            Assert.Equal(-100, manager.StrategyInfo.MarketPosition);
        }
Exemple #7
0
        public void TestLimit()
        {
            var orderCreator = new OrderCreator();

            using var monitoredOrderCreator = orderCreator.Monitor();
            var order = orderCreator.Limit(new SOrderParameters(EOrderAction.Buy));

            order.Send(15);
            monitoredOrderCreator
            .Should().Raise("OrderSent")
            .WithArgs <OrderInfo>(info => info.Order == order)
            .WithArgs <OrderInfo>(info => info.Price == 15)
            .WithArgs <OrderInfo>(info => info.OrderAction == EOrderAction.Buy)
            .WithArgs <OrderInfo>(info => info.Size == 100);
        }