/// <summary> /// Gets the margin currently allocated to the specified holding /// </summary> /// <param name="parameters">An object containing the security</param> /// <returns>The maintenance margin required for the </returns> public override MaintenanceMargin GetMaintenanceMargin(PositionGroupMaintenanceMarginParameters parameters) { // SecurityPositionGroupBuyingPowerModel models buying power the same as non-grouped, so we can simply sum up // the reserved buying power via the security's model. We should really only ever get a single position here, // but it's not incorrect to ask the model for what the reserved buying power would be using default modeling var buyingPower = 0m; foreach (var position in parameters.PositionGroup) { var security = parameters.Portfolio.Securities[position.Symbol]; var result = security.BuyingPowerModel.GetMaintenanceMargin( MaintenanceMarginParameters.ForQuantityAtCurrentPrice(security, position.Quantity) ); buyingPower += result; } return(buyingPower); }
/// <summary> /// Gets the margin currently allocated to the specified holding /// </summary> /// <param name="parameters">An object containing the security</param> /// <returns>The maintenance margin required for the </returns> public abstract MaintenanceMargin GetMaintenanceMargin(PositionGroupMaintenanceMarginParameters parameters);