[TestCase(-40.5, 12.5, 1508, .5, 161)]   // -506.25
        public void OrderCalculation(decimal currentHoldings, decimal perUnitMargin, decimal targetMargin, decimal lotSize, decimal expectedOrderSize)
        {
            var spy = SetupSecurity(currentHoldings, lotSize, perUnitMargin);

            var currentHoldingsMargin = _model.GetInitialMarginRequirement(spy, spy.Holdings.Quantity);

            // Determine the order size to get us to our target margin
            var orderSize = _model.GetAmountToOrder(spy, targetMargin, perUnitMargin, out _);

            Assert.AreEqual(expectedOrderSize, orderSize);

            // Determine the final margin and assert we have met our target condition
            var resultMargin = currentHoldingsMargin + (orderSize * perUnitMargin);

            Assert.IsTrue(Math.Abs(resultMargin) <= Math.Abs(targetMargin));
        }
Esempio n. 2
0
        [TestCase(-40.5, 12.5, 1508, .5, 161)]   // -506.25
        public void OrderCalculation(decimal currentHoldings, decimal perUnitMargin, decimal targetMargin, decimal lotSize, decimal expectedOrderSize)
        {
            var currentHoldingsMargin = currentHoldings * perUnitMargin;

            // Determine the order size to get us to our target margin
            var orderSize = BuyingPowerModel.GetAmountToOrder(currentHoldingsMargin, targetMargin, perUnitMargin, lotSize);

            Assert.AreEqual(expectedOrderSize, orderSize);

            // Determine the final margin and assert we have met our target condition
            var resultMargin = currentHoldingsMargin + (orderSize * perUnitMargin);

            Assert.IsTrue(Math.Abs(resultMargin) <= Math.Abs(targetMargin));
        }
Esempio n. 3
0
        [TestCase(-40.5, 12.5, 1508, .5, 120.5)] // -506.25

        public void OrderAdjustmentCalculation(decimal currentOrderSize, decimal perUnitMargin, decimal targetMargin, decimal lotSize, decimal expectedOrderSize)
        {
            var currentOrderMargin = currentOrderSize * perUnitMargin;

            // Determine the adjustment to get us to our target margin and apply it
            // Use our GetAmountToOrder for determining adjustment to reach the end goal
            var orderAdjustment =
                BuyingPowerModel.GetAmountToOrder(currentOrderMargin, targetMargin, perUnitMargin, lotSize);

            // Apply the change in margin
            var resultMargin = currentOrderMargin + (orderAdjustment * perUnitMargin);

            // Assert after our adjustment we have met our target condition
            Assert.IsTrue(Math.Abs(resultMargin) <= Math.Abs(targetMargin));

            // Verify our adjustment meets our expected order size
            var adjustOrderSize = currentOrderSize + orderAdjustment;

            Assert.AreEqual(expectedOrderSize, adjustOrderSize);
        }