Overall Statistics |
Total Trades 2526 Average Win 0.11% Average Loss -0.04% Compounding Annual Return 14.513% Drawdown 34.000% Expectancy 1.402 Net Profit 126.665% Sharpe Ratio 0.764 Probabilistic Sharpe Ratio 22.772% Loss Rate 40% Win Rate 60% Profit-Loss Ratio 2.99 Alpha 0.153 Beta -0.145 Annual Standard Deviation 0.178 Annual Variance 0.032 Information Ratio 0.065 Tracking Error 0.259 Treynor Ratio -0.937 Total Fees $2561.29 |
from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Algorithm.Framework import * from QuantConnect.Algorithm.Framework.Portfolio import PortfolioTarget from QuantConnect.Algorithm.Framework.Risk import RiskManagementModel class MyRiskManagement(RiskManagementModel): '''Provides an implementation of IRiskManagementModel that limits the drawdown per holding to the specified percentage''' def __init__(self, maximumDrawdownPercent = 0.05): '''Initializes a new instance of the MaximumDrawdownPercentPerSecurity class Args: maximumDrawdownPercent: The maximum percentage drawdown allowed for any single security holding''' self.maximumDrawdownPercent = -abs(maximumDrawdownPercent) def ManageRisk(self, algorithm, targets): '''Manages the algorithm's risk at each time step Args: algorithm: The algorithm instance targets: The current portfolio targets to be assessed for risk''' targets = [] for kvp in algorithm.Securities: security = kvp.Value if not security.Invested: continue pnl = security.Holdings.UnrealizedProfitPercent if pnl < self.maximumDrawdownPercent: # liquidate targets.append(PortfolioTarget(security.Symbol, 0)) return targets
import numpy as np def first_nn(x): return np.argmax(~np.isnan(x)) def daily_delta_returns(x: np.array): x = x[first_nn(x):] x2 = x / x[-1] return np.concatenate(([0], np.subtract(x2[1:], x2[:-1]))) def daily_delta_neg_returns(x: np.array): x = daily_delta_returns(x) return np.where(x > 0, x, 0) def sharpe(x): returns = daily_delta_returns(x) return returns.mean() / returns.std() * np.sqrt(len(returns)) def sortino(x): returns = daily_delta_neg_returns(x) return returns.mean() / returns.std() * np.sqrt(len(returns)) def r2(x, y): correlation_matrix = np.corrcoef(x, y) correlation_xy = correlation_matrix[0, 1] r_squared = correlation_xy ** 2 return r_squared def y_val(df): a, b = df.iloc[0], df.iloc[-1] return np.array([a + i * (b - a) / len(df) for i in range(len(df))]) def ret(x): x = x[first_nn(x):] return (x[-1] - x[0]) / x[0]
etfs = ['SPY', 'IVV', 'VTI', 'VOO', 'QQQ', 'VEA', 'AGG', 'IEFA', 'GLD', 'VWO', 'BND', 'VUG', 'IEMG', 'IWF', 'VTV', 'LQD', 'IJR', 'IWM', 'VIG', 'EFA', 'IJH', 'IWD', 'VCIT', 'VO', 'VGT', 'XLK', 'VXUS', 'BNDX', 'VCSH', 'VB', 'USMV', 'IVW', 'ITOT', 'IAU', 'VYM', 'VNQ', 'BSV', 'VEU', 'HYG', 'EEM', 'DIA', 'IWB', 'TIP', 'MBB', 'SCHX', 'XLV', 'IXUS', 'IWR', 'XLF', 'SCHF', 'IGSB', 'QUAL', 'VV', 'SHY', 'MUB', 'EMB', 'PFF', 'SHV', 'TLT', 'IVE', 'XLY', 'SCHB', 'VBR', 'MDY', 'SDY', 'RSP', 'VT', 'GDX', 'XLI', 'SCHD', 'IEF', 'JPST', 'BIV', 'IWP', 'DVY', 'MINT', 'ACWI', 'GOVT', 'VGK', 'DGRO', 'ARKK', 'XLP', 'SCHP', 'SLV', 'VBK', 'BIL', 'EWJ', 'SCHG', 'XLE', 'VXF', 'VMBS', 'MTUM', 'JNK', 'VHT', 'ESGU', 'SCHA', 'XLC', 'XLU', 'IWS', 'IEI', 'IGIB', 'IWN', 'GSLC', 'IWO', 'VOE', 'FDN', 'EFAV', 'IWV', 'SCZ', 'IUSG', 'IBB', 'FVD', 'VTEB', 'MGK', 'VTIP', 'VOT', 'EFG', 'VGSH', 'TQQQ', 'SPYG', 'SPDW', 'VLUE', 'IHI', 'SCHZ', 'SPLV', 'SCHE', 'SPLG', 'SCHM', 'SCHV', 'IJK', 'SCHO', 'IUSV', 'SPYV', 'SPSB', 'OEF', 'HYLB', 'VFH', 'XBI', 'EFV', 'USHY', 'NOBL', 'VGIT', 'FTCS', 'PGX', 'EWY', 'IYW', 'MCHI', 'LMBS', 'EWZ', 'BBJP', 'SPIB', 'CWB', 'IJS', 'GDXJ', 'USIG', 'IUSB', 'ACWV', 'HDV', 'VCLT', 'FPE', 'SKYY', 'BLV', 'ESGE', 'IGV', 'VDC', 'VSS', 'FLOT', 'SPAB', 'AAXJ', 'SHYG', 'IJJ', 'VONG', 'FNDX', 'FNDF', 'EWT', 'FTSM', 'SPEM', 'DGRW', 'ICSH', 'XLB', 'FTEC', 'IJT', 'EZU', 'IXN', 'ISTB', 'IYR', 'VNQI', 'SOXX', 'VOOG', 'SCHH', 'FIXD', 'ARKG', 'VCR', 'BBEU', 'BKLN', 'PRF', 'VPU', 'NEAR', 'SHM', 'AMLP', 'BBCA', 'ARKW', 'EEMV', 'VPL', 'SMH', 'FXI', 'SPTM', 'MOAT', 'BOND', 'SUB', 'IEUR', 'IDEV', 'SCHR', 'DBEF', 'ANGL', 'ESGD', 'VIS', 'QLD', 'KWEB', 'IDV', 'SJNK', 'ACWX', 'INDA', 'USO', 'FNDA', 'FNDE', 'GUNR', 'MGV', 'EMLC', 'GLDM', 'ONEQ', 'TFI', 'IWY', 'IAGG', 'VDE', 'TOTL', 'VONV', 'MGC', 'QTEC', 'VOX', 'IGF', 'SPMD', 'SPSM', 'ICLN', 'HYD', 'STIP', 'GSY', 'IGM', 'SPTS', 'ITA', 'SSO', 'XSOE', 'XT', 'JETS', 'SCHC', 'PCY', 'VIGI', 'EWG', 'VNLA', 'EWU', 'GBIL', 'SPMB', 'USSG', 'IOO', 'SPTL', 'SUSL', 'RPG', 'TAN', 'ESGV', 'DON', 'SLYV', 'IGLB', 'SPHD', 'SPTI', 'CIBR', 'SGOL', 'DSI', 'ASHR', 'DLN', 'PDBC', 'VTWO', 'EWC', 'FXL', 'IYH', 'AIA', 'IXJ', 'IQLT', 'SPYD', 'FLRN', 'REET', 'VGLT', 'HEFA', 'SPHQ', 'FV', 'GVI', 'FHLC', 'KBE', 'XLRE', 'BOTZ', 'BAB', 'HYLS', 'BBIN', 'RYT', 'PZA', 'BSCM', 'SUSA', 'VAW', 'NFRA', 'VWOB', 'FNDC', 'BSCL', 'XOP', 'SLQD', 'SPIP', 'RODM', 'GSIE', 'EPP', 'SH', 'ITB', 'FBT', 'SRLN', 'TECL', 'ICF', 'MDYG', 'PTLC', 'FAS', 'PDP', 'VONE', 'HEDJ', 'FEZ', 'PGF', 'JKE', 'FPX', 'SOXL', 'JHMM', 'SLYG', 'FMB', 'KRE', 'EMLP', 'AMJ', 'GXC', 'XMLV', 'BBAX', 'ITM', 'RDVY', 'XLG', 'GEM', 'UPRO', 'USMC', 'HACK', 'EWL', 'DEM', 'PRFZ', 'HYS', 'SPXL', 'DGS', 'FBND', 'CMF', 'KOMP', 'DXJ', 'VYMI', 'EWA', 'USRT', 'PBW', 'IEV', 'RWO', 'ROBO', 'FLCB', 'IBDM', 'AOR', 'VOOV', 'VSGX', 'VRP', 'DES', 'QYLD', 'XSLV', 'FLQL', 'MDYV', 'BSCN', 'QCLN', 'TLH', 'SQQQ', 'RSX', 'CWI', 'XHB', 'AOM', 'EDV', 'IYT', 'JKH', 'EWH', 'QLTA', 'FXH', 'IBDN', 'FDL', 'QDF', 'CLOU', 'IYY', 'LIT', 'DLS', 'IYF', 'TILT', 'RWR', 'IBDO', 'TDIV', 'EMQQ', 'SCHK', 'PSK', 'TDTT', 'ARKF', 'ILF', 'FTSL', 'HYMB', 'TNA', 'USFR', 'FXD', 'REM', 'UVXY', 'CQQQ', 'XAR', 'SLY', 'PHO', 'PPLT', 'IYJ', 'GNR', 'EWW', 'BSCK', 'AGGY', 'FDIS', 'OMFL', 'KBWB', 'IBUY', 'IYC', 'FREL', 'DBC', 'BSCO', 'ARKQ', 'IYG', 'AOA', 'VIOO', 'IGOV', 'BBMC', 'FUTY', 'PULS', 'QQEW', 'URTH', 'PXH', 'ICVT', 'IHF', 'IPAC', 'NUGT', 'FTC', 'IBDP', 'BAR', 'SRVR', 'FLCO', 'PXF', 'IVOO', 'RPV', 'FNGU', 'SDOG', 'WCLD', 'EUFN', 'BWX', 'VXX', 'FEX', 'MJ', 'PNQI', 'SIL', 'JHML', 'BSJL', 'AGZ', 'IBDL', 'EBND', 'IPAY', 'JPIN', 'IWC', 'IXC', 'INTF', 'EWQ', 'SPLB', 'PFFD', 'CLTL', 'JMST', 'IWX', 'IWL', 'RWX', 'UCO', 'FSTA', 'RPAR', 'IBDQ', 'FINX', 'BBRE', 'SIZE', 'SGOV', 'SMMV', 'QUS', 'LRGF', 'PHB', 'FNCL', 'JKD', 'IYM', 'SDS', 'AOK', 'KBA', 'IHDG', 'IVOL', 'RWL', 'CORP', 'KOKU', 'IDLV', 'LDEM', 'HTRB', 'PTNQ', 'ONLN', 'PFXF', 'DTD', 'XME', 'VTHR', 'CGW', 'JAGG', 'SPYX', 'IDU', 'REGL', 'PSC', 'SIVR', 'XMMO', 'PCEF', 'FTXR', 'IVOG', 'DHS', 'GLTR', 'GSG', 'QAI', 'GWX', 'FIVG', 'SWAN', 'FTA', 'PWB', 'UDOW', 'SDIV', 'SPXU', 'MNA', 'MFEM', 'MLPA', 'XSD', 'NXTG', 'JKG', 'RYH', 'MOO', 'JNUG', 'BSCP', 'PKW', 'CFO', 'JHEM', 'ROM', 'LTPZ', 'LDUR', 'PEY', 'PPA', 'LVHD', 'IYK', 'BSJM', 'GIGB', 'FNX', 'EPI', 'VTC', 'SUSC', 'EAGG', 'PAVE', 'PWV', 'STPZ', 'CFA', 'OIH', 'ESPO', 'VIOV', 'SMDV', 'FCOM', 'XHE', 'FIW', 'NULV', 'IMTM', 'RDIV', 'CDC', 'EEMA', 'DVYE', 'FXO', 'GMF', 'PTH', 'EWS', 'AGQ', 'SECT', 'EMGF', 'INDY', 'SMLF', 'PEJ', 'LGLV', 'FDVV', 'EZM', 'KXI', 'JMBS', 'IGBH', 'JPUS', 'OUSA', 'DWM', 'JKK', 'TLTD', 'FLJP', 'DIAL', 'ACES', 'CXSE', 'UITB', 'CRBN', 'SPXS', 'TDTF', 'DWX', 'DBA', 'CHIQ', 'OGIG', 'XNTK', 'XRT', 'EWX', 'HEZU', 'FENY', 'MUNI', 'MLPX', 'BSJK', 'IBDR', 'FYX', 'CNYA', 'UYG', 'PSJ', 'MXI', 'FPXI', 'KSA', 'PSQ', 'IVLU', 'AVUS', 'UWM', 'JKF', 'EWP', 'TDSC', 'JHSC', 'DTN', 'PID', 'FTSD', 'EQAL', 'IVOV', 'FIDU', 'IQDF', 'HDEF', 'DRSK', 'LEMB', 'IPO', 'RHS', 'AAAU', 'ULVM', 'SDOW', 'TIPX', 'TBT', 'GNMA', 'GTO', 'AVUV', 'IYE', 'ECH', 'GUSH', 'PFM', 'SILJ', 'EDOC', 'BBH', 'SUSB', 'NYF', 'HERO', 'DJP', 'SPGM', 'VTWV', 'ERUS', 'JHMD', 'BNDW', 'GSEW', 'MDIV', 'DIV', 'QEFA', 'NUSC', 'RING', 'DFEB', 'LQDH', 'VIDI', 'RAVI', 'IGHG', 'EES', 'PWZ', 'CMBS', 'ESML', 'ONEY', 'EPS', 'ONEV', 'VRIG', 'NANR', 'QDEF', 'BSJN', 'ERX', 'VTWG', 'DBEU', 'HYEM', 'TZA', 'CATH', 'FLTR', 'SPHB', 'JQUA', 'JPHY', 'PSCH', 'FNY', 'PTMC', 'AVDE', 'DBO', 'THD', 'CSM', 'FLGV', 'VNM', 'FEM', 'IYZ', 'AVEM', 'ILTB', 'NULG', 'UIVM', 'KRMA', 'FM', 'SVXY', 'ZROZ', 'VBND', 'NAIL', 'DDM', 'REZ', 'TFLO', 'IBDS', 'PZD', 'TAIL', 'RGI', 'UNG', 'EWM', 'FDLO', 'NTSX', 'FEP', 'FGD', 'DMRL', 'EZA', 'FALN', 'RTM', 'SNPE', 'PTBD', 'JKI', 'SRET', 'PALL', 'VIOG', 'WIP', 'TMFC', 'PICK', 'EWD', 'TPYP', 'XTN', 'IBMK', 'AVDV', 'FDT', 'EIDO', 'GII', 'EXI', 'PDN', 'RFG', 'RXI', 'VUSE', 'TDSB', 'QQQM', 'QQQE', 'DOL', 'UUP', 'KIE', 'PSI', 'BNO', 'TECB', 'IGE', 'IHE', 'DOG', 'IG', 'PSEP', 'XITK', 'PJP', 'IXG', 'FXR', 'IXP', 'BSCQ', 'FAN', 'DWLD', 'HEWJ', 'EMHY', 'DFEN', 'ULST', 'XSW', 'HAUZ', 'DWAS', 'FXE', 'JKL', 'GDVD', 'IBMJ', 'LABU', 'PTF', 'FTLS', 'RCD', 'SPBO', 'GSID', 'DUSA', 'SNSR', 'FDRR', 'VSDA', 'BCI', 'FPEI', 'HFXI', 'EELV', 'FCVT', 'IQSU', 'MEAR', 'IAT', 'PSCT', 'GQRE', 'IBML', 'FXF', 'VIXY', 'KBWD', 'YINN', 'CLRG', 'EDIV', 'DFE', 'TUR', 'BIZD', 'DNL', 'GSUS', 'URTY', 'ISDX', 'EUSA', 'RWJ', 'TMF', 'USVM', 'SOCL', 'SKOR', 'UEVM', 'EWN', 'IYLD', 'DINT', 'SDG', 'CAPE', 'WOOD', 'SPGP', 'PPH', 'SMMU', 'ROUS', 'TLTE', 'DEF', 'KBWP', 'SGDM', 'EPOL', 'IQIN', 'BSCR', 'XPH', 'FNDB', 'BBUS', 'YYY', 'FXG', 'GAL', 'RWM', 'UGL', 'BWZ', 'IBND', 'FVAL', 'USTB', 'TBF', 'JPME', 'FCOR', 'IFV', 'RWK', 'IFGL', 'FXY', 'FLDR', 'ONEO', 'SBIO', 'IRBO', 'REMX', 'PBE', 'CLIX', 'COWZ', 'SHYD', 'FLEE', 'CEMB', 'NUMG', 'JPEM', 'FNI', 'SMOG', 'EEMS', 'QID', 'BLOK', 'FMAT', 'YLD', 'SMB', 'BRZU', 'PIO', 'FFEB', 'MLN', 'FLIA', 'UCON', 'CZA', 'AWTM', 'RYU', 'FLHY', 'FFTI', 'GSSC', 'QGRO', 'SMIN', 'PGJ', 'MORT', 'MMIN', 'PBD', 'FVC', 'FAZ', 'SLVP', 'COMT', 'PFFA', 'IBDT', 'SMLV', 'FDD', 'POCT', 'JKJ', 'NRGU', 'SPEU', 'FTGC', 'BIB', 'BSJO', 'IDNA', 'FYC', 'FXU', 'FEMB', 'EWI', 'FLTB', 'PREF', 'SIXH', 'DSTL', 'DBJP', 'ULTR', 'RTH', 'PGHY', 'BYLD', 'KBWY', 'HYGV', 'FDG', 'USL', 'BKF', 'FFTY', 'SPFF', 'FAD', 'CACG', 'ADME', 'ENZL', 'EDC', 'GBF', 'IBMM', 'PIZ', 'GHYG', 'CDL', 'DFJ', 'JUST', 'HEEM', 'PSP', 'MLPB', 'COPX', 'HUSV', 'DMRI', 'TTAC', 'NUBD', 'SCHI', 'JPSE', 'WDIV', 'ECON', 'GSST', 'SPHY', 'IHAK', 'PIE', 'TOK', 'ACIO', 'ADRE', 'DTH', 'PBP', 'KLDW', 'FXZ', 'RYF', 'IGEB', 'DEUS', 'PAWZ', 'IBD', 'ROBT', 'EQL', 'RZV', 'TPLC', 'SHE', 'JPGB', 'PDEC', 'GHYB', 'BLCN', 'ATMP', 'VALQ', 'TDSD', 'FXA', 'BETZ', 'DBB', 'USD', 'FNGO', 'FDHY', 'PKB', 'URA', 'FQAL', 'DIM', 'CSML', 'IEO', 'BOIL', 'BSCS', 'EMNT', 'DPST', 'GREK', 'XMPT', 'ENTR', 'FNOV', 'EPU', 'WFH', 'EPRF', 'FBCG', 'BSJP', 'AMZA', 'ISCF', 'DFNL', 'EFAX', 'IUS', 'WBND', 'IEUS', 'IDOG', 'JMOM', 'CNRG', 'BIBL', 'SPDN', 'SMMD', 'USMF', 'DTEC', 'IQDG', 'EDEN', 'QEMM', 'MVV', 'LABD', 'ITEQ', 'DIVO', 'JEPI', 'JXI', 'AUSF', 'STOT', 'DRIV', 'QQXT', 'IAI', 'QQH', 'DDWM', 'LDSF', 'KURE', 'MSOS', 'BGRN', 'BTAL', 'FEMS', 'FXB', 'VSMV', 'TOLZ', 'FBGX', 'DAUG', 'VFVA', 'CHAD', 'NUMV', 'FLV', 'CORN', 'CCOR', 'GVIP', 'SHAG', 'GAMR', 'RFDI', 'MFMS', 'DXD', 'FXC', 'EPHE', 'EUSB', 'DBP', 'DOO', 'FMHI', 'JSMD', 'RFDA', 'QVAL', 'CURE', 'SFY', 'BTEC', 'PRN', 'DGRS', 'IMTB', 'SSUS', 'FXN', 'ELD', 'OPER', 'KORP', 'NUSI', 'IBMN', 'YOLO', 'EFAD', 'PHDG', 'GCOW', 'ESGG', 'QINT', 'PTIN', 'INDS', 'HCRB', 'HMOP', 'OVL', 'HYZD', 'CHAU', 'FCTR', 'LGH', 'FLLV', 'CVY', 'PICB', 'LRGE', 'QLV', 'PWC', 'AIQ', 'EBIZ', 'VRAI', 'PLW', 'JCPB', 'XHS', 'GCOR', 'FIBR', 'IQSI', 'QARP', 'DIVC', 'INKM', 'OVB', 'DWAW', 'RYJ', 'DJD', 'TPHD', 'BFOR', 'EEMX', 'XSMO', 'DIG', 'OUSM', 'RIGS', 'FDM', 'TIPZ', 'BLES', 'DVOL', 'OCIO', 'RBIN', 'HTAB', 'XES', 'RVNU', 'SIXA', 'IGRO', 'MILN', 'EWZS', 'DWFI', 'RXL', 'XYLD', 'BNDC', 'SGDJ', 'SRTY', 'FLBR', 'GOAU', 'PAUG', 'PPTY', 'DBEM', 'RZG', 'HNDL', 'PJUL', 'IDHQ', 'SCHJ', 'GRID', 'DGL', 'EIS', 'RFCI', 'IPKW', 'FYT', 'ESG', 'BKLC', 'WTMF', 'PUTW', 'RBUS', 'HYLV', 'CIL', 'FCG', 'FLGB', 'ETHO', 'WFHY', 'BSEP', 'EMXC', 'PZT', 'AIEQ', 'WIZ', 'PSL', 'RJI', 'IVAL', 'FUMB', 'VALT', 'USCI', 'DBAW', 'FTXO', 'TMV', 'MXDU', 'GVAL', 'XSVM', 'FAUG', 'AFIF', 'ESGA', 'MBSD', 'INDL', 'FDMO', 'IHY', 'FLCH', 'HSRT', 'PIN', 'SCO', 'QQQN', 'DNOV', 'AGZD', 'DUST', 'UOCT', 'IDRV', 'QAT', 'FCAL', 'PJUN', 'IETC', 'JPXN', 'GCC', 'XOUT', 'SOXS', 'HDMV', 'ZJPN', 'HYLD', 'XLSR', 'DGRE', 'RJA', 'IMOM', 'KEMQ', 'SOYB', 'SIXL', 'DYNF', 'HTEC', 'FGM', 'XMHQ', 'FSZ', 'ISMD', 'IIGD', 'GDMA', 'EFIV', 'PRNT', 'DMRM', 'NUAG', 'HAWX', 'SCHQ', 'ACWF', 'QLC', 'USDU', 'QMOM', 'JPMB', 'CUT', 'IBDU', 'TDV', 'GNOM', 'CSB', 'RESP', 'PSR', 'INCO', 'EWMC', 'EMTL', 'URE', 'MMTM', 'BOCT', 'LSAF', 'KNG', 'DGT', 'RECS', 'JVAL', 'SPVU', 'WWJD', 'WPS', 'SYLD', 'BICK', 'GBUY', 'UDN', 'JO', 'QABA', 'AMUB', 'FDIV', 'LOWC', 'FDNI', 'QLVD', 'NUDM', 'FFIU', 'HYHG', 'DJCB', 'TDSE', 'TWM', 'FLMB', 'UGA', 'FRI', 'DEEF', 'AADR', 'JMUB', 'IJUL', 'KARS', 'TAXF', 'VIXM', 'FSMB', 'DRW', 'BJUL', 'IBDD', 'GENY', 'PBJ', 'RFFC', 'RISN', 'USXF', 'WEAT', 'YLCO', 'COMB', 'MFDX', 'HAIL', 'JDST', 'HDGE', 'ISRA', 'PNOV', 'IFRA', 'EQWL', 'IJAN', 'SCJ', 'SJB', 'MMIT', 'EMBD', 'IBMO', 'HEWG', 'AIRR', 'GLDI', 'USEP', 'VCEB', 'PMAY', 'ACSI', 'DWEQ', 'DWUS', 'MFUS', 'NUHY', 'IQDE', 'PHYL', 'DRIP', 'IAK', 'IEZ', 'FAB', 'CSD', 'EWUS', 'GURU', 'SQEW', 'BJK', 'RFV', 'MUST', 'HYGH', 'DEW', 'CWEB', 'JSML', 'DALT', 'TECS', 'OSCV', 'GDNA', 'NOCT', 'VFMF', 'OILK', 'FNGD', 'RUSL', 'EIRL', 'FMAY', 'GOEX', 'FNGS', 'BKHY', 'PDEV', 'NUEM', 'DMXF', 'TPOR', 'DRN', 'RETL', 'BSJQ', 'FTXL', 'RYE', 'WBII', 'SPYC', 'FTHI', 'MIDU', 'UBOT', 'GERM', 'SPMO', 'HLAL', 'SLX', 'DBE', 'GMOM', 'HOLD', 'AWAY', 'ISHG', 'FISR', 'MOTI', 'UTRN', 'VFMO', 'QSY', 'CHIX', 'HSCZ', 'PTEU', 'OMFS', 'PFIG', 'SZNE', 'PFFR', 'VFMV', 'KJAN', 'FIDI', 'NERD', 'PUI', 'FLBL', 'XWEB', 'WFIG', 'CEFS', 'IGN', 'BKAG', 'RLY', 'NJUL', 'BRF', 'FAAR', 'TPIF', 'BDEC', 'BSCT', 'VFQY', 'PSCI', 'CALF', 'GDAT', 'FFTG', 'LVHI', 'KGRN', 'SNLN', 'FCA', 'GRNB', 'PMAR', 'KOCT', 'MINC', 'EUO', 'IBMQ', 'HIBL', 'IVES', 'WBIG', 'KDFI', 'COM', 'FJUN', 'CPI', 'FFHG', 'TAEQ', 'EWO', 'LKOR', 'HAP', 'FILL', 'EET', 'XRLV', 'ARCM', 'GMAN', 'BBSA', 'TCTL', 'HYXU', 'HYXE', 'BAUG', 'RFEM', 'GFIN', 'FLSP', 'XTL', 'DMRE', 'XMVM', 'PVI', 'QTUM', 'BUFR', 'PXQ', 'EDOW', 'ZCAN', 'UDEC', 'LEGR', 'CARZ', 'DFND', 'PWS', 'AESR', 'TCHP', 'BUG', 'ALTL', 'GAA', 'AFK', 'DBLV', 'VMOT', 'WBIL', 'IZRL', 'BKSE', 'ECNS', 'JHMH', 'KNOW', 'JHMT', 'BDCZ', 'NETL', 'CNCR', 'MLPI', 'ARGT', 'PBS', 'QWLD', 'NGE', 'IBDV', 'CMDY', 'CPER', 'CNXT', 'BKMC', 'FFSG', 'MLPC', 'CSF', 'EYLD', 'SPXB', 'ROAM', 'PEZ', 'THCX', 'KORU', 'DWMF', 'BBC', 'ROOF', 'FJP', 'WBIY', 'JIGB', 'THY', 'NUSA', 'LNGR', 'GXG', 'IIGV', 'PYZ', 'CBON', 'WEBL', 'JHMI', 'GSEE', 'DWSH', 'CIZ', 'KCE', 'UBT', 'JIG', 'IPFF', 'GBUG', 'VFLQ', 'UCIB', 'UYM', 'HYDB', 'HYDW', 'SSPY', 'ENFR', 'DURA', 'SHYL', 'ZMLP', 'KLCD', 'ROMO', 'SPUS', 'BKIE', 'HOMZ', 'IBMP', 'WBIE', 'MJJ', 'TADS', 'POTX', 'DBMF', 'DIVB', 'JHMC', 'PQIN', 'UJUL', 'LEAD', 'EUDG', 'TRND', 'BKEM', 'WBIF', 'MVRL', 'YANG', 'GYLD', 'UMDD', 'FMF', 'UAUG', 'KOL', 'TRTY', 'NORW', 'DUSL', 'NJAN', 'GTIP', 'EVX', 'EJAN', 'DDLS', 'FVL', 'SPVM', 'GXTG', 'KBWR', 'FCEF', 'XPP', 'EUM', 'MTGP', 'FRLG', 'ASHS', 'LBJ', 'EWGS', 'VXZ', 'BSMM', 'CYB', 'ABEQ', 'SLVO', 'PAK', 'FNK', 'IUSS', 'UFO', 'RESE', 'JMIN', 'DMRS', 'ZSL', 'IPOS', 'AZAO', 'ERSX', 'BUYZ', 'KSCD', 'PSCC', 'IDX', 'OIL', 'EWK', 'VEGN', 'EUSC', 'FSMD', 'UST', 'SIXS', 'SMHB', 'RSXJ', 'VEGI', 'JDIV', 'BNKU', 'DRV', 'XDIV', 'NRGD', 'DXJS', 'RWVG', 'DAX', 'BJUN', 'ASEA', 'HIBS', 'FLMI', 'FLKR', 'TPSC', 'WBIT', 'SFIG', 'SPSK', 'PFI', 'FOVL', 'OVM', 'CCRV', 'EMCB', 'AZBO', 'BDCX', 'BSML', 'FBCV', 'ERY', 'LFEQ', 'EJUL', 'JHCS', 'USDY', 'ESEB', 'UTES', 'ZDEU', 'TDVG', 'FFR', 'HDG', 'FLQM', 'KAPR', 'CHGX', 'EDZ', 'SRS', 'DEEP', 'BCM', 'DXGE', 'ISZE', 'FLRT', 'EFNL', 'CEFD', 'BKSB', 'BBP', 'LOUP', 'DVYA', 'JHMF', 'EURL', 'FJNK', 'DDIV', 'GSIG', 'RWGV', 'EWSC', 'LGOV', 'IBCE', 'VLU', 'ALFA', 'FRDM', 'IEIH', 'RDOG', 'IQDY', 'UMAR', 'RYLD', 'BDCS', 'UCC', 'FEUZ', 'IBHA', 'SPDV', 'HTUS', 'KJUL', 'PSCF', 'DJUN', 'JHMA', 'GXF', 'JJC', 'PST', 'PSET', 'FYLD', 'AGGP', 'FLQD', 'JHMS', 'FLYT', 'SNUG', 'PSCD', 'SYG', 'IDY', 'XCEM', 'CN', 'SFHY', 'BNOV', 'MLPR', 'NURE', 'IECS', 'SAA', 'CHIK', 'SKF', 'TGRW', 'COW', 'BATT', 'YCS', 'EINC', 'MEXX', 'DBS', 'XSHD', 'IEDI', 'FLSW', 'XSHQ', 'BMLP', 'BMAR', 'IBTJ', 'DEED', 'SDEM', 'FIHD', 'SOVB', 'FLQE', 'OLD', 'TMDV', 'RNDM', 'FXP', 'RNLC', 'TTT', 'EMDV', 'EWCO', 'SMCP', 'ZIG', 'GRES', 'PQDI', 'JHMU', 'ISEM', 'QRFT', 'VPC', 'TEQI', 'CID', 'IBTG', 'CWS', 'FID', 'GSJY', 'EDOG', 'SPUU', 'IBHB', 'UXI', 'YGRN', 'FLAX', 'CEY', 'ENOR', 'EMTY', 'FTXH', 'MYY', 'HDAW', 'IAUF', 'PBND', 'PSCE', 'FMK', 'LRNZ', 'ICOL', 'EBLU', 'EWRE', 'FLTW', 'BFIT', 'URNM', 'EGPT', 'OEUR', 'PFFL', 'PBUS', 'BNKO', 'BSMN', 'SPXE', 'CHIS', 'BSJR', 'NLR', 'PEX', 'LQDI', 'CSA', 'DBEH', 'CNBS', 'GLL', 'SYE', 'ALTY', 'RESD', 'BDRY', 'SGG', 'PSCU', 'MSVX', 'FIVA', 'TYD', 'NULC', 'WANT', 'TDSA', 'TBX', 'KOLD', 'RFEU', 'NFLT', 'NACP', 'TEGS', 'IDIV', 'XBUY', 'PXI', 'FKU', 'TOKE', 'SYV', 'EFZ', 'DUG', 'WLDR', 'PLTM', 'BSMP', 'GNAF', 'BSMQ', 'IBTD', 'BSMO', 'IDHD', 'GSEU', 'FTXN', 'FITE', 'JJG', 'CRAK', 'CHIC', 'IBHE', 'KOIN', 'PAMC', 'WBIN', 'SFYX', 'FPA', 'SEF', 'HIPS', 'IBHC', 'WUGI', 'SIMS', 'PXE', 'REK', 'PY', 'FIEE', 'QMN', 'FLAU', 'CEW', 'SSLY', 'DBEZ', 'IEHS', 'UNOV', 'PGAL', 'EMAG', 'KNAB', 'BMAY', 'JPN', 'EMFM', 'FMIL', 'NAPR', 'DVLU', 'EMIF', 'BSDE', 'FIYY', 'TUSA', 'EASG', 'IBTF', 'LSST', 'BZQ', 'FLHK', 'GIGE', 'ICOW', 'RNMC', 'BSMR', 'EWJV', 'GOVZ', 'USAI', 'BILS', 'QDYN', 'UTSL', 'RVRS', 'PALC', 'MJO', 'PYPE', 'ESHY', 'UJUN', 'ZHOK', 'IBTI', 'DBV', 'IBTH', 'FLQG', 'KCNY', 'SBUG', 'HSMV', 'TERM', 'FLIN', 'DALI', 'EEMO', 'PILL', 'UAE', 'NIB', 'KRBN', 'KFYP', 'IMLP', 'DMAY', 'TTAI', 'JJN', 'QLVE', 'PBTP', 'IBTE', 'FLN', 'RFUN', 'ASHX', 'DBGR', 'IEME', 'UPW', 'MARB', 'VEGA', 'JHME', 'ZGBR', 'SQLV', 'HYTR', 'LCR', 'USI', 'YLDE', 'MVIN', 'HEWC', 'GOAT', 'THNQ', 'FLQS', 'SMEZ', 'XVZ', 'DWCR', 'KWT', 'IBHD', 'CANE', 'PQLC', 'ESNG', 'PQSG', 'EQOP', 'WOMN', 'NRGZ', 'HDLB', 'EFO', 'SDVY', 'PSM', 'CHNA', 'VAMO', 'QMJ', 'ERM', 'LDRS', 'UGE', 'RFAP', 'TTTN', 'DWPP', 'ROKT', 'AMER', 'EPV', 'UMAY', 'CHIH', 'DZK', 'FDEV', 'RAFE', 'FRAK', 'LIV', 'BSCE', 'PLAT', 'FDEM', 'BSBE', 'FLQH', 'ESCR', 'AFTY', 'IDLB', 'ACT', 'IBTA', 'BSAE', 'BIS', 'KCCB', 'PQSV', 'SDYL', 'CCON', 'MLPE', 'MAGA', 'HYUP', 'EMSG', 'SLT', 'HEWU', 'EFAS', 'EMMF', 'ACSG', 'RNSC', 'XJH', 'BAL', 'CEZ', 'SMDD', 'QLS', 'MCEF', 'FBZ', 'PSCM', 'INFR', 'RINF', 'DJCI', 'PFLD', 'HIPR', 'USLB', 'LSLT', 'BCD', 'EUDV', 'TPAY', 'NIFE', 'PXJ', 'HELX', 'FDTS', 'TAAG', 'EEV', 'IDMO', 'SBB', 'TAWK', 'GUDB', 'JPNL', 'WINC', 'UBR', 'MRGR', 'PSMB', 'OBOR', 'CHIR', 'BSJS', 'UCI', 'EWJE', 'SPXT', 'FLRU', 'ROSC', 'AGT', 'PLC', 'BNKZ', 'FTRI', 'EVLMC', 'AMU', 'PSMC', 'SEIX', 'EMSH', 'FLM', 'ALTS', 'FLGR', 'FWDB', 'BOUT', 'TLDH', 'MRSK', 'FTXD', 'NRGO', 'RNEM', 'VNMC', 'KALL', 'TYO', 'FLFR', 'FLCA', 'EDUT', 'EVSTC', 'ECOZ', 'ARB', 'DYHG', 'QDIV', 'MID', 'JJP', 'PSMG', 'XJR', 'FUD', 'IBBJ', 'GRN', 'JJA', 'DFVL', 'BLHY', 'BSCU', 'AIIQ', 'EKAR', 'STLV', 'JJM', 'EVGBC', 'ESGS', 'DEFA', 'SPXN', 'EMBH', 'BOSS', 'AMOM', 'BLDG', 'STSB', 'MOTO', 'VIRS', 'CHIL', 'XVV', 'UNL', 'UJB', 'SFYF', 'VWID', 'FLJH', 'TBJL', 'EZJ', 'EWV', 'BTYS', 'FLMX', 'STMB', 'RALS', 'RODE', 'REW', 'BSMS', 'BSMT', 'STLC', 'UPV', 'ASET', 'YXI', 'QVM', 'BSMU', 'FNGZ', 'PGM', 'MOM', 'ESGN', 'MAAX', 'FTLB', 'RNDV', 'IEFN', 'TFJL', 'TFLT', 'ARMR', 'QED', 'FLEH', 'PBSM', 'CROC', 'TFIV', 'FUT', 'STLG', 'RAAX', 'EAOA', 'KESG', 'OVF', 'QYLG', 'RJZ', 'SPMV', 'AFLG', 'WIL', 'EAOR', 'MCRO', 'NEED', 'JJU', 'EUFX', 'FLRG', 'EAOM', 'SDD', 'JJS', 'EAOK', 'IQM', 'ADFI', 'SSG', 'ULE', 'TLEH', 'IBTB', 'FCPI', 'JJT', 'NFTY', 'WEBS', 'FLIY', 'SDGA', 'PSMM', 'DWAT', 'TAPR', 'OVS', 'EEMD', 'FTAG', 'FHK', 'AZAA', 'AZBA', 'KMED', 'DIVA', 'GRU', 'ECLN', 'MZZ', 'SMDY', 'GAZ', 'DDG', 'HJPX', 'CFCV', 'AMCA', 'FCAN', 'USHG', 'SDCI', 'MIDF', 'USEQ', 'XCOM', 'RISE', 'CEFA', 'YCL', 'INDF', 'PASS', 'UBG', 'KEMX', 'GBGR', 'FLEU', 'MUTE', 'FPXE', 'PBEE', 'VSL', 'IXSE', 'XYLG', 'GBLO', 'FAUS', 'PBDM', 'HDIV', 'DEUR', 'FLSA', 'FFEU', 'DWMC', 'MLPG', 'LUXE', 'FLUD', 'SDP', 'IBTK', 'SMN', 'EURZ', 'GLIF', 'BNKD', 'RJN', 'MMLG', 'FLLA', 'FTXG', 'CHB', 'ECOW', 'FLZA', 'UEUR', 'DMDV', 'JJE', 'CHII', 'CBLS', 'CHIM', 'RODI', 'AFSM', 'FKO', 'AFMC', 'SPXV', 'BDCY', 'DFVS', 'EFU', 'CHIE', 'GBDV', 'PEXL', 'VETS', 'UCHF', 'RXD', 'BUL', 'CBSE', 'CHIU', 'EQRR', 'TAGS', 'USV', 'UGBP', 'HERD', 'SIJ', 'PFFV', 'SBM', 'LMLB', 'UAG', 'EEH', 'UJPY', 'DAUD', 'LTL', 'UAUD', 'DGBP', 'SCC', 'SZK', 'DJPY', 'HEWW', 'BUY', 'DUAL', 'CHEP', 'DCHF', 'LD', 'REVS', 'LACK', 'FUE', 'YCOM', 'LEND', 'OUNZ', 'FLGE', 'REML', 'DGP', 'GLIN', 'GLCN', 'JOYY', 'MLPY', 'MLPO', 'FEUL', 'DZZ', 'DGZ', 'TBND', 'USOI']
import datetime import numpy as np import pandas as pd from scipy import stats from QuantConnect.Data.UniverseSelection import * from Selection.FundamentalUniverseSelectionModel import FundamentalUniverseSelectionModel from sklearn.metrics import mean_squared_error, r2_score from helper import r2, y_val, ret, sortino, sharpe, daily_delta_returns, first_nn class MyUniverseSelectionModel(FundamentalUniverseSelectionModel): def __init__(self, filterFineData = False, universeSettings = None, securityInitializer = None): super().__init__(filterFineData, universeSettings, securityInitializer) self.week = None self.week_rebalance = 25 self.numberOfSymbolsCoarse = 500 self.lookback_days = 252*3 self.thresh = 0.99 self.topn=10 # self.etfs = ['SPY', 'IVV', 'VTI', 'VOO', 'QQQ', 'VEA', 'AGG', 'IEFA', 'GLD', 'VWO', 'BND', 'VUG', 'IEMG', 'IWF', 'VTV', 'LQD', 'IJR', 'IWM', 'VIG', 'EFA', 'IJH', 'IWD', 'VCIT', 'VO', 'VGT', 'XLK', 'VXUS', 'BNDX', 'VCSH', 'VB', 'USMV', 'IVW', 'ITOT', 'IAU', 'VYM', 'VNQ', 'BSV', 'VEU', 'HYG', 'EEM', 'DIA', 'IWB', 'TIP', 'MBB', 'SCHX', 'XLV', 'IXUS', 'IWR', 'XLF', 'SCHF', 'IGSB', 'QUAL', 'VV', 'SHY', 'MUB', 'EMB', 'PFF', 'SHV', 'TLT', 'IVE', 'XLY', 'SCHB', 'VBR', 'MDY', 'SDY', 'RSP', 'VT', 'GDX', 'XLI', 'SCHD', 'IEF', 'JPST', 'BIV', 'IWP', 'DVY', 'MINT', 'ACWI', 'GOVT', 'VGK', 'DGRO', 'ARKK', 'XLP', 'SCHP', 'SLV', 'VBK', 'BIL', 'EWJ', 'SCHG', 'XLE', 'VXF', 'VMBS', 'MTUM', 'JNK', 'VHT', 'ESGU', 'SCHA', 'XLC', 'XLU', 'IWS', 'IEI', 'IGIB', 'IWN', 'GSLC', 'IWO', 'VOE', 'FDN', 'EFAV', 'IWV', 'SCZ', 'IUSG', 'IBB', 'FVD', 'VTEB', 'MGK', 'VTIP', 'VOT', 'EFG', 'VGSH', 'TQQQ', 'SPYG', 'SPDW', 'VLUE', 'IHI', 'SCHZ', 'SPLV', 'SCHE', 'SPLG', 'SCHM', 'SCHV', 'IJK', 'SCHO', 'IUSV', 'SPYV', 'SPSB', 'OEF', 'HYLB', 'VFH', 'XBI', 'EFV', 'USHY', 'NOBL', 'VGIT', 'FTCS', 'PGX', 'EWY', 'IYW', 'MCHI', 'LMBS', 'EWZ', 'BBJP', 'SPIB', 'CWB', 'IJS', 'GDXJ', 'USIG', 'IUSB', 'ACWV', 'HDV', 'VCLT', 'FPE', 'SKYY', 'BLV', 'ESGE', 'IGV', 'VDC', 'VSS', 'FLOT', 'SPAB', 'AAXJ', 'SHYG', 'IJJ', 'VONG', 'FNDX', 'FNDF', 'EWT', 'FTSM', 'SPEM', 'DGRW', 'ICSH', 'XLB', 'FTEC', 'IJT', 'EZU', 'IXN', 'ISTB', 'IYR', 'VNQI', 'SOXX', 'VOOG', 'SCHH', 'FIXD', 'ARKG', 'VCR', 'BBEU', 'BKLN', 'PRF', 'VPU', 'NEAR', 'SHM', 'AMLP', 'BBCA', 'ARKW', 'EEMV', 'VPL', 'SMH', 'FXI', 'SPTM', 'MOAT', 'BOND', 'SUB', 'IEUR', 'IDEV', 'SCHR', 'DBEF', 'ANGL', 'ESGD', 'VIS', 'QLD', 'KWEB', 'IDV', 'SJNK', 'ACWX', 'INDA', 'USO', 'FNDA', 'FNDE', 'GUNR', 'MGV', 'EMLC', 'GLDM', 'ONEQ', 'TFI', 'IWY', 'IAGG', 'VDE', 'TOTL', 'VONV', 'MGC', 'QTEC', 'VOX', 'IGF', 'SPMD', 'SPSM', 'ICLN', 'HYD', 'STIP', 'GSY', 'IGM', 'SPTS', 'ITA', 'SSO', 'XSOE', 'XT', 'JETS', 'SCHC', 'PCY', 'VIGI', 'EWG', 'VNLA', 'EWU', 'GBIL', 'SPMB', 'USSG', 'IOO', 'SPTL', 'SUSL', 'RPG', 'TAN', 'ESGV', 'DON', 'SLYV', 'IGLB', 'SPHD', 'SPTI', 'CIBR', 'SGOL', 'DSI', 'ASHR', 'DLN', 'PDBC', 'VTWO', 'EWC', 'FXL', 'IYH', 'AIA', 'IXJ', 'IQLT', 'SPYD', 'FLRN', 'REET', 'VGLT', 'HEFA', 'SPHQ', 'FV', 'GVI', 'FHLC', 'KBE', 'XLRE', 'BOTZ', 'BAB', 'HYLS', 'BBIN', 'RYT', 'PZA', 'BSCM', 'SUSA', 'VAW', 'NFRA', 'VWOB', 'FNDC', 'BSCL', 'XOP', 'SLQD', 'SPIP', 'RODM', 'GSIE', 'EPP', 'SH', 'ITB', 'FBT', 'SRLN', 'TECL', 'ICF', 'MDYG', 'PTLC', 'FAS', 'PDP', 'VONE', 'HEDJ', 'FEZ', 'PGF', 'JKE', 'FPX', 'SOXL', 'JHMM', 'SLYG', 'FMB', 'KRE', 'EMLP', 'AMJ', 'GXC', 'XMLV', 'BBAX', 'ITM', 'RDVY', 'XLG', 'GEM', 'UPRO', 'USMC', 'HACK', 'EWL', 'DEM', 'PRFZ', 'HYS', 'SPXL', 'DGS', 'FBND', 'CMF', 'KOMP', 'DXJ', 'VYMI', 'EWA', 'USRT', 'PBW', 'IEV', 'RWO', 'ROBO', 'FLCB', 'IBDM', 'AOR', 'VOOV', 'VSGX', 'VRP', 'DES', 'QYLD', 'XSLV', 'FLQL', 'MDYV', 'BSCN', 'QCLN', 'TLH', 'SQQQ', 'RSX', 'CWI', 'XHB', 'AOM', 'EDV', 'IYT', 'JKH', 'EWH', 'QLTA', 'FXH', 'IBDN', 'FDL', 'QDF', 'CLOU', 'IYY', 'LIT', 'DLS', 'IYF', 'TILT', 'RWR', 'IBDO', 'TDIV', 'EMQQ', 'SCHK', 'PSK', 'TDTT', 'ARKF', 'ILF', 'FTSL', 'HYMB', 'TNA', 'USFR', 'FXD', 'REM', 'UVXY', 'CQQQ', 'XAR', 'SLY', 'PHO', 'PPLT', 'IYJ', 'GNR', 'EWW', 'BSCK', 'AGGY', 'FDIS', 'OMFL', 'KBWB', 'IBUY', 'IYC', 'FREL', 'DBC', 'BSCO', 'ARKQ', 'IYG', 'AOA', 'VIOO', 'IGOV', 'BBMC', 'FUTY', 'PULS', 'QQEW', 'URTH', 'PXH', 'ICVT', 'IHF', 'IPAC', 'NUGT', 'FTC', 'IBDP', 'BAR', 'SRVR', 'FLCO', 'PXF', 'IVOO', 'RPV', 'FNGU', 'SDOG', 'WCLD', 'EUFN', 'BWX', 'VXX', 'FEX', 'MJ', 'PNQI', 'SIL', 'JHML', 'BSJL', 'AGZ', 'IBDL', 'EBND', 'IPAY', 'JPIN', 'IWC', 'IXC', 'INTF', 'EWQ', 'SPLB', 'PFFD', 'CLTL', 'JMST', 'IWX', 'IWL', 'RWX', 'UCO', 'FSTA', 'RPAR', 'IBDQ', 'FINX', 'BBRE', 'SIZE', 'SGOV', 'SMMV', 'QUS', 'LRGF', 'PHB', 'FNCL', 'JKD', 'IYM', 'SDS', 'AOK', 'KBA', 'IHDG', 'IVOL', 'RWL', 'CORP', 'KOKU', 'IDLV', 'LDEM', 'HTRB', 'PTNQ', 'ONLN', 'PFXF', 'DTD', 'XME', 'VTHR', 'CGW', 'JAGG', 'SPYX', 'IDU', 'REGL', 'PSC', 'SIVR', 'XMMO', 'PCEF', 'FTXR', 'IVOG', 'DHS', 'GLTR', 'GSG', 'QAI', 'GWX', 'FIVG', 'SWAN', 'FTA', 'PWB', 'UDOW', 'SDIV', 'SPXU', 'MNA', 'MFEM', 'MLPA', 'XSD', 'NXTG', 'JKG', 'RYH', 'MOO', 'JNUG', 'BSCP', 'PKW', 'CFO', 'JHEM', 'ROM', 'LTPZ', 'LDUR', 'PEY', 'PPA', 'LVHD', 'IYK', 'BSJM', 'GIGB', 'FNX', 'EPI', 'VTC', 'SUSC', 'EAGG', 'PAVE', 'PWV', 'STPZ', 'CFA', 'OIH', 'ESPO', 'VIOV', 'SMDV', 'FCOM', 'XHE', 'FIW', 'NULV', 'IMTM', 'RDIV', 'CDC', 'EEMA', 'DVYE', 'FXO', 'GMF', 'PTH', 'EWS', 'AGQ', 'SECT', 'EMGF', 'INDY', 'SMLF', 'PEJ', 'LGLV', 'FDVV', 'EZM', 'KXI', 'JMBS', 'IGBH', 'JPUS', 'OUSA', 'DWM', 'JKK', 'TLTD', 'FLJP', 'DIAL', 'ACES', 'CXSE', 'UITB', 'CRBN', 'SPXS', 'TDTF', 'DWX', 'DBA', 'CHIQ', 'OGIG', 'XNTK', 'XRT', 'EWX', 'HEZU', 'FENY', 'MUNI', 'MLPX', 'BSJK', 'IBDR', 'FYX', 'CNYA', 'UYG', 'PSJ', 'MXI', 'FPXI', 'KSA', 'PSQ', 'IVLU', 'AVUS', 'UWM', 'JKF', 'EWP', 'TDSC', 'JHSC', 'DTN', 'PID', 'FTSD', 'EQAL', 'IVOV', 'FIDU', 'IQDF', 'HDEF', 'DRSK', 'LEMB', 'IPO', 'RHS', 'AAAU', 'ULVM', 'SDOW', 'TIPX', 'TBT', 'GNMA', 'GTO', 'AVUV', 'IYE', 'ECH', 'GUSH', 'PFM', 'SILJ', 'EDOC', 'BBH', 'SUSB', 'NYF', 'HERO', 'DJP', 'SPGM', 'VTWV', 'ERUS', 'JHMD', 'BNDW', 'GSEW', 'MDIV', 'DIV', 'QEFA', 'NUSC', 'RING', 'DFEB', 'LQDH', 'VIDI', 'RAVI', 'IGHG', 'EES', 'PWZ', 'CMBS', 'ESML', 'ONEY', 'EPS', 'ONEV', 'VRIG', 'NANR', 'QDEF', 'BSJN', 'ERX', 'VTWG', 'DBEU', 'HYEM', 'TZA', 'CATH', 'FLTR', 'SPHB', 'JQUA', 'JPHY', 'PSCH', 'FNY', 'PTMC', 'AVDE', 'DBO', 'THD', 'CSM', 'FLGV', 'VNM', 'FEM', 'IYZ', 'AVEM', 'ILTB', 'NULG', 'UIVM', 'KRMA', 'FM', 'SVXY', 'ZROZ', 'VBND', 'NAIL', 'DDM', 'REZ', 'TFLO', 'IBDS', 'PZD', 'TAIL', 'RGI', 'UNG', 'EWM', 'FDLO', 'NTSX', 'FEP', 'FGD', 'DMRL', 'EZA', 'FALN', 'RTM', 'SNPE', 'PTBD', 'JKI', 'SRET', 'PALL', 'VIOG', 'WIP', 'TMFC', 'PICK', 'EWD', 'TPYP', 'XTN', 'IBMK', 'AVDV', 'FDT', 'EIDO', 'GII', 'EXI', 'PDN', 'RFG', 'RXI', 'VUSE', 'TDSB', 'QQQM', 'QQQE', 'DOL', 'UUP', 'KIE', 'PSI', 'BNO', 'TECB', 'IGE', 'IHE', 'DOG', 'IG', 'PSEP', 'XITK', 'PJP', 'IXG', 'FXR', 'IXP', 'BSCQ', 'FAN', 'DWLD', 'HEWJ', 'EMHY', 'DFEN', 'ULST', 'XSW', 'HAUZ', 'DWAS', 'FXE', 'JKL', 'GDVD', 'IBMJ', 'LABU', 'PTF', 'FTLS', 'RCD', 'SPBO', 'GSID', 'DUSA', 'SNSR', 'FDRR', 'VSDA', 'BCI', 'FPEI', 'HFXI', 'EELV', 'FCVT', 'IQSU', 'MEAR', 'IAT', 'PSCT', 'GQRE', 'IBML', 'FXF', 'VIXY', 'KBWD', 'YINN', 'CLRG', 'EDIV', 'DFE', 'TUR', 'BIZD', 'DNL', 'GSUS', 'URTY', 'ISDX', 'EUSA', 'RWJ', 'TMF', 'USVM', 'SOCL', 'SKOR', 'UEVM', 'EWN', 'IYLD', 'DINT', 'SDG', 'CAPE', 'WOOD', 'SPGP', 'PPH', 'SMMU', 'ROUS', 'TLTE', 'DEF', 'KBWP', 'SGDM', 'EPOL', 'IQIN', 'BSCR', 'XPH', 'FNDB', 'BBUS', 'YYY', 'FXG', 'GAL', 'RWM', 'UGL', 'BWZ', 'IBND', 'FVAL', 'USTB', 'TBF', 'JPME', 'FCOR', 'IFV', 'RWK', 'IFGL', 'FXY', 'FLDR', 'ONEO', 'SBIO', 'IRBO', 'REMX', 'PBE', 'CLIX', 'COWZ', 'SHYD', 'FLEE', 'CEMB', 'NUMG', 'JPEM', 'FNI', 'SMOG', 'EEMS', 'QID', 'BLOK', 'FMAT', 'YLD', 'SMB', 'BRZU', 'PIO', 'FFEB', 'MLN', 'FLIA', 'UCON', 'CZA', 'AWTM', 'RYU', 'FLHY', 'FFTI', 'GSSC', 'QGRO', 'SMIN', 'PGJ', 'MORT', 'MMIN', 'PBD', 'FVC', 'FAZ', 'SLVP', 'COMT', 'PFFA', 'IBDT', 'SMLV', 'FDD', 'POCT', 'JKJ', 'NRGU', 'SPEU', 'FTGC', 'BIB', 'BSJO', 'IDNA', 'FYC', 'FXU', 'FEMB', 'EWI', 'FLTB', 'PREF', 'SIXH', 'DSTL', 'DBJP', 'ULTR', 'RTH', 'PGHY', 'BYLD', 'KBWY', 'HYGV', 'FDG', 'USL', 'BKF', 'FFTY', 'SPFF', 'FAD', 'CACG', 'ADME', 'ENZL', 'EDC', 'GBF', 'IBMM', 'PIZ', 'GHYG', 'CDL', 'DFJ', 'JUST', 'HEEM', 'PSP', 'MLPB', 'COPX', 'HUSV', 'DMRI', 'TTAC', 'NUBD', 'SCHI', 'JPSE', 'WDIV', 'ECON', 'GSST', 'SPHY', 'IHAK', 'PIE', 'TOK', 'ACIO', 'ADRE', 'DTH', 'PBP', 'KLDW', 'FXZ', 'RYF', 'IGEB', 'DEUS', 'PAWZ', 'IBD', 'ROBT', 'EQL', 'RZV', 'TPLC', 'SHE', 'JPGB', 'PDEC', 'GHYB', 'BLCN', 'ATMP', 'VALQ', 'TDSD', 'FXA', 'BETZ', 'DBB', 'USD', 'FNGO', 'FDHY', 'PKB', 'URA', 'FQAL', 'DIM', 'CSML', 'IEO', 'BOIL', 'BSCS', 'EMNT', 'DPST', 'GREK', 'XMPT', 'ENTR', 'FNOV', 'EPU', 'WFH', 'EPRF', 'FBCG', 'BSJP', 'AMZA', 'ISCF', 'DFNL', 'EFAX', 'IUS', 'WBND', 'IEUS', 'IDOG', 'JMOM', 'CNRG', 'BIBL', 'SPDN', 'SMMD', 'USMF', 'DTEC', 'IQDG', 'EDEN', 'QEMM', 'MVV', 'LABD', 'ITEQ', 'DIVO', 'JEPI', 'JXI', 'AUSF', 'STOT', 'DRIV', 'QQXT', 'IAI', 'QQH', 'DDWM', 'LDSF', 'KURE', 'MSOS', 'BGRN', 'BTAL', 'FEMS', 'FXB', 'VSMV', 'TOLZ', 'FBGX', 'DAUG', 'VFVA', 'CHAD', 'NUMV', 'FLV', 'CORN', 'CCOR', 'GVIP', 'SHAG', 'GAMR', 'RFDI', 'MFMS', 'DXD', 'FXC', 'EPHE', 'EUSB', 'DBP', 'DOO', 'FMHI', 'JSMD', 'RFDA', 'QVAL', 'CURE', 'SFY', 'BTEC', 'PRN', 'DGRS', 'IMTB', 'SSUS', 'FXN', 'ELD', 'OPER', 'KORP', 'NUSI', 'IBMN', 'YOLO', 'EFAD', 'PHDG', 'GCOW', 'ESGG', 'QINT', 'PTIN', 'INDS', 'HCRB', 'HMOP', 'OVL', 'HYZD', 'CHAU', 'FCTR', 'LGH', 'FLLV', 'CVY', 'PICB', 'LRGE', 'QLV', 'PWC', 'AIQ', 'EBIZ', 'VRAI', 'PLW', 'JCPB', 'XHS', 'GCOR', 'FIBR', 'IQSI', 'QARP', 'DIVC', 'INKM', 'OVB', 'DWAW', 'RYJ', 'DJD', 'TPHD', 'BFOR', 'EEMX', 'XSMO', 'DIG', 'OUSM', 'RIGS', 'FDM', 'TIPZ', 'BLES', 'DVOL', 'OCIO', 'RBIN', 'HTAB', 'XES', 'RVNU', 'SIXA', 'IGRO', 'MILN', 'EWZS', 'DWFI', 'RXL', 'XYLD', 'BNDC', 'SGDJ', 'SRTY', 'FLBR', 'GOAU', 'PAUG', 'PPTY', 'DBEM', 'RZG', 'HNDL', 'PJUL', 'IDHQ', 'SCHJ', 'GRID', 'DGL', 'EIS', 'RFCI', 'IPKW', 'FYT', 'ESG', 'BKLC', 'WTMF', 'PUTW', 'RBUS', 'HYLV', 'CIL', 'FCG', 'FLGB', 'ETHO', 'WFHY', 'BSEP', 'EMXC', 'PZT', 'AIEQ', 'WIZ', 'PSL', 'RJI', 'IVAL', 'FUMB', 'VALT', 'USCI', 'DBAW', 'FTXO', 'TMV', 'MXDU', 'GVAL', 'XSVM', 'FAUG', 'AFIF', 'ESGA', 'MBSD', 'INDL', 'FDMO', 'IHY', 'FLCH', 'HSRT', 'PIN', 'SCO', 'QQQN', 'DNOV', 'AGZD', 'DUST', 'UOCT', 'IDRV', 'QAT', 'FCAL', 'PJUN', 'IETC', 'JPXN', 'GCC', 'XOUT', 'SOXS', 'HDMV', 'ZJPN', 'HYLD', 'XLSR', 'DGRE', 'RJA', 'IMOM', 'KEMQ', 'SOYB', 'SIXL', 'DYNF', 'HTEC', 'FGM', 'XMHQ', 'FSZ', 'ISMD', 'IIGD', 'GDMA', 'EFIV', 'PRNT', 'DMRM', 'NUAG', 'HAWX', 'SCHQ', 'ACWF', 'QLC', 'USDU', 'QMOM', 'JPMB', 'CUT', 'IBDU', 'TDV', 'GNOM', 'CSB', 'RESP', 'PSR', 'INCO', 'EWMC', 'EMTL', 'URE', 'MMTM', 'BOCT', 'LSAF', 'KNG', 'DGT', 'RECS', 'JVAL', 'SPVU', 'WWJD', 'WPS', 'SYLD', 'BICK', 'GBUY', 'UDN', 'JO', 'QABA', 'AMUB', 'FDIV', 'LOWC', 'FDNI', 'QLVD', 'NUDM', 'FFIU', 'HYHG', 'DJCB', 'TDSE', 'TWM', 'FLMB', 'UGA', 'FRI', 'DEEF', 'AADR', 'JMUB', 'IJUL', 'KARS', 'TAXF', 'VIXM', 'FSMB', 'DRW', 'BJUL', 'IBDD', 'GENY', 'PBJ', 'RFFC', 'RISN', 'USXF', 'WEAT', 'YLCO', 'COMB', 'MFDX', 'HAIL', 'JDST', 'HDGE', 'ISRA', 'PNOV', 'IFRA', 'EQWL', 'IJAN', 'SCJ', 'SJB', 'MMIT', 'EMBD', 'IBMO', 'HEWG', 'AIRR', 'GLDI', 'USEP', 'VCEB', 'PMAY', 'ACSI', 'DWEQ', 'DWUS', 'MFUS', 'NUHY', 'IQDE', 'PHYL', 'DRIP', 'IAK', 'IEZ', 'FAB', 'CSD', 'EWUS', 'GURU', 'SQEW', 'BJK', 'RFV', 'MUST', 'HYGH', 'DEW', 'CWEB', 'JSML', 'DALT', 'TECS', 'OSCV', 'GDNA', 'NOCT', 'VFMF', 'OILK', 'FNGD', 'RUSL', 'EIRL', 'FMAY', 'GOEX', 'FNGS', 'BKHY', 'PDEV', 'NUEM', 'DMXF', 'TPOR', 'DRN', 'RETL', 'BSJQ', 'FTXL', 'RYE', 'WBII', 'SPYC', 'FTHI', 'MIDU', 'UBOT', 'GERM', 'SPMO', 'HLAL', 'SLX', 'DBE', 'GMOM', 'HOLD', 'AWAY', 'ISHG', 'FISR', 'MOTI', 'UTRN', 'VFMO', 'QSY', 'CHIX', 'HSCZ', 'PTEU', 'OMFS', 'PFIG', 'SZNE', 'PFFR', 'VFMV', 'KJAN', 'FIDI', 'NERD', 'PUI', 'FLBL', 'XWEB', 'WFIG', 'CEFS', 'IGN', 'BKAG', 'RLY', 'NJUL', 'BRF', 'FAAR', 'TPIF', 'BDEC', 'BSCT', 'VFQY', 'PSCI', 'CALF', 'GDAT', 'FFTG', 'LVHI', 'KGRN', 'SNLN', 'FCA', 'GRNB', 'PMAR', 'KOCT', 'MINC', 'EUO', 'IBMQ', 'HIBL', 'IVES', 'WBIG', 'KDFI', 'COM', 'FJUN', 'CPI', 'FFHG', 'TAEQ', 'EWO', 'LKOR', 'HAP', 'FILL', 'EET', 'XRLV', 'ARCM', 'GMAN', 'BBSA', 'TCTL', 'HYXU', 'HYXE', 'BAUG', 'RFEM', 'GFIN', 'FLSP', 'XTL', 'DMRE', 'XMVM', 'PVI', 'QTUM', 'BUFR', 'PXQ', 'EDOW', 'ZCAN', 'UDEC', 'LEGR', 'CARZ', 'DFND', 'PWS', 'AESR', 'TCHP', 'BUG', 'ALTL', 'GAA', 'AFK', 'DBLV', 'VMOT', 'WBIL', 'IZRL', 'BKSE', 'ECNS', 'JHMH', 'KNOW', 'JHMT', 'BDCZ', 'NETL', 'CNCR', 'MLPI', 'ARGT', 'PBS', 'QWLD', 'NGE', 'IBDV', 'CMDY', 'CPER', 'CNXT', 'BKMC', 'FFSG', 'MLPC', 'CSF', 'EYLD', 'SPXB', 'ROAM', 'PEZ', 'THCX', 'KORU', 'DWMF', 'BBC', 'ROOF', 'FJP', 'WBIY', 'JIGB', 'THY', 'NUSA', 'LNGR', 'GXG', 'IIGV', 'PYZ', 'CBON', 'WEBL', 'JHMI', 'GSEE', 'DWSH', 'CIZ', 'KCE', 'UBT', 'JIG', 'IPFF', 'GBUG', 'VFLQ', 'UCIB', 'UYM', 'HYDB', 'HYDW', 'SSPY', 'ENFR', 'DURA', 'SHYL', 'ZMLP', 'KLCD', 'ROMO', 'SPUS', 'BKIE', 'HOMZ', 'IBMP', 'WBIE', 'MJJ', 'TADS', 'POTX', 'DBMF', 'DIVB', 'JHMC', 'PQIN', 'UJUL', 'LEAD', 'EUDG', 'TRND', 'BKEM', 'WBIF', 'MVRL', 'YANG', 'GYLD', 'UMDD', 'FMF', 'UAUG', 'KOL', 'TRTY', 'NORW', 'DUSL', 'NJAN', 'GTIP', 'EVX', 'EJAN', 'DDLS', 'FVL', 'SPVM', 'GXTG', 'KBWR', 'FCEF', 'XPP', 'EUM', 'MTGP', 'FRLG', 'ASHS', 'LBJ', 'EWGS', 'VXZ', 'BSMM', 'CYB', 'ABEQ', 'SLVO', 'PAK', 'FNK', 'IUSS', 'UFO', 'RESE', 'JMIN', 'DMRS', 'ZSL', 'IPOS', 'AZAO', 'ERSX', 'BUYZ', 'KSCD', 'PSCC', 'IDX', 'OIL', 'EWK', 'VEGN', 'EUSC', 'FSMD', 'UST', 'SIXS', 'SMHB', 'RSXJ', 'VEGI', 'JDIV', 'BNKU', 'DRV', 'XDIV', 'NRGD', 'DXJS', 'RWVG', 'DAX', 'BJUN', 'ASEA', 'HIBS', 'FLMI', 'FLKR', 'TPSC', 'WBIT', 'SFIG', 'SPSK', 'PFI', 'FOVL', 'OVM', 'CCRV', 'EMCB', 'AZBO', 'BDCX', 'BSML', 'FBCV', 'ERY', 'LFEQ', 'EJUL', 'JHCS', 'USDY', 'ESEB', 'UTES', 'ZDEU', 'TDVG', 'FFR', 'HDG', 'FLQM', 'KAPR', 'CHGX', 'EDZ', 'SRS', 'DEEP', 'BCM', 'DXGE', 'ISZE', 'FLRT', 'EFNL', 'CEFD', 'BKSB', 'BBP', 'LOUP', 'DVYA', 'JHMF', 'EURL', 'FJNK', 'DDIV', 'GSIG', 'RWGV', 'EWSC', 'LGOV', 'IBCE', 'VLU', 'ALFA', 'FRDM', 'IEIH', 'RDOG', 'IQDY', 'UMAR', 'RYLD', 'BDCS', 'UCC', 'FEUZ', 'IBHA', 'SPDV', 'HTUS', 'KJUL', 'PSCF', 'DJUN', 'JHMA', 'GXF', 'JJC', 'PST', 'PSET', 'FYLD', 'AGGP', 'FLQD', 'JHMS', 'FLYT', 'SNUG', 'PSCD', 'SYG', 'IDY', 'XCEM', 'CN', 'SFHY', 'BNOV', 'MLPR', 'NURE', 'IECS', 'SAA', 'CHIK', 'SKF', 'TGRW', 'COW', 'BATT', 'YCS', 'EINC', 'MEXX', 'DBS', 'XSHD', 'IEDI', 'FLSW', 'XSHQ', 'BMLP', 'BMAR', 'IBTJ', 'DEED', 'SDEM', 'FIHD', 'SOVB', 'FLQE', 'OLD', 'TMDV', 'RNDM', 'FXP', 'RNLC', 'TTT', 'EMDV', 'EWCO', 'SMCP', 'ZIG', 'GRES', 'PQDI', 'JHMU', 'ISEM', 'QRFT', 'VPC', 'TEQI', 'CID', 'IBTG', 'CWS', 'FID', 'GSJY', 'EDOG', 'SPUU', 'IBHB', 'UXI', 'YGRN', 'FLAX', 'CEY', 'ENOR', 'EMTY', 'FTXH', 'MYY', 'HDAW', 'IAUF', 'PBND', 'PSCE', 'FMK', 'LRNZ', 'ICOL', 'EBLU', 'EWRE', 'FLTW', 'BFIT', 'URNM', 'EGPT', 'OEUR', 'PFFL', 'PBUS', 'BNKO', 'BSMN', 'SPXE', 'CHIS', 'BSJR', 'NLR', 'PEX', 'LQDI', 'CSA', 'DBEH', 'CNBS', 'GLL', 'SYE', 'ALTY', 'RESD', 'BDRY', 'SGG', 'PSCU', 'MSVX', 'FIVA', 'TYD', 'NULC', 'WANT', 'TDSA', 'TBX', 'KOLD', 'RFEU', 'NFLT', 'NACP', 'TEGS', 'IDIV', 'XBUY', 'PXI', 'FKU', 'TOKE', 'SYV', 'EFZ', 'DUG', 'WLDR', 'PLTM', 'BSMP', 'GNAF', 'BSMQ', 'IBTD', 'BSMO', 'IDHD', 'GSEU', 'FTXN', 'FITE', 'JJG', 'CRAK', 'CHIC', 'IBHE', 'KOIN', 'PAMC', 'WBIN', 'SFYX', 'FPA', 'SEF', 'HIPS', 'IBHC', 'WUGI', 'SIMS', 'PXE', 'REK', 'PY', 'FIEE', 'QMN', 'FLAU', 'CEW', 'SSLY', 'DBEZ', 'IEHS', 'UNOV', 'PGAL', 'EMAG', 'KNAB', 'BMAY', 'JPN', 'EMFM', 'FMIL', 'NAPR', 'DVLU', 'EMIF', 'BSDE', 'FIYY', 'TUSA', 'EASG', 'IBTF', 'LSST', 'BZQ', 'FLHK', 'GIGE', 'ICOW', 'RNMC', 'BSMR', 'EWJV', 'GOVZ', 'USAI', 'BILS', 'QDYN', 'UTSL', 'RVRS', 'PALC', 'MJO', 'PYPE', 'ESHY', 'UJUN', 'ZHOK', 'IBTI', 'DBV', 'IBTH', 'FLQG', 'KCNY', 'SBUG', 'HSMV', 'TERM', 'FLIN', 'DALI', 'EEMO', 'PILL', 'UAE', 'NIB', 'KRBN', 'KFYP', 'IMLP', 'DMAY', 'TTAI', 'JJN', 'QLVE', 'PBTP', 'IBTE', 'FLN', 'RFUN', 'ASHX', 'DBGR', 'IEME', 'UPW', 'MARB', 'VEGA', 'JHME', 'ZGBR', 'SQLV', 'HYTR', 'LCR', 'USI', 'YLDE', 'MVIN', 'HEWC', 'GOAT', 'THNQ', 'FLQS', 'SMEZ', 'XVZ', 'DWCR', 'KWT', 'IBHD', 'CANE', 'PQLC', 'ESNG', 'PQSG', 'EQOP', 'WOMN', 'NRGZ', 'HDLB', 'EFO', 'SDVY', 'PSM', 'CHNA', 'VAMO', 'QMJ', 'ERM', 'LDRS', 'UGE', 'RFAP', 'TTTN', 'DWPP', 'ROKT', 'AMER', 'EPV', 'UMAY', 'CHIH', 'DZK', 'FDEV', 'RAFE', 'FRAK', 'LIV', 'BSCE', 'PLAT', 'FDEM', 'BSBE', 'FLQH', 'ESCR', 'AFTY', 'IDLB', 'ACT', 'IBTA', 'BSAE', 'BIS', 'KCCB', 'PQSV', 'SDYL', 'CCON', 'MLPE', 'MAGA', 'HYUP', 'EMSG', 'SLT', 'HEWU', 'EFAS', 'EMMF', 'ACSG', 'RNSC', 'XJH', 'BAL', 'CEZ', 'SMDD', 'QLS', 'MCEF', 'FBZ', 'PSCM', 'INFR', 'RINF', 'DJCI', 'PFLD', 'HIPR', 'USLB', 'LSLT', 'BCD', 'EUDV', 'TPAY', 'NIFE', 'PXJ', 'HELX', 'FDTS', 'TAAG', 'EEV', 'IDMO', 'SBB', 'TAWK', 'GUDB', 'JPNL', 'WINC', 'UBR', 'MRGR', 'PSMB', 'OBOR', 'CHIR', 'BSJS', 'UCI', 'EWJE', 'SPXT', 'FLRU', 'ROSC', 'AGT', 'PLC', 'BNKZ', 'FTRI', 'EVLMC', 'AMU', 'PSMC', 'SEIX', 'EMSH', 'FLM', 'ALTS', 'FLGR', 'FWDB', 'BOUT', 'TLDH', 'MRSK', 'FTXD', 'NRGO', 'RNEM', 'VNMC', 'KALL', 'TYO', 'FLFR', 'FLCA', 'EDUT', 'EVSTC', 'ECOZ', 'ARB', 'DYHG', 'QDIV', 'MID', 'JJP', 'PSMG', 'XJR', 'FUD', 'IBBJ', 'GRN', 'JJA', 'DFVL', 'BLHY', 'BSCU', 'AIIQ', 'EKAR', 'STLV', 'JJM', 'EVGBC', 'ESGS', 'DEFA', 'SPXN', 'EMBH', 'BOSS', 'AMOM', 'BLDG', 'STSB', 'MOTO', 'VIRS', 'CHIL', 'XVV', 'UNL', 'UJB', 'SFYF', 'VWID', 'FLJH', 'TBJL', 'EZJ', 'EWV', 'BTYS', 'FLMX', 'STMB', 'RALS', 'RODE', 'REW', 'BSMS', 'BSMT', 'STLC', 'UPV', 'ASET', 'YXI', 'QVM', 'BSMU', 'FNGZ', 'PGM', 'MOM', 'ESGN', 'MAAX', 'FTLB', 'RNDV', 'IEFN', 'TFJL', 'TFLT', 'ARMR', 'QED', 'FLEH', 'PBSM', 'CROC', 'TFIV', 'FUT', 'STLG', 'RAAX', 'EAOA', 'KESG', 'OVF', 'QYLG', 'RJZ', 'SPMV', 'AFLG', 'WIL', 'EAOR', 'MCRO', 'NEED', 'JJU', 'EUFX', 'FLRG', 'EAOM', 'SDD', 'JJS', 'EAOK', 'IQM', 'ADFI', 'SSG', 'ULE', 'TLEH', 'IBTB', 'FCPI', 'JJT', 'NFTY', 'WEBS', 'FLIY', 'SDGA', 'PSMM', 'DWAT', 'TAPR', 'OVS', 'EEMD', 'FTAG', 'FHK', 'AZAA', 'AZBA', 'KMED', 'DIVA', 'GRU', 'ECLN', 'MZZ', 'SMDY', 'GAZ', 'DDG', 'HJPX', 'CFCV', 'AMCA', 'FCAN', 'USHG', 'SDCI', 'MIDF', 'USEQ', 'XCOM', 'RISE', 'CEFA', 'YCL', 'INDF', 'PASS', 'UBG', 'KEMX', 'GBGR', 'FLEU', 'MUTE', 'FPXE', 'PBEE', 'VSL', 'IXSE', 'XYLG', 'GBLO', 'FAUS', 'PBDM', 'HDIV', 'DEUR', 'FLSA', 'FFEU', 'DWMC', 'MLPG', 'LUXE', 'FLUD', 'SDP', 'IBTK', 'SMN', 'EURZ', 'GLIF', 'BNKD', 'RJN', 'MMLG', 'FLLA', 'FTXG', 'CHB', 'ECOW', 'FLZA', 'UEUR', 'DMDV', 'JJE', 'CHII', 'CBLS', 'CHIM', 'RODI', 'AFSM', 'FKO', 'AFMC', 'SPXV', 'BDCY', 'DFVS', 'EFU', 'CHIE', 'GBDV', 'PEXL', 'VETS', 'UCHF', 'RXD', 'BUL', 'CBSE', 'CHIU', 'EQRR', 'TAGS', 'USV', 'UGBP', 'HERD', 'SIJ', 'PFFV', 'SBM', 'LMLB', 'UAG', 'EEH', 'UJPY', 'DAUD', 'LTL', 'UAUD', 'DGBP', 'SCC', 'SZK', 'DJPY', 'HEWW', 'BUY', 'DUAL', 'CHEP', 'DCHF', 'LD', 'REVS', 'LACK', 'FUE', 'YCOM', 'LEND', 'OUNZ', 'FLGE', 'REML', 'DGP', 'GLIN', 'GLCN', 'JOYY', 'MLPY', 'MLPO', 'FEUL', 'DZZ', 'DGZ', 'TBND', 'USOI'] self.etfs = ['PALL', 'ITEQ', 'LGLV', 'HACK', 'NULG', 'TDIV', 'PUI', 'FDLO', 'XSD', 'RYH', 'IGV', 'QQQE', 'VHT', 'VGT', 'PTNQ', 'DJD', 'FVAL', 'MOAT', 'AIQ', 'ENZL', 'PXQ', 'IXN', 'FNY', 'YLCO', 'PHO', 'JSMD', 'BFIT', 'ITA', 'XITK', 'UCC', 'XT', 'ARKG', 'PBW', 'FPX', 'RTH', 'MTUM', 'SPMO', 'XHE', 'MILN', 'CIBR', 'SPXE', 'FINX', 'XAR', 'JSML', 'IHI', 'PTF', 'GURU', 'DIA', 'IGW', 'IPAY', 'PDP', 'FIW', 'IGN', 'PALL', 'ITEQ', 'EVX', 'LGLV', 'RXI', 'KBWP', 'KSA', 'XSD', 'JKD', 'ARKK', 'DIA', 'QQQE', 'PTNQ', 'MOAT', 'AIQ', 'IBUY', 'UDOW', 'PXQ', 'IXN', 'XWEB', 'PHO', 'DEF', 'PWT', 'JSMD', 'ITA', 'FXL', 'PSJ', 'UCC', 'XT', 'ARKG', 'PBW', 'PNQI', 'FPX', 'RTH', 'ESG', 'SPMO', 'XHE', 'MILN', 'CIBR', 'ARKW', 'CFA', 'IYF', 'FBT', 'XAR', 'IHI', 'PTF', 'FDN', 'IGW', 'IPAY', 'MOO', 'FIW', 'IGN', 'PALL', 'ITEQ', 'EVX', 'HACK', 'TDIV', 'KSA', 'QQQE', 'FVI', 'PTH', 'PTNQ', 'MOAT', 'RDIV', 'AIQ', 'RGI', 'XRLV', 'CURE', 'PXQ', 'UDOW', 'MORT', 'RZG', 'ITA', 'XMLV', 'REGL', 'FXL', 'PSJ', 'UCC', 'SMDV', 'ARKG', 'DIVC', 'PNQI', 'FPX', 'CRAK', 'TYH', 'SPMO', 'DVP', 'RDVY', 'XHE', 'GUNR', 'ENOR', 'ARKW', 'FBT', 'THD', 'NB', 'ARKQ', 'XLVS', 'FDN', 'IGW', 'EES', 'IHF', 'FIW', 'IGN', 'KOL', 'FDM', 'EVX', 'EWT', 'AADR', 'AIRR', 'KBWP', 'XLUS', 'TDIV', 'FXZ', 'DFJ', 'MXI', 'PSI', 'SOCL', 'UMDD', 'SDY', 'BJK', 'RDIV', 'XRLV', 'ENZL', 'EPU', 'UDOW', 'PXQ', 'GNR', 'SOXL', 'FNY', 'FNI', 'WOOD', 'PICK', 'ECH', 'ARGT', 'SPHB', 'SMDV', 'DIVC', 'SPLV', 'UXI', 'TYH', 'DVP', 'RDVY', 'SLX', 'XHE', 'FEMS', 'GRID', 'RYT', 'FMK', 'XLKS', 'FNDE', 'THD', 'PEY', 'ARKQ', 'RFV', 'FDN', 'FONE', 'FIW', 'LBJ', 'GAME', 'FDM', 'XSLV', 'VFH', 'EVX', 'INDL', 'AIRR', 'KBWP', 'IPKW', 'XLUS', 'TFI', 'DFJ', 'TDIV', 'FYC', 'FXZ', 'RSXJ', 'PSI', 'XSD', 'SOCL', 'XLPS', 'QQQE', 'SPHD', 'XLG', 'IXN', 'CZA', 'BCM', 'VTV', 'EWK', 'XMLV', 'ARGT', 'PSJ', 'QABA', 'FAN', 'UXI', 'IAK', 'MTUM', 'RUSL', 'XHE', 'GRID', 'ARKW', 'XLKS', 'XLY', 'UGE', 'PEY', 'PKB', 'SDOG', 'IHI', 'ARKQ', 'FDN', 'SCHD', 'SYG', 'CDC', 'SYE', 'GAME', 'XSLV', 'KIE', 'KBWP', 'XLUS', 'TFI', 'PUI', 'DFJ', 'UPW', 'PSI', 'XSD', 'QUAL', 'IGV', 'SDY', 'QQQ', 'XLPS', 'USMV', 'RDIV', 'SPHD', 'MTK', 'XSW', 'KNOW', 'PSL', 'ITA', 'FDV', 'XMLV', 'PSJ', 'REZ', 'FXU', 'DSG', 'PNQI', 'DGRO', 'QABA', 'RTH', 'MTUM', 'FLGE', 'XHE', 'PIV', 'XLY', 'UGE', 'RHS', 'PEY', 'SMLV', 'PKB', 'IHI', 'XLP', 'DON', 'NOBL', 'XLVS', 'FDN', 'SYG', 'SYE', 'GAME', 'ICF', 'XSLV', 'KIE', 'VYM', 'LGLV', 'KBWP', 'XLUS', 'DFJ', 'XSD', 'IGV', 'QQQ', 'PWB', 'PBJ', 'SIZE', 'XLPS', 'USMV', 'RDIV', 'FXG', 'SPHD', 'XLG', 'MTK', 'XLK', 'KNOW', 'PSL', 'FDV', 'XMLV', 'PSJ', 'REZ', 'RTH', 'MTUM', 'RYU', 'XHE', 'PIV', 'HDV', 'IWY', 'DVY', 'RETL', 'RYT', 'XLKS', 'PPA', 'XLY', 'UGE', 'RHS', 'PEY', 'IHI', 'FDL', 'DON', 'FCOM', 'FDN', 'SYG', 'XSLV', 'KIE', 'VYM', 'KBWP', 'XLUS', 'XSD', 'RYH', 'IGV', 'SDY', 'QQQ', 'PBJ', 'XLPS', 'ACWV', 'TLT', 'MLN', 'FXG', 'PGX', 'GLJ', 'TMF', 'XLG', 'SPHD', 'MTK', 'TYD', 'IGM', 'KNOW', 'PSL', 'XMLV', 'XMPT', 'UCC', 'REZ', 'PSJ', 'DGRW', 'RTH', 'MTUM', 'RYU', 'XHE', 'SCHH', 'PIV', 'HDV', 'RYT', 'XLKS', 'XLY', 'UGE', 'RHS', 'PEY', 'XLVS', 'IHI', 'FDL', 'DON', 'RETL', 'FDN', 'EDEN', 'PFI', 'KIE', 'RPG', 'PPH', 'BIB', 'PEJ', 'RXI', 'KBWP', 'XLUS', 'XSD', 'IGV', 'XLPS', 'ACWV', 'PBJ', 'YCS', 'IJT', 'FXG', 'CURE', 'PXLG', 'IYG', 'SPHD', 'MTK', 'XSW', 'PBE', 'PSL', 'ITA', 'UCC', 'PSJ', 'QABA', 'FPX', 'RTH', 'TYH', 'TTFS', 'SKYY', 'TQQQ', 'XHE', 'RETL', 'XLKS', 'KXI', 'UGE', 'RHS', 'PEY', 'XLVS', 'ONEQ', 'FDL', 'PTF', 'PJP', 'FDN', 'IGW', 'IHI', 'SCHD', 'IHF'] self.leveraged = ['DEUR', 'UEUR', 'UCHF', 'UGBP', 'UJPY', 'DAUD', 'UAUD', 'DGBP', 'DJPY', 'DCHF', 'TQQQ', 'SOXL', 'TECL', 'FAS', 'UPRO', 'SPXL', 'TNA', 'SQQQ', 'FNGU', 'NUGT', 'JNUG', 'UDOW', 'SPXU', 'SPXS', 'GUSH', 'SDOW', 'ERX', 'TZA', 'NAIL', 'LABU', 'URTY', 'DFEN', 'YINN', 'TMF', 'BRZU', 'NRGU', 'EDC', 'FAZ', 'DPST', 'CURE', 'LABD', 'TMV', 'INDL', 'SRTY', 'DUST', 'SOXS', 'MIDU', 'RUSL', 'HIBL', 'DRIP', 'TECS', 'JDST', 'RETL', 'DRN', 'TPOR', 'UBOT', 'FNGD', 'KORU', 'WEBL', 'UMDD', 'YANG', 'DUSL', 'HIBS', 'BNKU', 'ERY', 'LBJ', 'EURL', 'DRV', 'TTT', 'EDZ', 'NRGD', 'MEXX', 'WANT', 'TYD', 'PILL', 'UTSL', 'DZK', 'SMDD', 'TAWK', 'JPNL', 'TYO', 'NEED', 'WEBS', 'PASS', 'MUTE', 'BNKD', 'LACK', 'QLD', 'SSO', 'UCO', 'SDS', 'ROM', 'AGQ', 'UWM', 'UYG', 'TBT', 'DDM', 'UGL', 'QID', 'BIB', 'BOIL', 'FNGO', 'USD', 'MVV', 'FBGX', 'DXD', 'DIG', 'CHAU', 'RXL', 'SCO', 'URE', 'TWM', 'CWEB', 'EET', 'EUO', 'UBT', 'UYM', 'FRLG', 'XPP', 'SMHB', 'UST', 'ZSL', 'SRS', 'KOLD', 'UCC', 'SAA', 'PST', 'SKF', 'FXP', 'YCS', 'FIHD', 'UXI', 'GLL', 'BNKO', 'PFFL', 'SPUU', 'DUG', 'FIEE', 'BZQ', 'FIYY', 'MJO', 'UJB', 'UPW', 'EFO', 'HDLB', 'UGE', 'EPV', 'BIS', 'SDYL', 'NRGZ', 'UBR', 'NRGO', 'EEV', 'BNKZ', 'DFVL', 'REW', 'EZJ', 'UPV', 'EWV', 'ULE', 'FNGZ', 'SSG', 'SDD', 'MZZ', 'XCOM', 'YCL', 'FLEU', 'FFEU', 'SMN', 'CROC', 'SDP', 'BDCY', 'EFU', 'RXD', 'SIJ', 'LMLB', 'SCC', 'LTL', 'SZK', 'YCOM', 'FLGE', 'REML', 'DGP', 'FEUL', 'DZZ', 'UVXY', 'MVRL', 'BDCX', 'CEFD', 'MLPR', 'SVXY', 'TYH', 'BGU'] def SelectCoarse(self, algorithm, coarse): current_week = algorithm.Time.isocalendar()[1] if self.week is not None and (current_week == self.week or current_week % self.week_rebalance != 0): return Universe.Unchanged else: self.week = current_week return self.FilterEtfs(algorithm, [x.Symbol for x in coarse if not x.HasFundamentalData and x.Symbol.Value in self.etfs]) #return self.FilterEtfs(algorithm, [x.Symbol for x in coarse if not x.HasFundamentalData and x.Symbol.Value in self.etfs])[:self.numberOfSymbolsCoarse] #return self.FilterEtfs(algorithm, [x.Symbol for x in coarse if not x.HasFundamentalData and x.Symbol.Value in self.etfs[:20]]) def FilterEtfs(self, algorithm, fine): algorithm.Log('FilterETFs') history = algorithm.History(fine, self.lookback_days, Resolution.Daily) if history.empty: return [] df = history['close'].unstack(level=0) results = [] mx = len(df.columns) for i, c in enumerate(df.columns): results.append({ 'col': c, 'days': self.lookback_days, 'days_recorded': first_nn(df[c].values), 'r2': r2(df[c].values, y_val(df[c])), 'return': ret(df[c]), #'sharpe': sharpe(df[c].values), #'sortino': sortino(df[c].values) }) r = pd.DataFrame(results) r = r[r['col'].isin([c for c in r['col'] if not any((c.startswith(e) for e in self.leveraged))])] r['sym'] = r['col'].str.split(' ').apply(lambda x: x[0]) r['days_recorded'] = r['days_recorded'].mask(r['days_recorded']==0, r['days'].max()) r = r.sort_values(['sym', 'days', 'days_recorded'], ascending=False).reset_index(drop=True) r = r[~r['sym'].duplicated()].reset_index(drop=True) r = r[(r['days_recorded'] >= self.lookback_days) & (r['return'].notna()) ].sort_values('return', ascending=False) history = df.loc[:, list(set(df.columns).intersection(set(r['col'].values)))] algorithm.Log(history.shape) correlation_matrix = history.corr() sym_lst = r.sort_values('return')['col'].values ix_remaining = [] remaining = [] for ix, row in r.iterrows(): corrs = correlation_matrix[row['col']][correlation_matrix[row['col']] > self.thresh].index.values if not any((s in remaining for s in corrs)): remaining.append(row['col']) ix_remaining.append(ix) remaining = r.loc[ix_remaining] return [x for x in fine if x.Value in self.pick_top_n(algorithm, remaining)] def pick_top_n(self, algorithm, r): r['r2_zscore'] = stats.zscore(r['r2'].values) r['return_zscore'] = stats.zscore(r['return'].values) algorithm.Log(f"r2_zscore: {r['r2_zscore']}") algorithm.Log(f"return_zscore: {r['return_zscore']}") for p in range(99, 0, -1): s1 = r['return_zscore'] > np.percentile(r['return_zscore'].values, p) s2 = r['r2_zscore'] > np.percentile(r['r2_zscore'].values, p) secs = set(r['sym'][s1]).intersection(set(r['sym'][s2])) if len(secs) > self.topn or p == 1: return list(secs) return []
from QuantConnect import Resolution, Extensions from QuantConnect.Algorithm.Framework.Alphas import * from QuantConnect.Algorithm.Framework.Portfolio import * from itertools import groupby from datetime import datetime, timedelta class MyPortfolioConstructionModel(PortfolioConstructionModel): '''Provides an implementation of IPortfolioConstructionModel that gives equal weighting to all securities. The target percent holdings of each security is 1/N where N is the number of securities. For insights of direction InsightDirection.Up, long targets are returned and for insights of direction InsightDirection.Down, short targets are returned.''' def __init__(self, rebalance = Resolution.Daily, portfolioBias = PortfolioBias.LongShort): '''Initialize a new instance of EqualWeightingPortfolioConstructionModel Args: rebalance: Rebalancing parameter. If it is a timedelta, date rules or Resolution, it will be converted into a function. If None will be ignored. The function returns the next expected rebalance time for a given algorithm UTC DateTime. The function returns null if unknown, in which case the function will be called again in the next loop. Returning current time will trigger rebalance. portfolioBias: Specifies the bias of the portfolio (Short, Long/Short, Long)''' self.portfolioBias = portfolioBias # If the argument is an instance of Resolution or Timedelta # Redefine rebalancingFunc rebalancingFunc = rebalance if isinstance(rebalance, int): rebalance = Extensions.ToTimeSpan(rebalance) if isinstance(rebalance, timedelta): rebalancingFunc = lambda dt: dt + rebalance if rebalancingFunc: self.SetRebalancingFunc(rebalancingFunc) def DetermineTargetPercent(self, activeInsights): '''Will determine the target percent for each insight Args: activeInsights: The active insights to generate a target for''' result = {} # give equal weighting to each security count = sum(x.Direction != InsightDirection.Flat and self.RespectPortfolioBias(x) for x in activeInsights) percent = 0 if count == 0 else 1.0 / count for insight in activeInsights: result[insight] = (insight.Direction if self.RespectPortfolioBias(insight) else InsightDirection.Flat) * percent return result def RespectPortfolioBias(self, insight): '''Method that will determine if a given insight respects the portfolio bias Args: insight: The insight to create a target for ''' return self.portfolioBias == PortfolioBias.LongShort or insight.Direction == self.portfolioBias
from System import * from QuantConnect import * from QuantConnect.Orders import * from QuantConnect.Algorithm import * from QuantConnect.Algorithm.Framework import * from QuantConnect.Algorithm.Framework.Execution import * from QuantConnect.Algorithm.Framework.Portfolio import * class MyExecutionModel(ExecutionModel): '''Provides an implementation of IExecutionModel that immediately submits market orders to achieve the desired portfolio targets''' def __init__(self): '''Initializes a new instance of the ImmediateExecutionModel class''' self.targetsCollection = PortfolioTargetCollection() self.symbolData = {} def Execute(self, algorithm, targets): '''Immediately submits orders for the specified portfolio targets. Args: algorithm: The algorithm instance targets: The portfolio targets to be ordered''' # for performance we check count value, OrderByMarginImpact and ClearFulfilled are expensive to call self.targetsCollection.AddRange(targets) if self.targetsCollection.Count > 0: for target in self.targetsCollection.OrderByMarginImpact(algorithm): # calculate remaining quantity to be ordered quantity = OrderSizing.GetUnorderedQuantity(algorithm, target) if quantity != 0: algorithm.MarketOrder(target.Symbol, quantity) #price = self.symbolData.get(target.Symbol).BidPrice if quantity > 0 else self.symbolData.get(target.Symbol).AskPrice #algorithm.LimitOrder(target.Symbol, quantity, price) self.targetsCollection.ClearFulfilled(algorithm) def OnSecuritiesChanged(self, algorithm, changes): '''Event fired each time the we add/remove securities from the data feed Args: algorithm: The algorithm instance that experienced the change in securities changes: The security additions and removals from the algorithm''' for security in changes.AddedSecurities: if security.Symbol not in self.symbolData: self.symbolData[security.Symbol] = security for removed in changes.RemovedSecurities: # clean up data from removed securities symbol = removed.Symbol if symbol in self.symbolData: if self.IsSafeToRemove(algorithm, symbol): data = self.symbolData.pop(symbol) def IsSafeToRemove(self, algorithm, symbol): '''Determines if it's safe to remove the associated symbol data''' # confirm the security isn't currently a member of any universe return not any([kvp.Value.ContainsMember(symbol) for kvp in algorithm.UniverseManager])
from datetime import timedelta from my_portfolio_construction_model import MyPortfolioConstructionModel from my_execution_model import MyExecutionModel from my_risk_management import MyRiskManagement from my_universe_selection import MyUniverseSelectionModel class ResistanceUncoupledEngine(QCAlgorithm): def Initialize(self): self.rebalance_timedelta = int(self.GetParameter("rebalance_timedelta")) self.SetStartDate(2015, 1, 1) # Set Start Date self.SetCash(100000) # Set Strategy Cash self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin) self.UniverseSettings.Resolution = Resolution.Daily self.AddUniverseSelection(MyUniverseSelectionModel()) self.SetAlpha(ConstantAlphaModel(InsightType.Price, InsightDirection.Up, timedelta(days = self.rebalance_timedelta), 0.0025, None)) self.SetBenchmark("SPY") self.SetPortfolioConstruction(MyPortfolioConstructionModel(rebalance=timedelta(days = self.rebalance_timedelta), portfolioBias = PortfolioBias.Long)) self.SetExecution(MyExecutionModel()) self.SetRiskManagement(MyRiskManagement(0.5)) def OnOrderEvent(self, orderEvent): if orderEvent.Status == OrderStatus.Filled: # self.Debug("Purchased Stock: {0}".format(orderEvent.Symbol)) pass def OnData(self, data): '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. Arguments: data: Slice object keyed by symbol containing the stock data ''' # if not self.Portfolio.Invested: # self.SetHoldings([PortfolioTarget(sym, 1) for sym in self.symbols]) #def OnSecuritiesChanged(self, changes): # self._changes = changes # self.Log(f"OnSecuritiesChanged({self.UtcTime}):: {changes}")