Implements peer-review requests
1. `HistoricalReturnsAlphaModel`: 1. Adds lookback period for return calculation 2. Adds return-depend direction to insights 3. Refactors indicator history warm-up 2. `MeanVarianceOptimizationPortfolioConstructionModel`: 1. Adds lookback period for return calculation 2. Adds exception for null magnitude 3. Refactors indicator history warm-up 3. Other minor fixes: 1. Default target return was 2 instead of 0.02 (2%) 2. Proper removal of consolidator subscriptions
This commit is contained in:
@@ -58,7 +58,7 @@ class MeanVarianceOptimizationAlgorithm(QCAlgorithmFramework):
|
||||
|
||||
# set algorithm framework models
|
||||
self.UniverseSelection = ManualUniverseSelectionModel(symbols)
|
||||
self.SetAlpha(HistoricalReturnsAlphaModel(period = 63, resolution = Resolution.Daily))
|
||||
self.SetAlpha(HistoricalReturnsAlphaModel(resolution = Resolution.Daily))
|
||||
self.SetPortfolioConstruction(MeanVarianceOptimizationPortfolioConstructionModel(optimization_method = self.maximum_sharpe_ratio))
|
||||
self.Execution = ImmediateExecutionModel()
|
||||
self.RiskManagement = NullRiskManagementModel()
|
||||
@@ -72,7 +72,7 @@ class MeanVarianceOptimizationAlgorithm(QCAlgorithmFramework):
|
||||
'''Maximum Sharpe Ratio optimization method'''
|
||||
|
||||
# Objective function
|
||||
fun = lambda weights: self.sharpe_ratio(returns, weights)
|
||||
fun = lambda weights: -self.sharpe_ratio(returns, weights)
|
||||
|
||||
# Constraint #1: The weights can be negative, which means investors can short a security.
|
||||
constraints = [{'type': 'eq', 'fun': lambda w: np.sum(w) - 1}]
|
||||
@@ -95,4 +95,4 @@ class MeanVarianceOptimizationAlgorithm(QCAlgorithmFramework):
|
||||
def sharpe_ratio(self, returns, weights):
|
||||
annual_return = np.dot(np.matrix(returns.mean()), np.matrix(weights).T).item()
|
||||
annual_volatility = np.sqrt(np.dot(weights.T, np.dot(returns.cov(), weights)))
|
||||
return -annual_return/annual_volatility
|
||||
return annual_return/annual_volatility
|
||||
Reference in New Issue
Block a user