Overall Statistics |
Total Trades 2378 Average Win 2.54% Average Loss -1.07% Compounding Annual Return 164.109% Drawdown 26.000% Expectancy 0.547 Net Profit 65215.521% Sharpe Ratio 2.63 Loss Rate 54% Win Rate 46% Profit-Loss Ratio 2.38 Alpha 0.732 Beta 0.319 Annual Standard Deviation 0.324 Annual Variance 0.105 Information Ratio 0.945 Tracking Error 0.499 Treynor Ratio 2.678 Total Fees $727298.46 |
import numpy as np from clr import AddReference AddReference("System") AddReference("NodaTime") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Indicators") AddReference("QuantConnect.Common") from System import * from NodaTime import DateTimeZone from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Brokerages import * from QuantConnect.Data.Market import * class BasicTemplateAlgorithm(QCAlgorithm): def Initialize(self): # Set the cash we'd like to use for our backtest # This is ignored in live trading self.SetCash(37000) # Start and end dates for the backtest. # These are ignored in live trading. self.SetStartDate(2011,06,8) self.SetEndDate(2018,2,6) #Assets predetermined #self.uvxy = self.AddEquity("UVXY", Resolution.Hour).Symbol self.svxy = self.AddEquity("SVXY", Resolution.Hour, None, True, 1, True).Symbol self.spy = self.AddEquity("SPY", Resolution.Minute, None, True, 1, True).Symbol # Indicators self.emaBig = self.EMA("SVXY", 5, Resolution.Hour) self.emaSmall = self.EMA("SVXY", 2, Resolution.Hour) # Schedules self.Schedule.On(self.DateRules.EveryDay("SVXY"), self.TimeRules.At(16, 1), Action(self.EveryDayBeforeMarketClose)) self.Schedule.On(self.DateRules.EveryDay("SVXY"), self.TimeRules.At(9, 59), Action(self.EveryDayAfterMarketOpen)) self.Schedule.On(self.DateRules.On(2018, 1, 22), self.TimeRules.At(13, 0), Action(self.SpecificTime)) # Timers self.w = 1 # Set benchmark self.SetBenchmark("SVXY") # Get warmup data so that the Algorithm can start trading self.SetWarmUp(5) # Counters self.case1 = 0 self.case2 = 0 def OnData(self, data): if self.w == 0: if not self.Portfolio.Invested: if self.emaBig < self.emaSmall: self.case1 += 1 self.SetHoldings(self.svxy, 0.85) else: if self.emaBig > self.emaSmall: self.case2 += 1 self.SetHoldings(self.svxy, 0) def EveryDayBeforeMarketClose(self): if self.w == 0: self.w = 1 #self.Log('Market Close') def EveryDayAfterMarketOpen(self): self.w = 0 #self.Log('Market Open') def SpecificTime(self): self.Log('Case 1: {}'.format(self.case1)) self.Log('Case 2: {}'.format(self.case2))