Combining Per-Security Profit and Drawdown Risk Limits
Summary
This framework example demonstrates combining multiple risk controls in one portfolio risk-management model. It applies a maximum unrealized profit percentage rule and a maximum drawdown percentage rule to each security, showing how separate controls can be supplied together rather than configured as a single rule.
The surrounding algorithm uses a manually selected US-listed ETF, a constant upward price insight, equal-weight portfolio construction, and immediate execution. These components provide context for where the composite model sits in a trading framework; the example is not a standalone entry strategy. The code includes a brief historical setup, but reports no performance results or evaluation of how the two controls interact. It therefore illustrates configuration and composition, not evidence that the thresholds improve returns or limit losses under all market conditions.
Key ideas
- A composite risk model can apply multiple risk controls in the same algorithm.
- The example combines per-security limits on unrealized profit and drawdown.
- Risk management is integrated alongside universe selection, signal generation, portfolio construction, and execution.
- The example shows framework usage but provides no performance assessment of its controls.
Tags
Full text
# CompositeRiskManagementModelFrameworkAlgorithm
# CompositeRiskManagementModelFrameworkAlgorithm
Show cases how to use the CompositeRiskManagementModel.
Show cases how to use the CompositeRiskManagementModel.
## 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>
### Show cases how to use the CompositeRiskManagementModel.
### </summary>
class CompositeRiskManagementModelFrameworkAlgorithm(QCAlgorithm):
'''Show cases how to use the CompositeRiskManagementModel.'''
def initialize(self):
# Set requested data resolution
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
# set algorithm framework models
self.set_universe_selection(ManualUniverseSelectionModel([Symbol.create("SPY", SecurityType.EQUITY, Market.USA)]))
self.set_alpha(ConstantAlphaModel(InsightType.PRICE, InsightDirection.UP, timedelta(minutes = 20), 0.025, None))
self.set_portfolio_construction(EqualWeightingPortfolioConstructionModel())
self.set_execution(ImmediateExecutionModel())
# define risk management model as a composite of several risk management models
self.set_risk_management(CompositeRiskManagementModel(
MaximumUnrealizedProfitPercentPerSecurity(0.01),
MaximumDrawdownPercentPerSecurity(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.