Skip to content
All library documents

Combining Portfolio Drawdown and Security Profit Risk Models

Article Strategy library · Author: QuantConnect

Summary

This example demonstrates how risk management models can be added to a modular algorithmic trading framework. It configures a portfolio drawdown limit and a per-security unrealized profit threshold, showing both a composite model that combines the rules and separate calls that register them with the algorithm.

The surrounding template supplies an equity universe, a constant upward price insight, equal-weight portfolio construction, and immediate execution. These components illustrate where risk controls fit within a framework pipeline; they do not describe an independently developed trading signal. The example is a brief integration demonstration, not an evaluation of the controls. It gives no backtest results, and the selected thresholds and short date range should not be taken as evidence that the setup limits losses or improves returns in other markets or conditions.

Key ideas

  • Risk models can be attached to an algorithm through its framework interface.
  • A composite model can group portfolio-level and per-security risk rules.
  • The example combines a portfolio drawdown threshold with a security unrealized profit threshold.
  • The document demonstrates configuration but reports no performance or risk outcomes.

Tags

Full text
# AddRiskManagementAlgorithm


# AddRiskManagementAlgorithm









Basic template framework algorithm uses framework components to define the algorithm.

Test algorithm using 'QCAlgorithm.add_risk_management(IRiskManagementModel)'

## Source (Apache-2.0)

```python
# 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.

from AlgorithmImports import *

### <summary>
### Test algorithm using 'QCAlgorithm.add_risk_management(IRiskManagementModel)'
### </summary>
class AddRiskManagementAlgorithm(QCAlgorithm):
    '''Basic template framework algorithm uses framework components to define the algorithm.'''

    def initialize(self):
        ''' Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
        self.universe_settings.resolution = Resolution.MINUTE

        self.set_start_date(2013,10,7)   #Set Start Date
        self.set_end_date(2013,10,11)    #Set End Date
        self.set_cash(100000)           #Set Strategy Cash

        symbols = [ Symbol.create("SPY", SecurityType.EQUITY, Market.USA) ]

        # set algorithm framework models
        self.set_universe_selection(ManualUniverseSelectionModel(symbols))
        self.set_alpha(ConstantAlphaModel(InsightType.PRICE, InsightDirection.UP, timedelta(minutes = 20), 0.025, None))
        self.set_portfolio_construction(EqualWeightingPortfolioConstructionModel())
        self.set_execution(ImmediateExecutionModel())

        # Both setting methods should work
        risk_model = CompositeRiskManagementModel(MaximumDrawdownPercentPortfolio(0.02))
        risk_model.add_risk_management(MaximumUnrealizedProfitPercentPerSecurity(0.01))

        self.set_risk_management(MaximumDrawdownPercentPortfolio(0.02))
        self.add_risk_management(MaximumUnrealizedProfitPercentPerSecurity(0.01))


```

Shown in full with attribution under the source's licence. Licence: Apache-2.0

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.