public HasSufficientBuyingPowerForOrderResult HasSufficientBuyingPowerForOrder(
            HasSufficientBuyingPowerForOrderParameters parameters
            )
        {
            EnsureSecurityExists(parameters.Security);
            var expected = SecurityModel.HasSufficientBuyingPowerForOrder(parameters);

            if (reentry)
            {
                return(expected);
            }

            reentry = true;
            var actual = PositionGroupModel.HasSufficientBuyingPowerForOrder(
                new HasSufficientPositionGroupBuyingPowerForOrderParameters(
                    Portfolio,
                    new PositionGroup(PositionGroupModel, new Position(parameters.Security, parameters.Order.Quantity)),
                    parameters.Order
                    )
                );

            Assert.AreEqual(expected.IsSufficient, actual.IsSufficient,
                            $"{PositionGroupModel.GetType().Name}:{nameof(HasSufficientBuyingPowerForOrder)}: " +
                            $"ExpectedReason: {expected.Reason}{Environment.NewLine}" +
                            $"ActualReason: {actual.Reason}"
                            );

            Assert.AreEqual(expected.Reason, actual.Reason,
                            $"{PositionGroupModel.GetType().Name}:{nameof(HasSufficientBuyingPowerForOrder)}"
                            );

            reentry = false;
            return(expected);
        }