Overall Statistics
Total Trades
353
Average Win
2.96%
Average Loss
-0.55%
Compounding Annual Return
-9.995%
Drawdown
23.300%
Expectancy
0.093
Net Profit
-2.450%
Sharpe Ratio
0.241
Probabilistic Sharpe Ratio
35.257%
Loss Rate
83%
Win Rate
17%
Profit-Loss Ratio
5.41
Alpha
-0.41
Beta
-1.187
Annual Standard Deviation
0.748
Annual Variance
0.559
Information Ratio
0.529
Tracking Error
1.283
Treynor Ratio
-0.152
Total Fees
$814.55
import decimal as d
from datetime import timedelta
import numpy
from datetime import datetime

class MovingAverageCrossAlgorithm(QCAlgorithm):

    def Initialize(self):
        '''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''

        self.SetStartDate(2020, 1, 1)    #Set Start Date
        self.SetEndDate(2020, 3, 26)      #Set End Date
        self.SetCash(60000)             #Set Strategy Cash
         
        self.AddEquity("SPY", Resolution.Minute).Symbol
        self.AddEquity("SPXS", Resolution.Minute).Symbol
        self.AddEquity("SDOW", Resolution.Minute).Symbol
        self.AddEquity("EDZ", Resolution.Minute).Symbol
        self.AddEquity("UDOW", Resolution.Minute).Symbol
        self.AddEquity("TQQQ", Resolution.Minute).Symbol
        self.AddEquity("SPXL", Resolution.Minute).Symbol
        self.AddEquity("DIA", Resolution.Minute).Symbol
        self.AddEquity("VOO", Resolution.Minute).Symbol
    
        #Simple moving average
        self.sma = {}
        equity = self.AddEquity("SPY")
        self.sma[equity.Symbol] = self.SMA(equity.Symbol, 60, Resolution.Minute)
        
        self.smas = {}
        equity = self.AddEquity("SPY")
        self.smas[equity.Symbol] = self.SMA(equity.Symbol, 100, Resolution.Minute)


        self.fastest = self.TEMA("DIA", 15, Resolution.Minute)
        # create a 13 day exponential moving average
        self.fast = self.EMA("VOO", 5, Resolution.Daily)

        # create a 48 day exponential moving average
        self.slow = self.EMA("VOO", 10, Resolution.Daily)
 
        self.SetWarmUp(timedelta(days=20)) 
        
        self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.AfterMarketOpen("SPY", 1), self.EveryDayAfterMarketOpen)
        

    def EveryDayAfterMarketOpen(self): 
        
        # wait for our slow ema to fully initialize
        if self.IsWarmingUp: return 
        
        # define a small tolerance on our checks to avoid bouncing
        tolerance = 0.00015
        
        if self.fast.Current.Value > self.slow.Current.Value:
            # if the fast is greater than the slow, we'll go long
                self.SetHoldings("SPXL", .3, True)
                self.SetHoldings("TQQQ", .5, True)
                self.SetHoldings("UDOW", .2, True)
                print("bull")

        if self.slow.Current.Value > self.fast.Current.Value:
                self.SetHoldings("SPXS", .3, True)
                self.SetHoldings("SDOW", .2, True)
                self.SetHoldings("EDZ", .5, True)
                print("bear")