Overall Statistics |
Total Orders 11180 Average Win 0.15% Average Loss -0.09% Compounding Annual Return 66.910% Drawdown 16.100% Expectancy 0.548 Start Equity 100000 End Equity 1485637.82 Net Profit 1385.638% Sharpe Ratio 2.263 Sortino Ratio 2.883 Probabilistic Sharpe Ratio 99.728% Loss Rate 43% Win Rate 57% Profit-Loss Ratio 1.71 Alpha 0.356 Beta 0.728 Annual Standard Deviation 0.188 Annual Variance 0.036 Information Ratio 2.214 Tracking Error 0.149 Treynor Ratio 0.586 Total Fees $32180.33 Estimated Strategy Capacity $3600000.00 Lowest Capacity Asset VIXM UT076X30D0MD Portfolio Turnover 14.34% |
#region imports from AlgorithmImports import * #endregion # Your New Python File
#region imports from AlgorithmImports import * #endregion from AlgorithmImports import * from indicators import * from main import YellowCatStrat class TQQQFTLTStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if GetCurrentPrice(self.algorithm,'SPY') > SMA(self.algorithm, 'SPY', 200): if RSI(self.algorithm, 'TQQQ', 10) > 78: AH(self.algorithm, ['SPXU', 'UVXY', 'SQQQ'], 1, 0.33) else: if RSI(self.algorithm, 'SPXL', 10) > 79: AH(self.algorithm, ['SPXU', 'UVXY', 'SQQQ'], 1, 0.33) else: if CumReturn(self.algorithm, 'TQQQ', 4) > 0.2: if RSI(self.algorithm, 'TQQQ', 10) < 31: AH(self.algorithm, 'TQQQ', 1, 1) else: if RSI(self.algorithm, 'UVXY', 10) > RSI(self.algorithm, 'SQQQ', 10): AH(self.algorithm, ['SPXU', 'UVXY', 'SQQQ'], 1, 0.33) else: AH(self.algorithm, 'SQQQ', 1, 1) else: AH(self.algorithm, 'TQQQ', 1, 1) else: if RSI(self.algorithm, 'TQQQ', 10) < 31: AH(self.algorithm, 'TECL', 1, 1) else: if RSI(self.algorithm, 'SMH', 10) < 30: AH(self.algorithm, 'SOXL', 1, 1) else: if RSI(self.algorithm, 'DIA', 10) < 27: AH(self.algorithm, 'UDOW', 1, 1) else: if RSI(self.algorithm, 'SPY', 14) < 28: AH(self.algorithm, 'UPRO', 1, 1) else: self.Group1() self.Group2() def Group1(self): if CumReturn(self.algorithm, 'QQQ', 200) < -0.2: if GetCurrentPrice(self.algorithm,'QQQ') < SMA(self.algorithm, 'QQQ', 20): if CumReturn(self.algorithm, 'QQQ', 60) < -0.12: self.Group5() self.Group6() else: if RSI(self.algorithm, 'TLT', 10) > RSI(self.algorithm, 'SQQQ', 10): AH(self.algorithm, 'TQQQ', 1, 0.5) else: AH(self.algorithm, 'SQQQ', 1, 0.5) else: if RSI(self.algorithm, 'SQQQ', 10) < 31: AH(self.algorithm, 'PSQ', 1, 0.5) else: if CumReturn(self.algorithm, 'QQQ', 9) > 0.055: AH(self.algorithm, 'PSQ', 1, 0.5) else: if RSI(self.algorithm, 'TQQQ', 10) > RSI(self.algorithm, 'SOXL', 10): AH(self.algorithm, 'TQQQ', 1, 0.5) else: AH(self.algorithm, 'SOXL', 1, 0.5) def Group2(self): if GetCurrentPrice(self.algorithm,'QQQ') < SMA(self.algorithm, 'QQQ', 20): if CumReturn(self.algorithm, 'QQQ', 60) < -0.12: self.Group3() self.Group4() else: if RSI(self.algorithm, 'TLT', 10) > RSI(self.algorithm, 'SQQQ', 10): AH(self.algorithm, 'TQQQ', 1, 0.5) else: AH(self.algorithm, 'SQQQ', 1, 0.5) else: if RSI(self.algorithm,'TQQQ', 10) > RSI(self.algorithm,'SOXL', 10): AH(self.algorithm, 'TQQQ', 1, 0.5) else: AH(self.algorithm, 'SOXL', 1, 0.5) def Group3(self): if GetCurrentPrice(self.algorithm,'SPY') > SMA(self.algorithm, 'SPY', 20): AH(self.algorithm, 'SPY', 1, 0.25) else: if RSI(self.algorithm, 'TLT', 10) > RSI(self.algorithm, 'SQQQ', 10): AH(self.algorithm, 'QQQ', 1, 0.25) else: AH(self.algorithm, 'PSQ', 1, 0.25) def Group4(self): if RSI(self.algorithm, 'TLT', 10) > RSI(self.algorithm, 'SQQQ', 10): AH(self.algorithm, 'QQQ', 1, 0.25) else: AH(self.algorithm, 'PSQ', 1, 0.25) def Group5(self): if GetCurrentPrice(self.algorithm,'SPY') > SMA(self.algorithm, 'SPY', 20): AH(self.algorithm, 'SPY', 1, 0.25) else: if RSI(self.algorithm, 'TLT', 10) > RSI(self.algorithm, 'SQQQ', 10): AH(self.algorithm, 'QQQ', 1, 0.25) else: AH(self.algorithm, 'PSQ', 1, 0.25) def Group6(self): if RSI(self.algorithm, 'TLT', 10) > RSI(self.algorithm, 'SQQQ', 10): AH(self.algorithm, 'QQQ', 1, 0.25) else: AH(self.algorithm, 'PSQ', 1, 0.25) class TQQQorNotStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if RSI(self.algorithm,'TQQQ',10) > 78: AH(self.algorithm,['SPXU','UVXY','SQQQ'],2,1/3) else: if CumReturn(self.algorithm,'TQQQ',6) < -0.12: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['SPXU','UVXY','SQQQ'],2,1/3) else: if RSI(self.algorithm,'TQQQ',10) < 32: AH(self.algorithm,'TQQQ',2,1) else: if MaxDD(self.algorithm,'TMF',10)<0.07: AH(self.algorithm,'TQQQ',2,1) else: AH(self.algorithm,'BIL',2,1) else: if MaxDD(self.algorithm,'QQQ',10)>0.06: AH(self.algorithm,'BIL',2,1) else: if MaxDD(self.algorithm,'TMF',10)>0.07: AH(self.algorithm,'BIL',2,1) else: if GetCurrentPrice(self.algorithm,'QQQ') > SMA(self.algorithm,'QQQ', 25): AH(self.algorithm,'TQQQ',2,1) else: if RSI(self.algorithm,'SPY',60) > 50: if RSI(self.algorithm,'BND',45) > RSI(self.algorithm,'SPY',45): AH(self.algorithm,'TQQQ',2,1) else: AH(self.algorithm,'BIL',2,1) else: if RSI(self.algorithm,'IEF',200) < RSI(self.algorithm,'TLT',200): if RSI(self.algorithm,'BND',45) > RSI(self.algorithm,'SPY',45): AH(self.algorithm,'TQQQ',2,1) else: AH(self.algorithm,'BIL',2,1) else: AH(self.algorithm,'BIL',2,1) class DereckCustomBetaBallerStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): self.DereckCustomBetaBaller() def DereckCustomBetaBaller(self): if SMADayRet(self.algorithm,'TLT',350) < SMADayRet(self.algorithm,'TLT',550): if GetCurrentPrice(self.algorithm,'SPY') < SMA(self.algorithm,'SPY',200): self.V1() else: self.B2() else: self.N3() def V1(self): if RSI(self.algorithm,'BIL',8) < 35: if RSI(self.algorithm,'TQQQ',10) > 80: self.O6() else: AH(self.algorithm,'SOXL',3,1) else: if RSI(self.algorithm,'SPY',6) < 27: self.E77() else: self.B5() def O6(self): Sort(self.algorithm,"RSI",["VIXM","VIXY"],13,False,1,3,1) def E77(self): if RSI(self.algorithm,'BSV',7) < RSI(self.algorithm,'SPHB',7): Sort(self.algorithm,"RSI",["SOXS","SOXS"],7,False,1,3,1) else: Sort(self.algorithm,"RSI",["SOXL","TECL"],7,False,1,3,1) def B5(self): if RSI(self.algorithm,'BSV',7) > RSI(self.algorithm,'SHY',7): self.B4() else: AH(self.algorithm,'SOXL',3,1) def B4(self): if RSI(self.algorithm,'QQQ',10) < 30: Sort(self.algorithm,"SMADayRet",["TQQQ","SPXL","SOXL","UPRO"],5,True,1,3,1) else: if RSI(self.algorithm,'SPY',10) < 30: AH(self.algorithm,'UPRO',3,1) else: if GetCurrentPrice(self.algorithm,'QLD') > SMA(self.algorithm,'QLD',20): self.B14() else: self.A42() def B14(self): if 50 > RSI(self.algorithm,'IEF',7): self.B15() else: if RSI(self.algorithm,'SPY',6) > 75: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: AH(self.algorithm,'SOXL',3,1) def B15(self): if GetCurrentPrice(self.algorithm,'TLT') < SMA(self.algorithm,'TLT',21): self.B16() else: self.B17() def B16(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',10) < 30: Sort(self.algorithm,"SMADayRet",["TQQQ","SOXL","UPRO"],5,True,1,3,1) else: if CumReturn(self.algorithm,'SPY',2) < -0.02: Sort(self.algorithm,"CumReturn",["SPXS","TECS","SOXS","SQQQ","ERX"],5,False,1,3,1) else: if CumReturn(self.algorithm,'SPXU',6) > CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["SOXS","SQQQ","EPI"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","SOXL","TMV"],5,False,1,3,1) else: if SMADayRet(self.algorithm,'SPY',210) > SMADayRet(self.algorithm,'DBC',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: if CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["SOXL","IYK","TMV"],5,False,1,3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TQQQ","IYK","SOXL","UPRO","TECL"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["SOXL","IYK","UPRO"],22,False,1,3,1) else: self.Defence() def Defence(self): if STD(self.algorithm,'DBC',20) > STD(self.algorithm,'SPY',20): if STD(self.algorithm,'DBC',10) > 0.03: if STD(self.algorithm,'TMV',5) < STD(self.algorithm,'DBC',5): AH(self.algorithm,'TMV',3,1) else: AH(self.algorithm,'DBC',3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TMV","SOXS","SPXU"],5,True,1,3,1) else: Sort(self.algorithm,"CumReturn",["EFA","EEM","SPXS","SOXS","UCO","TMV"],5,False,1,3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["EPI","SOXL","UPRO","IYK"],5,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["EWZ","TECS","SOXS","EUO","YCS","TMV"],5,False,1,3,1) def B17(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if CumReturn(self.algorithm,'SPY',2) < -0.02: Sort(self.algorithm,"SMADayRet",["SPXS","TECS","SOXS","SQQQ"],5,True,1,3,1) else: if CumReturn(self.algorithm,'SPXU',6) > CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["BIL","AGG","TMF"],5,False,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","SOXL","TQQQ","EWZ","TMF"],5,False,1,3,1) else: if SMADayRet(self.algorithm,'SPY',210) > SMADayRet(self.algorithm,'DBC',360): if EMA(self.algorithm,'SPY',210) > EMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: if CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SPXL","EPI","SOXL","UPRO","QLD","EWZ","MVV","XLU","IYK","USD","TMF"],7,False,1,3,1) if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TECL","SPXL","EPI","SOXL","UPRO","MVV"],7,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["SOXS","TMF"],5,True,1,3,1) else: Sort(self.algorithm,"RSI",["SPXS","SQQQ","TECS","SOXS"],5,False,1,3,1) else: self.Defence2() def Defence2(self): if STD(self.algorithm,'DBC',20) > STD(self.algorithm,'SPY',20): Sort(self.algorithm,"RSI",["SPXS","EPI","TECS","SOXS","SQQQ"],5,False,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","TMF"],5,True,1,3,1) def A42(self): if RSI(self.algorithm,'TQQQ',9) < 32: if CumReturn(self.algorithm,'TQQQ',2) > CumReturn(self.algorithm,'TQQQ',5): self.A41() else: Sort(self.algorithm,"RSI",["TMF","UCO","USD","SOXL","SQQQ"],5,False,1,3,1) else: self.A43() def A41(self): self.Substrategy1() self.Substrategy2() def Substrategy1(self): Sort(self.algorithm,"RSI",["TECL","SOXL","SHY"],10,False,1,3,0.5) def Substrategy2(self): Sort(self.algorithm,"RSI",["SHY","SOXL"],5,False,1,3,0.5) def A43(self): if GetCurrentPrice(self.algorithm,'TLT') > SMA(self.algorithm,'TLT',200): self.A19() else: self.B18() def A19(self): if SMADayRet(self.algorithm,'TLT',20) < 0: self.A44() else: self.A55() def A44(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',10) < 30: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","UPRO"],5,False,1,3,1) else: if CumReturn(self.algorithm,'SPXU',6) > CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["SOXS","EUO","YCS"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","SOXL","TQQQ","CURE"],5,False,1,3,1) else: if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["SOXL","TECL","TMV","TQQQ","UPRO"],5,False,1,3,1) def A55(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',10) < 30: Sort(self.algorithm,"SMADayRet",["TECL","SOXL","TQQQ"],5,False,1,3,1) else: if CumReturn(self.algorithm,'SPY',2) < -0.02: Sort(self.algorithm,"CumReturn",["TECS","SOXS","SQQQ"],5,True,1,3,1) else: if CumReturn(self.algorithm,'SPXU',6) > CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["ERX","EUO","YCS"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["EWZ","SOXL","MVV","USD"],5,False,1,3,1) else: if SMADayRet(self.algorithm,'SPY',210) > SMADayRet(self.algorithm,'DBC',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: if CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: if 50 < RSI(self.algorithm,'IEF',7): AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"CumReturn",["EWZ","UUP","TMF","UCO"],5,True,1,3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TQQQ","SPXL","QLD","USD","TECL"],5,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["EWZ","EWZ","TMF"],5,True,1,3,1) else: self.Defence3() def Defence3(self): if STD(self.algorithm,'DBC',20) > STD(self.algorithm,'SPY',20): Sort(self.algorithm,"RSI",["SHY","EWZ","GLD","SPXS","TECS","SOXS","UCO","YCS"],5,False,1,3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["SOXL","USD","TMF"],5,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["EWZ","SPXS","SOXS","UCO","YCS"],5,True,1,3,1) def B18(self): if SMADayRet(self.algorithm,'TLT',20) < 0: self.A57() else: self.B17() def A57(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',10) < 30: Sort(self.algorithm,"SMADayRet",["TQQQ","SOXL","UPRO"],5,True,1,3,1) else: if CumReturn(self.algorithm,'SPY',2) < -0.02: Sort(self.algorithm,"CumReturn",["SPXS","TECS","SOXS","SQQQ","ERX"],5,False,1,3,1) else: if CumReturn(self.algorithm,'SPXU',6) > CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["SOXS","SQQQ","EPI"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","SOXL","TMV"],5,False,1,3,1) else: if SMADayRet(self.algorithm,'SPY',210) > SMADayRet(self.algorithm,'DBC',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: if CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["SOXL","IYK","TMV"],5,False,1,3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TQQQ","SOXL","IYK","TMV","UPRO","TECL"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["SOXL","IYK","UPRO"],22,False,1,3,1) else: self.Defence() def B2(self): if RSI(self.algorithm,'SPY',40) > 75: if 50 < RSI(self.algorithm,'IEF',7): AH(self.algorithm,'QQQ',3,1) else: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: self.A54() def A54(self): if 50 > RSI(self.algorithm,'IEF',7): self.A53() else: if RSI(self.algorithm,'SPY',6) > 75: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: AH(self.algorithm,'SOXL',3,1) def A53(self): if RSI(self.algorithm,'TQQQ',14) > 75: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: if RSI(self.algorithm,'SPXL',10) > 80: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: self.B23() def B23(self): if GetCurrentPrice(self.algorithm,'TLT') > SMA(self.algorithm,'TLT',200): self.A24() else: self.A52() def A24(self): if RSI(self.algorithm,'TLT',14) < 50: self.A22() else: self.A26() def A22(self): if GetCurrentPrice(self.algorithm,'TLT') > SMA(self.algorithm,'TLT',5): self.A25() else: self.A51() def A25(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',10) < 30: Sort(self.algorithm,"SMADayRet",["TQQQ","SOXL","UPRO","TECL","SPXL"],5,True,1,3,1) else: if CumReturn(self.algorithm,'SPXU',6) > CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["TECS","SOXS","SQQQ","TMF","SHY"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","SOXL","UPRO","EWZ","TMF","TQQQ"],5,False,1,3,1) else: if CumReturn(self.algorithm,'TQQQ',6) < -0.1: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","TMF"],7,False,1,3,1) else: Sort(self.algorithm,"SMADayRet",["SOXL","TMF"],7,False,1,3,1) def A51(self): if RSI(self.algorithm,'TLT',14) < 20: AH(self.algorithm,'SHY',3,1) else: if SMADayRet(self.algorithm,'TLT',20) < 0: self.A21() else: self.A50() def A21(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if CumReturn(self.algorithm,'SPXU',6) >= CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["SOXS","ERX","SHY"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TQQQ","SOXL","CURE","EWZ","SHY"],5,False,1,3,1) else: if SMA(self.algorithm,'SPY',210) > SMA(self.algorithm,'DBC',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: if CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","UPRO","TMV","SHY"],5,False,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","UPRO","TMV","SHY"],5,True,1,3,1) else: self.A49() def A49(self): if STD(self.algorithm,'DBC',20) > STD(self.algorithm,'SPY',20): Sort(self.algorithm,"RSI",["EEM","TECS","SOXS","TMV"],5,False,1,3,1) else: Sort(self.algorithm,"RSI",["EEM","TECS","SOXS","TMV"],10,False,1,3,1) def A50(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if CumReturn(self.algorithm,'SPXU',6) >= CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"SMADayRet",["TQQQ","SOXL","UPRO","TECL","TMF"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","TMF"],5,False,1,3,1) elif SMADayRet(self.algorithm,'SPY',210) > SMADayRet(self.algorithm,'DBC',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) elif CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SPXL","EPI","SOXL","UPRO","QLD","EWZ","MVV","PUI","IYK","USD","TMF"],7,False,1,3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","PUI"],5,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["SOXS","SQQQ","UCO","DIG"],5,False,1,3,1) else: Sort(self.algorithm,"SMADayRet",["EPI","UPRO","SOXL","TQQQ"],5,True,1,3,1) def A26(self): if RSI(self.algorithm,'TLT',14) > 80: self.A27() else: if GetCurrentPrice(self.algorithm,'TLT') < SMA(self.algorithm,'TLT',21): self.A44() else: self.A55() def A27(self): if SMADayRet(self.algorithm,'SPY',210) > SMADayRet(self.algorithm,'DBC',360): if CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","UPRO"],5,False,1,3,1) else: Sort(self.algorithm,"RSI",["SQQQ","TECS","SOXS","TMV"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["EPI","UPRO","SOXL","TQQQ","TMV"],5,True,1,3,1) def A52(self): if GetCurrentPrice(self.algorithm,'TLT') < SMA(self.algorithm,'TLT',21): self.A57() else: self.A56() def A56(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if CumReturn(self.algorithm,'SPY',2) <= -0.02: Sort(self.algorithm,"CumReturn",["SPXS","TECS","SOXS","SQQQ"],5,True,1,3,1) elif CumReturn(self.algorithm,'SPXU',6) >= CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["BIL","AGG","TMF"],5,False,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","EWZ","TMF"],5,False,1,3,1) elif SMADayRet(self.algorithm,'SPY',210) > SMADayRet(self.algorithm,'DBC',360): if EMA(self.algorithm,'SPY',210) > EMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) elif CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SPXL","EPI","SOXL","UPRO","QLD","EWZ","MVV","XLU","IYK","USD","TMF"],7,False,1,3,1) elif 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TECL","SPXL","EPI","SOXL","UPRO","MVV","UGE"],7,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["SOXS","TMF"],5,True,1,3,1) else: Sort(self.algorithm,"RSI",["SPXS","SQQQ","TECS","SOXS"],5,False,1,3,1) else: self.Defence2() def N3(self): if GetCurrentPrice(self.algorithm,'SPY') > SMA(self.algorithm,'SPY',200): if RSI(self.algorithm,'QQQ',14) > 80: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: if RSI(self.algorithm,'SPY',10) > 80: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: self.A31() else: if RSI(self.algorithm,'TQQQ',9) < 32: if CumReturn(self.algorithm,'TQQQ',2) >= CumReturn(self.algorithm,'TQQQ',5): self.A41() else: if RSI(self.algorithm,'SPY',10) < 30: self.A40() else: if GetCurrentPrice(self.algorithm,'TQQQ') > SMA(self.algorithm,'TQQQ',20): if RSI(self.algorithm,'SQQQ',10) < 31: AH(self.algorithm,'SQQQ',3,1) else: AH(self.algorithm,'TQQQ',3,1) else: Sort(self.algorithm,"RSI",["TMF","UCO","USD","SOXL","SQQQ"],5,False,1,3,1) else: self.A31() def A31(self): if GetCurrentPrice(self.algorithm,'TLT') > SMA(self.algorithm,'TLT',200): self.A30() else: self.A37() def A30(self): if RSI(self.algorithm,'TLT',14) < 50: self.A29() else: self.A28() def A29(self): if GetCurrentPrice(self.algorithm,'TLT') > SMA(self.algorithm,'TLT',5): self.A32() else: self.A33() def A32(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',10) < 30: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","UPRO"],5,True,1,3,1) else: if CumReturn(self.algorithm,'SPXU',6) >= CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["TECS","SOXS","SQQQ","TMF","SHY"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","UPRO","EWZ","TMF"],5,False,1,3,1) else: if CumReturn(self.algorithm,'TQQQ',6) < -0.1: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","TMF"],7,False,1,3,1) else: Sort(self.algorithm,"SMADayRet",["SOXL","TMF"],7,False,1,3,1) def A33(self): if RSI(self.algorithm,'TLT',14) < 20: AH(self.algorithm,'TMF',3,1) else: if SMADayRet(self.algorithm,'TLT',20) < 0: self.A21() else: self.A34() def A34(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if CumReturn(self.algorithm,'SPXU',6) >= CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"SMADayRet",["TQQQ","SOXL","UPRO","TECL","TMF"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","TMF"],5,False,1,3,1) elif SMA(self.algorithm,'SPY',210) > SMA(self.algorithm,'DBC',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) elif CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","EPI","SOXL","UPRO","QLD","EWZ","MVV","XLU","USD","TMF"],7,False,1,3,1) elif 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","XLU"],5,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["SOXS","SQQQ","UCO","DIG"],5,False,1,3,1) else: Sort(self.algorithm,"SMADayRet",["EPI","UPRO","SOXL","TQQQ"],5,True,1,3,1) def A28(self): if RSI(self.algorithm,'TLT',14) > 80: self.A27() else: self.A35() def A35(self): if SMADayRet(self.algorithm,'TLT',20) < 0: self.A44() else: self.A36() def A36(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',10) < 30: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL"],5,False,1,3,1) elif CumReturn(self.algorithm,'SPY',2) <= -0.02: Sort(self.algorithm,"CumReturn",["TECS","SOXS","SQQQ"],5,True,1,3,1) elif CumReturn(self.algorithm,'SPXU',6) >= CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["ERX","EUO","YCS"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["SOXL","EWZ","MVV","USD"],5,False,1,3,1) elif SMADayRet(self.algorithm,'SPY',210) > SMADayRet(self.algorithm,'DBC',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) elif CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) elif 50 < RSI(self.algorithm,'IEF',7): AH(self.algorithm,'SOXL',3,1) else: Sort(self.algorithm,"CumReturn",["EWZ","UUP","TMF","UCO"],5,True,1,3,1) elif 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","UPRO","QLD","USD"],5,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["EWZ","UUP","TMF"],5,True,1,3,1) else: self.A45() def A45(self): if STD(self.algorithm,'DBC',20) > STD(self.algorithm,'SPY',20): Sort(self.algorithm,"RSI",["SHY","EWZ","GLD","SPXU","TECS","SOXS","UCO","YCS"],5,False,1,3,1) elif 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["SOXL","USD","TMF"],5,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["EWZ","SPXU","SOXS","UCO","YCS"],5,True,1,3,1) def A37(self): if GetCurrentPrice(self.algorithm,'TLT') < SMA(self.algorithm,'TLT',21): self.A38() else: self.A39() def A38(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',10) < 30: Sort(self.algorithm,"SMADayRet",["TQQQ","SOXL","UPRO"],5,True,1,3,1) else: if CumReturn(self.algorithm,'SPY',2) <= -0.02: Sort(self.algorithm,"CumReturn",["SPXU","TECS","SOXS","SQQQ","ERX"],5,False,1,3,1) else: if CumReturn(self.algorithm,'SPXU',6) >= CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["SOXS","SQQQ","EPI"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","SOXL","TMV"],5,False,1,3,1) else: if SMA(self.algorithm,'SPY',210) > SMA(self.algorithm,'DBC',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: if CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["SOXL","IYK","TMV"],5,False,1,3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TQQQ","SOXL","UPRO","TMV","TECL"],5,True,1,3,1) else: Sort(self.algorithm,"SMADayRet",["SOXL","UPRO","IYK"],22,False,1,3,1) else: self.A46() def A46(self): if STD(self.algorithm,'DBC',20) > STD(self.algorithm,'SPY',20): if STD(self.algorithm,'DBC',10) >= 0.03: if STD(self.algorithm,'TMV',5) <= STD(self.algorithm,'DBC',5): AH(self.algorithm,'TMV',3,1) else: AH(self.algorithm,'DBC',3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TMV","SOXS","SPXU"],5,True,1,3,1) else: Sort(self.algorithm,"CumReturn",["EFA","EEM","SPXU","SOXS","UCO","TMV"],5,False,1,3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["EPI","SOXL","UPRO"],5,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["EWZ","TECS","SOXS","EUO","YCS","TMV"],5,True,1,3,1) def A39(self): if EMA(self.algorithm,'SPY',210) <= SMA(self.algorithm,'SPY',360): if CumReturn(self.algorithm,'SPY',2) < -0.02: Sort(self.algorithm,"CumReturn",["SPXU","TECS","SOXS","SQQQ"],5,True,1,3,1) else: if CumReturn(self.algorithm,'SPXU',6) >= CumReturn(self.algorithm,'UPRO',3): Sort(self.algorithm,"CumReturn",["BIL","AGG","TMF"],5,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["TECL","TQQQ","SOXL","EWZ","TMF"],5,False,1,3,1) else: if SMA(self.algorithm,'SPY',210) > SMA(self.algorithm,'DBC',360): if EMA(self.algorithm,'SPY',210) > EMA(self.algorithm,'SPY',360): if RSI(self.algorithm,'TQQQ',11) > 77: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: if CumReturn(self.algorithm,'TQQQ',6) < -0.1: if CumReturn(self.algorithm,'TQQQ',1) > 0.055: AH(self.algorithm,['BIL','UVXY','SQQQ'],3,0.33) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","EPI","SOXL","UPRO","QLD","EWZ","MVV","XLU","USD","TMF"],7,True,1,3,1) else: if 50 < RSI(self.algorithm,'IEF',7): Sort(self.algorithm,"SMADayRet",["TECL","EPI","SOXL","UPRO","MVV"],7,False,1,3,1) else: Sort(self.algorithm,"CumReturn",["SOXS","TMF"],5,True,1,3,1) else: Sort(self.algorithm,"RSI",["SPXU","SQQQ","TECS","SOXS"],5,False,1,3,1) else: self.A47() def A47(self): if STD(self.algorithm,'DBC',20) > STD(self.algorithm,'SPY',20): Sort(self.algorithm,"RSI",["SPXU","EPI","TECS","SOXS","SQQQ"],5,False,1,3,1) else: Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","TMF"],5,True,1,3,1) def A40(self): Sort(self.algorithm,"SMADayRet",["TECL","TQQQ","SOXL","UPRO","QLD"],5,False,1,3,1) from indicators import * from project.main import YellowCatStrat #https://app.composer.trade/symphony/dgSMXwsjnzgBgD59Emf7/details class ProposalV304cBetaBallerTCCCWithBelcampo692012DDReductionAdditionalOverallDDReductionStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'BIL', 42) < RSI(self.algorithm, 'IEF', 70): if RSI(self.algorithm, 'SPY', 7) > 75: Sort(self.algorithm, 'RSI', ('UVXY', 'VIXY'), 12, False, 1, 130, 1) else: if RSI(self.algorithm, 'SOXL', 5) <= 75: Sort(self.algorithm,'SMA',('SOXL', 'TQQQ', 'TECL'),12,True,1,130,1) else: Sort(self.algorithm,'SMA',('SOXS', 'SQQQ'),12,True,1,130,1) else: if RSI(self.algorithm, 'SPY', 6) < 27: if RSI(self.algorithm, 'SHY', 7) < RSI(self.algorithm, 'SPHB', 8): Sort(self.algorithm,'RSI',('SOXS', 'SQQQ'),7,False,1,130,1) else: Sort(self.algorithm,'RSI',('SOXL', 'SPXL', 'TECL', 'TMF', 'UPRO', 'USD', 'TQQQ'),18,False,1,130,1) else: if RSI(self.algorithm, 'SPY', 10) < 30: Sort(self.algorithm,'RSI',('SOXL', 'TECL', 'TMF', 'UPRO'),17,False,1,130,1) else: if RSI(self.algorithm, 'UVXY', 10) > 84: if self.algorithm.Portfolio['TLT'].Price > SMA(self.algorithm, 'TLT', 200): if SMA(self.algorithm, 'TLT', 20) < 0: if EMA(self.algorithm, 'SPY', 210) <= SMA(self.algorithm, 'SPY', 360): if RSI(self.algorithm, 'TQQQ', 10) < 30: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SOXL', 'UPRO'),5,False,1,130,0.21) else: if CumReturn(self.algorithm, 'SPXU', 6) <= CumReturn(self.algorithm, 'UPRO', 3): Sort(self.algorithm,'CumReturn',('SQQQ', 'EUO', 'YCS'),5,True,1,130,0.21) else: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SOXL', 'CURE'),5,False,1,130,0.21) else: if RSI(self.algorithm, 'TQQQ', 11) > 77: AH(self.algorithm, 'UVXY', 130, 0.21) else: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SOXL', 'UPRO', 'TMV'),5,False,1,130,0.21) else: if EMA(self.algorithm, 'SPY', 210) <= SMA(self.algorithm, 'SPY', 360): if RSI(self.algorithm, 'TQQQ', 10) < 30: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SOXL'),5,False,1,130,0.21) else: if CumReturn(self.algorithm, 'UUP', 2) >= 1: Sort(self.algorithm,'CumReturn',('TECS', 'SOXS', 'SQQQ'),5,True,1,130,0.21) else: if CumReturn(self.algorithm, 'SPXU', 5) >= CumReturn(self.algorithm, 'UPRO', 4): Sort(self.algorithm,'CumReturn',('ERX', 'EUO', 'YCS'),5,True,1,130,0.21) else: Sort(self.algorithm,'SMA',('SOXL', 'EWZ', 'MVV', 'USD'),5,False,1,130,0.21) else: if SMA(self.algorithm, 'SPY', 210) > SMA(self.algorithm, 'DBC', 360): if RSI(self.algorithm, 'TQQQ', 11) > 77: AH(self.algorithm, 'UVXY', 130, 0.21) else: if CumReturn(self.algorithm, 'TQQQ', 6) < -10: if CumReturn(self.algorithm, 'TQQQ', 1) > 5.5: AH(self.algorithm, 'UVXY', 130, 0.21) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('SOXL',),5,False,1,130,0.21) else: Sort(self.algorithm,'CumReturn',('EWZ', 'UUP', 'TMF', 'UCO'),5,True,1,130,0.21) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SPXL', 'QLD', 'USD'),5,False,1,130,0.21) else: Sort(self.algorithm,'CumReturn',('EWZ', 'UUP', 'TMF'),5,True,1,130,0.21) else: if STD(self.algorithm, 'DBC', 20) > STD(self.algorithm, 'SPY', 20): Sort(self.algorithm,'RSI',('SHY', 'EWZ', 'GLD', 'SPXS', 'TECS', 'SOXS', 'UCO', 'YCS'),5,False,1,130,0.21) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('SOXL', 'USD', 'TMF'),5,False,1,130,0.21) else: Sort(self.algorithm,'CumReturn',('EWZ', 'SPXS', 'SOXS', 'UCO', 'YCS'),5,True,1,130,0.21) else: if SMA(self.algorithm, 'TLT', 20) < 0: if EMA(self.algorithm, 'SPY', 210) <= SMA(self.algorithm, 'SPY', 360): if RSI(self.algorithm, 'TQQQ', 10) < 30: Sort(self.algorithm,'SMA',('TQQQ', 'SOXL', 'UPRO'),5,True,1,130,0.21) else: if CumReturn(self.algorithm, 'UUP', 2) >= 1: Sort(self.algorithm,'CumReturn',('SPXS', 'TECS', 'SOXS', 'SQQQ', 'ERX'),5,False,1,130,0.21) else: if CumReturn(self.algorithm, 'SPXU', 5) >= CumReturn(self.algorithm, 'UPRO', 4): Sort(self.algorithm,'CumReturn',('SOXS', 'SQQQ', 'EPI'),5,True,1,130,0.21) else: if CumReturn(self.algorithm, 'BIL', 3) >= CumReturn(self.algorithm, 'TMV', 3): Sort(self.algorithm,'SMA',('TECL', 'SOXL', 'TNA'),5,False,1,130,0.21) else: Sort(self.algorithm,'SMA',('TECL', 'SOXL', 'TMV'),3,False,1,130,0.21) else: if SMA(self.algorithm, 'SPY', 210) > SMA(self.algorithm, 'DBC', 360): if RSI(self.algorithm, 'TQQQ', 11) > 77: AH(self.algorithm, 'UVXY', 130, 0.21) else: if CumReturn(self.algorithm, 'TQQQ', 6) < -10: if CumReturn(self.algorithm, 'TQQQ', 1) > 5.5: AH(self.algorithm, 'UVXY', 130, 0.21) else: Sort(self.algorithm,'SMA',('SOXL', 'TMV'),5,False,1,130,0.21) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('TQQQ', 'SOXL', 'UPRO', 'TMV', 'TECL'),5,True,1,130,0.21) else: Sort(self.algorithm,'SMA',('SOXL', 'UPRO'),22,False,1,130,0.21) else: if STD(self.algorithm, 'DBC', 20) > STD(self.algorithm, 'SPY', 20): if STD(self.algorithm, 'DBC', 10) >= 3: if STD(self.algorithm, 'TMV', 5) <= STD(self.algorithm, 'DBC', 5): AH(self.algorithm, 'TMV', 130, 0.21) else: AH(self.algorithm, 'DBC', 130, 0.21) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('TMV', 'SOXS', 'SPXU'),5,True,1,130,0.21) else: Sort(self.algorithm,'CumReturn',('EFA', 'EEM', 'SPXS', 'SOXS', 'UCO', 'TMV'),5,False,1,130,0.21) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('EPI', 'SOXL', 'UPRO'),5,False,1,130,0.21) else: Sort(self.algorithm,'CumReturn',('EWZ', 'TECS', 'SOXS', 'EUO', 'YCS', 'TMV'),5,True,1,130,0.21) else: if RSI(self.algorithm, 'UVXY', 10) > 74: AH(self.algorithm, 'UVXY', 130, 1) else: if self.algorithm.Portfolio['TLT'].Price > SMA(self.algorithm, 'TLT', 200): if SMA(self.algorithm, 'TLT', 20) < 0: if EMA(self.algorithm, 'SPY', 210) <= SMA(self.algorithm, 'SPY', 360): if RSI(self.algorithm, 'TQQQ', 10) < 30: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SOXL', 'UPRO'),5,False,1,130,0.5) else: if CumReturn(self.algorithm, 'SPXU', 6) <= CumReturn(self.algorithm, 'UPRO', 3): Sort(self.algorithm,'CumReturn',('SQQQ', 'EUO', 'YCS'),5,True,1,130,0.5) else: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SOXL', 'CURE'),5,False,1,130,0.5) else: if RSI(self.algorithm, 'TQQQ', 11) > 77: AH(self.algorithm, 'UVXY', 130, 0.5) else: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SOXL', 'UPRO', 'TMV'),5,False,1,130,0.5) else: if EMA(self.algorithm, 'SPY', 210) <= SMA(self.algorithm, 'SPY', 360): if RSI(self.algorithm, 'TQQQ', 10) < 30: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SOXL'),5,False,1,130,0.5) else: if CumReturn(self.algorithm, 'UUP', 2) >= 1: Sort(self.algorithm,'CumReturn',('TECS', 'SOXS', 'SQQQ'),5,True,1,130,0.5) else: if CumReturn(self.algorithm, 'SPXU', 5) >= CumReturn(self.algorithm, 'UPRO', 4): Sort(self.algorithm,'CumReturn',('ERX', 'EUO', 'YCS'),5,True,1,130,0.5) else: if CumReturn(self.algorithm, 'BIL', 3) >= CumReturn(self.algorithm, 'TMV', 3): Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SPXL', 'QLD', 'USD'),5,False,1,130,0.5) else: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'TMV'),5,False,1,130,0.5) else: if SMA(self.algorithm, 'SPY', 210) > SMA(self.algorithm, 'DBC', 360): if RSI(self.algorithm, 'TQQQ', 11) > 77: AH(self.algorithm, 'UVXY', 130, 0.5) else: if CumReturn(self.algorithm, 'TQQQ', 6) < -10: if CumReturn(self.algorithm, 'TQQQ', 1) > 5.5: AH(self.algorithm, 'UVXY', 130, 0.5) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('SOXL',),5,False,1,130,0.5) else: Sort(self.algorithm,'CumReturn',('EWZ', 'UUP', 'TMF', 'UCO'),5,True,1,130,0.5) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SPXL', 'QLD', 'USD'),5,True,1,130,0.5) else: Sort(self.algorithm,'SMA',('SOXL', 'UPRO'),22,False,1,130,0.5) else: if STD(self.algorithm, 'DBC', 20) > STD(self.algorithm, 'SPY', 20): Sort(self.algorithm,'RSI',('SHY', 'EWZ', 'GLD', 'SPXS', 'TECS', 'SOXS', 'UCO', 'YCS'),5,False,1,130,0.5) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('SOXL', 'USD', 'TMF'),5,False,1,130,0.5) else: Sort(self.algorithm,'CumReturn',('EWZ', 'SPXS', 'SOXS', 'UCO', 'YCS'),5,True,1,130,0.5) else: if SMA(self.algorithm, 'TLT', 20) < 0: if EMA(self.algorithm, 'SPY', 210) <= SMA(self.algorithm, 'SPY', 360): if RSI(self.algorithm, 'TQQQ', 10) < 30: Sort(self.algorithm,'SMA',('TQQQ', 'SOXL', 'UPRO'),5,True,1,130,0.5) else: if CumReturn(self.algorithm, 'UUP', 2) >= 1: Sort(self.algorithm,'CumReturn',('SPXS', 'TECS', 'SOXS', 'SQQQ', 'ERX'),5,False,1,130,0.5) else: if CumReturn(self.algorithm, 'SPXU', 5) >= CumReturn(self.algorithm, 'UPRO', 4): Sort(self.algorithm,'CumReturn',('SOXS', 'SQQQ', 'EPI'),5,True,1,130,0.5) else: if CumReturn(self.algorithm, 'BIL', 3) >= CumReturn(self.algorithm, 'TMV', 3): Sort(self.algorithm,'SMA',('TECL', 'SOXL', 'UPRO'),5,False,1,130,0.5) else: Sort(self.algorithm,'SMA',('TECL', 'SOXL', 'TMV', 'TQQQ'),3,False,1,130,0.5) else: if SMA(self.algorithm, 'SPY', 210) > SMA(self.algorithm, 'DBC', 360): if RSI(self.algorithm, 'TQQQ', 11) > 77: AH(self.algorithm, 'UVXY', 130, 0.5) else: if CumReturn(self.algorithm, 'TQQQ', 6) < -10: if CumReturn(self.algorithm, 'TQQQ', 1) > 5.5: AH(self.algorithm, 'UVXY', 130, 0.5) else: Sort(self.algorithm,'SMA',('SOXL', 'TMV'),5,False,1,130,0.5) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('TQQQ', 'SOXL', 'UPRO', 'TMV', 'TECL'),5,True,1,130,0.5) else: Sort(self.algorithm,'SMA',('SOXL', 'UPRO'),22,False,1,130,0.5) else: if STD(self.algorithm, 'DBC', 20) > STD(self.algorithm, 'SPY', 20): if STD(self.algorithm, 'DBC', 10) >= 3: if STD(self.algorithm, 'TMV', 5) <= STD(self.algorithm, 'DBC', 5): AH(self.algorithm, 'TMV', 130, 0.5) else: AH(self.algorithm, 'DBC', 130, 0.5) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('TMV', 'SOXS', 'SPXU'),5,True,1,130,0.5) else: Sort(self.algorithm,'CumReturn',('EFA', 'EEM', 'SPXS', 'SOXS', 'UCO', 'TMV'),5,False,1,130,0.5) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('EPI', 'SOXL', 'UPRO'),5,False,1,130,0.5) else: Sort(self.algorithm,'CumReturn',('EWZ', 'TECS', 'SOXS', 'EUO', 'YCS', 'TMV'),5,True,1,130,0.5) else: if EMA(self.algorithm, 'SPY', 210) <= SMA(self.algorithm, 'SPY', 360): if CumReturn(self.algorithm, 'SPY', 2) <= -2: Sort(self.algorithm,'CumReturn',('SPXS', 'TECS', 'SOXS', 'SQQQ'),5,True,1,130,0.5) else: if CumReturn(self.algorithm, 'SPXU', 6) >= CumReturn(self.algorithm, 'UPRO', 3): Sort(self.algorithm,'CumReturn',('BIL', 'AGG', 'TMF'),5,False,1,130,0.5) else: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SOXL', 'EWZ', 'TMF'),5,False,1,130,0.5) else: if SMA(self.algorithm, 'SPY', 210) > SMA(self.algorithm, 'DBC', 360): if EMA(self.algorithm, 'SPY', 210) > EMA(self.algorithm, 'SPY', 360): if RSI(self.algorithm, 'TQQQ', 11) > 77: AH(self.algorithm, 'UVXY', 130, 0.5) else: if CumReturn(self.algorithm, 'TQQQ', 6) < -10: if CumReturn(self.algorithm, 'TQQQ', 1) > 5.5: AH(self.algorithm, 'UVXY', 130, 0.5) else: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SPXL', 'EPI', 'SOXL', 'UPRO', 'QLD', 'EWZ', 'MVV', 'PUI', 'USD', 'TMF'),7,False,1,130,0.5) else: if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'IEF', 7): Sort(self.algorithm,'SMA',('TECL', 'SPXL', 'EPI', 'SOXL', 'UPRO', 'MVV'),7,False,1,130,0.5) else: Sort(self.algorithm,'CumReturn',('SOXS', 'TMF'),5,True,1,130,0.5) else: Sort(self.algorithm,'RSI',('SPXS', 'SQQQ', 'TECS', 'SOXS'),5,False,1,130,0.5) else: if STD(self.algorithm, 'DBC', 20) > STD(self.algorithm, 'SPY', 20): Sort(self.algorithm,'RSI',('SPXS', 'EPI', 'TECS', 'SOXS', 'SQQQ'),5,False,1,130,0.5) else: Sort(self.algorithm,'SMA',('TECL', 'TQQQ', 'SOXL', 'TMF'),5,True,1,130,0.5) #https://app.composer.trade/symphony/eWuObiu8EmMaM1wLJjar/details class V3BWCManagedFuturesStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.v3_bwc_managed_futures() def v3_bwc_managed_futures(self): Sort(self.algorithm, 'STD', ('DBMF', 'KMLM', 'FMF', 'CTA', 'WTMF'), 20, False, 1, 128, 0.25) Sort(self.algorithm, 'RSI', ('DBMF', 'KMLM', 'FMF', 'CTA', 'WTMF'), 10, False, 1, 128, 0.25) Sort(self.algorithm, 'MaxDD', ('DBMF', 'KMLM', 'FMF', 'CTA', 'WTMF'), 20, False, 1, 128, 0.25) Sort(self.algorithm, 'RSI', ('DBMF', 'KMLM', 'FMF', 'CTA', 'WTMF'), 14, False, 1, 128, 0.25) #https://app.composer.trade/symphony/0K6liVmTr0q82Y5HdspZ/details class The60408020StyleDeez21JUL2023Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.group1() self.group2() self.group3() self.group4() def group1(self): AH(self.algorithm, 'QQQ', 129, 0.12) AH(self.algorithm, 'SPY', 129, 0.12) def group2(self): AH(self.algorithm, 'TQQQ', 129, 0.48) AH(self.algorithm, 'UPRO', 129, 0.48) def group3(self): AH(self.algorithm, 'TLT', 129, 0.32) AH(self.algorithm, 'IEF', 129, 0.32) def group4(self): AH(self.algorithm, 'TMF', 129, 0.08) AH(self.algorithm, 'TYD', 129, 0.08) #https://app.composer.trade/symphony/SB3GTubqQnGWm3eQptUX/details class JasonKozsFearForTheLongTermOriginalStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'SVIX', 132, 0.75) AH(self.algorithm, 'UVIX', 132, 0.25)
#region imports from AlgorithmImports import * #endregion # Your New Python File
#CombinedStrategy2 version1.py from AlgorithmImports import * #endregion from AlgorithmImports import * from indicators import * from main import YellowCatStrat #https://app.composer.trade/symphony/oLw39T5NArarGky6aLhC/details class ZeroFiveBetaYoloStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('AMN','CHD','CVBF','DG','ERIE','FCN','FFNW','NTES','OTTR','PGR','PINC','QDEL','RLI','RMD','SFM','SMMF','TPB','UBCP','VIPS','VRTX','WDFC','ZM'),10,False,5,4,1) #https://app.composer.trade/symphony/EqmnUjWtHBbCT7PUBbSK/details class FortyTwovs69BILVSSOXLFIGHTStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'BIL', 12) > RSI(self.algorithm, 'IEF', 12): AH(self.algorithm, 'BIL', 5, 1) else: AH(self.algorithm, 'SOXL', 5, 1) #https://app.composer.trade/symphony/GsdpzOHycF5UKJxRohRR/details class SeventySOXL30SOXSStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'SOXS', 6, 0.3) AH(self.algorithm, 'SOXL', 6, 0.7) #https://app.composer.trade/symphony/Do36TWTu1gWh8SewO1Go/details class Six040ReturnStackingStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'NTSX', 7,0.66) AH(self.algorithm, 'DBMF', 7,0.15) AH(self.algorithm, 'BSJN', 7,0.15) AH(self.algorithm, 'VIXM', 7,0.04) #https://app.composer.trade/symphony/PQaK6XWI4Ird5bT5b7Bo/details class Nine010UNHCOSTQQQSMHStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'UNH', 8,0.45) AH(self.algorithm, 'COST', 8,0.45) AH(self.algorithm, 'QQQ', 8,0.05) AH(self.algorithm, 'SMH', 8,0.05) #https://app.composer.trade/symphony/T2vzrOHG6E9Rk1flV0di/details class Two30407BatshitSimplev10SharedCopyStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('JEPI', 'UPRO'), 10, 9,1) #https://app.composer.trade/symphony/QzwW2e6QFcxxfmNClUw8/details class AutoIndexDeez6JUL2023Strategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'SMADayRet',('AAPL','TSLA','GOOG'),90,True,1,10,0.8) Sort(self.algorithm,'SMADayRet',('MSFT','NVDA','JNJ','AMZN','V','JPM','BRK/B','META','PG','MA'),42,True,1,10,0.2) #https://app.composer.trade/symphony/iZICMymgVkj7lka9rBgO/details class ApplebutbadStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if SMA(self.algorithm, 'AAPL', 21) > SMA(self.algorithm, 'AAPL', 252): AH(self.algorithm, 'BIL', 11, 1) else: Sort(self.algorithm,'CumReturn',('AAPL','BIL'),21,False,1,11,1) #https://app.composer.trade/symphony/ysDMJE5KKVCP9lWD8FGS/details class ApplealsoterribleDeez8JUL20233YRBTAR12Strategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'AAPL', 2) > 69: AH(self.algorithm, 'AAPL', 12, 1) else: AH(self.algorithm, 'BIL', 12, 1) #https://app.composer.trade/symphony/RtoW10P6KipuEE99fWbP/details class ALLIDOISWINWINWINNOMATTERWHATStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'SPY', 13, 0.25) AH(self.algorithm, 'QQQ', 13, 0.25) AH(self.algorithm, 'DIA', 13, 0.25) AH(self.algorithm, 'IWM', 13, 0.25) #https://app.composer.trade/symphony/rCGPyUpqomZibcZLsLru/details class ABetterQQQStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('ATEN','CCRD','CHKP','CRUS','CSCO','DQ','ECOM','ELTK','ERIC','HCKT','INFY','JKHY','LOGI','MNDO','MSFT','NSYS','QLYS','SIMO','TSM','TSRI','WSTG'),40,False,4,14,1) #https://app.composer.trade/symphony/gWd5fpkaofGVtHMwLjYb/details class ABadIdeaStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if MaxDD(self.algorithm, 'SVXY', 4) > 10: AH(self.algorithm, 'BIL', 15, 1) else: AH(self.algorithm, 'SVXY', 15, 1) #https://app.composer.trade/symphony/BwF1pzV15LjyY4OhVxVz/details class BTCRothsDynamicDeez3JUL2023Strategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('MSTR','COIN','MARA','HUT','BITF','RIOT','BIL'),10,False,2,16,1) #https://app.composer.trade/symphony/ddD6u7HvWFwOlFfmMnuh/details class BrianEsPortfoliol26May2022Strategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('UPRO', 'TQQQ', 'SOXL', 'UDOW', 'TECL'), 25, 17,1) #https://app.composer.trade/symphony/VJB3T4rpOycCFc25K7tc/details class BitetheApple10918Strategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if CumReturn(self.algorithm, 'AAPL', 10) > -1: AH(self.algorithm, 'AAPB', 18, 1) else: AH(self.algorithm, 'AAPD', 18, 1) #https://app.composer.trade/symphony/Ksz4NUONdDyUDLAH09MK/details class BILtestdriveStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if STD(self.algorithm, 'BIL', 2) > STD(self.algorithm, 'BIL', 3): AH(self.algorithm, 'SPY', 19, 1) else: AH(self.algorithm, 'BIL', 19, 1) #https://app.composer.trade/symphony/bGVzMtaIInv85FuVysnm/details class BestCryptoRebalancerFeaverStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'MSTR', 20,0.375) AH(self.algorithm, 'BITX', 20,0.375) AH(self.algorithm, 'HUT', 20,0.0625) AH(self.algorithm, 'BITF', 20,0.0625) AH(self.algorithm, 'MARA', 20,0.0625) AH(self.algorithm, 'COIN', 20,0.0625) #https://app.composer.trade/symphony/HAx2CLC7knePDxP4PlXQ/details class BelieveinBigTechStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('META','AMZN','AAPL','MSFT','GOOG','PYPL','ADBE','NVDA'),20,True,2,21,1) #https://app.composer.trade/symphony/6nP4CoYDtzIHq1tvNGt4/details class BBsimpleStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'BIL', 42) < 70: AH(self.algorithm, 'SPXL', 22, 1) else: AH(self.algorithm, 'BIL', 22, 1) #https://app.composer.trade/symphony/Vhhi0M0jPwArFBskS258/details class BalancedPortfolioStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'TLT', 23, 0.5) AH(self.algorithm, 'SPY', 23, 0.5) #https://app.composer.trade/symphony/aPm93t3bC3Jnfsh1WH1t/details class CQFNGUTMVSTOPTRYINGSOHARD8223Strategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'FNGU', 24, 0.5) AH(self.algorithm, 'TMV', 24, 0.5) #https://app.composer.trade/symphony/tuDq0KiVG9f6rXqUHmME/details class CQBankBlenderV108223Strategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'FNGU', 25, 1) #https://app.composer.trade/symphony/6oGqcHPz8hb9s93lIeD2/details class CopyRayDalioStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'VTI', 26,0.3) AH(self.algorithm, 'TLT', 26,0.4) AH(self.algorithm, 'IEF', 26, 0.15) AH(self.algorithm, 'DBC', 26, 0.075) AH(self.algorithm, 'GLD', 26,0.075) #https://app.composer.trade/symphony/zp49VUtDfrHce2eBvoEN/details class CopyofYourABasicBroStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'SMADayRet',('SVXY','UVXY','TQQQ','SQQQ','BIL','GLD','UDN','UUP','HEQT','BTAL','TJUL','RSBT','SPYC'),20,False,3,27,1.0) #https://app.composer.trade/symphony/WP9xp1rLTO4c2H9UHUCQ/details class CopyofTheboringIndexStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('SPY', 'QQQ', 'IWM', 'DIA'), 90, 28,1) #https://app.composer.trade/symphony/UW3aJor3qOT9fcQXOVPp/details class DragonPortfolioStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('UPRO', 'TMF', 'XLF'), 45, 29,1) #https://app.composer.trade/symphony/6lLWbBtodpMpQjZlP1Od/details class DiversifywithSinStocksStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('GLD', 'UUP'), 26, 30,1) #https://app.composer.trade/symphony/0dKcj7cKmeHhafQKlrHM/details class DiversifywithGoldtheDollarStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('GLD', 'UUP'), 26, 31,1) #https://app.composer.trade/symphony/aXiDzYzGFlraxOVfSXtL/details class DiversifiedPortfolioStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'SPY', 32, 0.33) AH(self.algorithm, 'VO', 32, 0.33) AH(self.algorithm, 'IJR', 32, 0.33) #https://app.composer.trade/symphony/DQsRooIeQ48GW9RThp6S/details class DEVDollarsUUP10OCT2022DeezStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'UUP', 7) > 50: Sort(self.algorithm,'RSI',('DG','DLTR'),7,False,1,33,1) else: Sort(self.algorithm,'RSI',('WMT','COST'),7,False,1,33,1) #https://app.composer.trade/symphony/cS2s3Pj6tQV7cgCcwWQd/details class DerpLordStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'UVXY', 30) > 72: AH(self.algorithm, 'UVXY', 34, 1) else: AH(self.algorithm, 'BIL', 34, 1) #https://app.composer.trade/symphony/Ke1My3uRO19opK9hHod8/details class DBCStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'DBC', 35, 1) #https://app.composer.trade/symphony/vaxElezfN4Ns1C2FOm0F/details class D0ppV1GUGGRSISectorRotationStrategy(YellowCatStrat): def __init__(self, algorithm): self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('XLU','XLV','XLRE','XLE','XLF','XBI','XLK','XLY'),10,False,3,36,1.0) #https://app.composer.trade/symphony/9fF2WR5z4OlljLfAEHwA/details class InversevolatiltyStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('UPRO', 'TQQQ', 'SOXL', 'UDOW'), 25, 37, 1) #https://app.composer.trade/symphony/7CQSvqELSubp5fw4OL1T/details class InverseVolatilitywithTECLStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('UPRO', 'TQQQ', 'SOXL', 'UDOW', 'TECL'), 25, 38, 1) #https://app.composer.trade/symphony/idFdBU6ElbRpdFt5uOQa/details class IMPORTANTEPacoAseguirCopyofTQQQFTLTOriginalJKozInvestCopyStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'MaxDD',('VOX','VFH','VDC','VAW','VIS','VGT','VPU','VCR','VHT','VDE','VNQ','PG','MCD','WMT','REGN','KMB','UL'),46,True,1,39,1) #https://app.composer.trade/symphony/LvUwIJ4oCTZxT0QFXuPn/details class ICrackedtheCodeStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'FNGU', 40, 1) #https://app.composer.trade/symphony/SpVte7pz0lHBYN4DjoPD/details class HFEAmorediversifiedStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'UPRO', 41,0.35) AH(self.algorithm, 'TMF', 41, 0.35) AH(self.algorithm, 'VIXM', 41, 0.15) AH(self.algorithm, 'FAS', 41,0.15) #https://app.composer.trade/symphony/Zt96r6DsP7cRnSZ0uLpK/details class HFEADiverseDeez12JUN2023Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('IEF', 'IEI', 'UTWO', 'TLT'), 42, 42,0.4) AHIV(self.algorithm, ('TQQQ', 'SOXL', 'SPXL'), 69, 42,0.6) #https://app.composer.trade/symphony/FYBISYMcAYEDPPGESs9e/details class HFEA94DeleveragedDeez23JUL2023Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('SPY','QQQ','IWM','EFA','EEM','AGG','GLD','SLV','USO','UNG','XLE','XLF','XLV','XLY','XLP','XLC','XLI','XLB','XLRE','XLK','XLU'),45,True,5,43,1) #https://app.composer.trade/symphony/In9SPETm1zZFmKdzj7pr/details class HedgefundieexploresthesuppositoryisleDeez9JUN2023Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'BIL', 44,0.45) AH(self.algorithm, 'SOXL', 44,0.55) #https://app.composer.trade/symphony/wQ5LH2GeJppqxjnlVgbO/details class GoalkeeperStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'MaxDD',('VOX','VFH','VDC','VAW','VIS','VGT','VPU','VCR','VHT','VDE','VNQ','PG','MCD','WMT','REGN','KMB','UL'),46,True,1,45,1) #https://app.composer.trade/symphony/XhwZL9FMBbkSBGQWlXcu/details class FollowDumbMoneyStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('UPRO','SOXL','TECL'),21,False,1,46,0.55) AH(self.algorithm, 'TMF', 46,0.45) #https://app.composer.trade/symphony/QsPkgniHZmeYCzoxoPEE/details class FactcheckJasonStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if CumReturn(self.algorithm, 'VTI', 1) > 0: AH(self.algorithm, 'TQQQ', 47, 1) else: AH(self.algorithm, 'BIL', 47, 1) #https://app.composer.trade/symphony/w23LDhD3E8uZBFA0iKTW/details class ExpiredWarrantyV10EricSwithpiratedcontentfromBrianERonniem90narwhal44DereckNHinnomTXStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('TLT','IEI','UPRO','TQQQ','SOXL'),14,False,2,48,1) #https://app.composer.trade/symphony/JotPwgE3JbDxDjXPvPpz/details class ExampleSymphonyMixNoK1Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.simple_sort() def simple_sort(self): Sort(self.algorithm,'RSI',('AAPL','MSFT','NFLX','NVDA','XOM'),14,True,2,49,1.0) #https://app.composer.trade/symphony/OhKqWWTHI5o9l2wwaKUl/details class EnhancedMomentumSimpleETFLeverageStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'VTI', 50, 0.5) AH(self.algorithm, 'BND', 50, 0.5) #https://app.composer.trade/symphony/cSjTwQC04w6objHPPvVC/details class LudwigsMoonshotSonataStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('AAPL','AMZN','GOOGL','MSFT','UPRO','TQQQ','ERX'),20,True,2,51,0.5) AH(self.algorithm, 'IEP', 51, 0.5) #https://app.composer.trade/symphony/8jLmqX7IzngSO3Zomd3X/details class LongBacktestSlimel12Dec2012UUPDBCStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if CumReturn(self.algorithm, 'LQD', 20) > CumReturn(self.algorithm, 'BIL', 20): AH(self.algorithm, 'SPY', 52, 1) else: AH(self.algorithm, 'BIL', 52, 1) #https://app.composer.trade/symphony/3a4CLkIzTVe7Sw4I7VVX/details class LindyInvestingStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('BK','ED','PG','KO','PFE','IBM','JNJ'),28,False,2,53,1) #https://app.composer.trade/symphony/rl9qVhFinS9jAuQIrdhc/details class LeveragedGoldenButterfly17APY44DDSince1992Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'UPRO', 54, 0.36) AH(self.algorithm, 'TYD', 54, 0.36) AH(self.algorithm, 'UGL', 54,0.28) #https://app.composer.trade/symphony/TAz29Ay9AsRoOwIxlsdM/details class Layer4StandardVolatilityHedgeUUPGLDStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.layer_4_standard_volatility_hedge_uupgld() def layer_4_standard_volatility_hedge_uupgld(self): AHIV(self.algorithm, ('UUP', 'GLD'), 30, 55, 1.0) #https://app.composer.trade/symphony/E1sJRzphemoxQHkCCAfe/details class JasonsNightmareStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('TSLY','CONY','NVDY','AMDY','APLY','AMZY','OARK','DISO','GOOY','PYPY','MSFO','JPMO','XOMO','NFLY','FBY','SQY','MRNY','FEPI'),5,True,4,56,1) #https://app.composer.trade/symphony/mrAchwGfNh4nH0VAKjoM/details class PUBWAMColonelSandersRSI20dSPYTFLOSafeWAMV1aBWCWhichWAMBILBILQQQSPYcomboStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AHIV(self.algorithm,('SARK','SVIX','SOXL'), 9, 57, 1) #https://app.composer.trade/symphony/OUBuESSWODBwwPpPFyK5/details class PUBNEWSCHDSPYMovingAverageComboDereckNHTXStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'SPY', 10) > 80: AH(self.algorithm, 'UVXY', 58, 1) else: AH(self.algorithm, 'SPY', 58, 1) #https://app.composer.trade/symphony/lOTax8Ltw6CM9xSaQxJH/details class PopBotQ068S368Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('VDE','VNQ','VHT','VFH','VOX','VPU','VAW','VGT','VIS','VDC','VCR'),200,True,3,59,1) #https://app.composer.trade/symphony/q91iuhstVZPDfRsoKv2i/details class PHASETESTofInflationSpiralHedgeStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if CumReturn(self.algorithm, 'TBT', 60) >= 10: Sort(self.algorithm,'STD',('TBF'),14,True,1,60,1) else: AH(self.algorithm, 'QQQ', 60, 1) #https://app.composer.trade/symphony/VxyLxfj0lIZBsLqJ3oyj/details class NFLXnBILStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'NFLX', 61,0.042) AH(self.algorithm, 'BIL', 61, 0.69) AH(self.algorithm, 'TECL', 61,0.268) #https://app.composer.trade/symphony/mDSFgfohWY82RWyZtUbG/details class NewSymphonyStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('MSFT', 'AAPL', 'GOOGL', 'AMZN', 'JNJ', 'UNH', 'ABBV', 'PFE', 'JPM', 'BAC', 'C', 'WFC', 'PG', 'KO', 'UL', 'D', 'NEE', 'DUK', 'EXC'), 21, 62, 1) #https://app.composer.trade/symphony/10gAZFrWUyt0yKglAD6O/details class MonthlyMARSSStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.monthly_mar_ss() def monthly_mar_ss(self): Sort(self.algorithm,'SMADayRet',('AAPL','MSFT','NVDA','TSLA'),10,True,1,63,1.0) #https://app.composer.trade/symphony/Y8nRTfQ3ybKp3Eo4yb0Z/details class MARABETAHEDGEStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('TLT', 'IEF', 'SHY', 'XLP', 'DBC', 'XLU', 'XLY'), 7, 64, 1) #https://app.composer.trade/symphony/SLJ1etdxxgtbfjQaSFt3/details class rsisorttbtshygbacktestJune222023toJune302023Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('TBT','SHYG'),30,True,1,65,1) #https://app.composer.trade/symphony/ClJl4KBkgqwKQ6iomW68/details class rsisortbacktestJune222023toJune302023Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('TBT','SHYG'),30,True,1,66,1) #https://app.composer.trade/symphony/aswQVVXTdJMJzsqwNuFO/details class RSIBugStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'BIL', 42) < RSI(self.algorithm, 'IEF', 69): AH(self.algorithm, 'SPY', 67, 1) else: AH(self.algorithm, 'BIL', 67, 1) #https://app.composer.trade/symphony/2CMhgSve60w0acTxNjrj/details class risingratesHFEAStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('UPRO', 'TMF', 'XLF'), 45, 68, 1) #https://app.composer.trade/symphony/bFuiNeJNwCuBOtGLZHly/details class RenTechnoPPOStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'YINN', 69, 1) #https://app.composer.trade/symphony/TSM1J4BRV9zHEgfGYpcY/details class RecessionTesterStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if CumReturn(self.algorithm, 'LQD', 20) > CumReturn(self.algorithm, 'BIL', 20): AH(self.algorithm, 'SPY', 70, 1) else: AH(self.algorithm, 'BIL', 70, 1) #https://app.composer.trade/symphony/9EyiCvgJOCy2rxhC2pUP/details class QYLDGangStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('QYLD','RYLD','XYLD','NUSI','JEPI','SCHD','DIVO'),40,True,4,71,1) #https://app.composer.trade/symphony/EcE0QtZn1CEFjqT3WO1O/details class QQQ81RSIStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.qqq_81rsi() def qqq_81rsi(self): if RSI(self.algorithm, 'QQQ', 10) < 31: AH(self.algorithm, 'QLD', 72, 1) else: AH(self.algorithm, 'BIL', 72, 1.0) #https://app.composer.trade/symphony/OLmSkeqQV46tcWSZnAfK/details class QQQ10dabove80l30May2007Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'QQQ', 10) > 80: AH(self.algorithm, 'QID', 73, 1) else: AH(self.algorithm, 'BIL', 73, 1) #https://app.composer.trade/symphony/NTdktMdbrUiCq0A5MH79/details class SSTraderSafetyOrchestrav110202216982DDStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('XLU','XLV','XLRE','XLE','XLF','XBI','XLK','XLY'),10,False,3,74,1.0) #https://app.composer.trade/symphony/wea1pez8Im13TD5unDN9/details class SPYOverboughtUVXYTestStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'SPY', 10) > 68: AH(self.algorithm, 'UVXY', 75, 1) else: AH(self.algorithm, 'BIL', 75, 1) #https://app.composer.trade/symphony/gv99mKXm2PaRO3CSoUPB/details class SPYOverboughtTestPublicationStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'SPY', 10) > 80: AH(self.algorithm, 'UVXY', 76, 1) else: AH(self.algorithm, 'SPY', 76, 1) #https://app.composer.trade/symphony/OV3ohHkJ4tKA6HqqSfle/details class SPYandChillStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'SPY', 77, 1) #https://app.composer.trade/symphony/5WKW0M0LvaWzIVeZvrAJ/details class SPY200dMASPYelseSHYStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if GetCurrentPrice(self.algorithm, 'SPY') > SMA(self.algorithm, 'SPY', 200): AH(self.algorithm, 'SPY', 78, 1) else: AH(self.algorithm, 'SHY', 78, 1) #https://app.composer.trade/symphony/T0Wj7LuRJrPcVs22XpPV/details class SPY10dabove80l30May2007Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'SPY', 10) > 80: AH(self.algorithm, 'SDS', 79, 1) else: AH(self.algorithm, 'BIL', 79, 1) #https://app.composer.trade/symphony/MGNt4WFhVh6Zw6p2COun/details class SPY9dMaxDDTestStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if MaxDD(self.algorithm, 'SPY', 9) < 0.000001: AH(self.algorithm, 'TLT', 80, 1) else: AH(self.algorithm, 'SPY', 80, 1) #https://app.composer.trade/symphony/tTd3LX15VYRoUiCxdKTi/details class SOXSwhenOverboughtStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'TQQQ', 10) > 79: AH(self.algorithm, 'SOXS', 81, 1) else: AH(self.algorithm, 'BIL', 81, 1) #https://app.composer.trade/symphony/qfNzXsjnvXTzQyJ7h35U/details class SimplifiedLevelsStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'QQQ', 10) > 80: AH(self.algorithm, 'UVXY', 82, 1) else: AH(self.algorithm, 'BIL', 82, 1) #https://app.composer.trade/symphony/rNl1ELtsUlUbSUYt2JBG/details class SimpleVIXSharedCopyStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'VIXM', 83, 0.5) AH(self.algorithm, 'SVXY', 83, 0.5) #https://app.composer.trade/symphony/WME1hYvaGYKI3pzJHjmy/details class SimpleSortStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.simple_sort() def simple_sort(self): Sort(self.algorithm,'RSI',('AAPL','MSFT','NFLX','NVDA','XOM'),14,True,2,84,1.0) #https://app.composer.trade/symphony/aH53aAlLhwd1kSxkMbFs/details class ShyvSpyUVXY20dRSI70Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'UVXY', 20) < 70: AH(self.algorithm, 'SPY', 85, 1) else: AH(self.algorithm, 'SHY', 85, 1) #https://app.composer.trade/symphony/lM8PIp0ipSjup6brD10c/details class ShyvSpySPY12dMDD12Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if MaxDD(self.algorithm, 'SPY', 12) < 12: AH(self.algorithm, 'SPY', 86, 1) else: AH(self.algorithm, 'SHY', 86, 1) #https://app.composer.trade/symphony/cf9FHFVsml7INNRmBMcX/details class ShortJimStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'BIL', 87, 1) #https://app.composer.trade/symphony/jia7HyanMNsUuKQVxHeV/details class TQQQFTLTsshareStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'USA', 88, 1) #https://app.composer.trade/symphony/W4BuxgU3dJWBAh4LhCtw/details class TMBPEStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('SPY', 'QQQ', 'IWM', 'DIA'), 90, 89,1.0) #https://app.composer.trade/symphony/VII5ylQXfKPHI9v22Br0/details class TimElonandHuangsMostExcellentAdventureNoK1MultirangeorQQQmodStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'BIL', 90, 1) #https://app.composer.trade/symphony/GDyyeD1p6KNa5jT5qkhj/details class ThresholddemoStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'SPY', 91,0.25) AH(self.algorithm, 'QQQ', 91, 0.25) AH(self.algorithm, 'DIA', 91, 0.25) AH(self.algorithm, 'AAPL', 91,0.25) #https://app.composer.trade/symphony/7Ep618hWKBYw7blBvvI0/details class TheTimeless6040InvestCopyStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'VTI', 92, 0.5) AH(self.algorithm, 'BND', 92, 0.5) #https://app.composer.trade/symphony/V68tn0WRdvjLKAVdd2m3/details class Thenamesbondv2Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('SHV','TLT','HYG','GLD','UUP'),90,True,2,93,0.5) Sort(self.algorithm,'CumReturn',('SHV','TLT','HYG','GLD','UUP'),119,True,2,93,0.5) #https://app.composer.trade/symphony/97lyngIGuxcHQU9lnJyn/details class ThenamesbondStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('HYG','TLT','AGG','TIP','IEF','SHV'),90,True,1,94,0.5) Sort(self.algorithm,'CumReturn',('HYG','TLT','AGG','TIP','IEF','SHV'),90,True,2,94,0.5) #https://app.composer.trade/symphony/LKpwvyC5AMt7VQKH5FX0/details class TheFourHorsemenoftheApocalypseLexLugerRemixStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.monthly_mar_ss() def monthly_mar_ss(self): Sort(self.algorithm,'SMADayRet',('AAPL','MSFT','NVDA','TSLA'),10,True,1,95,1.0) #https://app.composer.trade/symphony/pHcP5TnjPANcUKm59N6f/details class TheAristocratDeez8JUL2023Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AHIV(self.algorithm, ('AAPL', 'MSFT', 'AMZN', 'NVDA', 'GOOGL'), 90, 96,0.4) AHIV(self.algorithm, ('WBA', 'MMM', 'O'), 90, 96,0.6) #https://app.composer.trade/symphony/8FODoQxQEBTopXux4pXK/details class The4HorsemenStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'UNH', 97, 0.25) AH(self.algorithm, 'ULTA', 97, 0.25) AH(self.algorithm, 'COST', 97, 0.25) AH(self.algorithm, 'MNST', 97, 0.25) #https://app.composer.trade/symphony/MMhqp5SpbTZJzYyOsn4W/details class TestOverboughtStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'SPY', 10) > 80: AH(self.algorithm, 'UVXY', 98, 1) else: AH(self.algorithm, 'BIL', 98, 1) #https://app.composer.trade/symphony/pIE8eI9f5WUflMWqeBXb/details class TestIBKRFeesStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('TQQQ','SQQQ','SOXL','SOXS','BSV','BIL','TMF','TMV','TLT','SPXS','UPRO','QID','QLD'),2,False,4,99,1) #https://app.composer.trade/symphony/BOH7t4anTqXMBc2iA78F/details class TechEnthusiastStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'QQQ', 100, 1) #https://app.composer.trade/symphony/IkLHKU4IWV9xw9dZIQlj/details class TaxableEventMachineDeez23JUL2023Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'RSI',('SPY','QQQ','IWM','EFA','EEM','AGG','GLD','SLV','USO','UNG','XLE','XLF','XLV','XLY','XLP','XLC','XLI','XLB','XLRE','XLK','XLU'),45,True,5,101,1) #https://app.composer.trade/symphony/a0OyPcu0xi4JsnHcYzsk/details class treasuryswitchStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if MaxDD(self.algorithm, 'TLT', 11) > MaxDD(self.algorithm, 'SHY', 11): AH(self.algorithm, 'SPY', 102, 1) else: AH(self.algorithm, 'XLP', 102, 1) #https://app.composer.trade/symphony/6sJp2lojS2hn1OUThlFa/details class tradingalpha901ExampleStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if GetCurrentPrice(self.algorithm, 'SPY') > SMA(self.algorithm, 'SPY', 220): AH(self.algorithm, 'SPY', 103, 1) else: AH(self.algorithm, 'BIL', 103, 1) #https://app.composer.trade/symphony/1kpCKMUZwgnCyyJcv6sl/details class TradeUnweightedTestStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'VIXM', 104, 0.5) AH(self.algorithm, 'SVXY', 104, 0.5) #https://app.composer.trade/symphony/2dVYXvm5P5Kafl6LSwB9/details class TQXLDeez11JUN2023Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.group() def group(self): AHIV(self.algorithm, ('TQQQ', 'SOXL'), 30, 105, 1.0) #https://app.composer.trade/symphony/N7nxAmvVwxT7kLkaoTLs/details class V10BetaBallerDeez6MOAR137404DD274Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'BIL', 7) < RSI(self.algorithm, 'BND', 7): AH(self.algorithm, 'SOXS', 106, 1) else: AH(self.algorithm, 'SOXL', 106, 1) #https://app.composer.trade/symphony/SqtiyYC7K0iJwT8ft69x/details class V10BetaBaller2007Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'BIL', 7) > RSI(self.algorithm, 'BND', 7): AH(self.algorithm, 'SH', 107, 1) else: AH(self.algorithm, 'SHY', 107, 1) #https://app.composer.trade/symphony/AUp3kSElLckqaeJafS3a/details class V7aBWCMarketAssassinK1FreeStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'SPY', 10) > 80: AH(self.algorithm, 'UVXY', 108, 1) else: AH(self.algorithm, 'BIL', 108, 1) #https://app.composer.trade/symphony/FNBPlbrt8a6MCvC5DRO0/details class V6BWCTechRotatorComboStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'FNGU', 109, 1) AH(self.algorithm, 'TMV', 109, 1) #https://app.composer.trade/symphony/cZ3yeg2l4AopolFtVYU6/details class V6BWCCommoditiesStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'SPY', 10) > 68: AH(self.algorithm, 'UVXY', 110, 1) else: AH(self.algorithm, 'BIL', 110, 1) #https://app.composer.trade/symphony/3l4zGMF4vtvL2huNlUSf/details class v05FNGUorSafetyTownAllSharedVersionsPlusNAILBlackSwanMeanRevBondSignalStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'TMF', 111, 1) #https://app.composer.trade/symphony/APs6lX70kNe2HrAU9xyz/details class V2YieldCurveInversionsignalStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if CumReturn(self.algorithm, 'SHY', 252) > -3.5: AH(self.algorithm, 'SHY', 112, 1) else: AH(self.algorithm, 'IEF', 112, 1) #https://app.composer.trade/symphony/kfFPpRdm6vHXFeFB0Yl2/details class V02AlphaBallerDeez1YrAR842DD148Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'SOXL', 7) > RSI(self.algorithm, 'SH', 7): AH(self.algorithm, 'BIL', 113, 1) else: AH(self.algorithm, 'TBT', 113, 1) #https://app.composer.trade/symphony/LkjKmhmoWKhwiy0G3QxZ/details class V1MomentumStrengthBuilderMichaelB6040Top10SafetyStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'BIL', 7) > RSI(self.algorithm, 'BND', 7): AH(self.algorithm, 'SH', 114, 1) else: AH(self.algorithm, 'SHY', 114, 1) #https://app.composer.trade/symphony/h6YU0XCuEf437QDbdJ1X/details class V1DEVYieldCurveInversionsignalInversionwhileinUUPStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if SMADayRet(self.algorithm, 'STIP', 175) <= -0.01: AH(self.algorithm, 'UUP', 115, 1) else: AH(self.algorithm, 'BIL', 115, 1) #https://app.composer.trade/symphony/BZHwAVNp4OHMnODpMVgt/details class V1DEVRussianRoublyat10OCT2022Strategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'UVXY', 30) > 72: AH(self.algorithm, 'UVXY', 116, 1) else: AH(self.algorithm, 'BIL', 116, 1) #https://app.composer.trade/symphony/tROOkrhejbWmcRtHBoR1/details class V1BWCWashSaleSymphonyStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'CLIP', 117, 1) #https://app.composer.trade/symphony/iICCVNSaNxA7guWhwK2w/details class V1aMagicInternetMoneyV1aTQQQFTLTStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if MaxDD(self.algorithm, 'SVXY', 4) > 10: AH(self.algorithm, 'BIL', 118, 1) else: AH(self.algorithm, 'SVXY', 118, 1) #https://app.composer.trade/symphony/nlv4y8ozIJjCoY8M2LcD/details class YourABasicBroStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'SMADayRet',('SVXY','UVXY','TQQQ','SQQQ','BIL','GLD','UDN','UUP','HEQT','BTAL','TJUL','RSBT','SPYC'),20,False,3,119,1.0) #https://app.composer.trade/symphony/S7sHo0RRUGToFio0MCqI/details class YieldmaxMonthlyMARSSStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.yieldmax_monthly_mar_ss() def yieldmax_monthly_mar_ss(self): Sort(self.algorithm,'SMADayRet',('APLY','MSFO','NVDY','TSLY'),10,True,1,120,1.0) #https://app.composer.trade/symphony/QMk6DqM7klooDv4mqksW/details class YieldMax25dCRTop2wFEPIPWNStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('TSLY','CONY','NVDY','AMDY','APLY','AMZY','OARK','DISO','GOOY','PYPY','MSFO','JPMO','XOMO','NFLY','FBY','SQY','MRNY','FEPI'),25,True,2,121,1) #https://app.composer.trade/symphony/vFBdD30gPXtvda29vmYS/details class YieldMax5dCRTop4wFEPIStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): Sort(self.algorithm,'CumReturn',('TSLY','CONY','NVDY','AMDY','APLY','AMZY','OARK','DISO','GOOY','PYPY','MSFO','JPMO','XOMO','NFLY','FBY','SQY','MRNY','FEPI'),25,True,2,123,1) #https://app.composer.trade/symphony/i2YgyBckNTlPKH0skQ06/details class YesmySonStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.group() AH(self.algorithm, 'VGSH', 123,0.1) def group(self): AHIV(self.algorithm, ('VOO', 'JEPQ'), 90, 123, 1) #https://app.composer.trade/symphony/2OZwOxXfpl1ihAH8Af8m/details class YesStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'TMF', 124, 1) #https://app.composer.trade/symphony/nXbAx6pA4Kszx99J0eKu/details class XLYRSITestStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if RSI(self.algorithm, 'XLY', 10) > 80: AH(self.algorithm, 'UVXY', 125, 1) else: AH(self.algorithm, 'BIL', 125, 1) #https://app.composer.trade/symphony/LZOzW78YtjssJUmxLwR9/details class WaltsAntiYOLOFornicationDrillStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'YINN', 126, 1) #https://app.composer.trade/symphony/NKRwNRCR6unqJX9rEArH/details class SandysGoldenDragonStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.long_volatility() self.trend_and_momentum() self.fiat_alternatives() self.secular_growth_assets() self.interest_rate_linked() def long_volatility(self): self.group_long_volatility() def group_long_volatility(self): if MaxDD(self.algorithm, 'SPY', 4) > 6: if CumReturn(self.algorithm, 'UVXY', 45) < 500: AH(self.algorithm, 'UVXY', 127, 0.078750) else: AH(self.algorithm, 'SHY', 127, 0.026250) AH(self.algorithm, 'GLD', 127, 0.026250) AH(self.algorithm, 'UUP', 127, 0.026250) self.group_commodity() self.group_equity_linked1() else: AH(self.algorithm, 'SHY', 127, 0.026250) AH(self.algorithm, 'GLD', 127, 0.026250) AH(self.algorithm, 'UUP', 127, 0.026250) self.group_commodity() self.group_equity_linked1() if MaxDD(self.algorithm, 'SPY', 15) > 11: if CumReturn(self.algorithm, 'UVXY', 45) < 500: AH(self.algorithm, 'UVXY', 127, 0.078750) else: AH(self.algorithm, 'SHY', 127, 0.026250) AH(self.algorithm, 'GLD', 127, 0.026250) AH(self.algorithm, 'UUP', 127, 0.026250) self.group_commodity() self.group_equity_linked1() else: AH(self.algorithm, 'SHY', 127, 0.026250) AH(self.algorithm, 'GLD', 127, 0.026250) AH(self.algorithm, 'UUP', 127, 0.026250) self.group_commodity() self.group_equity_linked1() self.Garens_advanced_volatility_hedge_v2() def group_commodity(self): AH(self.algorithm, 'COM', 127, 0.013125) AH(self.algorithm, 'FAAR', 127, 0.013125) def group_equity_linked1(self): AH(self.algorithm, 'FTLS', 127, 0.009187) AH(self.algorithm, 'CCOR', 127, 0.017063) def Garens_advanced_volatility_hedge_v2(self): if CumReturn(self.algorithm, 'UVXY', 5) > -1: AHIV(self.algorithm, ('VIXM', 'UUP', 'UVXY', 'VIXM'), 5, 127, 0.05250) else: if MaxDD(self.algorithm, 'TLT', 45) < 5: AHIV(self.algorithm, ('TMF', 'IEF', 'TLT', 'SPY'), 5, 127, 0.05250) else: if EMA(self.algorithm, 'TLT', 10) > EMA(self.algorithm, 'TLT', 200): AHIV(self.algorithm, ('IEF', 'TLT', 'TMF', 'TMF'), 5, 127, 0.05250) else: if CumReturn(self.algorithm, 'UVXY', 5) > -0.5: AHIV(self.algorithm, ('VIXM', 'UUP', 'UVXY'), 5, 127, 0.05250) else: AHIV(self.algorithm, ('UUP', 'SHY'), 5, 127, 0.05250) def trend_and_momentum(self): self.group_equity_momentum() self.group_commodity_momentum() def group_equity_momentum(self): self.group_australia() self.group_germany() self.group_spain() self.group_france() self.group_uk() self.group_japan() self.group_italy() self.group_usa() self.group_netherlands() def group_australia(self): if CumReturn(self.algorithm, 'EWA', 252) > CumReturn(self.algorithm, 'IEF', 252): AH(self.algorithm, 'EWA', 127, 0.02) else: AH(self.algorithm, 'IEF', 127, 0.02) def group_germany(self): if CumReturn(self.algorithm, 'EWG', 252) > CumReturn(self.algorithm, 'IEF', 252): AH(self.algorithm, 'EWG', 127, 0.02) else: AH(self.algorithm, 'IEF', 127, 0.02) def group_spain(self): if CumReturn(self.algorithm, 'EWP', 252) > CumReturn(self.algorithm, 'IEF', 252): AH(self.algorithm, 'EWP', 127, 0.02) else: AH(self.algorithm, 'IEF', 127, 0.02) def group_france(self): if CumReturn(self.algorithm, 'EWQ', 252) > CumReturn(self.algorithm, 'IEF', 252): AH(self.algorithm, 'EWQ', 127, 0.02) else: AH(self.algorithm, 'IEF', 127, 0.02) def group_uk(self): if CumReturn(self.algorithm, 'EWU', 252) > CumReturn(self.algorithm, 'IEF', 252): AH(self.algorithm, 'EWU', 127, 0.02) else: AH(self.algorithm, 'IEF', 127, 0.02) def group_japan(self): if CumReturn(self.algorithm, 'EWJ', 252) > CumReturn(self.algorithm, 'IEF', 252): AH(self.algorithm, 'EWJ', 127, 0.02) else: AH(self.algorithm, 'IEF', 127, 0.02) def group_italy(self): if CumReturn(self.algorithm, 'EWI', 252) > CumReturn(self.algorithm, 'IEF', 252): AH(self.algorithm, 'EWI', 127, 0.02) else: AH(self.algorithm, 'IEF', 127, 0.02) def group_usa(self): if CumReturn(self.algorithm, 'SPY', 252) > CumReturn(self.algorithm, 'IEF', 252): AH(self.algorithm, 'SPY', 127, 0.02) else: AH(self.algorithm, 'IEF', 127, 0.02) def group_netherlands(self): if CumReturn(self.algorithm, 'EWN', 252) > CumReturn(self.algorithm, 'IEF', 252): AH(self.algorithm, 'EWN', 127, 0.02) else: AH(self.algorithm, 'IEF', 127, 0.02) def group_commodity_momentum(self): self.DBMF_replication() def DBMF_replication(self): self.group_Oil() self.group_NattyGas() self.group_Dollar() self.group_Aggs() self.group_BaseMetals() self.group_Uranium() self.group_Timber() self.group_Gold() self.group_Treasuries() self.group_SP500() def group_Oil(self): if STD(self.algorithm, 'USO', 30) > 1.75: if CumReturn(self.algorithm, 'USO', 90) > CumReturn(self.algorithm, 'SHV', 90): AH(self.algorithm, 'UCO', 127, 0.02) else: AH(self.algorithm, 'SCO', 127, 0.02) else: if CumReturn(self.algorithm, 'USO', 45) > CumReturn(self.algorithm, 'SHV', 45): AH(self.algorithm, 'UCO', 127, 0.02) else: AH(self.algorithm, 'SCO', 127, 0.02) def group_NattyGas(self): if STD(self.algorithm, 'UNG', 30) > 5: if CumReturn(self.algorithm, 'UNG', 90) > CumReturn(self.algorithm, 'SHV', 90): AH(self.algorithm, 'BOIL', 127, 0.02) else: AH(self.algorithm, 'KOLD', 127, 0.02) else: if CumReturn(self.algorithm, 'UNG', 45) > CumReturn(self.algorithm, 'SHV', 45): AH(self.algorithm, 'BOIL', 127, 0.02) else: AH(self.algorithm, 'KOLD', 127, 0.02) def group_Dollar(self): if STD(self.algorithm, 'UUP', 30) > 0.75: if CumReturn(self.algorithm, 'UUP', 90) > CumReturn(self.algorithm, 'SHV', 90): AH(self.algorithm, 'EUO', 127, 0.01) AH(self.algorithm, 'YCS', 127, 0.01) else: AH(self.algorithm, 'YCL', 127, 0.01) AH(self.algorithm, 'ULE', 127, 0.01) else: if CumReturn(self.algorithm, 'UUP', 45) > CumReturn(self.algorithm, 'SHV', 45): AH(self.algorithm, 'EUO', 127, 0.01) AH(self.algorithm, 'YCS', 127, 0.01) else: AH(self.algorithm, 'YCL', 127, 0.01) AH(self.algorithm, 'ULE', 127, 0.01) def group_Aggs(self): if STD(self.algorithm, 'DBA', 30) > 3.5: if CumReturn(self.algorithm, 'DBA', 90) > CumReturn(self.algorithm, 'SHV', 90): AH(self.algorithm, 'DBA', 127, 0.02) else: AH(self.algorithm, 'SHV', 127, 0.02) else: if CumReturn(self.algorithm, 'DBA', 45) > CumReturn(self.algorithm, 'SHV', 45): AH(self.algorithm, 'DBA', 127, 0.02) else: AH(self.algorithm, 'SHV', 127, 0.02) def group_BaseMetals(self): if STD(self.algorithm, 'DBB', 30) > 1.25: if CumReturn(self.algorithm, 'DBB', 90) > CumReturn(self.algorithm, 'SHV', 90): AH(self.algorithm, 'DBB', 127, 0.02) else: AH(self.algorithm, 'SHV', 127, 0.02) else: if CumReturn(self.algorithm, 'DBB', 45) > CumReturn(self.algorithm, 'SHV', 45): AH(self.algorithm, 'DBB', 127, 0.02) else: AH(self.algorithm, 'SHV', 127, 0.02) def group_Uranium(self): if STD(self.algorithm, 'URA', 30) > 3.5: if CumReturn(self.algorithm, 'URA', 90) > CumReturn(self.algorithm, 'SHV', 90): AH(self.algorithm, 'URA', 127, 0.02) else: AH(self.algorithm, 'SHV', 127, 0.02) else: if CumReturn(self.algorithm, 'URA', 45) > CumReturn(self.algorithm, 'SHV', 45): AH(self.algorithm, 'URA', 127, 0.02) else: AH(self.algorithm, 'SHV', 127, 0.02) def group_Timber(self): if STD(self.algorithm, 'WOOD', 30) > 3.5: if CumReturn(self.algorithm, 'WOOD', 90) > CumReturn(self.algorithm, 'SHV', 90): AH(self.algorithm, 'WOOD', 127, 0.02) else: AH(self.algorithm, 'SHV', 127, 0.02) else: if CumReturn(self.algorithm, 'WOOD', 45) > CumReturn(self.algorithm, 'SHV', 45): AH(self.algorithm, 'WOOD', 127, 0.02) else: AH(self.algorithm, 'SHV', 127, 0.02) def group_Gold(self): if STD(self.algorithm, 'GLD', 30) > 0.75: if CumReturn(self.algorithm, 'GLD', 90) > CumReturn(self.algorithm, 'SHV', 90): AH(self.algorithm, 'UGL', 127, 0.02) else: AH(self.algorithm, 'GLL', 127, 0.02) else: if CumReturn(self.algorithm, 'GLD', 45) > CumReturn(self.algorithm, 'SHV', 45): AH(self.algorithm, 'UGL',127, 0.02) else: AH(self.algorithm, 'GLL', 127, 0.02) def group_Treasuries(self): if STD(self.algorithm, 'TLT', 30) > 0.75: if CumReturn(self.algorithm, 'TLT', 90) > CumReturn(self.algorithm, 'SHV', 90): AH(self.algorithm, 'TMF', 127, 0.02) else: AH(self.algorithm, 'TMV', 127, 0.02) else: if CumReturn(self.algorithm, 'TLT', 45) > CumReturn(self.algorithm, 'SHV', 45): AH(self.algorithm, 'TMF', 127, 0.02) else: AH(self.algorithm, 'TMV', 127, 0.02) def group_SP500(self): if STD(self.algorithm, 'SPY', 30) > 2: if CumReturn(self.algorithm, 'SPY', 90) > CumReturn(self.algorithm, 'SHV', 90): AH(self.algorithm, 'SPY', 127, 0.02) else: AH(self.algorithm, 'SH', 127, 0.02) else: if CumReturn(self.algorithm, 'SPY', 45) > CumReturn(self.algorithm, 'SHV', 45): AH(self.algorithm, 'SPY', 127, 0.02) else: AH(self.algorithm, 'SH', 127, 0.02) def fiat_alternatives(self): AH(self.algorithm, 'GLD', 127, 0.19) def secular_growth_assets(self): self.group_equities() if GetCurrentPrice(self.algorithm,'SPY') > SMA(self.algorithm, 'SPY', 200): if RSI(self.algorithm, 'TQQQ', 10) > 79: AH(self.algorithm, 'UVXY', 127, 0.1008) else: if RSI(self.algorithm, 'SPXL', 10) > 80: AH(self.algorithm, 'UVXY', 127, 0.1008) else: AH(self.algorithm, 'TQQQ', 127, 0.1008) else: if RSI(self.algorithm, 'TQQQ', 10) < 31: AH(self.algorithm, 'TECL', 127, 0.1008) else: if RSI(self.algorithm, 'SPY', 10) < 30: AH(self.algorithm, 'SPXL', 127, 0.1008) else: if RSI(self.algorithm, 'UVXY', 10) > 74: if RSI(self.algorithm, 'UVXY', 10) > 84: if GetCurrentPrice(self.algorithm,'TQQQ') > SMA(self.algorithm, 'TQQQ', 20): AH(self.algorithm, 'TQQQ', 127, 0.1008) else: Sort(self.algorithm,'RSI',('SQQQ','BSV'),10,True,1,127,0.1008) else: AH(self.algorithm, 'UVXY', 127, 0.1008) else: if GetCurrentPrice(self.algorithm,'TQQQ') > SMA(self.algorithm, 'TQQQ', 20): AH(self.algorithm, 'TQQQ', 127, 0.1008) else: Sort(self.algorithm,'RSI',('SQQQ','BSV'),10,True,1,127,0.1008) def group_equities(self): if CumReturn(self.algorithm, 'BND', 60) > CumReturn(self.algorithm, 'BIL', 60): self.risk_on_bullish() else: if SMADayRet(self.algorithm, 'TLT', 15) < 0: self.risk_off_rising_rates() else: self.risk_on_falling_rates() def risk_on_bullish(self): if MaxDD(self.algorithm, 'SPY', 10) < 5: self.group_3x_aggressive_equities() else: self.group_1x_defensive_equities() def group_3x_aggressive_equities(self): Sort(self.algorithm,'SMADayRet',('UPRO','TECL','TQQQ','SOXL','FAS'),10,False,4,127,0.1680) def group_1x_defensive_equities(self): AH(self.algorithm, 'SPY', 127, 0.0420) Sort(self.algorithm,'CumReturn',('RSP','RPV','QUAL','BTAL'),10,True,1,127,0.1260) def risk_off_rising_rates(self): if GetCurrentPrice(self.algorithm,'SPY') > SMA(self.algorithm, 'SPY', 25): self.defensive_fund_surf() else: self.fund_surf_with_shorting() def defensive_fund_surf(self): Sort(self.algorithm,'RSI',('XLP','XLE','BTAL','XLY','XLF'),10,False,3,127,0.1440) AH(self.algorithm, 'USDU', 127, 0.0960) def fund_surf_with_shorting(self): Sort(self.algorithm,'RSI',('XLP','XLE','SDS','SQQQ','BTAL'),10,False,3,127,0.1440) AH(self.algorithm, 'USDU', 127, 0.0960) def risk_on_falling_rates(self): if SMADayRet(self.algorithm, 'SPY', 25) > SMADayRet(self.algorithm, 'QUAL', 25): self.modified_nasdaq_buy_the_dip() else: self.recessionary_defensive() def modified_nasdaq_buy_the_dip(self): if CumReturn(self.algorithm, 'QQQ', 5) < -5: AH(self.algorithm, 'UPRO', 127, 0.1200) if CumReturn(self.algorithm, 'TQQQ', 1) > 5: AH(self.algorithm, 'SSO', 127, 0.1200) else: Sort(self.algorithm,'RSI',('TQQQ','TECL'),5,False,1,127,0.1200) else: AH(self.algorithm, 'SPY', 127, 0.2400) def recessionary_defensive(self): AH(self.algorithm, 'SCHD', 127, 0.1200) Sort(self.algorithm,'CumReturn',('RSP','RPV','QUAL','BTAL','XLP','XLF'),10,True,1,127,0.1200) def interest_rate_linked(self): self.group_treasury_bonds() def group_treasury_bonds(self): self.group_safer_20_year_treasury_bonds_with_leverage() def group_safer_20_year_treasury_bonds_with_leverage(self): if GetCurrentPrice(self.algorithm,'TLT') > SMA(self.algorithm, 'TLT', 200): if RSI(self.algorithm, 'TLT', 14) < 50: if GetCurrentPrice(self.algorithm,'TLT') > SMA(self.algorithm, 'TLT', 5): AH(self.algorithm, 'TMF', 127, 0.18) else: if RSI(self.algorithm, 'TLT', 14) < 20: AH(self.algorithm, 'TMF', 127, 0.18) else: self.group_leveraged_safety() else: if RSI(self.algorithm, 'TLT', 14) > 80: AH(self.algorithm, 'TMV', 127, 0.18) else: self.group_leveraged_safety() else: self.group_safety_long_term() def group_leveraged_safety(self): if SMADayRet(self.algorithm, 'TLT', 20) < 0: self.group_risk_off_rising_rates() else: self.group_risk_off_falling_rates() def group_risk_off_rising_rates(self): AH(self.algorithm, 'UUP', 127, 0.09) Sort(self.algorithm,'RSI',('PSQ','SH','UUP','TMV'),20,False,1,127,0.09) def group_risk_off_falling_rates(self): AH(self.algorithm, 'GLD', 127, 0.045) AH(self.algorithm, 'TMF', 127, 0.045) AH(self.algorithm, 'BTAL', 127, 0.045) AH(self.algorithm, 'XLP', 127, 0.045) def group_safety_long_term(self): self.group_leveraged_safety() #https://app.composer.trade/symphony/MJFwIcAvjEVoRhbfBBaz/details class RiskParityDynamicAssetAllocationStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): if MaxDD(self.algorithm, 'SPY', 10) >= 5: self.risk_off() else: self.risk_on() def risk_off(self): self.group_equity() self.group_fixed_income() def risk_on(self): self.group_equity() self.group_fixed_income() def group_equity(self): AH(self.algorithm, 'UPRO', 131, 0.4) def group_fixed_income(self): AH(self.algorithm, 'TMF', 131, 0.6)
#region imports from AlgorithmImports import * #endregion # Your New Python File
#region imports from AlgorithmImports import * #endregion from AlgorithmImports import * from indicators import * from main import YellowCatStrat #https://app.composer.trade/symphony/89MBBnScMMeOlm7dZjVw/details class PSQEquivalentStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'SQQQ', 132, 0.55) AH(self.algorithm, 'QQQ', 132, 0.45) #https://app.composer.trade/symphony/ugS2TJ8Ko9rcgScpYIFC/details class HedgefundiesLeveragedStocksandBondsStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'UPRO', 133, 0.55) AH(self.algorithm, 'TMF', 133, 0.45) #https://app.composer.trade/symphony/lEpHCO16WUKcVnkUXIoj/details class CopyOf2DHiLoProtectionV2BWCBuyWriteIncomeStrategyStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.group_2DHiLoProtectionV2BWCBuyWriteIncomeStrategy() def group_2DHiLoProtectionV2BWCBuyWriteIncomeStrategy(self): if RSI(self.algorithm, 'SPY', 2) > 80: AH(self.algorithm, 'BIL', 134, 0.8) AHIV(self.algorithm, ('SQQQ', 'SOXS', 'SPXS'), 30, 134, 0.2) else: if RSI(self.algorithm, 'SPY', 2) < 10: Sort(self.algorithm, 'STD', ('HIBL', 'TQQQ', 'UPRO', 'SOXL', 'TECL', 'FAS', 'TNA', 'WANT', 'YINN', 'UDOW'), 20, True, 2, 134, 1) else: Sort(self.algorithm, 'STD', ('DIVO', 'XYLD', 'NUSI', 'SPYI', 'LQDW', 'TLTW', 'RYLD', 'ACIO', 'FTQI', 'PUTW'), 7, True, 2, 134, 1) #https://app.composer.trade/symphony/gZaJy91yYYq6SHKRLzyt/details class BenchmarkBasic6040Portfolio60SPY40BNDStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): AH(self.algorithm, 'SPY', 135, 0.6) AH(self.algorithm, 'BND', 135, 0.4) #https://app.composer.trade/symphony/bGVzMtaIInv85FuVysnm/details class BestCryptoRebalancerFeaverStrategy(YellowCatStrat): def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def Execute(self): self.group1() self.group2() def group1(self): AH(self.algorithm, 'MSTR', 136, 0.375) AH(self.algorithm, 'BITX', 136, 0.375) def group2(self): AH(self.algorithm, 'HUT', 136, 0.0625) AH(self.algorithm, 'BITF', 136, 0.0625) AH(self.algorithm, 'MARA', 136, 0.0625) AH(self.algorithm, 'COIN', 136, 0.0625)
#indicators.py from AlgorithmImports import * from AlgorithmImports import * import math import pandas as pd from cmath import sqrt from clr import AddReference AddReference("System") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Common") from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Data.Custom import * from QuantConnect.Python import PythonData import csv import io import time import json def RSI(self,equity,period): extension = min(period*5,250) r_w = RollingWindow[float](extension) history = self.History(equity,extension - 1,Resolution.Daily) for historical_bar in history: r_w.Add(historical_bar.Close) while r_w.Count < extension: current_price = self.Securities[equity].Price r_w.Add(current_price) if r_w.IsReady: average_gain = 0 average_loss = 0 gain = 0 loss = 0 for i in range(extension - 1,extension - period -1,-1): gain += max(r_w[i-1] - r_w[i],0) loss += abs(min(r_w[i-1] - r_w[i],0)) average_gain = gain/period average_loss = loss/period for i in range(extension - period - 1,0,-1): average_gain = (average_gain*(period-1) + max(r_w[i-1] - r_w[i],0))/period average_loss = (average_loss*(period-1) + abs(min(r_w[i-1] - r_w[i],0)))/period if average_loss == 0: return 100 else: rsi = 100 - (100/(1 + average_gain/average_loss)) return rsi else: return None def CumReturn(self,equity,period): history = self.History(equity,period,Resolution.Daily) closing_prices = pd.Series([bar.Close for bar in history]) current_price = self.Securities[equity].Price closing_prices = pd.concat([closing_prices, pd.Series([current_price])]) first_price = closing_prices.iloc[0] if first_price == 0: return None else: return_val = (current_price/first_price) - 1 return return_val def STD(self, equity, period): r_w = RollingWindow[float](period + 1) r_w_return = RollingWindow[float](period) history = self.History(equity, period, Resolution.Daily) for historical_bar in history: r_w.Add(historical_bar.Close) while r_w.Count < period + 1: current_price = self.Securities[equity].Price r_w.Add(current_price) for i in range(period, 0, -1): if r_w[i] != 0: daily_return = (r_w[i-1] / r_w[i] - 1) else: daily_return = 0 # or any other appropriate value r_w_return.Add(daily_return) dfstd = pd.DataFrame({'r_w_return': r_w_return}) if r_w.IsReady: std = dfstd['r_w_return'].std() if std == 0: return 0 else: return std else: return 0 def MaxDD(self, equity, period): history = self.History(equity,period - 1,Resolution.Daily) closing_prices = pd.Series([bar.Close for bar in history]) current_price = self.Securities[equity].Price closing_prices = pd.concat([closing_prices, pd.Series([current_price])]) rolling_max = closing_prices.cummax() drawdowns = (rolling_max - closing_prices)/rolling_max max_dd = drawdowns.min() return max_dd def SMA(self,equity,period): r_w = RollingWindow[float](period) history = self.History(equity,period - 1,Resolution.Daily) for historical_bar in history: r_w.Add(historical_bar.Close) while r_w.Count < period: current_price = self.Securities[equity].Price r_w.Add(current_price) if r_w.IsReady: sma = sum(r_w)/period return sma else: return 0 def IV(self,equity,period): r_w = RollingWindow[float](period + 1) r_w_return = RollingWindow[float](period) history = self.History(equity,period,Resolution.Daily) for historical_bar in history: r_w.Add(historical_bar.Close) while r_w.Count < period + 1: current_price = self.Securities[equity].Price r_w.Add(current_price) for i in range (period,0,-1): if r_w[i] == 0: return 0 else: daily_return = (r_w[i-1]/r_w[i] - 1) r_w_return.Add(daily_return) dfinverse = pd.DataFrame({'r_w_return':r_w_return}) if r_w.IsReady: std = dfinverse['r_w_return'].std() if std == 0: return 0 else: inv_vol = 1/std return inv_vol else: return 0 def SMADayRet(self,equity,period): r_w = RollingWindow[float](period + 1) r_w_return = RollingWindow[float](period) history = self.History(equity,period,Resolution.Daily) for historical_bar in history: r_w.Add(historical_bar.Close) while r_w.Count < period + 1: current_price = self.Securities[equity].Price r_w.Add(current_price) for i in range (period,0,-1): if r_w[i] == 0: return None daily_return = (r_w[i-1]/r_w[i] - 1) r_w_return.Add(daily_return) if r_w.IsReady: smareturn = sum(r_w_return)/period return smareturn else: return 0 def EMA(self,equity,period): extension = period + 50 r_w = RollingWindow[float](extension) history = self.History(equity,extension - 1,Resolution.Daily) for historical_bar in history: r_w.Add(historical_bar.Close) while r_w.Count < extension: current_price = self.Securities[equity].Price r_w.Add(current_price) if r_w.IsReady: total_price = 0 for i in range(extension - 1,extension - period - 2,-1): total_price += r_w[i] average_price = total_price/period for i in range(extension - period - 2,-1,-1): average_price = r_w[i]*2/(period+1) + average_price*(1-2/(period+1)) return average_price else: return None def Sort(self, sort_type, equities, period, reverse, num_assets, number, multiplier): # Update the PT value for the given strategy number PT = getattr(self, f"PT{number}") * multiplier # Define a dictionary to map sort types to functions indicator_functions = { 'EMA': EMA, 'RSI': RSI, 'CumReturn': CumReturn, 'STD': STD, 'MaxDD': MaxDD, 'SMA': SMA, 'IV': IV, 'SMADayRet': SMADayRet, # Add other indicators here as needed } # Compute the indicator value for each equity returns = {} for equity in equities: indicator_function = indicator_functions.get(sort_type, None) if callable(indicator_function): indicator_value = indicator_function(self, equity, period) if indicator_value is not None: returns[equity] = indicator_value # Sort the equities based on the indicator values sorted_equities = sorted(returns.items(), key=lambda x: x[1], reverse=reverse) # Select the top 'num_assets' from the sorted list top_equities = sorted_equities[:num_assets] # Get the current HT and HTS attributes for the strategy HT = getattr(self, f"HT{number}") HTS = getattr(self, f"HTS{number}") # Assign each of the top equities to the next available slot in HT and HTS for equity, value in top_equities: for i in HT.keys(): if HT[i] == 0: HT[i] = PT / num_assets # Distribute PT evenly among the assets HTS[i].append(equity) # Append the asset symbol break # Move to the next asset after appending # Update the HT and HTS attributes for the strategy setattr(self, f"HT{number}", HT) setattr(self, f"HTS{number}", HTS) def AH(self,equities,PTnumber,multiplier): #AppendHolding if not isinstance(equities,list): equities = [equities] HT = getattr(self,f"HT{PTnumber}") HTS = getattr(self,f"HTS{PTnumber}") PT = getattr(self,f"PT{PTnumber}") * multiplier for equity in equities: for i in HT.keys(): if HT[i] == 0: HT[i] = PT HTS[i].append(equity) break def GetCurrentPrice(self, symbol): """ Gets the current price of a security. :param self: The self instance containing the securities. :param symbol: The symbol of the security. :return: The current price of the security or None if not available. """ if symbol in self.Securities: return self.Securities[symbol].Price else: self.Debug(f"Symbol {symbol} not found in securities.") return None def AHIV(self, assets, period, PTnumber,multiplier): # Calculate sum_IV_assets tickers_IV = [f"IV(self, '{ticker}', {period})" for ticker in assets] sum_IV_assets = '+'.join(tickers_IV) # Execute the sum_IV_assets calculation sum_IV_assets_value = eval(sum_IV_assets) HT = getattr(self, f"HT{PTnumber}") HTS = getattr(self, f"HTS{PTnumber}") PT = getattr(self,f"PT{PTnumber}") * multiplier # Call the AH function for each asset with the calculated portion for ticker in assets: IV_value = eval(f"IV(self, '{ticker}', {period})") portion = IV_value / sum_IV_assets_value if not isinstance(ticker, list): ticker = [ticker] for equity in ticker: for i in HT.keys(): if HT[i] == 0: HT[i] = portion*PT HTS[i].append(equity) break def GroupSort(self, filter_type, def_str_method, window, select_type, num_assets, number, multiplier): # Invoke the specified method to get a list of equities and their weights equities, weights = def_str_method() # Define a dictionary to map filter types to their corresponding functions indicator_functions = { 'EMA': EMA, 'RSI': RSI, 'CumReturn': CumReturn, 'STD': STD, 'MaxDD': MaxDD, 'SMA': SMA, 'IV': IV, 'SMADayRet': SMADayRet, } # Ensure the filter type is supported if filter_type not in indicator_functions: raise ValueError(f"Unsupported filter type: {filter_type}") # Calculate the weighted indicator values for each equity weighted_indicator_values = {} for equity, weight in zip(equities, weights): indicator_value = indicator_functions[filter_type](self, equity, window) if indicator_value is not None: weighted_indicator_values[equity] = weight * indicator_value # Determine sorting direction reverse = True if select_type == 'Top' else False # Sort equities based on the weighted indicator values sorted_equities = sorted(weighted_indicator_values.items(), key=lambda x: x[1], reverse=reverse)[:num_assets] # Get the current HT and HTS attributes for the strategy HT = getattr(self, f"HT{number}") HTS = getattr(self, f"HTS{number}") # Update HT and HTS based on the sorted equities total_weight = sum(weight for _, weight in sorted_equities) for equity, _ in sorted_equities: for i in HT.keys(): if HT[i] == 0: HT[i] = (weights[equities.index(equity)] / total_weight) * multiplier HTS[i].append(equity) break # Update the HT and HTS attributes for the strategy setattr(self, f"HT{number}", HT) setattr(self, f"HTS{number}", HTS)
# main.py from AlgorithmImports import * import math import pandas as pd from cmath import sqrt from clr import AddReference AddReference("System") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Common") from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Data.Custom import * from QuantConnect.Python import PythonData import csv import io import time import json import os import importlib import inspect import re from indicators import * class YellowCatStrat(QCAlgorithm): def Initialize(self): self.cash = 100000 self.SetStartDate(2019,1,12) self.SetEndDate(2024,4,17) self.SetCash(self.cash) self.equities = ['BRK/B','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AMN','CHD','CVBF','DG','ERIE','FCN','FFNW','NTES','OTTR','PGR','PINC','QDEL','RLI','RMD','SFM','SMMF','TPB','UBCP','VIPS','VRTX','WDFC','ZM','BIL','IEF','SOXL','SOXS','NTSX','DBMF','BSJN','VIXM','UNH','COST','QQQ','SMH','JEPI','UPRO','AAPL','TSLA','GOOG','MSFT','NVDA','JNJ','AMZN','JPM','META','PG','MA','SPY','DIA','IWM','ATEN','CCRD','CHKP','CRUS','CSCO','DQ','ECOM','ELTK','ERIC','HCKT','INFY','JKHY','LOGI','MNDO','NSYS','QLYS','SIMO','TSM','TSRI','WSTG','SVXY','MSTR','COIN','MARA','HUT','BITF','RIOT','TQQQ','UDOW','TECL','AAPB','AAPD','BITX','PYPL','ADBE','SPXL','TLT','FNGU','TMV','VTI','DBC','GLD','UVXY','SQQQ','UDN','UUP','HEQT','BTAL','TJUL','RSBT','SPYC','TMF','XLF','VO','IJR','DLTR','WMT','XLU','XLV','XLRE','XLE','XBI','XLK','XLY','VOX','VFH','VDC','VAW','VIS','VGT','VPU','VCR','VHT','VDE','VNQ','MCD','REGN','KMB','UL','FAS','IEI','UTWO','EFA','EEM','AGG','SLV','USO','UNG','XLP','XLC','XLI','XLB','NFLX','XOM','BND','GOOGL','ERX','IEP','LQD','BK','ED','KO','PFE','IBM','TYD','UGL','TSLY','CONY','NVDY','AMDY','APLY','AMZY','OARK','DISO','GOOY','PYPY','MSFO','JPMO','XOMO','NFLY','FBY','SQY','MRNY','FEPI','SARK','SVIX','TBT','TBF','ABBV','BAC','WFC','NEE','DUK','EXC','SHY','SHYG','YINN','QYLD','RYLD','XYLD','NUSI','SCHD','DIVO','QLD','QID','SDS','USA','SHV','HYG','TIP','WBA','MMM','ULTA','MNST','BSV','SPXS','SH','STIP','CLIP','VGSH','VOO','JEPQ','COM','FAAR','FTLS','CCOR','EWA','EWG','EWP','EWQ','EWU','EWJ','EWI','EWN','UCO','SCO','BOIL','KOLD','EUO','YCS','YCL','ULE','DBA','DBB','URA','WOOD','GLL','RSP','RPV','QUAL','USDU','SSO','PSQ','SPXU','SPHB','VIXY','USD','CURE','TECS','EWZ','MVV','EPI','TNA','PUI','KMLM','FMF','CTA','WTMF','ROM','RXL','UCC','UJB','PPLT','GLTR','SUB','SPLV','SJB','NRGU','RLY','GAA','TRTY','GDMA','MNA','VAMO','GMOM','ICSH','UPW','TPOR','DIS','HD','GSY','SRTY','XENE','ARCT','CRSP','IMRX','NAMS','BPMC','IMUX','HOWL','AUTL','ETNB','IEO','ATXS','SERA','PNT','FUSN','PYXS','EXAI','ICVX','IOVA','CRBU','ROIV','CDTX','TRDA','CRVS','AKBA','EDC','SON','TWM','RWM','URTY','PBR','OIL','ROST','WMS','TSLQ','TSLS','ALGN','TPL','VLO','AA','BITI','HIBS','ACLS','EQT','MOS','AR','MU','CZR','UVIX','ENPH','AMEH','GNRC','BULZ','VCIT','AMD','TSLL','AEHR','TARK','QQQE','VOOG','VOOV','VTV','HIBL','VTIP','EDV','SPTL','IAU','VEA','UTSL','WEAT','CORN','DRN','PDBC','COMT','ESPO','PEJ','URE','VXX','DUST','JDST','JNUG','GUSH','PALL','AGQ','BAL','DBO','TAGS','CANE','REMX','COPX','SPDN','CHAD','DRIP','SPUU','INDL','BRZU','ERY','CWEB','CHAU','KORU','MEXX','EDZ','EURL','YANG','TZA','MIDU','TYO','LABU','LABD','RETL','DPST','DRV','PILL','FAZ','EWGS','ECC','NURE','VNQI','SOXX','WEBL','WEBS','UBT','PST','TLH','SQM','SD','DGRO','SGOL','DUG','TBX','VGIT','VGLT','LBAY','NRGD','PHDG','SPHD','COWZ','VIGI','NOBL','BITO','MORT','FNDX','RWL','VLUE','SPYG','VXUS','AAL','AEP','AFL','GM','INTC','MET','NWE','OXY','RTX','SNY','SO','TMUS','VZ','BA','CB','COKE','FDX','GE','LMT','MRK','NVEC','ORCL','PEP','DBE','SCHG','SGML','SLDP','ARKQ','AMZU','BAD','DDM','IYH','PM','IYK','DIG','FXE','FXY','EXG','VCSH','HTS','HT','ARKK','IBIT','GBTC'] for equity in self.equities: self.AddEquity(equity,Resolution.Minute) self.Securities[equity].SetDataNormalizationMode(DataNormalizationMode.Adjusted) self.AddEquity('BIL',Resolution.Minute) self.Securities['BIL'].SetDataNormalizationMode(DataNormalizationMode.TotalReturn) # Base directory for strategies strategy_base_dir = "Strategies" # List of strategy names (you would populate this list dynamically) self.strategy_names = [ "CombinedStrategy1", "CombinedStrategy2", # Add other strategy names here... ] # Get the absolute path of the current file (main.py) current_file_path = os.path.abspath(__file__) # Get the directory of the current file current_directory = os.path.dirname(current_file_path) # Construct the path to the Strategies folder strategies_directory = os.path.join(current_directory, "Strategies") # Dynamically import strategies and create instances self.strategies = {} # Generate setattr(self, f'HT...') from 1 to 3000 for i in range(1, 3001): setattr(self, f'HT{i}', {str(j).zfill(2): 0 for j in range(1, 20)}) setattr(self, f'HTS{i}', {str(j).zfill(2): [] for j in range(1, 20)}) for strategy_name in self.strategy_names: strategy_module_name = f"Strategies.{strategy_name}.version1" strategy_module = importlib.import_module(strategy_module_name) # Get the source code of the strategy module strategy_module_source = inspect.getsource(strategy_module) # Find all occurrences of "class ...Strategy" in the source code strategy_class_names = re.findall(r'class\s+(\w+Strategy)', strategy_module_source) for strategy_class_name in strategy_class_names: # Get the strategy class from the module strategy_class = getattr(strategy_module, strategy_class_name) # Extract the assigned number from the strategy class name if available assigned_numbers = re.findall(r'\d+', strategy_class_name) if assigned_numbers: assigned_number = int(assigned_numbers[0]) else: assigned_number = None # Create an instance of the strategy class, passing 'self' as the 'context' argument strategy_instance = strategy_class(self) # Store the strategy instance in the dictionary self.strategies[strategy_class_name] = strategy_instance self.PTMaster = 1 self.days_history = 10 self.number_to_pick = 37 self.correlation_number = 0.01 self.filter_value = 0.005 self.buffer_pct = 0.02 #Rebalance self.initializePrevDayVariables(len(self.strategies), self.days_history) self.initializePrevDayReturnVariables(len(self.strategies), self.days_history) # Fixed strategies and their percentages self.fixed_strategies = { 1: 0.20, # Strategy 1 with 26% 2: 0.10, # Strategy 2 with 16% 3: 0.05 # Strategy 3 with 7% } # Calculate the percentage for each dynamic strategy dynamic_strategy_percentage = (0.99 - sum(self.fixed_strategies.values())) / (self.number_to_pick - len(self.fixed_strategies)) # Initialize PT variables for each strategy for i in range(1, len(self.strategies) + 1): if i in self.fixed_strategies: setattr(self, f'PT{i}', self.fixed_strategies[i] * self.PTMaster) else: setattr(self, f'PT{i}', dynamic_strategy_percentage * self.PTMaster) self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.BeforeMarketClose("SPY",2), self.FunctionBeforeMarketClose) def initializePrevDayVariables(self, strategy_count, days_history): for i in range(1, strategy_count + 1): for day in range(1, days_history + 1): setattr(self, f'prev_day_HT{i}_{day}', {str(j).zfill(2): 0 for j in range(1, 20)}) setattr(self, f'prev_day_HTS{i}_{day}', {str(j).zfill(2): [] for j in range(1, 20)}) def initializePrevDayReturnVariables(self, strategy_count, days_history): for i in range(1, strategy_count + 1): for day in range(1, days_history + 1): setattr(self, f'prev_day_return{i}_{day}', 0.0) def CumReturn(self,equity,period): history = self.History(equity,period,Resolution.Daily) closing_prices = pd.Series([bar.Close for bar in history]) current_price = self.Securities[equity].Price closing_prices = pd.concat([closing_prices, pd.Series([current_price])]) first_price = closing_prices.iloc[0] if first_price == 0: return None else: return_val = (current_price/first_price) - 1 return return_val def OnData(self, data): # This function is called every time new data is received pass def FunctionBeforeMarketClose(self): # Execute all strategies stored in the dictionary for strategy_name, strategy in self.strategies.items(): strategy.Execute() self.updatePrevDayVariables() #self.StrategyReturn() self.CalculateAndLogTopStrategies() self.ExecuteTrade() self.SetVarToZero() def ExecuteTrade(self): df_list = [] # Process each top-performing strategy for strategy_number in self.FinalTickers: HTS_attr = getattr(self, f'HTS{strategy_number}') HT_attr = getattr(self, f'HT{strategy_number}') group = { 'HTS': [HTS_attr[i][0] if len(HTS_attr[i]) == 1 else HTS_attr[i] for i in HTS_attr], 'HT': [HT_attr[i]/1 for i in HT_attr] } df = pd.DataFrame(group) df_list.append(df) # Combine all dataframes df_combined = pd.concat(df_list) df_combined['HTS'] = df_combined['HTS'].astype(str) result = df_combined.groupby(['HTS']).sum().reset_index() # Dictionary with pairs pairs_dict = {'SOXL':'SOXS','TQQQ':'SQQQ','SPXL':'SPXS','WEBL':'WEBS','TECL':'TECS','UPRO':'SPXU','QQQ':'PSQ','SPY':'SH','TMV':'TMF','HIBL':'HIBS','BITO':'BITI','TSLA':'TSLS','AAPL':'AAPD','ERX':'ERY','BOIL':'KOLD','LABU':'LABD','JNUG':'JDST','ARKK':'SARK','IBIT':'BITI'} pairs_dict.update({v: k for k,v in pairs_dict.items()}) #ensure both directions are covered # Track selling and buying processed_pairs_selling = set() processed_pairs_buying = set() liquidated_equities = set() # Exclude symbols exclude_symbols = ['BIL','BSV','SHV','SHY','IEI','STIP','VCIT','LQD','VTIP','TLT','BND','IEF','TIP','VGIT','IYK'] # dictionary symbol_dict = dict(zip(result.iloc[:,0],result.iloc[:,1])) # Log output output = "*****" for symbol, percentage in symbol_dict.items(): output += "{}: {}% - ".format(symbol, round(percentage*100, 2)) output = output.rstrip(" - ") self.Log(output) # Symbols to be transformed transform_symbols = ['PSQ','SH','USDU','SPXU','UPRO','QLD','QID','TSLS','ARKK','FNGU','IBIT'] transform_mapping = {'PSQ':'SQQQ','SH':'SPXS','USDU':'UUP','SPXU':'SPXS','UPRO':'SPXL','QLD':'TQQQ','QID':'SQQQ','TSLS':'TSLQ','ARKK':'TARK','FNGU':'SOXL','GBTC':'BITO','IBIT':'BITO'} transform_ratios = {'PSQ':3,'SH':3,'USDU':1,'SPXU':1,'UPRO':1,'QLD':1.5,'QID':1.5,'TSLS':1,'ARKK':2,'FNGU':1,'GBTC':1,'IBIT':1} # Transform symbols for symbol in transform_symbols: if symbol in symbol_dict: new_symbol = transform_mapping[symbol] ratio = transform_ratios[symbol] new_percentage = symbol_dict[symbol]/ratio # Adjust percentage allocation if new_symbol in symbol_dict: new_percentage += symbol_dict[new_symbol] symbol_dict[new_symbol] = new_percentage # Remove transformed symbol_dict.pop(symbol, None) # Ensure updated equities list updated_equities = set(symbol_dict.keys()) # Liquidate equities for equity in self.equities: if equity not in updated_equities and self.Portfolio[equity].HoldStock and equity not in liquidated_equities: self.Liquidate(equity) liquidated_equities.add(equity) # Iterate pairs selling for symbol1,symbol2 in pairs_dict.items(): if symbol1 in symbol_dict and symbol2 in symbol_dict: offset_value = abs(symbol_dict[symbol1] - symbol_dict[symbol2]) if symbol_dict[symbol1] >= symbol_dict[symbol2] and self.Portfolio[symbol2].HoldStock: self.Liquidate(symbol2) elif symbol_dict[symbol1] <= symbol_dict[symbol2] and self.Portfolio[symbol1].HoldStock: self.Liquidate(symbol1) # Mark processed selling processed_pairs_selling.add(symbol1) processed_pairs_selling.add(symbol2) # Iterate remaining selling for symbol,value in symbol_dict.items(): if symbol not in processed_pairs_selling and not value == 0 and symbol not in exclude_symbols: if isinstance(symbol, str) and symbol.startswith("['") and symbol.endswith("']"): symbol_list = eval(symbol) percentage_equity = sum(self.Portfolio[s].HoldingsValue for s in symbol_list) / self.Portfolio.TotalPortfolioValue else: percentage_equity = self.Portfolio[symbol].HoldingsValue/self.Portfolio.TotalPortfolioValue if value < percentage_equity and abs(value/percentage_equity - 1) > self.buffer_pct: if isinstance(symbol, str) and symbol.startswith("['") and symbol.endswith("']"): symbol_list = eval(symbol) for s in symbol_list: self.SetHoldings(s, value / len(symbol_list)) else: self.SetHoldings(symbol,value) # Iterate pairs buying for symbol1,symbol2 in pairs_dict.items(): if symbol1 in symbol_dict and symbol2 in symbol_dict and symbol1 not in processed_pairs_buying and symbol2 not in processed_pairs_buying: offset_value = abs(symbol_dict[symbol1] - symbol_dict[symbol2]) if offset_value > self.filter_value: if symbol_dict[symbol1] > symbol_dict[symbol2]: if isinstance(symbol1, list): for s in symbol1: self.SetHoldings(s, offset_value / len(symbol1)) else: self.SetHoldings(symbol1,offset_value) else: if isinstance(symbol2, list): for s in symbol2: self.SetHoldings(s, offset_value / len(symbol2)) else: self.SetHoldings(symbol2,offset_value) else: if isinstance(symbol1, list): for s in symbol1: if self.Portfolio[s].HoldStock: self.Liquidate(s) else: if self.Portfolio[symbol1].HoldStock: self.Liquidate(symbol1) if isinstance(symbol2, list): for s in symbol2: if self.Portfolio[s].HoldStock: self.Liquidate(s) else: if self.Portfolio[symbol2].HoldStock: self.Liquidate(symbol2) # Mark as processed buying processed_pairs_buying.add(symbol1) processed_pairs_buying.add(symbol2) # Filter less than 1% updated_equities = {symbol for symbol, value in symbol_dict.items() if value >= self.filter_value} # Iterate remaining symbol_dict for buying for symbol,value in symbol_dict.items(): if (symbol in updated_equities and symbol not in processed_pairs_buying and symbol not in exclude_symbols): if isinstance(symbol, str) and symbol.startswith("['") and symbol.endswith("']"): symbol_list = eval(symbol) percentage_equity = sum(self.Portfolio[s].HoldingsValue for s in symbol_list) / self.Portfolio.TotalPortfolioValue else: percentage_equity = (self.Portfolio[symbol].HoldingsValue / self.Portfolio.TotalPortfolioValue) if value > percentage_equity and abs(percentage_equity/value - 1) > self.buffer_pct: if isinstance(symbol, str) and symbol.startswith("['") and symbol.endswith("']"): symbol_list = eval(symbol) for s in symbol_list: self.SetHoldings(s, value / len(symbol_list)) else: self.SetHoldings(symbol,value) def SetVarToZero(self): for strategy_number in range(1, len(self.strategies) + 1): setattr(self, f'HT{strategy_number}', {str(j).zfill(2): 0 for j in range(1, 20)}) setattr(self, f'HTS{strategy_number}', {str(j).zfill(2): [] for j in range(1, 20)}) def CalculateDailyReturn(self, strategy_number, days, day_number): prev_day_HT = getattr(self, f'prev_day_HT{strategy_number}_{day_number}') prev_day_HTS = getattr(self, f'prev_day_HTS{strategy_number}_{day_number}') PT_value = getattr(self, f'PT{strategy_number}') # Retrieve PT value for the strategy total_return = 0 for key in prev_day_HTS: tickers = prev_day_HTS[key] weight = prev_day_HT[key] if tickers and weight != 0: if isinstance(tickers, list): tickers_return = sum([self.CumReturn(ticker, days) if self.CumReturn(ticker, days) is not None else 0 for ticker in tickers]) else: tickers_return = self.CumReturn(tickers, days) total_return += tickers_return * weight # Normalize the return by the strategy's PT value return total_return / PT_value if PT_value != 0 else 0 def updatePrevDayVariables(self): self.storeDailyReturns() for i in range(1, len(self.strategies) + 1): # Shift data for each day for day in range(self.days_history, 1, -1): setattr(self, f'prev_day_HT{i}_{day}', getattr(self, f'prev_day_HT{i}_{day - 1}').copy()) setattr(self, f'prev_day_HTS{i}_{day}', {k: v.copy() for k, v in getattr(self, f'prev_day_HTS{i}_{day - 1}').items()}) # Update day 1 with the current day's data current_day_HT = getattr(self, f'HT{i}') current_day_HTS = getattr(self, f'HTS{i}') setattr(self, f'prev_day_HT{i}_1', current_day_HT.copy()) setattr(self, f'prev_day_HTS{i}_1', {k: v.copy() for k, v in current_day_HTS.items()}) def storeDailyReturns(self): for i in range(1, len(self.strategies) + 1): current_return = self.CalculateDailyReturn(i, 1, 1) for day in range(self.days_history, 1, -1): prev_return = getattr(self, f'prev_day_return{i}_{day - 1}') setattr(self, f'prev_day_return{i}_{day}', prev_return) # Store the current day's return setattr(self, f'prev_day_return{i}_1', current_return) def GetStrategyHoldings(self, strategy_number): HT_attr = getattr(self, f'HT{strategy_number}') HTS_attr = getattr(self, f'HTS{strategy_number}') holdings_info = ', '.join([f"{ticker}: {round(HT_attr[key] * 100, 2)}%" for key, tickers in HTS_attr.items() if tickers for ticker in (tickers if isinstance(tickers, list) else [tickers])]) return holdings_info def CalculateDailyVolatility(self, strategy_number, days): returns = [getattr(self, f'prev_day_return{strategy_number}_{day}', 0) for day in range(1, days + 1)] if len(returns) < 2: return 0 volatility = np.std(returns) return volatility def CalculateDailyMaxDrawdown(self, strategy_number, days): returns = [getattr(self, f'prev_day_return{strategy_number}_{day}', 0) for day in range(1, days + 1)] if len(returns) < 2: return 0 cumulative_returns = np.cumsum(returns) peak = np.maximum.accumulate(cumulative_returns) drawdown = (cumulative_returns - peak) / (peak + 1e-8) max_drawdown = np.min(drawdown) return max_drawdown def CalculateAndLogTopStrategies(self): # Calculate the percentage for each dynamic strategy dynamic_strategy_percentage = (1 - sum(self.fixed_strategies.values())) / (self.number_to_pick - len(self.fixed_strategies)) # Initialize dictionaries to store strategy metrics self.strategy_avg_returns = {} self.strategy_volatility = {} self.strategy_max_drawdown = {} # Calculate metrics for each strategy for strategy_number in range(1, len(self.strategies) + 1): daily_returns = [getattr(self, f'prev_day_return{strategy_number}_{day}', 0) for day in range(1, self.days_history+1)] self.strategy_avg_returns[strategy_number] = sum(daily_returns) / len(daily_returns) self.strategy_volatility[strategy_number] = self.CalculateDailyVolatility(strategy_number, self.days_history) self.strategy_max_drawdown[strategy_number] = self.CalculateDailyMaxDrawdown(strategy_number, self.days_history) # Exclude fixed strategies from the dynamic selection dynamic_strategies = [i for i in range(1, len(self.strategies) + 1) if i not in self.fixed_strategies] # Select the best strategies based on each criterion self.DynamicTickers = [] self.DynamicTickers.extend(sorted(dynamic_strategies, key=lambda x: self.strategy_volatility[x])[:self.days_history]) # Check if there are less than self.days_history max drawdown values different than 0 non_zero_max_drawdown = [x for x in dynamic_strategies if self.strategy_max_drawdown[x] != 0] if len(non_zero_max_drawdown) < self.days_history: # Sort based on average returns if there are less than self.days_history max drawdown values different than 0 self.DynamicTickers.extend(sorted(dynamic_strategies, key=lambda x: self.strategy_avg_returns[x], reverse=True)[:self.days_history]) else: # Sort based on max drawdown if there are at least self.days_history max drawdown values different than 0 self.DynamicTickers.extend(sorted(dynamic_strategies, key=lambda x: self.strategy_max_drawdown[x], reverse=True)[:self.days_history]) self.DynamicTickers.extend(sorted(dynamic_strategies, key=lambda x: self.strategy_avg_returns[x], reverse=True)[:(self.number_to_pick - self.days_history * 2)]) self.DynamicTickers = list(set(self.DynamicTickers)) # Combine fixed and dynamic strategies self.FinalTickers = list(self.fixed_strategies.keys()) + self.DynamicTickers # Log the strategies, their percentages, holdings, and metrics self.Log("Strategies, Percentages, Holdings, and Metrics:") for index, strategy_number in enumerate(self.FinalTickers, start=1): if strategy_number in self.fixed_strategies: percentage = self.fixed_strategies[strategy_number] * 100 else: percentage = dynamic_strategy_percentage * 100 strategy_name = self.get_strategy_name(strategy_number) holdings_info = self.GetStrategyHoldings(strategy_number) avg_return = self.strategy_avg_returns[strategy_number] volatility = self.strategy_volatility[strategy_number] max_drawdown = self.strategy_max_drawdown[strategy_number] self.Log(f"Strategy {index}: {strategy_name}, Percentage: {round(percentage, 2)}%, Holdings: {holdings_info}, " f"Avg Return ({self.days_history} Days): {avg_return:.4f}, Volatility: {volatility:.4f}, " f"Max Drawdown: {max_drawdown:.4f}") self.Log("-" * 50) def get_strategy_name(self, strategy_number): for i, (strategy_name, strategy_instance) in enumerate(self.strategies.items(), start=1): if i == strategy_number: return type(strategy_instance).__name__ return ""