Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
0
Tracking Error
0
Treynor Ratio
0
Total Fees
$0.00
import numpy as np
import decimal as d

class BasicTemplateAlgorithm(QCAlgorithm):
    
    def Initialize(self):
        self.SetStartDate(2018,4,6) #(2013,1,1)
        self.SetEndDate(2018,4,10)

        self.backtestSymbolsPerDay = {}
        self.current_universe = []

        self.UniverseSettings.Resolution = Resolution.Hour;
        self.AddUniverse("my-dropbox-universe", self.universeGetter)
        
        self.Debug('End Init')


    def universeGetter(self, date):
        self.Debug('Begin UniverseGetter')
        
        # handle live mode file format
        if self.LiveMode:
            # work on this later
            return self.current_universe

        # backtest - first cache the entire file
        #if len(self.backtestSymbolsPerDay) == 0:
        #    str = self.Download("https://www.dropbox.com/s/rmiiktz0ntpff3a/daily-stock-picker-backtest.csv?dl=1")
        #    for line in str.splitlines():
        #        data = line.split(',')
        #        self.backtestSymbolsPerDay[data[0]] = data[1:]
        # Dummmy this up for now
        if len(self.backtestSymbolsPerDay) == 0:
            self.backtestSymbolsPerDay['20180406'] = ['ABMD', 'BZUN', 'CRM', 'NOW']
            self.backtestSymbolsPerDay['20180413'] = ['PAYC', 'ULTI', 'CRM', 'ADBE']
            self.backtestSymbolsPerDay['20180420'] = ['PAYC', 'ADBE', 'CRM', 'RHT']
            self.backtestSymbolsPerDay['20180427'] = ['PAYC', 'ADBE', 'RHT', 'BOOT']

        index = date.strftime("%Y%m%d")
        #self.Debug(index)
        self.current_universe = self.backtestSymbolsPerDay.get(index, self.current_universe)

        self.Debug('End UniverseGetter')
        return self.current_universe

    def OnData(self, slice):
        self.Debug('Begin OnData ' +'  '+str(self.Time))

        if slice.Bars.Count == 0: return
        if self.changes == None: return

        # liquidate positions
        for kvp in self.Portfolio:
            security_holding = kvp.Value 
            if security_holding.Quantity > 0:
                self.SetHoldings(secuity_holding.Symbol.Value, 0)

        percentage = 1 / d.Decimal(len(self.current_universe))
        for sym in self.current_universe:
            #self.Debug(sym+'  '+str(percentage))
            self.SetHoldings(sym, percentage)

        # reset changes
        self.changes = None
        
        self.Debug('end OnData ' +'  '+str(self.Time))
        
    def OnSecuritiesChanged(self, changes):
        self.Debug('Begin OnSecuritiesChanged')
        
        self.changes = changes
        self.Debug('End OnSecuritiesChanged')
        
    def OnEndOfAlgorithm(self):
        self.Log('End captured')
        for sym in self.current_universe:
            self.Log(sym)