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
-29.475
Tracking Error
0.04
Treynor Ratio
0
Total Fees
$0.00
class BootCampTask(QCAlgorithm):
    
    def Initialize(self):
        self.SetStartDate(2017, 10, 2)
        self.SetEndDate(2017, 10, 5)
        self.SetCash(100000)
        
        self.SetSecurityInitializer(self.CustomSecurityInitializer)
        
        tickers = ['TSLA', 'SPY']
        self.symbol_data_by_symbol = {}
        for ticker in tickers:
            symbol = self.AddEquity(ticker, Resolution.Minute).Symbol
            self.symbol_data_by_symbol[symbol] = SymbolData()
            #self.Consolidate(symbol, timedelta(minutes=30), self.OnDataConsolidated)

        #3. Create a scheduled event triggered at 13:30 calling the ClosePositions function
        #schedule_symbol = list(self.symbol_data_by_symbol.keys())[0]
        #self.Schedule.On(self.DateRules.EveryDay(schedule_symbol), self.TimeRules.At(13,30), self.ClosePositions)
        
    def CustomSecurityInitializer(self, security):
        security.SetDataNormalizationMode(DataNormalizationMode.Raw)
            
    def OnData(self, data):

        for symbol, symbol_data in self.symbol_data_by_symbol.items():
            if not data.ContainsKey(symbol) or data[symbol] is None:
                continue
            
            # 1. Plot the current price to "Data Chart" on series "Asset Price"
            self.Plot("Data Chart", str(symbol), data[symbol].Close)
            
            #if symbol_data_by_symbol.openingBar is None:
            #    continue
            
            #if not self.Portfolio.Invested:
            #    self.MarketOrder("SPY", 500)
            #    self.stopMarketTicket = self.StopMarketOrder("SPY", -500, 0.9 * self.Securities["SPY"].Close)
                
            #if data["TSLA"].Close > self.openingBar.High and not self.Portfolio.Invested:
            #    self.Debug("high of 30m bar: " + str(self.openingBar.High)) # print the high of the 30 minute bar
            #    self.Debug("opening price bar where signal triggered " + str(data["TSLA"].Open)) # print the opening of the first minute bar after the initial 30 minute bar
            #    #self.SetHoldings("TSLA", .5)  # invest half of cash into it
            #    self.MarketOrder("TSLA", 500) # orders 500 shares
            #    self.Debug("price paid avg: " + str(self.Portfolio["TSLA"].AveragePrice))


class SymbolData:
    def __init__(self):
        # Order ticket for our stop order, Datetime when stop order was last hit
        stopMarketTicket = None
        stopMarketOrderFillTime = datetime.min
        highestPrice = 0
        openingBar = None