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
-14.276
Tracking Error
0.047
Treynor Ratio
0
Total Fees
$0.00
class BootCampTask(QCAlgorithm):
    
    # Order ticket for our stop order, Datetime when stop order was last hit
    stopMarketTicket = None
    stopMarketOrderFillTime = datetime.min
    highestTSLAPrice = 0
        
    def Initialize(self):
        self.SetStartDate(2017, 10, 2)
        self.SetEndDate(2017, 10, 6)
        self.SetCash(100000)
        self.SetSecurityInitializer(self.CustomSecurityInitializer)
        
        tickers = ['SPY', 'TSLA']
        self.symbol_data_by_symbol = {}
        for ticker in tickers:
            openingBar = None 
            symbol = self.AddEquity(ticker, Resolution.Minute).Symbol
            self.symbol_data_by_symbol[symbol] = SymbolData()
            self.Consolidate(symbol, timedelta(minutes=30), self.OnDataConsolidated)
            #self.Schedule.On(self.DateRules.EveryDay(symbol), self.TimeRules.At(13,30), self.ClosePositions)
         
                  
        #3. Create a scheduled event triggered at 13:30 calling the ClosePositions function

    def CustomSecurityInitializer(self, security):
        security.SetDataNormalizationMode(DataNormalizationMode.Raw)
            
    #def OnData(self, data):
    #    
    #    if self.openingBar is None:
    #        return
    #    for symbol, symbol_data in self.symbol_data_by_symbol.items():
    #        if not data.ContainsKey(symbol) or data[symbol] is None:
    #            continue
    #              
    #        if data[symbol].Close > self.openingBar.High and not self.Portfolio.Invested:      
    #            quantity = self.CalculateOrderQuantity(symbol, 0.4)
    #            self.MarketOrder(symbol, quantity) # orders 40% of portfolio
    #            self.stopMarketTicket = self.StopMarketOrder(symbol, -500, 0.95 * self.Securities[symbol].Close)
    #        
    #        if self.Portfolio.Invested and data[symbol].Close > self.highestTSLAPrice:
    #            self.highestTSLAPrice = self.Securities[symbol].Close
    #            updateFields = UpdateOrderFields()
    #            updateFields.StopPrice = self.highestTSLAPrice * 0.95
    #            self.stopMarketTicket.Update(updateFields)
    #    
    #        
    #def OnOrderEvent(self, orderEvent):
    #    if orderEvent.Status != OrderStatus.Filled:
    #        self.openingBar = None
    #        return
    #    if self.stopMarketTicket is not None and self.stopMarketTicket.OrderId == orderEvent.OrderId:
    #        self.stopMarketOrderFillTime = self.Time
            
    def OnDataConsolidated(self, bar):
        self.Log(f"Bar at {self.Time} for {bar.Symbol}")
        
    #    if bar.Time.hour == 9 and bar.Time.minute == 30:
    #        self.openingBar = bar
    #        
    #        
    #def ClosePositions(self):
    #    #2. Set self.openingBar to None, and liquidate TSLA
    #    self.openingBar = None
    #    #self.Liquidate(symbol)
    #    self.Liquidate() # liquidate entire portfolio

        
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