Overall Statistics
Total Trades
5878
Average Win
0.03%
Average Loss
-0.02%
Compounding Annual Return
-3.708%
Drawdown
5.200%
Expectancy
-0.040
Net Profit
-2.887%
Sharpe Ratio
-0.695
Loss Rate
53%
Win Rate
47%
Profit-Loss Ratio
1.03
Alpha
0.138
Beta
-10.269
Annual Standard Deviation
0.043
Annual Variance
0.002
Information Ratio
-1.074
Tracking Error
0.043
Treynor Ratio
0.003
Total Fees
$6065.31
import numpy as np
import datetime

class BasicTemplateAlgorithm(QCAlgorithm):

    def Initialize(self):

        self.SetStartDate(2013,1,1)  #Set Start Date
        self.SetEndDate(2013, 10,10)    #Set End Date
        self.SetCash(100000)           #Set Strategy Cash

        self.UniverseSettings.Resolution = Resolution.Minute
        self.AddUniverse(self.CoarseSelectionFunction)
        self.AddEquity("SPY",Resolution.Minute)

        self.__numberOfSymbols = 30
        self.w = 1.0/self.__numberOfSymbols

        self.entry_minute = 30
        self.exit_minute = 15
        self.bigStocks = None

        self.Schedule.On(self.DateRules.EveryDay("SPY"),
                         self.TimeRules.AfterMarketOpen("SPY",self.entry_minute),
                         Action(self.EnterPosition))
                         
        self.Schedule.On(self.DateRules.EveryDay("SPY"),
                         self.TimeRules.BeforeMarketClose("SPY",self.exit_minute),
                         Action(self.ExitPosition))

    def CoarseSelectionFunction(self, coarse):
        # self.Debug("coarse")
        selected = [x for x in coarse if (x.HasFundamentalData) and (float(x.Price) > 2)]
        sortedByDollarVolume = sorted(selected, key=lambda x: x.DollarVolume, reverse=True)
        self.bigStocks = [ x.Symbol for x in sortedByDollarVolume[:self.__numberOfSymbols] ]
        return self.bigStocks

    def EnterPosition(self):
        # self.Debug("Enter")

        self.entry_price = {}
        if self.bigStocks is None: return
        for stock in self.bigStocks:
            history = self.History(stock, self.entry_minute, Resolution.Minute)
            if 'close' in history.columns:
                delta = (history['close'][-1] - history['close'][0])/history['close'][-1]
                self.direction = np.sign(delta)
                if self.direction > 0:
                    self.SetHoldings(stock, self.direction * self.w)
                    self.entry_price[stock] = history['close'][-1]
        
    def ExitPosition(self):
        # self.Debug("end of day")
        for stock in self.entry_price:
            self.Liquidate(stock)

    def OnData(self, data):
        pass