/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace QuantConnect.Securities { /// /// Represents a security's model of buying power /// public interface IBuyingPowerModel { /// /// Gets the current leverage of the security /// /// The security to get leverage for /// The current leverage in the security decimal GetLeverage(Security security); /// /// Sets the leverage for the applicable securities, i.e, equities /// /// /// This is added to maintain backwards compatibility with the old margin/leverage system /// /// The security to set leverage for /// The new leverage void SetLeverage(Security security, decimal leverage); /// /// Gets the margin currently allocated to the specified holding /// /// An object containing the security and holdings quantity/cost/value /// The maintenance margin required for the provided holdings quantity/cost/value MaintenanceMargin GetMaintenanceMargin(MaintenanceMarginParameters parameters); /// /// The margin that must be held in order to increase the position by the provided quantity /// /// An object containing the security and quantity /// The initial margin required for the provided security and quantity InitialMargin GetInitialMarginRequirement(InitialMarginParameters parameters); /// /// Gets the total margin required to execute the specified order in units of the account currency including fees /// /// An object containing the portfolio, the security and the order /// The total margin in terms of the currency quoted in the order InitialMargin GetInitialMarginRequiredForOrder(InitialMarginRequiredForOrderParameters parameters); /// /// Check if there is sufficient buying power to execute this order. /// /// An object containing the portfolio, the security and the order /// Returns buying power information for an order HasSufficientBuyingPowerForOrderResult HasSufficientBuyingPowerForOrder(HasSufficientBuyingPowerForOrderParameters parameters); /// /// Get the maximum market order quantity to obtain a position with a given buying power percentage. /// Will not take into account free buying power. /// /// An object containing the portfolio, the security and the target signed buying power percentage /// Returns the maximum allowed market order quantity and if zero, also the reason GetMaximumOrderQuantityResult GetMaximumOrderQuantityForTargetBuyingPower(GetMaximumOrderQuantityForTargetBuyingPowerParameters parameters); /// /// Get the maximum market order quantity to obtain a delta in the buying power used by a security. /// The deltas sign defines the position side to apply it to, positive long, negative short. /// /// An object containing the portfolio, the security and the delta buying power /// Returns the maximum allowed market order quantity and if zero, also the reason /// Used by the margin call model to reduce the position by a delta percent. GetMaximumOrderQuantityResult GetMaximumOrderQuantityForDeltaBuyingPower(GetMaximumOrderQuantityForDeltaBuyingPowerParameters parameters); /// /// Gets the amount of buying power reserved to maintain the specified position /// /// A parameters object containing the security /// The reserved buying power in account currency ReservedBuyingPowerForPosition GetReservedBuyingPowerForPosition(ReservedBuyingPowerForPositionParameters parameters); /// /// Gets the buying power available for a trade /// /// A parameters object containing the algorithm's portfolio, security, and order direction /// The buying power available for the trade BuyingPower GetBuyingPower(BuyingPowerParameters parameters); } }