| Overall Statistics |
|
Total Trades 114 Average Win 9.34% Average Loss -7.35% Compounding Annual Return 865.035% Drawdown 45.500% Expectancy 0.569 Net Profit 563.268% Sharpe Ratio 7.045 Probabilistic Sharpe Ratio 94.942% Loss Rate 31% Win Rate 69% Profit-Loss Ratio 1.27 Alpha 5.319 Beta -0.279 Annual Standard Deviation 0.76 Annual Variance 0.578 Information Ratio 6.85 Tracking Error 0.801 Treynor Ratio -19.201 Total Fees $119.17 Estimated Strategy Capacity $1500000.00 Lowest Capacity Asset TYH U8JOSZGR4OKL |
from AlgorithmImports import *
class LogicalSkyBlueRat(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2022, 1, 1) # Set Start Date
self.SetCash(1000) # Set Strategy Cash
# self.SetSecurityInitializer(self.CustomSecurityInitializer)
self.equities = ["SPY", "TQQQ", "SPXL", "UVXY", "SQQQ", "BSV", "TECL"]
self.indicators = dict()
for equity in self.equities:
self.AddEquity(equity, Resolution.Minute)
self.Securities[equity].SetDataNormalizationMode(DataNormalizationMode.Raw)
self.indicators[equity] = dict()
self.indicators[equity]['RSI'] = dict()
self.indicators[equity]['RSI']['Period-10'] = RelativeStrengthIndex(10) # self.RSI(equity, 10)#, resolution=Resolution.Daily)
self.indicators[equity]['SMA'] = dict()
self.indicators[equity]['SMA']['Period-20'] = SimpleMovingAverage(20) # self.SMA(equity, 20)#, resolution=Resolution.Daily)
self.indicators[equity]['SMA']['Period-200'] = SimpleMovingAverage(200) # self.SMA(equity, 200)#, resolution=Resolution.Daily)
self.Schedule.On(self.DateRules.EveryDay("SPY"),
self.TimeRules.BeforeMarketClose("SPY", 1),
self.FunctionBeforeMarketClose)
# def CustomSecurityInitializer(self, security: Security) -> None:
# # Disable trading fees
# security.SetFeeModel(ConstantFeeModel(0, "USD"))
def OnData(self, data: Slice):
pass
def FunctionBeforeMarketClose(self):
for equity in self.equities:
if not self.indicators[equity]['RSI']['Period-10'].IsReady:
history = self.History(equity, 10, Resolution.Daily)
for bar in history:
self.indicators[equity]['RSI']['Period-10'].Update(bar.EndTime, bar.Close)
if not self.indicators[equity]['SMA']['Period-20'].IsReady:
history = self.History(equity, 20, Resolution.Daily)
for bar in history:
self.indicators[equity]['SMA']['Period-20'].Update(bar.EndTime, bar.Close)
if not self.indicators[equity]['SMA']['Period-200'].IsReady:
history = self.History(equity, 200, Resolution.Daily)
for bar in history:
self.indicators[equity]['SMA']['Period-200'].Update(bar.EndTime, bar.Close)
self.indicators[equity]['RSI']['Period-10'].Update(self.Time, self.Securities[equity].Close)
self.indicators[equity]['SMA']['Period-20'].Update(self.Time, self.Securities[equity].Close)
self.indicators[equity]['SMA']['Period-200'].Update(self.Time, self.Securities[equity].Close)
# self.Log(f"Close: {self.Securities['SPY'].Close}\
# RSI: {self.indicators['SPY']['RSI']['Period-10'].Current.Value}\
# SMA-20: {self.indicators['SPY']['SMA']['Period-20'].Current.Value}\
# SMA-200: {self.indicators['SPY']['SMA']['Period-200'].Current.Value}")
if self.Securities['SPY'].Close > self.indicators['SPY']['SMA']['Period-200'].Current.Value:
if self.indicators['TQQQ']['RSI']['Period-10'].Current.Value > 79:
self.SetHoldings("UVXY", 1, True)
else:
if self.indicators['SPXL']['RSI']['Period-10'].Current.Value > 80:
self.SetHoldings("UVXY", 1, True)
else:
self.SetHoldings("TQQQ", 1, True)
else:
if self.indicators['TQQQ']['RSI']['Period-10'].Current.Value < 31:
self.SetHoldings("TECL", 1, True)
else:
if self.indicators['SPY']['RSI']['Period-10'].Current.Value < 30:
self.SetHoldings("SPXL", 1, True)
else:
if self.indicators['UVXY']['RSI']['Period-10'].Current.Value > 74:
if self.indicators['UVXY']['RSI']['Period-10'].Current.Value > 84:
if self.Securities['TQQQ'].Close > self.indicators['TQQQ']['SMA']['Period-20'].Current.Value:
if self.indicators['SQQQ']['RSI']['Period-10'].Current.Value < 31:
self.SetHoldings("SQQQ", 1, True)
else:
self.SetHoldings("TQQQ", 1, True)
else:
if self.indicators['SQQQ']['RSI']['Period-10'].Current.Value > self.indicators['BSV']['RSI']['Period-10'].Current.Value:
self.SetHoldings("SQQQ", 1, True)
else:
self.SetHoldings("BSV", 1, True)
else:
self.SetHoldings("UVXY", 1, True)
else:
if self.Securities['TQQQ'].Close > self.indicators['TQQQ']['SMA']['Period-20'].Current.Value:
if self.indicators['SQQQ']['RSI']['Period-10'].Current.Value < 31:
self.SetHoldings("SQQQ", 1, True)
else:
self.SetHoldings("TQQQ", 1, True)
else:
if self.indicators['SQQQ']['RSI']['Period-10'].Current.Value > self.indicators['BSV']['RSI']['Period-10'].Current.Value:
self.SetHoldings("SQQQ", 1, True)
else:
self.SetHoldings("BSV", 1, True)