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 Probabilistic 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 -3.758 Tracking Error 0.151 Treynor Ratio 0 Total Fees $0.00 |
import pickle import numpy as np from collections import deque class TachyonResistanceEngine(QCAlgorithm): def Initialize(self): self.KEY = 'futures' useStoredData = True endDay = 5 # uncomment below and run once, then set useStoredData = True # self.SetStartDate(2020, 9, 15) # self.SetEndDate(2020, 10, endDay) # comment out below when running with the two lines above self.SetStartDate(2020, 10, endDay+1) self.SetCash(100000) # Set Strategy Cash self.gc = self.AddFuture(Futures.Metals.Gold) self.gc.SetFilter(0, 365) self.x = True futures = [self.gc] period = 10 if self.ObjectStore.ContainsKey(self.KEY) and useStoredData: byteData = self.ObjectStore.ReadBytes(self.KEY) self.futures_data = pickle.loads(bytearray(byteData)) else: self.futures_data = {} for future in futures: symbolString = future.Symbol.ID.Symbol # we use a deque because they are picklable unlike RW's self.futures_data[symbolString] = deque(maxlen=period) self.curr_day = -1 def OnEndOfAlgorithm(self): self.ObjectStore.SaveBytes(self.KEY, pickle.dumps(self.futures_data)) def OnData(self, data): if self.curr_day == self.Time.day: return self.curr_day = self.Time.day for contracts in data.FutureChains.Values: sorted_contracts = sorted(contracts, key=lambda c: c.Expiry, reverse = True) if (len(sorted_contracts) == 0): continue front_contract = sorted_contracts[0] self.futures_data[front_contract.Symbol.ID.Symbol].append(front_contract.LastPrice) for symbol, data in self.futures_data.items(): if len(data) == data.maxlen: self.Plot('Variance', symbol, np.var(data))