[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)); }
[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)); }
[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); }