Overall Statistics
Total Trades
21
Average Win
0.16%
Average Loss
-0.07%
Compounding Annual Return
-16.530%
Drawdown
1.200%
Expectancy
-0.714
Net Profit
-0.527%
Sharpe Ratio
-4.111
Loss Rate
92%
Win Rate
8%
Profit-Loss Ratio
2.43
Alpha
-0.005
Beta
-9.298
Annual Standard Deviation
0.036
Annual Variance
0.001
Information Ratio
-4.523
Tracking Error
0.036
Treynor Ratio
0.016
Total Fees
$28.06
import numpy as np
from datetime import timedelta

class BasicTemplateAlgorithm(QCAlgorithm):
    
    def Initialize(self):
        self.SetStartDate(2018,7, 10)  #Set Start Date
        self.SetEndDate(2018,7,20)    #Set End Date
        self.SetCash(100000)           #Set Strategy Cash
        self.AddEquity("SPY", Resolution.Minute)
        consolidator = TradeBarConsolidator(15)
        consolidator2 = TradeBarConsolidator(60)
        self._sma = SimpleMovingAverage(60)
        self._ema = ExponentialMovingAverage(15)
        self.RegisterIndicator("SPY", self._sma, consolidator)
        self.RegisterIndicator("SPY", self._ema, consolidator2)
        self.SubscriptionManager.AddConsolidator("SPY", consolidator)
        self.SubscriptionManager.AddConsolidator("SPY", consolidator2)
        self.Schedule.On(self.DateRules.EveryDay(),self.TimeRules.Every(timedelta(minutes=15)), self.Trade)

    def Trade(self):
        if self._ema.IsReady and self._sma.IsReady:
            if self._ema.Current.Value > self._sma.Current.Value:
                self
                if(self.Portfolio["SPY"].IsShort == True):
                    self.Liquidate()
                self.SetHoldings("SPY",1)
            elif self._ema.Current.Value < self._sma.Current.Value:
                self.Log("short")
                if(self.Portfolio["SPY"].IsLong == True):
                    self.Liquidate()
                self.SetHoldings("SPY",-1)

    def OnData(self, data):
        pass