Overall Statistics
Total Trades
996
Average Win
0%
Average Loss
0.00%
Compounding Annual Return
-5.588%
Drawdown
1.000%
Expectancy
-1
Net Profit
-1.050%
Sharpe Ratio
-31.951
Loss Rate
100%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.061
Beta
0.347
Annual Standard Deviation
0.002
Annual Variance
0
Information Ratio
-41.905
Tracking Error
0.002
Treynor Ratio
-0.157
Total Fees
$1049.88
import numpy as np
import datetime

class BasicTemplateAlgorithm(QCAlgorithm):

    def Initialize(self):

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

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

        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):
        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.entry_price = {}
        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.\n")
        for stock in self.entry_price:
            self.Liquidate(stock)

    def OnData(self, data):
        pass