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
Probabilistic 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
9.002
Tracking Error
0.041
Treynor Ratio
0
Total Fees
$0.00
class TimeLimitProblem_002(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2016, 12, 29)  # Set Start Date
        self.SetEndDate(2016, 12, 30)
        self.SetCash(100000)  # Set Strategy Cash
        # self.AddEquity("SPY", Resolution.Minute)

        self.__dataDict = {}

        self.UniverseSettings.Resolution = Resolution.Hour
        self.AddUniverse(self.CoarseSelect, self.FineSelect)


    def OnData(self, data):
        '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
            Arguments:
                data: Slice object keyed by symbol containing the stock data
        '''

        # if not self.Portfolio.Invested:
        #    self.SetHoldings("SPY", 1)


    def CoarseSelect(self, coarse):
        self.Debug("CoarseSelect()")
        symbols = []
        
        hasCoarse = [c for c in coarse if c.HasFundamentalData]
        top50ByDVol = sorted(hasCoarse, key=lambda x: x.DollarVolume, reverse=True)[:50]
        
        for c in top50ByDVol:
            symbols.append(c.Symbol)
            # self.History(c.Symbol, 150, Resolution.Daily)
            if c.Symbol not in self.__dataDict:
                try:
                    hist = self.History(c.Symbol, 126, Resolution.Daily)
                    self.__dataDict[c.Symbol] = SMAGroups(self, c.Symbol)
                    self.__dataDict[c.Symbol].UpdateHist(hist, c.Symbol)
                except:
                    continue
            else:
                self.__dataDict[c.Symbol].Update(c.EndTime, c.AdjustedPrice)

        self.Debug("CoarseSelect() total: {}".format(len(symbols)))
        return symbols

    def FineSelect(self, fine):
        self.Debug("FineSelect()")

        symbols = [f.Symbol for f in fine]
        pickSize = 10
        self.Debug("FineSelect() total: {}".format(len(symbols[0:pickSize])))
        return symbols[0:pickSize]

class SMAGroups(object):
    def __init__(self, algorithm, symbol):
        self.__sma001 = SimpleMovingAverage(10)
        self.__sma002 = SimpleMovingAverage(20)
        self.__sma003 = SimpleMovingAverage(126)

    def UpdateHist(self, hist, symbol):
        for index, row in hist.loc[symbol].iterrows():
            self.__sma001.Update(index, row["close"])
            self.__sma002.Update(index, row["close"])
            self.__sma003.Update(index, row["close"])

    def Update(self, endTime, adjustedPrice):
        self.__sma001.Update(endTime, adjustedPrice)
        self.__sma002.Update(endTime, adjustedPrice)
        self.__sma003.Update(endTime, adjustedPrice)