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))