/// <summary> /// Gets the total margin required to execute the specified order in units of the account currency including fees /// </summary> /// <param name="parameters">An object containing the portfolio, the security and the order</param> /// <returns>The total margin in terms of the currency quoted in the order</returns> protected virtual decimal GetInitialMarginRequiredForOrder( InitialMarginRequiredForOrderParameters parameters) { //Get the order value from the non-abstract order classes (MarketOrder, LimitOrder, StopMarketOrder) //Market order is approximated from the current security price and set in the MarketOrder Method in QCAlgorithm. var orderFees = parameters.Security.FeeModel.GetOrderFee( new OrderFeeParameters(parameters.Security, parameters.Order)); var orderValue = parameters.Order.GetValue(parameters.Security) * GetInitialMarginRequirement(parameters.Security); return(orderValue + Math.Sign(orderValue) * orderFees.Value.Amount); }
/// <summary> /// Gets the total margin required to execute the specified order in units of the account currency including fees /// </summary> /// <param name="parameters">An object containing the portfolio, the security and the order</param> /// <returns>The total margin in terms of the currency quoted in the order</returns> protected virtual decimal GetInitialMarginRequiredForOrder( InitialMarginRequiredForOrderParameters parameters) { //Get the order value from the non-abstract order classes (MarketOrder, LimitOrder, StopMarketOrder) //Market order is approximated from the current security price and set in the MarketOrder Method in QCAlgorithm. var fees = parameters.Security.FeeModel.GetOrderFee( new OrderFeeParameters(parameters.Security, parameters.Order)).Value; var feesInAccountCurrency = parameters.CurrencyConverter. ConvertToAccountCurrency(fees).Amount; var orderMargin = GetInitialMarginRequirement(parameters.Security, parameters.Order.Quantity); return(orderMargin + Math.Sign(orderMargin) * feesInAccountCurrency); }