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
-4.2
Tracking Error
0.098
Treynor Ratio
0
Total Fees
$0.00
import numpy as np
import pandas as pd
import calendar



#Tradable ETF
Trade_spy = 'SPY'

Trade_gld = 'GLD'


fastB = 4
slowB = 152



class MyAlgo(QCAlgorithm): 
    def Initialize(self): 
        
        calendar.setfirstweekday(calendar.MONDAY)
        
        self.SetStartDate(2020,11,25)
        self.SetEndDate(2020,12,20)
        self.SetCash(100000) 
        self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin)
        #self.SetTimeZone(TimeZones.Berlin)
        
        
        
        
        self.Low5 = {}
        self.High5 = {}
        self.Close5 = {}
        
        self.High1 = {}
        self.High2 = {}
        self.High3 = {}
        self.High4 = {}
        
        self.Low220 = {}
        self.High220 = {}
        self.Close220 = {}
        self.stocks = {}
        
        self.today_low = {}
        self.today_high = {}
        self.today_close = {}
        
        
       
        sl = [Trade_spy] #Trade_gld, Trade_uga, 
        self.secs = list(set(sl)) #Only unique tickers!
        
        for self.ticker in self.secs:
            self.stocks[self.ticker] = self.AddEquity(self.ticker, Resolution.Hour)
            
            self.stocks[self.ticker].SetLeverage(7.0)
            
            #Averages
            self.Low5[self.ticker] = self.SMA(self.ticker, fastB, Resolution.Daily, Field.Low)
            self.High5[self.ticker] = self.SMA(self.ticker, fastB, Resolution.Daily, Field.High)
            self.Close5[self.ticker] = self.SMA(self.ticker, fastB, Resolution.Daily, Field.Close)
            self.Low220[self.ticker] = self.SMA(self.ticker, slowB, Resolution.Daily, Field.Low)
            self.High220[self.ticker] = self.SMA(self.ticker, slowB, Resolution.Daily, Field.High)
            self.Close220[self.ticker] = self.SMA(self.ticker, slowB, Resolution.Daily, Field.Close)
            
            #1-5 days HIGHS averages
            self.High1[self.ticker] = self.SMA(self.ticker, 1, Resolution.Daily, Field.High)
            self.High2[self.ticker] = self.SMA(self.ticker, 2, Resolution.Daily, Field.High)
            self.High3[self.ticker] = self.SMA(self.ticker, 3, Resolution.Daily, Field.High)
            self.High4[self.ticker] = self.SMA(self.ticker, 4, Resolution.Daily, Field.High)
            #Current day HLC
            self.today_low[self.ticker] = self.MIN(self.ticker, 1, Resolution.Hour, Field.Low)
            self.today_high[self.ticker] = self.MAX(self.ticker, 1, Resolution.Hour, Field.High)
            self.today_close[self.ticker] = self.MAX(self.ticker, 1, Resolution.Hour, Field.Close) #~similar to the current price
            
            
        self.SetWarmUp(timedelta(300))    
        self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen('SPY', 30), self.Collect30)
        self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen('SPY', 31), self.Collect31)
    
    def Collect30(self):
        self.Log('-----30 minutes after open-----')
        self.Log('{:^20}\t{:^20}\t{:^15}\t{:^10}\t{:^10}'.format('self.Time', 'Current.Time', 'name', 'value', 'short name'))
        self.DataCollect(30)
        
        
        
    def Collect31(self):
        self.Log('-31 minutes after open-')
        self.DataCollect(31)
        
        
    def DataCollect(self, minute_delay):
        
        self.m_delay = minute_delay
        
        for ticker in self.secs:
            avLow220 = self.Low220[ticker].Current.Value
            
            avHigh220 = self.High220[ticker].Current.Value
            avClose220 = self.Close220[ticker].Current.Value
    
            #self.myLog(f'{ticker}_avLow220',    avLow220, self.Low220[ticker].Current.Time)
            #self.myLog(f'{ticker}_avHigh220',   avHigh220, self.High220[ticker].Current.Time)
            #self.myLog(f'{ticker}_avClose220',  avClose220, self.Close220[ticker].Current.Time)
            
            
            self.myLog(f'{ticker}_low5_sma',    self.Low5[ticker].Current.Value, self.Low5[ticker].Current.Time)
            self.myLog(f'{ticker}_high5_sma',   self.High5[ticker].Current.Value, self.High5[ticker].Current.Time)
            self.myLog(f'{ticker}_close5_sma',  self.Close5[ticker].Current.Value, self.Close5[ticker].Current.Time)
            

            #self.myLog(f'{ticker}_today_low',   self.today_low[ticker].Current.Value,   self.today_low[ticker].Current.Time)
            #self.myLog(f'{ticker}_today_high',  self.today_high[ticker].Current.Value,  self.today_high[ticker].Current.Time)
            
            
            #self.myLog(f'{ticker}_today_close',     self.today_close[ticker].Current.Value, self.today_close[ticker].Current.Time)
            #self.myLog(f'{ticker}_today_price_now', self.stocks[ticker].Price,              self.stocks[ticker].LocalTime)
            
        
        self.Debug("TimeZone: " + str(self.TimeZone))
        
        
    def myLog(self, text, number,special_time):
        formated_number = format(float(number), '.2f') #for better reading
        short_text = "{:.3}".format(text)
        #n ='0'*(5-len(toLog)) + toLog
        #self.Global_log += f'{self.Time}    {text}: {n}    \n'
        #self.Global_log += f'{self.Time}\t{text}\t{n}\t{short_text}\tbcktest\n'
        self.Log(f'\t{self.Time}\t{special_time}\t{text}\t{formated_number}\t{short_text}\tbcktest2_{self.m_delay}')
        #self.Log(f'\t{self.Time}\t{text}\t{formated_number}\t{short_text}\tbcktest2\n')