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 datetime import timedelta import fnmatch class IndicatorTest(QCAlgorithm): def Initialize(self): self.SetStartDate(2017,1,1) #Set Start Date self.SetEndDate(2017,1,5) #Set End Date self.SetCash(100000) #Set Strategy Cash self.symbols = [ Futures.Indices.SP500EMini, Futures.Metals.Gold, #"CL", #"CG", #"HG", #"XK", ] self.fast = {} self.slow = {} for symbol in self.symbols: future = self.AddFuture(symbol, Resolution.Minute) future.SetFilter(timedelta(0), timedelta(182)) # Note use of future.Symbol, if we use symbol string we get error regarding unsubbed asset(so use the object instead) self.fast[symbol] = SimpleMovingAverage(10) self.slow[symbol] = SimpleMovingAverage(100) self.chart_target = 'Strategy Equity' sPlot = Chart(self.chart_target) # Lets chart the info for i,symbol in enumerate(self.symbols): sPlot.AddSeries(Series('%s'%symbol, SeriesType.Line, 2+i)) # Label only sPlot.AddSeries(Series('Fast %s'%symbol, SeriesType.Line, 2+i)) sPlot.AddSeries(Series('Slow %s'%symbol, SeriesType.Line, 2+i)) sPlot.AddSeries(Series('Current %s'%symbol, SeriesType.Line, 2+i)) self.AddChart(sPlot) def OnData(self, data): # Used examples from here to access futures contracts # https://github.com/QuantConnect/Lean/blob/fb7d1994ff0b1859e7204ffedd609236a6fd4827/Algorithm.Python/BasicTemplateFuturesAlgorithm.py for chain in data.FutureChains: # Get contracts expiring no earlier than in 90 days contracts = filter(lambda x: x.Expiry > self.Time + timedelta(90), chain.Value) # if there is any contract, trade the front contract if len(contracts) == 0: continue front = sorted(contracts, key = lambda x: x.Expiry, reverse=True)[0] # get the corresponding underlying? has to be a better way to keep track... for base_symbol in self.symbols: if len(fnmatch.filter([str(front.Symbol)], str(base_symbol)+'*')) > 0: # match found, plot or log lookup_symbol = base_symbol self.fast[lookup_symbol].Update(self.Time, front.LastPrice) self.slow[lookup_symbol].Update(self.Time, front.LastPrice) #self.Log(str(lookup_symbol) + " : " + str(self.fast[lookup_symbol].Current.Value)) #self.Log(str(lookup_symbol) + " : " + str(self.slow[lookup_symbol].Current.Value)) self.Plot(self.chart_target,'Fast %s'%lookup_symbol, self.fast[lookup_symbol].Current.Value) self.Plot(self.chart_target,'Slow %s'%lookup_symbol, self.slow[lookup_symbol].Current.Value) self.Plot(self.chart_target,'Current %s'%lookup_symbol, front.LastPrice) break #self.previous = self.Time