示例#1
0
        public void Decorator_Handles_Half_OrderFill()
        {
            var order = BuildOrder();

            order.OrderFilledVolume  = 50;
            order.OrderOrderedVolume = 100;

            var orderAllocation = BuildAllocation(100);
            var decorator       = new OrderAllocationDecorator(order, orderAllocation);

            Assert.AreEqual(decorator.OrderFilledVolume, 50);
        }
示例#2
0
        public void Decorator_Handles_ZeroAllocatedFill()
        {
            var order = this.BuildOrder();

            order.OrderFilledVolume = 100;

            var orderAllocation = this.BuildAllocation(0);
            var decorator       = new OrderAllocationDecorator(order, orderAllocation);

            Assert.AreEqual(decorator.OrderFilledVolume, 0);
            Assert.AreEqual(decorator.OrderOrderedVolume, 0);
        }
示例#3
0
        public void Decorator_Handles_Zero_CorrectAccountingEntities()
        {
            var order = this.BuildOrder();

            order.OrderFilledVolume = 1000;

            var orderAllocation = this.BuildAllocation(100);
            var decorator       = new OrderAllocationDecorator(order, orderAllocation);

            Assert.AreEqual(decorator.OrderClientAccountAttributionId, "allocation-account");
            Assert.AreEqual(decorator.OrderFund, "allocation-fund");
            Assert.AreEqual(decorator.OrderStrategy, "allocation-strategy");
        }
示例#4
0
        public void Decorator_Handles_OrderVolumeAdjustment()
        {
            var order = this.BuildOrder();

            order.OrderOrderedVolume = 100;
            order.OrderFilledVolume  = 1000;

            var orderAllocation = this.BuildAllocation(100);
            var decorator       = new OrderAllocationDecorator(order, orderAllocation);

            Assert.AreEqual(decorator.OrderFilledVolume, 100);
            Assert.AreEqual(decorator.OrderOrderedVolume, 10);
        }
示例#5
0
        /// <summary>
        /// The project.
        /// </summary>
        /// <param name="order">
        /// The order.
        /// </param>
        /// <param name="groupedAllocations">
        /// The grouped allocations.
        /// </param>
        /// <returns>
        /// The <see cref="OrderAllocationDecorator"/>.
        /// </returns>
        private IReadOnlyCollection <OrderAllocationDecorator> Project(
            Order order,
            IDictionary <string, List <OrderAllocation> > groupedAllocations)
        {
            if (!groupedAllocations.ContainsKey(order.OrderId))
            {
                var allocation = new OrderAllocation(order);
                var decorator  = new OrderAllocationDecorator(order, allocation);

                return(new[] { decorator });
            }

            var allocations          = groupedAllocations[order.OrderId];
            var decoratedAllocations =
                allocations?.Select(alloc => new OrderAllocationDecorator(order, alloc))?.ToList()
                ?? new List <OrderAllocationDecorator>();

            return(decoratedAllocations);
        }