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
2.927
Tracking Error
0.118
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
# how to set limit on list - https://stackoverflow.com/questions/40696005/limit-the-length-of-a-python-list


import decimal
from QuantConnect.Python import PythonQuandl
from QuantConnect.Data import *
import statistics

"""
Algo Overview

Use the rolling average daily gains for each day of the week. (later create one for just day in a given set of day (3-10, pref with dynamic range if possible)
Enter at noon on the worst day.
- only enter if VIX < 20 or some other determinant of uptrend. 
Exit at noon on the best day. 
"""

# Need to make history request 
# - loop thru each weekday and calculatre the dialy return and append that to the list 

# Global Vars
EQUITY = "SPXL"
BENCHMARK = "SPY"
ROLLING_LOOK_BACK_PERIOD = 5 # in number of weeks as each list will pull up that last returns on those weekdays

class AlertVioletChicken(QCAlgorithm):

    def Initialize(self):
        # Debug Set
        self.SetStartDate(2022, 1, 1)  # Set Start Date
        self.SetEndDate(2022, 11, 1)
        
        # Test Set 
                
        
        self.SetCash(100000)  # Set Strategy Cash
        self.equity = self.AddEquity(EQUITY, Resolution.Minute).Symbol
        self.AddEquity(BENCHMARK, Resolution.Minute) 
        
        # Capture morning price
        self.Schedule.On(self.DateRules.EveryDay("SPXL"), self.TimeRules.AfterMarketOpen("SPXL", 0), self.EveryDayAfterMarketOpen)
        # Capture closing price
        self.Schedule.On(self.DateRules.EveryDay("SPXL"), self.TimeRules.BeforeMarketClose("SPXL", 0), self.EveryDayBeforeMarketClose)
        
        
        self.dailyMorningPrice = None
        self.dailyClosingPrice = None
        
        # Monday 
        self.mondayRollingAvg = 0
        self.mondayHistoricalReturns = []
        
        # Tuesday 
        self.tuesdayRollingAvg = 0
        self.tuesdayHistoricalReturns = []
        
        # Wednesday 
        self.wednesdayRollingAvg = 0
        self.wednesdayHistoricalReturns = []
        
        # Thursday 
        self.thursdayRollingAvg = 0
        self.thursdayHistoricalReturns = []
        
        # Monday 
        self.thursdaydayRollingAvg = 0
        self.thursdaydayHistoricalReturns = []
        
        # Call historical data to then loop thru to get Historical Return lists initialized 
        
        
        self.SetWarmup(timedelta(days=365)) # pretty sure this doesn't do anything 

    def OnData(self, data):
        
        
        
        self.price = self.Securities[self.equity].Price
        
        if self.IsWarmingUp:
            return

    def EveryDayAfterMarketOpen(self):
        # capture morning price
        self.dailyMorningPrice = self.price
        pass
    
    def EveryDayBeforeMarketClose(self):
        # capture closing price
        self.dailyClosingPrice = self.price
        
        daily_return = (self.dailyClosingPrice - self.dailyMorningPrice) / self.dailyMorningPrice
        
        # Debugging day of week code
        # self.Debug(str(self.Time) + " : " + str(self.Time.weekday()))
        
        # add to weekday's rolling average
        if self.Time.weekday() == 0:
            
            # append today's return to today's list of returns, add max days allowed in list
            self.mondayHistoricalReturns.append(daily_return)
            self.mondayRollingList = self.mondayHistoricalReturns[-ROLLING_LOOK_BACK_PERIOD:]
            self.Debug(str(self.Time) + " monday rolling count " + str(len(self.mondayRollingList)))
            self.Debug(str(self.Time) + " last 5 mondays: " + str(self.mondayRollingList))
                
            self.mondayRollingAvg = sum(self.mondayRollingList) / (ROLLING_LOOK_BACK_PERIOD)
            self.Debug(str(self.Time) + " monday rolling avg: " + str(self.mondayRollingAvg))
            # right now it only works on days in the algo - doesn't get the days before it - need to get historical data; the warmup didn't append to the list (1/16/22)
            
            
    
    
# how to set limit on list - https://stackoverflow.com/questions/40696005/limit-the-length-of-a-python-list


import decimal
from QuantConnect.Python import PythonQuandl
from QuantConnect.Data import *
import statistics

"""
Algo Overview

Use the rolling average daily gains for each day of the week. (later create one for just day in a given set of day (3-10, pref with dynamic range if possible)
Enter at noon on the worst day.
- only enter if VIX < 20 or some other determinant of uptrend. 
Exit at noon on the best day. 
"""

# Need way to say only look back __ days 
# maybe make lists for dayRollingAverage inputs

# Global Vars
EQUITY = "SPXL"
BENCHMARK = "SPY"
ROLLING_LOOK_BACK_PERIOD = 5 # in number of weeks as each list will pull up that last returns on those weekdays

class AlertVioletChicken(QCAlgorithm):

    def Initialize(self):
        # Debug Set
        self.SetStartDate(2022, 1, 1)  # Set Start Date
        self.SetEndDate(2022, 11, 1)
        
        # Test Set 
                
        
        self.SetCash(100000)  # Set Strategy Cash
        self.equity = self.AddEquity(EQUITY, Resolution.Minute).Symbol
        self.AddEquity(BENCHMARK, Resolution.Minute) 
        
        # Capture morning price
        self.Schedule.On(self.DateRules.EveryDay("SPXL"), self.TimeRules.AfterMarketOpen("SPXL", 0), self.EveryDayAfterMarketOpen)
        # Capture closing price
        self.Schedule.On(self.DateRules.EveryDay("SPXL"), self.TimeRules.BeforeMarketClose("SPXL", 0), self.EveryDayBeforeMarketClose)
        
        
        self.dailyMorningPrice = None
        self.dailyClosingPrice = None
        
        # Monday 
        # self.mondayReturn = None
        self.mondayRollingAvg = 0
        self.mondayHistoricalReturns = []
        
        self.SetWarmup(365)

    def OnData(self, data):
        
        self.price = self.Securities[self.equity].Price

    def EveryDayAfterMarketOpen(self):
        # capture morning price
        self.dailyMorningPrice = self.price
        pass
    
    def EveryDayBeforeMarketClose(self):
        # capture closing price
        self.dailyClosingPrice = self.price
        
        daily_return = (self.dailyClosingPrice - self.dailyMorningPrice) / self.dailyMorningPrice
        
        # Debugging day of week code
        # self.Debug(str(self.Time) + " : " + str(self.Time.weekday()))
        
        # add to weekday's rolling average
        if self.Time.weekday() == 0:
            
            # append today's return to today's list of returns, add max days allowed in list
            self.mondayHistoricalReturns.append(daily_return)
            self.mondayRollingList = self.mondayHistoricalReturns[-ROLLING_LOOK_BACK_PERIOD:]
            self.Debug(str(self.Time) + " monday rolling count " + str(len(self.mondayRollingList)))
            self.Debug(str(self.Time) + " last 5 mondays: " + str(self.mondayRollingList))
                
            self.mondayRollingAvg = sum(self.mondayRollingList) / (ROLLING_LOOK_BACK_PERIOD)
            self.Debug(str(self.Time) + " monday rolling avg: " + str(self.mondayRollingAvg))
            # right now it only works on days in the algo - doesn't get the days before it - need to get historical data; the warmup didn't append to the list (1/16/22)