| Overall Statistics |
|
Total Trades 249413 Average Win 0.00% Average Loss 0.00% Compounding Annual Return 14.932% Drawdown 33.300% Expectancy 0.855 Net Profit 287.414% Sharpe Ratio 0.951 Probabilistic Sharpe Ratio 36.017% Loss Rate 24% Win Rate 76% Profit-Loss Ratio 1.43 Alpha -0.006 Beta 0.984 Annual Standard Deviation 0.15 Annual Variance 0.022 Information Ratio -0.545 Tracking Error 0.015 Treynor Ratio 0.145 Total Fees $422694.79 Estimated Strategy Capacity $0 Lowest Capacity Asset BBK R735QTJ8XC9X |
# Creating our own Index Fund original
class IndexInvesting(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2012, 1, 1) # Set Start Date
self.InitCash = 100000000
self.SetCash(self.InitCash)
self.SetBenchmark("SPY")
self.initBenchmarkPrice = None
self.UniverseSettings.Resolution = Resolution.Hour
self.spy = self.AddEquity("SPY", Resolution.Hour).Symbol
self.AddUniverse(self.Universe.ETF(self.spy, self.UniverseSettings, self.ETFConstituentsFilter))
self.weights = {}
self.Schedule.On(
self.DateRules.WeekStart(self.spy),
self.TimeRules.AfterMarketOpen(self.spy, 1),
self.Rebalance)
def ETFConstituentsFilter(self, constituents):
self.weights = {c.Symbol: c.Weight for c in constituents}
return list(self.weights.keys())
def Rebalance(self):
for symbol, weight in self.weights.items():
if symbol in self.ActiveSecurities:
self.SetHoldings(symbol, weight) # Market cap weighted
# self.SetHoldings(symbol, 1 / len(self.weights)) # Equally weighted
def OnSecuritiesChanged(self, changes):
for security in changes.RemovedSecurities:
if security.Invested:
self.Liquidate(security.Symbol, 'No longer in universe')
if security.Symbol in self.weights.keys(): del self.weights[security.Symbol]
def UpdateBenchmarkValue(self):
if self.initBenchmarkPrice is None:
self.initBenchmarkCash = self.InitCash
self.initBenchmarkPrice = self.Benchmark.Evaluate(self.Time)
self.benchmarkValue = self.initBenchmarkCash
else:
currentBenchmarkPrice = self.Benchmark.Evaluate(self.Time)
self.benchmarkValue = (currentBenchmarkPrice / self.initBenchmarkPrice) * self.initBenchmarkCash
def OnEndOfDay(self, symbol):
self.UpdateBenchmarkValue()
self.Plot('Strategy Equity', "SPY", self.benchmarkValue)