コード例 #1
0
        private void RouteImpl(InstructionExecutionContext instructionExecutionContext)
        {
            // 1. Prepare the corresponding OrderBasket (via solver)
            var solver      = new MarketSweepSolver(this.marketSnapshotProvider);
            var orderBasket = solver.Solve(instructionExecutionContext, this.routeOrders);

            // 2. Route the OrderBasket
            this.routeOrders.Route(orderBasket);
        }
コード例 #2
0
        public void Should_Solve_with_2_markets_when_asked_quantity_is_1()
        {
            var marketA              = new ApiMarketGateway("NYSE (New York)", sellQuantity: 50, sellPrice: 100M);
            var rejectingMarket      = new ApiMarketGateway("CME (Chicago)", sellQuantity: 50, sellPrice: 100M, orderPredicate: _ => false);
            var marketsInvolved      = new[] { marketA, rejectingMarket };
            var marketGatewayAdapter = new MarketsAdapter(marketsInvolved);

            var investorInstruction         = new InvestorInstruction(new InvestorInstructionIdentifierDto().Value, Way.Buy, quantity: 1, price: 100M, goodTill: DateTime.Now.AddMinutes(5));
            var instructionExecutionContext = new InstructionExecutionContext(investorInstruction, args => { }, failure => { });

            var marketSweepSolver = new MarketSweepSolver(new MarketSnapshotProvider(marketGatewayAdapter.GetAvailableMarketNames(), marketGatewayAdapter));
            var orderBasket       = marketSweepSolver.Solve(instructionExecutionContext, marketGatewayAdapter);

            Check.That(orderBasket.OrdersDescriptions.Extracting("Quantity")).ContainsExactly(1);
        }