Files
quantconnect--lean/Common/Securities/BrokerageModelSecurityInitializer.cs
T
Gerardo Salazar 3e7af17e02 Implements Easy To Borrow Reality Modeling (WIP) (#5159)
* Creates IShortableProvider interface + interface impls

  * This is the foundational work for the addition of the shortable stocks
    feature for backtesting and live trading. Note that the QCAlgorithm
    API and the backend transaction handling will be implemented
    separately.

* temp; work on preorder checks

* improve checks

* tmep

* Enforces ETB checks at BrokerageTransactionHandler

  * Adds ETB Shortable Provider to QCAlgorithm and IAlgorithm
  * Removes ETB check from PreOrderChecksImpl
  * Removes outdated test, new test to come soon for relevant class

* Work in progress commit, pushing for review.

  * Adds new regression algorithm (WIP)
  * Enhances ShortableProviderOrdersRejectedRegressionAlgorithm
  * Adds new methods to QCAlgorithm
  * Move IShortableProvider to have BrokerageModel own it
  * Comments updates
  * Adds new properties to Equity Security for shortable

  * Fixes bug where retrieving open order quantities would aggregate the
    submitted order quantity rather than the remaining order quantity for
    open orders.

  * Fixes bug where quantity of zero would result in a
    false positive in QCAlgorithm.Shortable(...)

  * Code refactoring and comments updates

Co-authored-by: Jared <jaredbroad@gmail.com>
2021-01-14 13:33:44 -08:00

72 lines
3.2 KiB
C#

/*
* 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.
*
*/
using QuantConnect.Brokerages;
namespace QuantConnect.Securities
{
/// <summary>
/// Provides an implementation of <see cref="ISecurityInitializer"/> that initializes a security
/// by settings the <see cref="Security.FillModel"/>, <see cref="Security.FeeModel"/>,
/// <see cref="Security.SlippageModel"/>, and the <see cref="Security.SettlementModel"/> properties
/// </summary>
public class BrokerageModelSecurityInitializer : ISecurityInitializer
{
private readonly IBrokerageModel _brokerageModel;
private readonly ISecuritySeeder _securitySeeder;
/// <summary>
/// Initializes a new instance of the <see cref="BrokerageModelSecurityInitializer"/> class
/// for the specified algorithm
/// </summary>
public BrokerageModelSecurityInitializer()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="BrokerageModelSecurityInitializer"/> class
/// for the specified algorithm
/// </summary>
/// <param name="brokerageModel">The brokerage model used to initialize the security models</param>
/// <param name="securitySeeder">An <see cref="ISecuritySeeder"/> used to seed the initial price of the security</param>
public BrokerageModelSecurityInitializer(IBrokerageModel brokerageModel, ISecuritySeeder securitySeeder)
{
_brokerageModel = brokerageModel;
_securitySeeder = securitySeeder;
}
/// <summary>
/// Initializes the specified security by setting up the models
/// </summary>
/// <param name="security">The security to be initialized</param>
public virtual void Initialize(Security security)
{
// Sets the security models
security.FillModel = _brokerageModel.GetFillModel(security);
security.FeeModel = _brokerageModel.GetFeeModel(security);
security.SlippageModel = _brokerageModel.GetSlippageModel(security);
security.SettlementModel = _brokerageModel.GetSettlementModel(security);
security.BuyingPowerModel = _brokerageModel.GetBuyingPowerModel(security);
// Sets the leverage after the buying power model. Otherwise we would set the leverage of the default model.
security.SetLeverage(_brokerageModel.GetLeverage(security));
security.SetShortableProvider(_brokerageModel.GetShortableProvider());
_securitySeeder.SeedSecurity(security);
}
}
}