Overall Statistics
Total Trades
23
Average Win
0.10%
Average Loss
-0.02%
Compounding Annual Return
1.136%
Drawdown
0.100%
Expectancy
1.363
Net Profit
0.319%
Sharpe Ratio
2.442
Loss Rate
57%
Win Rate
43%
Profit-Loss Ratio
4.51
Alpha
0.012
Beta
-0.048
Annual Standard Deviation
0.005
Annual Variance
0
Information Ratio
-1.846
Tracking Error
0.005
Treynor Ratio
-0.237
Total Fees
$23.00
import numpy as np

### <summary>
### Basic template algorithm simply initializes the date range and cash. This is a skeleton
### framework you can use for designing an algorithm.
### </summary>
class Algorithm(QCAlgorithm):
    def Initialize(self):
        self.SetStartDate(2017,1,1)  
        self.SetEndDate(2017,4,5)    
        self.SetCash(100000)
        self.SetWarmUp(5)
        self.UniverseSettings.Resolution = Resolution.Daily
        self.AddUniverse(self.CoarseSelectionFunction)
        self.AddEquity('SPY', Resolution.Daily)
        self.Schedule.On(self.DateRules.MonthStart("SPY"), 
                         self.TimeRules.AfterMarketOpen("SPY", 60), 
                         Action(self.Rebalance))
        
        self.changes = None
                         
    def OnData(self, data):
        pass
    
    def OnSecuritiesChanged(self, changes):
        self.Debug("checking")
        self.changes = changes

    def CoarseSelectionFunction(self, coarse):
        CoarseWithFundamental = [x for x in coarse if x.HasFundamentalData]
        sortedByDollarVolume = sorted(CoarseWithFundamental, key=lambda x: x.DollarVolume, reverse=True)
        self.universe = [x.Symbol for x in sortedByDollarVolume[:20]]
        return self.universe

    
    def Rebalance(self):
        # liquidate securities that fell out of our universe
        for security in self.changes.RemovedSecurities:
            if security.Invested:
                self.Liquidate(security.Symbol)

        # invest in securities just added to our universe
        for security in self.changes.AddedSecurities:
            self.Debug(security.Price)
            if not security.Invested:
                self.MarketOrder(security.Symbol, 10)

        self.changes = None;