Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
from Alphas.EmaCrossAlphaModel import EmaCrossAlphaModel from Execution.ImmediateExecutionModel import ImmediateExecutionModel from Risk.NullRiskManagementModel import NullRiskManagementModel from Selection.QC500UniverseSelectionModel import QC500UniverseSelectionModel from SlopeBasedEquityMomentumAlphaModel import SlopeBasedEquityMomentumAlphaModel class BasicTemplateFrameworkAlgorithm(QCAlgorithmFramework): def Initialize(self): # Set requested data resolution self.UniverseSettings.Resolution = Resolution.Daily self.SetStartDate(2019, 3, 4) #Set Start Date self.SetEndDate(2019, 3, 7) #Set End Date self.SetCash(100000) #Set Strategy Cash # selection will run on mon/tues/thurs at 00:00/06:00/12:00/18:00 self.SetUniverseSelection(QC500UniverseSelectionModel()) self.SetAlpha(SlopeBasedEquityMomentumAlphaModel()) self.SetPortfolioConstruction(NullPortfolioConstructionModel()) self.SetExecution(ImmediateExecutionModel()) self.SetRiskManagement(NullRiskManagementModel()) def OnOrderEvent(self, orderEvent): if orderEvent.Status == OrderStatus.Filled: # self.Debug("Purchased Stock: {0}".format(orderEvent.Symbol)) pass
# 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 clr import AddReference AddReference("QuantConnect.Common") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Algorithm.Framework") AddReference("QuantConnect.Indicators") from QuantConnect import * from QuantConnect.Indicators import * from QuantConnect.Algorithm import * from QuantConnect.Algorithm.Framework import * from QuantConnect.Algorithm.Framework.Alphas import * class SlopeBasedEquityMomentumAlphaModel(AlphaModel): '''Defines a custom alpha model that uses MACD crossovers. The MACD signal line is used to generate up/down insights if it's stronger than the bounce threshold. If the MACD signal is within the bounce threshold then a flat price insight is returned.''' def __init__(self, shortTermMomentumWindow = 60, longTermMomentumWindow = 90, minimumMomentum = 60, indexAverageWindow = 100, resolution = Resolution.Daily): ''' Initializes a new instance of the MacdAlphaModel class Args: fastPeriod: The MACD fast period slowPeriod: The MACD slow period</param> signalPeriod: The smoothing period for the MACD signal movingAverageType: The type of moving average to use in the MACD''' self.shortTermMomentumWindow = shortTermMomentumWindow, self.longTermMomentumWindow = longTermMomentumWindow, self.minimumMomentum = minimumMomentum, self.indexAverageWindow = indexAverageWindow, self.resolution = resolution self.symbolData = {} resolutionString = Extensions.GetEnumString(resolution, Resolution) def slope(ts): ''' Args: Price time series. Returns: Annualized exponential regression slope, multipl ''' x = np.arange(len(ts)) log_ts = np.log(ts) slope, intercept, r_value, p_value, std_err = stats.linregress(x, log_ts) annualized_slope = (np.power(np.exp(slope), 250) - 1) * 100 return annualized_slope * (r_value ** 2) def Update(self, algorithm, data): ''' Determines an insight for each security based on two annualized slopes Args: algorithm: The algorithm instance data: The new data available Returns: The new insights generated''' insights = [] #shortTermBars = GetDailyClosesForAllSymbolsInUniverse(self.shortTermMomentumWindow,self.resolution) #longTermBars = GetDailyClosesForAllSymbolsInUniverse(self.longTermMomentumWindow,self.resolution) #... return insights