Overall Statistics |
Total Trades 1695 Average Win 0.77% Average Loss -0.45% Compounding Annual Return 29.411% Drawdown 17.200% Expectancy 0.852 Net Profit 2778.814% Sharpe Ratio 1.886 Probabilistic Sharpe Ratio 98.930% Loss Rate 32% Win Rate 68% Profit-Loss Ratio 1.71 Alpha 0.301 Beta 0.061 Annual Standard Deviation 0.166 Annual Variance 0.027 Information Ratio 0.455 Tracking Error 0.268 Treynor Ratio 5.104 Total Fees $2039.13 |
import pandas as pd import numpy as np class LiquidUniverseSelection(QCAlgorithm): def Initialize(self): self.SetBenchmark("QQQ") self.SetStartDate(2008, 1, 1) self.SetEndDate(2021,1,10) self.SetCash(10000) self.max_loss_frac = 0.15 self.asset_best_price = {} res = Resolution.Hour self.MRKT = self.AddEquity('SPY', res).Symbol self.TLT = self.AddEquity('TLT', res).Symbol self.S0=self.AddEquity('VAR',res).Symbol self.S1=self.AddEquity('MD',res).Symbol self.S2=self.AddEquity('GILD',res).Symbol self.S3=self.AddEquity('SPXC',res).Symbol self.S4=self.AddEquity('CHRW',res).Symbol self.S5=self.AddEquity('OMI',res).Symbol self.S6=self.AddEquity('MO',res).Symbol self.S7=self.AddEquity('TECH',res).Symbol self.S8=self.AddEquity('INTU',res).Symbol self.S9=self.AddEquity('LII',res).Symbol self.S10=self.AddEquity('TJX',res).Symbol self.S11=self.AddEquity('ROST',res).Symbol self.S12=self.AddEquity('PTEN',res).Symbol self.S13=self.AddEquity('HLF',res).Symbol self.S14=self.AddEquity('CL',res).Symbol self.S15=self.AddEquity('AMAT',res).Symbol self.S16=self.AddEquity('HAL',res).Symbol self.S17=self.AddEquity('OXY',res).Symbol self.S18=self.AddEquity('LSTR',res).Symbol self.S19=self.AddEquity('FAST',res).Symbol self.S20=self.AddEquity('RS',res).Symbol self.S21=self.AddEquity('TSN',res).Symbol self.S22=self.AddEquity('SLB',res).Symbol self.S23=self.AddEquity('CASY',res).Symbol self.S24=self.AddEquity('TBI',res).Symbol self.S25=self.AddEquity('HUBG',res).Symbol self.S26=self.AddEquity('IT',res).Symbol self.S27=self.AddEquity('STRA',res).Symbol self.S28=self.AddEquity('SYY',res).Symbol self.S29=self.AddEquity('AZO',res).Symbol self.S30=self.AddEquity('CPB',res).Symbol self.S31=self.AddEquity('TTC',res).Symbol self.S32=self.AddEquity('BR',res).Symbol self.S33=self.AddEquity('CPSI',res).Symbol self.S34=self.AddEquity('PAA',res).Symbol self.S35=self.AddEquity('NXGN',res).Symbol self.S36=self.AddEquity('DXC',res).Symbol self.S37=self.AddEquity('CHE',res).Symbol self.S38=self.AddEquity('ORCL',res).Symbol self.S39=self.AddEquity('BBY',res).Symbol self.S40=self.AddEquity('APH',res).Symbol self.S41=self.AddEquity('JCOM',res).Symbol self.S42=self.AddEquity('NSP',res).Symbol self.S43=self.AddEquity('RHI',res).Symbol self.S44=self.AddEquity('UNFI',res).Symbol self.S45=self.AddEquity('TYL',res).Symbol self.S46=self.AddEquity('BIG',res).Symbol self.S47=self.AddEquity('ADBE',res).Symbol self.S48=self.AddEquity('EBAY',res).Symbol self.S49=self.AddEquity('PZZA',res).Symbol self.S50=self.AddEquity('TDC',res).Symbol self.S51=self.AddEquity('BKNG',res).Symbol self.S52=self.AddEquity('SCSC',res).Symbol self.S53=self.AddEquity('MSTR',res).Symbol self.S54=self.AddEquity('WAT',res).Symbol self.S55=self.AddEquity('MOH',res).Symbol self.S56=self.AddEquity('BG',res).Symbol self.S57=self.AddEquity('CF',res).Symbol self.S58=self.AddEquity('MCK',res).Symbol self.S59=self.AddEquity('HPQ',res).Symbol self.S60=self.AddEquity('NI',res).Symbol self.S61=self.AddEquity('MANT',res).Symbol self.S62=self.AddEquity('OKE',res).Symbol self.S63=self.AddEquity('NDSN',res).Symbol self.S64=self.AddEquity('CTSH',res).Symbol self.S65=self.AddEquity('MSFT',res).Symbol self.S66=self.AddEquity('UVV',res).Symbol self.S67=self.AddEquity('CMP',res).Symbol self.S68=self.AddEquity('EHC',res).Symbol self.S69=self.AddEquity('COST',res).Symbol self.S70=self.AddEquity('CAH',res).Symbol self.S71=self.AddEquity('HRB',res).Symbol self.S72=self.AddEquity('DLB',res).Symbol self.S73=self.AddEquity('ABC',res).Symbol self.S74=self.AddEquity('MRK',res).Symbol self.S75=self.AddEquity('CBRL',res).Symbol self.S76=self.AddEquity('MGLN',res).Symbol self.S77=self.AddEquity('ANTM',res).Symbol self.S78=self.AddEquity('FLIR',res).Symbol self.S79=self.AddEquity('MMS',res).Symbol self.S80=self.AddEquity('MNST',res).Symbol self.S81=self.AddEquity('SAFM',res).Symbol self.S82=self.AddEquity('SPH',res).Symbol self.S83=self.AddEquity('LANC',res).Symbol self.S84=self.AddEquity('NOC',res).Symbol self.S85=self.AddEquity('EW',res).Symbol self.S86=self.AddEquity('TDG',res).Symbol self.S87=self.AddEquity('HSY',res).Symbol self.S88=self.AddEquity('SHW',res).Symbol self.S89=self.AddEquity('HI',res).Symbol self.S90=self.AddEquity('YUM',res).Symbol self.S91=self.AddEquity('AAP',res).Symbol self.S92=self.AddEquity('VRSN',res).Symbol self.S93=self.AddEquity('SAM',res).Symbol self.S94=self.AddEquity('DLTR',res).Symbol self.S95=self.AddEquity('SRCL',res).Symbol self.S96=self.AddEquity('WW',res).Symbol self.S97=self.AddEquity('PM',res).Symbol self.S98=self.AddEquity('BMY',res).Symbol self.S99=self.AddEquity('COP',res).Symbol self.S100=self.AddEquity('ADM',res).Symbol self.S101=self.AddEquity('ALXN',res).Symbol self.S102=self.AddEquity('MASI',res).Symbol self.S103=self.AddEquity('IDCC',res).Symbol self.S104=self.AddEquity('TXN',res).Symbol self.S105=self.AddEquity('OMC',res).Symbol self.S106=self.AddEquity('ARLP',res).Symbol self.S107=self.AddEquity('SBUX',res).Symbol self.S108=self.AddEquity('MSM',res).Symbol self.S109=self.AddEquity('WBA',res).Symbol self.S110=self.AddEquity('GGG',res).Symbol self.S111=self.AddEquity('GPN',res).Symbol self.S112=self.AddEquity('AN',res).Symbol self.S113=self.AddEquity('MRO',res).Symbol self.S114=self.AddEquity('DD',res).Symbol self.S115=self.AddEquity('CACI',res).Symbol self.S116=self.AddEquity('POOL',res).Symbol self.S117=self.AddEquity('ARW',res).Symbol self.S118=self.AddEquity('BECN',res).Symbol self.S119=self.AddEquity('HUM',res).Symbol self.S120=self.AddEquity('UNH',res).Symbol self.S121=self.AddEquity('DISH',res).Symbol self.S122=self.AddEquity('LB',res).Symbol self.S123=self.AddEquity('MANH',res).Symbol self.S124=self.AddEquity('NUS',res).Symbol self.S125=self.AddEquity('KLAC',res).Symbol self.S126=self.AddEquity('ANDE',res).Symbol self.S127=self.AddEquity('SBH',res).Symbol self.S128=self.AddEquity('HIBB',res).Symbol self.S129=self.AddEquity('CHH',res).Symbol self.S130=self.AddEquity('VRSK',res).Symbol self.S131=self.AddEquity('AAPL',res).Symbol self.S132=self.AddEquity('TPR',res).Symbol self.S133=self.AddEquity('INTC',res).Symbol self.S134=self.AddEquity('GPI',res).Symbol self.S135=self.AddEquity('CVI',res).Symbol self.S136=self.AddEquity('DLX',res).Symbol self.S137=self.AddEquity('CLMT',res).Symbol self.S138=self.AddEquity('ASH',res).Symbol self.S139=self.AddEquity('DDS',res).Symbol self.S140=self.AddEquity('USNA',res).Symbol self.S141=self.AddEquity('TGNA',res).Symbol self.S142=self.AddEquity('PDLI',res).Symbol self.S143=self.AddEquity('WMT',res).Symbol self.S144=self.AddEquity('PAG',res).Symbol self.S145=self.AddEquity('DPZ',res).Symbol self.S146=self.AddEquity('BCO',res).Symbol self.S147=self.AddEquity('MUR',res).Symbol self.S148=self.AddEquity('HFC',res).Symbol self.S149=self.AddEquity('EME',res).Symbol self.S150=self.AddEquity('R',res).Symbol self.S151=self.AddEquity('F',res).Symbol self.S152=self.AddEquity('LEA',res).Symbol self.S153=self.AddEquity('EGOV',res).Symbol self.S154=self.AddEquity('TRGP',res).Symbol self.S155=self.AddEquity('KR',res).Symbol self.S156=self.AddEquity('NLOK',res).Symbol self.S157=self.AddEquity('MLHR',res).Symbol self.S158=self.AddEquity('LDOS',res).Symbol self.S159=self.AddEquity('CEQP',res).Symbol self.S160=self.AddEquity('NKE',res).Symbol self.S161=self.AddEquity('IPG',res).Symbol self.S162=self.AddEquity('GPS',res).Symbol self.S163=self.AddEquity('HURN',res).Symbol self.S164=self.AddEquity('GWW',res).Symbol self.S165=self.AddEquity('TSCO',res).Symbol self.S166=self.AddEquity('PII',res).Symbol self.S167=self.AddEquity('LMT',res).Symbol self.S168=self.AddEquity('HII',res).Symbol self.S169=self.AddEquity('JBL',res).Symbol self.S170=self.AddEquity('BBBY',res).Symbol self.S171=self.AddEquity('LHX',res).Symbol self.S172=self.AddEquity('FLR',res).Symbol self.S173=self.AddEquity('CMC',res).Symbol self.S174=self.AddEquity('AZPN',res).Symbol self.S175=self.AddEquity('ET',res).Symbol self.S176=self.AddEquity('NGL',res).Symbol self.S177=self.AddEquity('HCA',res).Symbol self.S178=self.AddEquity('FL',res).Symbol self.S179=self.AddEquity('LYB',res).Symbol self.S180=self.AddEquity('NJR',res).Symbol self.S181=self.AddEquity('GD',res).Symbol self.S182=self.AddEquity('RMD',res).Symbol self.S183=self.AddEquity('BF-B',res).Symbol self.S184=self.AddEquity('OIS',res).Symbol self.S185=self.AddEquity('XRX',res).Symbol self.S186=self.AddEquity('ATVI',res).Symbol self.S187=self.AddEquity('CNC',res).Symbol self.S188=self.AddEquity('AXL',res).Symbol self.S189=self.AddEquity('BAH',res).Symbol self.S190=self.AddEquity('GHC',res).Symbol self.S191=self.AddEquity('IPGP',res).Symbol self.S192=self.AddEquity('LCII',res).Symbol self.S193=self.AddEquity('ORLY',res).Symbol self.S194=self.AddEquity('GT',res).Symbol self.S195=self.AddEquity('ROL',res).Symbol self.S196=self.AddEquity('ABM',res).Symbol self.S197=self.AddEquity('AGCO',res).Symbol self.S198=self.AddEquity('CDW',res).Symbol self.S199=self.AddEquity('PSX',res).Symbol self.S200=self.AddEquity('HRL',res).Symbol self.S201=self.AddEquity('VC',res).Symbol self.S202=self.AddEquity('SAIC',res).Symbol self.S203=self.AddEquity('EMR',res).Symbol self.S204=self.AddEquity('THO',res).Symbol self.S205=self.AddEquity('CPRT',res).Symbol self.S206=self.AddEquity('DG',res).Symbol self.S207=self.AddEquity('CDK',res).Symbol self.S208=self.AddEquity('LEG',res).Symbol self.S209=self.AddEquity('DORM',res).Symbol self.S210=self.AddEquity('DGX',res).Symbol self.S211=self.AddEquity('IDXX',res).Symbol self.S212=self.AddEquity('CTAS',res).Symbol self.S213=self.AddEquity('AEIS',res).Symbol self.S214=self.AddEquity('XPER',res).Symbol self.S215=self.AddEquity('ICFI',res).Symbol self.S216=self.AddEquity('DCI',res).Symbol self.S217=self.AddEquity('DRI',res).Symbol self.S218=self.AddEquity('SANM',res).Symbol self.S219=self.AddEquity('MAN',res).Symbol self.S220=self.AddEquity('MSGN',res).Symbol self.S221=self.AddEquity('NVR',res).Symbol self.S222=self.AddEquity('BLD',res).Symbol self.S223=self.AddEquity('TSE',res).Symbol self.S224=self.AddEquity('BMCH',res).Symbol self.S225=self.AddEquity('PLUS',res).Symbol self.S226=self.AddEquity('MTD',res).Symbol self.S227=self.AddEquity('ANSS',res).Symbol self.S228=self.AddEquity('ISRG',res).Symbol self.S229=self.AddEquity('IEX',res).Symbol self.S230=self.AddEquity('MCD',res).Symbol self.S231=self.AddEquity('LOPE',res).Symbol self.S232=self.AddEquity('CDNS',res).Symbol self.S233=self.AddEquity('PPC',res).Symbol self.S234=self.AddEquity('VFC',res).Symbol self.S235=self.AddEquity('FB',res).Symbol self.S236=self.AddEquity('BIIB',res).Symbol self.S237=self.AddEquity('SP',res).Symbol self.S238=self.AddEquity('ASGN',res).Symbol self.S239=self.AddEquity('NPO',res).Symbol self.S240=self.AddEquity('PARR',res).Symbol self.S241=self.AddEquity('CRI',res).Symbol self.S242=self.AddEquity('FOR',res).Symbol self.S243=self.AddEquity('MMI',res).Symbol self.S244=self.AddEquity('PENN',res).Symbol self.S245=self.AddEquity('BCC',res).Symbol self.S246=self.AddEquity('LOW',res).Symbol self.S247=self.AddEquity('IEP',res).Symbol self.S248=self.AddEquity('USPH',res).Symbol self.S249=self.AddEquity('WMK',res).Symbol self.S250=self.AddEquity('FFIV',res).Symbol self.S251=self.AddEquity('FICO',res).Symbol self.S252=self.AddEquity('VRTX',res).Symbol self.S253=self.AddEquity('GM',res).Symbol self.S254=self.AddEquity('VMW',res).Symbol self.S255=self.AddEquity('AVGO',res).Symbol self.S256=self.AddEquity('ULTA',res).Symbol self.S257=self.AddEquity('BHE',res).Symbol self.S258=self.AddEquity('MAS',res).Symbol self.S259=self.AddEquity('PRGS',res).Symbol self.S260=self.AddEquity('PFGC',res).Symbol self.S261=self.AddEquity('GNRC',res).Symbol self.S262=self.AddEquity('GNTX',res).Symbol self.S263=self.AddEquity('SMG',res).Symbol self.S264=self.AddEquity('TTEK',res).Symbol self.S265=self.AddEquity('HEI',res).Symbol self.S266=self.AddEquity('LW',res).Symbol self.S267=self.AddEquity('ZTS',res).Symbol self.S268=self.AddEquity('ODFL',res).Symbol self.S269=self.AddEquity('AMGN',res).Symbol self.S270=self.AddEquity('SLP',res).Symbol self.S271=self.AddEquity('VEEV',res).Symbol self.S272=self.AddEquity('ABMD',res).Symbol self.S273=self.AddEquity('BJ',res).Symbol self.S274=self.AddEquity('WING',res).Symbol self.S275=self.AddEquity('CORT',res).Symbol self.S276=self.AddEquity('FIZZ',res).Symbol self.S277=self.AddEquity('FTNT',res).Symbol self.S278=self.AddEquity('MED',res).Symbol self.S279=self.AddEquity('SFM',res).Symbol self.S280=self.AddEquity('TER',res).Symbol self.S281=self.AddEquity('QCOM',res).Symbol self.S282=self.AddEquity('AMED',res).Symbol self.S283=self.AddEquity('RUSHA',res).Symbol self.S284=self.AddEquity('UFPI',res).Symbol self.S285=self.AddEquity('SWKS',res).Symbol self.S286=self.AddEquity('DECK',res).Symbol self.S287=self.AddEquity('TGT',res).Symbol self.S288=self.AddEquity('HDS',res).Symbol self.S289=self.AddEquity('DELL',res).Symbol self.S290=self.AddEquity('DHI',res).Symbol self.S291=self.AddEquity('PRSC',res).Symbol self.S292=self.AddEquity('WDFC',res).Symbol self.S293=self.AddEquity('AVY',res).Symbol self.S294=self.AddEquity('HOLX',res).Symbol self.S295=self.AddEquity('ZBRA',res).Symbol self.signals = {'2008-01-02':{self.TLT:1},'2008-02-19':{self.S0:0.1,self.S1:0.1,self.S2:0.1,self.S3:0.1,self.S4:0.1,self.S5:0.1,self.S6:0.1,self.S7:0.1,self.S8:0.1,self.S9:0.1},'2008-03-03':{self.S0:0.1,self.S2:0.1,self.S10:0.1,self.S9:0.1,self.S11:0.1,self.S4:0.1,self.S3:0.1,self.S12:0.1,self.S1:0.1,self.S5:0.1},'2008-04-01':{self.S12:0.1,self.S10:0.1,self.S2:0.1,self.S3:0.1,self.S13:0.1,self.S0:0.1,self.S7:0.1,self.S5:0.1,self.S14:0.1,self.S15:0.1},'2008-05-01':{self.S3:0.1,self.S16:0.1,self.S17:0.1,self.S4:0.1,self.S18:0.1,self.S19:0.1,self.S20:0.1,self.S21:0.1,self.S22:0.1,self.S2:0.1},'2008-06-02':{self.TLT:1},'2008-10-07':{self.S23:0.1,self.S24:0.1,self.S25:0.1,self.S26:0.1,self.S27:0.1,self.S11:0.1,self.S28:0.1,self.S29:0.1,self.S30:0.1,self.S31:0.1},'2008-10-15':{self.TLT:1},'2009-03-23':{self.S32:0.1,self.S33:0.1,self.S34:0.1,self.S35:0.1,self.S11:0.1,self.S36:0.1,self.S37:0.1,self.S38:0.1,self.S39:0.1,self.S40:0.1},'2009-04-01':{self.S32:0.1,self.S33:0.1,self.S34:0.1,self.S39:0.1,self.S11:0.1,self.S10:0.1,self.S36:0.1,self.S35:0.1,self.S41:0.1,self.S37:0.1},'2009-05-01':{self.S41:0.1,self.S35:0.1,self.S29:0.1,self.S33:0.1,self.S42:0.1,self.S43:0.1,self.S40:0.1,self.S44:0.1,self.S45:0.1,self.S11:0.1},'2009-06-01':{self.S35:0.1,self.S46:0.1,self.S21:0.1,self.S40:0.1,self.S47:0.1,self.S48:0.1,self.S44:0.1,self.S32:0.1,self.S49:0.1,self.S1:0.1},'2009-07-01':{self.S50:0.1,self.S51:0.1,self.S21:0.1,self.S1:0.1,self.S52:0.1,self.S10:0.1,self.S53:0.1,self.S54:0.1,self.S55:0.1,self.S48:0.1},'2009-08-03':{self.S50:0.1,self.S56:0.1,self.S51:0.1,self.S53:0.1,self.S10:0.1,self.S44:0.1,self.S48:0.1,self.S1:0.1,self.S33:0.1,self.S57:0.1},'2009-09-01':{self.S48:0.1,self.S53:0.1,self.S58:0.1,self.S1:0.1,self.S59:0.1,self.S60:0.1,self.S61:0.1,self.S62:0.1,self.S10:0.1,self.S50:0.1},'2009-10-01':{self.S51:0.1,self.S53:0.1,self.S48:0.1,self.S58:0.1,self.S1:0.1,self.S50:0.1,self.S62:0.1,self.S0:0.1,self.S10:0.1,self.S26:0.1},'2009-11-02':{self.S63:0.1,self.S64:0.1,self.S58:0.1,self.S50:0.1,self.S65:0.1,self.S66:0.1,self.S1:0.1,self.S67:0.1,self.S68:0.1,self.S69:0.1},'2009-12-01':{self.S70:0.1,self.S58:0.1,self.S65:0.1,self.S59:0.1,self.S71:0.1,self.S67:0.1,self.S50:0.1,self.S69:0.1,self.S54:0.1,self.S72:0.1},'2010-01-04':{self.S40:0.1,self.S70:0.1,self.S73:0.1,self.S72:0.1,self.S65:0.1,self.S0:0.1,self.S32:0.1,self.S74:0.1,self.S75:0.1,self.S1:0.1},'2010-02-01':{self.S76:0.1,self.S73:0.1,self.S70:0.1,self.S74:0.1,self.S77:0.1,self.S78:0.1,self.S75:0.1,self.S72:0.1,self.S1:0.1,self.S32:0.1},'2010-03-01':{self.S73:0.1,self.S79:0.1,self.S80:0.1,self.S70:0.1,self.S81:0.1,self.S76:0.1,self.S82:0.1,self.S83:0.1,self.S84:0.1,self.S37:0.1},'2010-04-01':{self.S81:0.1,self.S79:0.1,self.S85:0.1,self.S70:0.1,self.S76:0.1,self.S84:0.1,self.S0:0.1,self.S37:0.1,self.S73:0.1,self.S83:0.1},'2010-05-03':{self.S79:0.1,self.S84:0.1,self.S76:0.1,self.S86:0.1,self.S0:0.1,self.S54:0.1,self.S29:0.1,self.S87:0.1,self.S88:0.1,self.S85:0.1},'2010-06-01':{self.S89:0.1,self.S87:0.1,self.S88:0.1,self.S90:0.1,self.S91:0.1,self.S29:0.1,self.S92:0.1,self.S54:0.1,self.S11:0.1,self.S10:0.1},'2010-06-09':{self.TLT:1},'2010-08-31':{self.S4:0.1,self.S29:0.1,self.S91:0.1,self.S60:0.1,self.S93:0.1,self.S94:0.1,self.S90:0.1,self.S95:0.1,self.S96:0.1,self.S97:0.1},'2010-09-01':{self.S4:0.1,self.S91:0.1,self.S93:0.1,self.S29:0.1,self.S60:0.1,self.S95:0.1,self.S94:0.1,self.S98:0.1,self.S90:0.1,self.S99:0.1},'2010-10-01':{self.S26:0.1,self.S4:0.1,self.S91:0.1,self.S29:0.1,self.S76:0.1,self.S100:0.1,self.S96:0.1,self.S44:0.1,self.S101:0.1,self.S92:0.1},'2010-11-01':{self.S26:0.1,self.S102:0.1,self.S100:0.1,self.S101:0.1,self.S96:0.1,self.S92:0.1,self.S29:0.1,self.S94:0.1,self.S103:0.1,self.S53:0.1},'2010-12-01':{self.S102:0.1,self.S101:0.1,self.S103:0.1,self.S104:0.1,self.S80:0.1,self.S96:0.1,self.S91:0.1,self.S105:0.1,self.S94:0.1,self.S106:0.1},'2011-01-03':{self.S101:0.1,self.S107:0.1,self.S96:0.1,self.S104:0.1,self.S108:0.1,self.S106:0.1,self.S105:0.1,self.S109:0.1,self.S99:0.1,self.S29:0.1},'2011-02-01':{self.S101:0.1,self.S35:0.1,self.S109:0.1,self.S96:0.1,self.S110:0.1,self.S106:0.1,self.S104:0.1,self.S1:0.1,self.S111:0.1,self.S112:0.1},'2011-03-01':{self.S113:0.1,self.S114:0.1,self.S110:0.1,self.S35:0.1,self.S106:0.1,self.S104:0.1,self.S73:0.1,self.S115:0.1,self.S116:0.1,self.S56:0.1},'2011-04-01':{self.S113:0.1,self.S117:0.1,self.S118:0.1,self.S119:0.1,self.S26:0.1,self.S99:0.1,self.S50:0.1,self.S120:0.1,self.S121:0.1,self.S13:0.1},'2011-05-02':{self.S13:0.1,self.S122:0.1,self.S50:0.1,self.S119:0.1,self.S26:0.1,self.S110:0.1,self.S120:0.1,self.S99:0.1,self.S19:0.1,self.S121:0.1},'2011-06-01':{self.S110:0.1,self.S119:0.1,self.S122:0.1,self.S80:0.1,self.S120:0.1,self.S35:0.1,self.S73:0.1,self.S7:0.1,self.S97:0.1,self.S58:0.1},'2011-06-14':{self.TLT:1},'2012-01-04':{self.S93:0.1,self.S19:0.1,self.S123:0.1,self.S124:0.1,self.S125:0.1,self.S126:0.1,self.S127:0.1,self.S128:0.1,self.S49:0.1,self.S129:0.1},'2012-02-01':{self.S91:0.1,self.S80:0.1,self.S11:0.1,self.S128:0.1,self.S130:0.1,self.S34:0.1,self.S49:0.1,self.S10:0.1,self.S93:0.1,self.S31:0.1},'2012-03-01':{self.S19:0.1,self.S45:0.1,self.S131:0.1,self.S34:0.1,self.S132:0.1,self.S91:0.1,self.S11:0.1,self.S108:0.1,self.S18:0.1,self.S133:0.1},'2012-04-02':{self.S51:0.1,self.S131:0.1,self.S19:0.1,self.S132:0.1,self.S91:0.1,self.S80:0.1,self.S128:0.1,self.S13:0.1,self.S127:0.1,self.S134:0.1},'2012-05-01':{self.S131:0.1,self.S127:0.1,self.S130:0.1,self.S10:0.1,self.S128:0.1,self.S91:0.1,self.S11:0.1,self.S97:0.1,self.S31:0.1,self.S94:0.1},'2012-05-04':{self.TLT:1},'2012-09-11':{self.S135:0.1,self.S136:0.1,self.S137:0.1,self.S138:0.1,self.S139:0.1,self.S140:0.1,self.S26:0.1,self.S141:0.1,self.S142:0.1,self.S143:0.1},'2012-10-01':{self.S137:0.1,self.S144:0.1,self.S135:0.1,self.S136:0.1,self.S112:0.1,self.S139:0.1,self.S142:0.1,self.S123:0.1,self.S134:0.1,self.S109:0.1},'2012-11-01':{self.S141:0.1,self.S136:0.1,self.S123:0.1,self.S142:0.1,self.S144:0.1,self.S112:0.1,self.S145:0.1,self.S139:0.1,self.S41:0.1,self.S31:0.1},'2012-12-03':{self.S141:0.1,self.S137:0.1,self.S145:0.1,self.S146:0.1,self.S147:0.1,self.S148:0.1,self.S149:0.1,self.S134:0.1,self.S31:0.1,self.S139:0.1},'2013-01-02':{self.S150:0.1,self.S139:0.1,self.S151:0.1,self.S145:0.1,self.S149:0.1,self.S152:0.1,self.S147:0.1,self.S153:0.1,self.S134:0.1,self.S146:0.1},'2013-02-01':{self.S150:0.1,self.S151:0.1,self.S43:0.1,self.S1:0.1,self.S141:0.1,self.S123:0.1,self.S152:0.1,self.S139:0.1,self.S107:0.1,self.S149:0.1},'2013-03-01':{self.S136:0.1,self.S21:0.1,self.S43:0.1,self.S154:0.1,self.S150:0.1,self.S149:0.1,self.S152:0.1,self.S151:0.1,self.S155:0.1,self.S34:0.1},'2013-04-01':{self.S21:0.1,self.S156:0.1,self.S45:0.1,self.S157:0.1,self.S136:0.1,self.S152:0.1,self.S149:0.1,self.S43:0.1,self.S155:0.1,self.S145:0.1},'2013-04-03':{self.TLT:1},'2013-06-05':{self.S145:0.1,self.S158:0.1,self.S45:0.1,self.S159:0.1,self.S84:0.1,self.S160:0.1,self.S155:0.1,self.S152:0.1,self.S161:0.1,self.S115:0.1},'2013-07-01':{self.S45:0.1,self.S145:0.1,self.S162:0.1,self.S51:0.1,self.S163:0.1,self.S164:0.1,self.S84:0.1,self.S161:0.1,self.S165:0.1,self.S158:0.1},'2013-08-01':{self.S162:0.1,self.S84:0.1,self.S51:0.1,self.S152:0.1,self.S166:0.1,self.S45:0.1,self.S167:0.1,self.S168:0.1,self.S120:0.1,self.S77:0.1},'2013-09-03':{self.S167:0.1,self.S84:0.1,self.S120:0.1,self.S158:0.1,self.S152:0.1,self.S77:0.1,self.S166:0.1,self.S107:0.1,self.S169:0.1,self.S170:0.1},'2013-10-01':{self.S166:0.1,self.S122:0.1,self.S167:0.1,self.S45:0.1,self.S84:0.1,self.S152:0.1,self.S32:0.1,self.S123:0.1,self.S117:0.1,self.S114:0.1},'2013-11-01':{self.S166:0.1,self.S58:0.1,self.S32:0.1,self.S31:0.1,self.S165:0.1,self.S84:0.1,self.S171:0.1,self.S152:0.1,self.S70:0.1,self.S172:0.1},'2013-12-02':{self.S58:0.1,self.S32:0.1,self.S70:0.1,self.S136:0.1,self.S173:0.1,self.S165:0.1,self.S84:0.1,self.S152:0.1,self.S73:0.1,self.S146:0.1},'2014-01-02':{self.S58:0.1,self.S32:0.1,self.S70:0.1,self.S136:0.1,self.S173:0.1,self.S49:0.1,self.S84:0.1,self.S167:0.1,self.S171:0.1,self.S174:0.1},'2014-02-03':{self.S49:0.1,self.S175:0.1,self.S58:0.1,self.S26:0.1,self.S32:0.1,self.S3:0.1,self.S31:0.1,self.S167:0.1,self.S176:0.1,self.S173:0.1},'2014-03-03':{self.S49:0.1,self.S3:0.1,self.S58:0.1,self.S175:0.1,self.S21:0.1,self.S177:0.1,self.S167:0.1,self.S29:0.1,self.S36:0.1,self.S149:0.1},'2014-03-17':{self.TLT:1},'2014-05-30':{self.S178:0.1,self.S114:0.1,self.S179:0.1,self.S180:0.1,self.S131:0.1,self.S106:0.1,self.S43:0.1,self.S176:0.1,self.S77:0.1,self.S181:0.1},'2014-06-02':{self.S178:0.1,self.S180:0.1,self.S106:0.1,self.S114:0.1,self.S179:0.1,self.S77:0.1,self.S131:0.1,self.S43:0.1,self.S181:0.1,self.S18:0.1},'2014-06-06':{self.TLT:1},'2014-06-30':{self.S131:0.1,self.S106:0.1,self.S179:0.1,self.S181:0.1,self.S4:0.1,self.S182:0.1,self.S178:0.1,self.S77:0.1,self.S183:0.1,self.S43:0.1},'2014-07-01':{self.S131:0.1,self.S179:0.1,self.S106:0.1,self.S181:0.1,self.S4:0.1,self.S77:0.1,self.S183:0.1,self.S178:0.1,self.S112:0.1,self.S43:0.1},'2014-08-01':{self.S131:0.1,self.S176:0.1,self.S179:0.1,self.S155:0.1,self.S77:0.1,self.S152:0.1,self.S184:0.1,self.S169:0.1,self.S59:0.1,self.S4:0.1},'2014-09-02':{self.S4:0.1,self.S37:0.1,self.S131:0.1,self.S179:0.1,self.S59:0.1,self.S185:0.1,self.S77:0.1,self.S106:0.1,self.S43:0.1,self.S186:0.1},'2014-09-23':{self.TLT:1},'2015-02-27':{self.S187:0.1,self.S155:0.1,self.S122:0.1,self.S188:0.1,self.S94:0.1,self.S79:0.1,self.S80:0.1,self.S88:0.1,self.S182:0.1,self.S189:0.1},'2015-03-02':{self.S187:0.1,self.S188:0.1,self.S122:0.1,self.S94:0.1,self.S190:0.1,self.S79:0.1,self.S191:0.1,self.S192:0.1,self.S88:0.1,self.S120:0.1},'2015-04-01':{self.S187:0.1,self.S79:0.1,self.S192:0.1,self.S190:0.1,self.S182:0.1,self.S94:0.1,self.S122:0.1,self.S11:0.1,self.S193:0.1,self.S32:0.1},'2015-05-01':{self.S79:0.1,self.S192:0.1,self.S94:0.1,self.S193:0.1,self.S122:0.1,self.S32:0.1,self.S171:0.1,self.S77:0.1,self.S188:0.1,self.S29:0.1},'2015-06-01':{self.S77:0.1,self.S107:0.1,self.S79:0.1,self.S66:0.1,self.S194:0.1,self.S49:0.1,self.S190:0.1,self.S195:0.1,self.S196:0.1,self.S145:0.1},'2015-06-18':{self.TLT:1},'2015-07-01':{self.S49:0.1,self.S66:0.1,self.S107:0.1,self.S186:0.1,self.S77:0.1,self.S197:0.1,self.S145:0.1,self.S195:0.1,self.S37:0.1,self.S190:0.1},'2015-07-08':{self.TLT:1},'2015-10-23':{self.S198:0.1,self.S23:0.1,self.S160:0.1,self.S116:0.1,self.S122:0.1,self.S6:0.1,self.S107:0.1,self.S21:0.1,self.S178:0.1,self.S29:0.1},'2015-11-02':{self.S160:0.1,self.S71:0.1,self.S116:0.1,self.S193:0.1,self.S23:0.1,self.S107:0.1,self.S6:0.1,self.S122:0.1,self.S29:0.1,self.S157:0.1},'2015-12-01':{self.S186:0.1,self.S116:0.1,self.S193:0.1,self.S107:0.1,self.S161:0.1,self.S6:0.1,self.S84:0.1,self.S198:0.1,self.S199:0.1,self.S23:0.1},'2015-12-21':{self.TLT:1},'2016-03-09':{self.S81:0.1,self.S19:0.1,self.S145:0.1,self.S6:0.1,self.S97:0.1,self.S110:0.1,self.S4:0.1,self.S20:0.1,self.S11:0.1,self.S143:0.1},'2016-04-01':{self.S19:0.1,self.S200:0.1,self.S145:0.1,self.S201:0.1,self.S110:0.1,self.S5:0.1,self.S88:0.1,self.S31:0.1,self.S202:0.1,self.S203:0.1},'2016-05-02':{self.S108:0.1,self.S19:0.1,self.S201:0.1,self.S204:0.1,self.S205:0.1,self.S172:0.1,self.S206:0.1,self.S203:0.1,self.S117:0.1,self.S42:0.1},'2016-06-01':{self.S206:0.1,self.S108:0.1,self.S192:0.1,self.S100:0.1,self.S205:0.1,self.S21:0.1,self.S177:0.1,self.S202:0.1,self.S204:0.1,self.S83:0.1},'2016-07-01':{self.S192:0.1,self.S205:0.1,self.S207:0.1,self.S206:0.1,self.S136:0.1,self.S32:0.1,self.S208:0.1,self.S209:0.1,self.S108:0.1,self.S120:0.1},'2016-08-01':{self.S192:0.1,self.S205:0.1,self.S156:0.1,self.S202:0.1,self.S207:0.1,self.S153:0.1,self.S204:0.1,self.S104:0.1,self.S206:0.1,self.S210:0.1},'2016-09-01':{self.S156:0.1,self.S211:0.1,self.S204:0.1,self.S102:0.1,self.S49:0.1,self.S212:0.1,self.S202:0.1,self.S104:0.1,self.S149:0.1,self.S153:0.1},'2016-10-03':{self.S204:0.1,self.S156:0.1,self.S102:0.1,self.S49:0.1,self.S174:0.1,self.S149:0.1,self.S212:0.1,self.S202:0.1,self.S209:0.1,self.S104:0.1},'2016-11-01':{self.S156:0.1,self.S213:0.1,self.S214:0.1,self.S202:0.1,self.S145:0.1,self.S158:0.1,self.S102:0.1,self.S204:0.1,self.S149:0.1,self.S205:0.1},'2016-12-01':{self.S202:0.1,self.S145:0.1,self.S213:0.1,self.S49:0.1,self.S214:0.1,self.S209:0.1,self.S15:0.1,self.S189:0.1,self.S11:0.1,self.S84:0.1},'2017-01-03':{self.S202:0.1,self.S215:0.1,self.S108:0.1,self.S18:0.1,self.S216:0.1,self.S198:0.1,self.S217:0.1,self.S214:0.1,self.S31:0.1,self.S189:0.1},'2017-02-01':{self.S218:0.1,self.S108:0.1,self.S102:0.1,self.S213:0.1,self.S219:0.1,self.S202:0.1,self.S31:0.1,self.S215:0.1,self.S18:0.1,self.S19:0.1},'2017-03-01':{self.S102:0.1,self.S218:0.1,self.S108:0.1,self.S213:0.1,self.S219:0.1,self.S37:0.1,self.S220:0.1,self.S195:0.1,self.S125:0.1,self.S221:0.1},'2017-04-03':{self.S102:0.1,self.S222:0.1,self.S213:0.1,self.S125:0.1,self.S219:0.1,self.S218:0.1,self.S129:0.1,self.S77:0.1,self.S169:0.1,self.S223:0.1},'2017-05-01':{self.S102:0.1,self.S24:0.1,self.S213:0.1,self.S224:0.1,self.S169:0.1,self.S59:0.1,self.S37:0.1,self.S217:0.1,self.S77:0.1,self.S129:0.1},'2017-05-10':{self.TLT:1},'2017-05-26':{self.S81:0.1,self.S225:0.1,self.S37:0.1,self.S221:0.1,self.S125:0.1,self.S226:0.1,self.S195:0.1,self.S217:0.1,self.S97:0.1,self.S77:0.1},'2017-06-01':{self.S81:0.1,self.S225:0.1,self.S37:0.1,self.S221:0.1,self.S226:0.1,self.S217:0.1,self.S195:0.1,self.S125:0.1,self.S227:0.1,self.S31:0.1},'2017-06-05':{self.TLT:1},'2017-07-03':{self.S228:0.1,self.S226:0.1,self.S221:0.1,self.S227:0.1,self.S145:0.1,self.S229:0.1,self.S230:0.1,self.S231:0.1,self.S15:0.1,self.S47:0.1},'2017-08-01':{self.S221:0.1,self.S227:0.1,self.S226:0.1,self.S228:0.1,self.S81:0.1,self.S64:0.1,self.S232:0.1,self.S229:0.1,self.S26:0.1,self.S230:0.1},'2017-09-01':{self.S81:0.1,self.S221:0.1,self.S233:0.1,self.S186:0.1,self.S234:0.1,self.S2:0.1,self.S187:0.1,self.S228:0.1,self.S235:0.1,self.S92:0.1},'2017-10-02':{self.S81:0.1,self.S221:0.1,self.S232:0.1,self.S228:0.1,self.S2:0.1,self.S195:0.1,self.S235:0.1,self.S171:0.1,self.S152:0.1,self.S236:0.1},'2017-11-01':{self.S191:0.1,self.S152:0.1,self.S228:0.1,self.S179:0.1,self.S18:0.1,self.S171:0.1,self.S232:0.1,self.S226:0.1,self.S237:0.1,self.S104:0.1},'2017-12-01':{self.S238:0.1,self.S205:0.1,self.S239:0.1,self.S179:0.1,self.S4:0.1,self.S240:0.1,self.S228:0.1,self.S241:0.1,self.S171:0.1,self.S43:0.1},'2018-01-02':{self.S242:0.1,self.S205:0.1,self.S143:0.1,self.S183:0.1,self.S129:0.1,self.S104:0.1,self.S243:0.1,self.S227:0.1,self.S19:0.1,self.S37:0.1},'2018-02-01':{self.S42:0.1,self.S244:0.1,self.S29:0.1,self.S165:0.1,self.S172:0.1,self.S183:0.1,self.S241:0.1,self.S245:0.1,self.S206:0.1,self.S4:0.1},'2018-03-01':{self.S172:0.1,self.S42:0.1,self.S177:0.1,self.S13:0.1,self.S145:0.1,self.S183:0.1,self.S246:0.1,self.S205:0.1,self.S116:0.1,self.S245:0.1},'2018-04-02':{self.S13:0.1,self.S140:0.1,self.S32:0.1,self.S172:0.1,self.S37:0.1,self.S116:0.1,self.S211:0.1,self.S145:0.1,self.S177:0.1,self.S39:0.1},'2018-04-10':{self.TLT:1},'2018-06-05':{self.S140:0.1,self.S13:0.1,self.S247:0.1,self.S174:0.1,self.S211:0.1,self.S145:0.1,self.S47:0.1,self.S37:0.1,self.S8:0.1,self.S248:0.1},'2018-07-02':{self.S140:0.1,self.S249:0.1,self.S247:0.1,self.S174:0.1,self.S145:0.1,self.S13:0.1,self.S250:0.1,self.S47:0.1,self.S211:0.1,self.S37:0.1},'2018-08-01':{self.TLT:1},'2019-02-19':{self.S251:0.1,self.S107:0.1,self.S23:0.1,self.S252:0.1,self.S29:0.1,self.S253:0.1,self.S79:0.1,self.S226:0.1,self.S165:0.1,self.S133:0.1},'2019-03-01':{self.S254:0.1,self.S255:0.1,self.S107:0.1,self.S251:0.1,self.S232:0.1,self.S256:0.1,self.S8:0.1,self.S226:0.1,self.S29:0.1,self.S23:0.1},'2019-04-01':{self.S254:0.1,self.S153:0.1,self.S125:0.1,self.S233:0.1,self.S178:0.1,self.S8:0.1,self.S257:0.1,self.S258:0.1,self.S218:0.1,self.S197:0.1},'2019-05-01':{self.S254:0.1,self.S259:0.1,self.S251:0.1,self.S233:0.1,self.S205:0.1,self.S258:0.1,self.S123:0.1,self.S125:0.1,self.S29:0.1,self.S260:0.1},'2019-05-14':{self.TLT:1},'2019-09-11':{self.S261:0.1,self.S37:0.1,self.S84:0.1,self.S262:0.1,self.S240:0.1,self.S263:0.1,self.S87:0.1,self.S264:0.1,self.S265:0.1,self.S107:0.1},'2019-10-01':{self.S261:0.1,self.S87:0.1,self.S84:0.1,self.S37:0.1,self.S262:0.1,self.S171:0.1,self.S264:0.1,self.S158:0.1,self.S182:0.1,self.S212:0.1},'2019-11-01':{self.S183:0.1,self.S264:0.1,self.S131:0.1,self.S266:0.1,self.S85:0.1,self.S182:0.1,self.S267:0.1,self.S227:0.1,self.S198:0.1,self.S205:0.1},'2019-12-02':{self.S131:0.1,self.S268:0.1,self.S133:0.1,self.S85:0.1,self.S63:0.1,self.S266:0.1,self.S227:0.1,self.S98:0.1,self.S258:0.1,self.S198:0.1},'2020-01-02':{self.S131:0.1,self.S98:0.1,self.S269:0.1,self.S252:0.1,self.S120:0.1,self.S266:0.1,self.S224:0.1,self.S182:0.1,self.S133:0.1,self.S268:0.1},'2020-02-03':{self.TLT:1},'2020-07-09':{self.S270:0.1,self.S271:0.1,self.S48:0.1,self.S272:0.1,self.S273:0.1,self.S274:0.1,self.S275:0.1,self.S232:0.1,self.S276:0.1,self.S277:0.1},'2020-08-03':{self.S278:0.1,self.S273:0.1,self.S272:0.1,self.S271:0.1,self.S48:0.1,self.S274:0.1,self.S279:0.1,self.S280:0.1,self.S276:0.1,self.S232:0.1},'2020-09-01':{self.S131:0.1,self.S270:0.1,self.S271:0.1,self.S273:0.1,self.S276:0.1,self.S281:0.1,self.S282:0.1,self.S39:0.1,self.S232:0.1,self.S211:0.1},'2020-10-01':{self.S131:0.1,self.S39:0.1,self.S246:0.1,self.S116:0.1,self.S283:0.1,self.S284:0.1,self.S205:0.1,self.S276:0.1,self.S235:0.1,self.S285:0.1},'2020-11-02':{self.S286:0.1,self.S56:0.1,self.S287:0.1,self.S39:0.1,self.S283:0.1,self.S288:0.1,self.S289:0.1,self.S290:0.1,self.S110:0.1,self.S246:0.1},'2020-12-01':{self.S291:0.1,self.S56:0.1,self.S292:0.1,self.S280:0.1,self.S264:0.1,self.S211:0.1,self.S293:0.1,self.S294:0.1,self.S287:0.1,self.S295:0.1}} self.year = 2008 self.Schedule.On( self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen('SPY', 45), self.rebalance ) def rebalance(self): currentDate = self.UtcTime.date() # if currentDate.year != self.year: # self.Portfolio.SetCash(self.Portfolio.Cash + 5000); # self.year = currentDate.year try: new_position = self.signals["{}".format(currentDate)] except: return self.Transactions.CancelOpenOrders() invested = dict.fromkeys([ x.Symbol for x in self.Portfolio.Values if x.Invested ],0) invested.update(new_position) for sec, weight in invested.items(): self.SetHoldings(sec, weight) # def OnOrderEvent(self, orderEvent): # order = self.Transactions.GetOrderById(orderEvent.OrderId) # if order.Type == OrderType.Market and orderEvent.Status == OrderStatus.Filled and order.Direction == OrderDirection.Buy: # price = order.Price # quantity = order.Quantity # self.StopMarketOrder(order.Symbol, quantity*-1, 0.90 * price)
def norm_data(df): sectors = df.sector.unique() ratios_to_normalize = ['roic_wacc', 'ebit_ev', 'cr', 'fcf', 'price_to_cf', 'roic', 'roa', 'roe', 'roe_3_steps', 'roe_5_steps', 'wc_to_sales', 'operating_income_to_sales', 'operating_cf_to_sales' ] tech_to_normalize = [ 'vol_momentum', 'momentum', 'trend_log', 'trend_log_3', 'trend_pct', 'trend_pct_3', 'trend_slope', 'trend_slope_3' ] # for sector in sectors: # for ratio in ratios_to_normalize: # df.loc[df['sector'] == sector, '{}_norm'.format(ratio)] = preprocessing.scale(df[df['sector'] == sector][ratio]) df[ratios_to_normalize + tech_to_normalize] = preprocessing.scale(df[ratios_to_normalize + tech_to_normalize]) return df.copy() def remove_extreme_values(df, ratios_to_remove): df_copy = df.copy() # for ratio in ratios_to_remove: # Q1 = df[ratio].quantile(0.01) # Q3 = df[ratio].quantile(0.996) # IQR = Q3 - Q1 # df_copy = df_copy.loc[(df_copy[ratio] > (Q1 - 1.1 * IQR)) & (df_copy[ratio] < (Q3 + 1.1 * IQR))].copy() # # return df_copy for ratio in ratios_to_remove: u = df[ratio].mean() s = np.std(df[ratio]) df_copy = df_copy.loc[(df_copy[ratio] > u-2*s) & (df_copy[ratio] < u+2*s)].copy() return df_copy def calculate_rank_perm(df, ranks): # ratios = ['price_to_cf','roic_wacc','ebit_ev','std', 'cr','vol_momentum','momentum'] df = df.replace([np.inf, -np.inf], np.nan) df = df.dropna() df = df[df['price_last'] > 5].copy() df = df[df['avg_vol'] > 5000000].copy() df = remove_extreme_values(df.copy(), ranks + ['momentum']) df = norm_data(df.copy()) # overall rank df['fund_rank'] = df[ranks].sum(axis=1) df = df.sort_values(by=['fund_rank'], ascending=False).head(int(len(df) * 0.2)) df = df.sort_values(by=['std'], ascending=True).head(int(len(df) * 0.5)) df['overall_rank'] = df[['trend_pct_3', 'trend_pct']].sum(axis=1) df = df.sort_values(by=['overall_rank'], ascending=False) return df.head(10) def calculate_rank(df): temp = df.copy() ratios = ['price_sales', 'roa', 'roic', 'roic_wacc'] # ratios = ['cr', 'price_to_cf', 'roic_wacc'] df = df.replace([np.inf, -np.inf], np.nan) df = df.dropna() df = df[df['price_last'] > 5].copy() df = df[df['avg_vol'] > 5000000].copy() df = remove_extreme_values(df.copy(), ratios + ['momentum']) df = norm_data(df.copy()) # overall rank df['fund_rank'] = df[ratios].sum(axis=1) df = df.sort_values(by=['fund_rank'], ascending=False).head(int(len(df) * 0.2)) df = df.sort_values(by=['std'], ascending=True).head(int(len(df) * 0.5)) df['overall_rank'] = df[['trend_pct_3', 'trend_pct']].sum(axis=1) df = df.sort_values(by=['overall_rank'], ascending=False) return df.head(10)