Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Sortino Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
0
Tracking Error
0
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
from AlgorithmImports import *  # Replace with your actual QuantConnect imports
import pandas as pd
# from tickersList import IndustryGroupLists

class InteractiveBrokersBrokerageModelWithShortable(InteractiveBrokersBrokerageModel):
    def GetShortableProvider(self, security):
        return InteractiveBrokersShortableProvider()
        

class MyAlgorithm(QCAlgorithm):
    
    def Initialize(self):
        self.SetStartDate(2023, 12, 11)
        self.SetBrokerageModel(InteractiveBrokersBrokerageModelWithShortable())        
        self.UniverseSettings.Resolution = Resolution.Daily

        # For SPY Stocks
        # self.spy = self.AddEquity("SPY").Symbol
        # self.AddUniverse(self.Universe.ETF(self.spy, self.UniverseSettings, self.ETFConstituentsFilter))

        # For Stocks with Fundamental Data
        self.AddUniverseSelection(FineFundamentalUniverseSelectionModel(self.CoarseFilterFunction, self.SelectFine))

        # For Any Stocks (not just stocks with Fundamental Data)
        # self.AddUniverse(self.CoarseFilterFunction2, self.SelectFine)        
        
        self.data_list = []
        
        
    def ETFConstituentsFilter(self, constituents: List[ETFConstituentData]) -> List[Symbol]:
        return [x.Symbol for x in constituents]

    def CoarseFilterFunction(self, coarse: List[CoarseFundamental]) -> List[Symbol]:
        # sorted_by_dollar_volume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True) 
        # return [c.Symbol for c in sorted_by_dollar_volume[:30000]]0
        return [c.Symbol for c in coarse if c.HasFundamentalData]


    def SelectFine(self, fine):
        selected = [x.Symbol for x in fine]
        return selected 

        
    def OnEndOfDay(self, symbol):
        
        security = self.Securities[symbol]
        shortable_quantity = security.TotalShortableQuantity if security.TotalShortableQuantity is not None else 0

        try:
            new_row = {
                'Symbol': symbol,
                'SymbolID': symbol.ID,
                'SymbolValue': symbol.Value,
                'Exchange': security.Fundamentals.CompanyReference.PrimaryExchangeID,
                'ShortName': security.Fundamentals.CompanyReference.ShortName,
                'PrimarySymbol': security.Fundamentals.CompanyReference.PrimarySymbol,
                'CompanyId': security.Fundamentals.CompanyReference.CompanyId,
                'StandardName': security.Fundamentals.CompanyReference.StandardName,

                'LastPrice': security.Price,
                'LastVolume': security.Volume,
                'MarketCap': security.Fundamentals.MarketCap,
                'SectorCode': security.Fundamentals.AssetClassification.MorningstarSectorCode,
                'IndustryGroupCode': security.Fundamentals.AssetClassification.MorningstarIndustryGroupCode,
                'IndustryCode': security.Fundamentals.AssetClassification.MorningstarIndustryCode,
                'StockType': security.Fundamentals.AssetClassification.StockType,
                'StyleBox': security.Fundamentals.AssetClassification.StyleBox,
                'StyleScore': security.Fundamentals.AssetClassification.StyleScore,
                'SizeScore': security.Fundamentals.AssetClassification.SizeScore,
                'FinancialHealthGrade': security.Fundamentals.AssetClassification.FinancialHealthGrade,
                'GrowthGrade': security.Fundamentals.AssetClassification.GrowthGrade,
                'GrowthScore': security.Fundamentals.AssetClassification.GrowthScore,
                'EconomySphereCode': security.Fundamentals.AssetClassification.MorningstarEconomySphereCode,
                'ProfitabilityGrade': security.Fundamentals.AssetClassification.ProfitabilityGrade,
                'ValueScore': security.Fundamentals.AssetClassification.ValueScore,
                'IsShortable': 'Yes' if shortable_quantity > 1 else 'No'
            }

            self.data_list.append(new_row)

        except Exception as e:
            self.Debug(f"Couldn't add: {symbol} due to {str(e)}")


    def OnEndOfAlgorithm(self):
        self.data_df = pd.DataFrame(self.data_list)
        csv_content = self.data_df.to_csv(index=False)
        save_successful = self.ObjectStore.Save('NewsUniverseFundamental', csv_content)
        if save_successful:
            self.Debug("Data saved successfully.")
        else:
            self.Debug("Failed to save data.")
        
        # One-time Debug statement to print the number of symbols in your universe
        self.Debug(f"Total symbols processed: {len(self.data_list)}")
        self.Debug(f"Number of symbols in universe: {len(self.Securities)}")
#region imports
# from AlgorithmImports import *
#endregion

"""
Filtering Criteria:

1. Average Volume: Must exceed 1 million shares daily, calculated via a 100-day moving average.
2. Share Price: Daily value must fall between $10 and $50.
3. Market Capitalization ABOVE 0
4. Industry Group: Security should be a part of a predefined Morningstar Industry Group.
5. Fundamental Data: Security has fundamental data.
6. Historical Log Returns: We calculate the standard deviation of the 100-day log returns, and within each industry group,
 the top 50 securities (within each sector?) with the highest value are selected.
"""

IndustryGroupLists = {
"Agriculture": ['MOS'],
"BuildingMaterials": [],
"Chemicals": ['AVTR', 'HUN', 'UNVR', 'ESI', 'TROX', 'CC', 'LTHM', 'ECVT', 'AXTA', 'BAK'],
"ForestProducts": ['EVA'],
"MetalsAndMining": ['AU', 'GFI', 'WPM', 'NEM', 'SSRM', 'VALE', 'GOLD', 'MP', 'LAC', 'TECK', 'EGO', 'OR', 'FCX', 'PAAS', 'AGI', 'AA'],
"Steel": ['CLF', 'X', 'MT'],
"VehiclesAndParts": ['F', 'BWA', 'GNTX', 'ACVA', 'RIVN', 'STLA', 'MBLY', 'CVNA', 'GM', 'GT', 'PHIN', 'LI', 'SDA', 'QS', 'CWH', 'DAN', 'XPEV', 'HMC', 'CARG', 'HOG', 'NIO'],
"Furnishings": ['TPX', 'MBC'],
"HomebuildingAndConstruction": ['TPH'],
"ManufacturingApparelAndAccessories": ['LEVI', 'VFC', 'ONON', 'GOOS'],
"PackagingAndContainers": ['WRK', 'OI', 'IP', 'SEE', 'GPK'],
"PersonalServices": ['HRB', 'ROL'],
"Restaurants": ['BLMN', 'SG', 'WEN', 'ARCO'],
"RetailCyclical": ['RVLV', 'VSCO', 'EYE', 'CPRI', 'KSS', 'GLBE', 'EBAY', 'M', 'CPNG', 'FL', 'AEO', 'GME', 'TPR', 'MNSO', 'JWN', 'SBH', 'CHWY', 'OSTK', 'JD', 'ANF', 'URBN'],
"TravelAndLeisure": ['MGM', 'MAT', 'TCOM', 'SIX', 'NCLH', 'IGT', 'CCL', 'HTHT', 'MODG', 'DKNG', 'YETI', 'CUK', 'BOWL', 'TRIP', 'PENN', 'MLCO'],
"AssetManagement": ['BK', 'HTGC', 'ARCC', 'CG', 'IVZ', 'BEN', 'BAM', 'JHG', 'TECS', 'FSK', 'OWL', 'PHYS', 'FHI', 'PWM', 'PDI', 'CRBG'],
"Banks": ['KEY', 'WBS', 'ASB', 'DB', 'IBN', 'C', 'HOMB', 'TFC', 'RF', 'RKT', 'UBS', 'FNB', 'FHB', 'FHN', 'ONB', 'CADE', 'COLB', 'CFG', 'HBAN', 'FULT', 'BKU', 'WFC', 'ZION', 'BAC', 'CM', 'FITB', 'OZK', 'USB', 'EBC', 'HSBC', 'CVBF', 'FBP', 'NYCB', 'WAL', 'SNV', 'ING'],
"CapitalMarkets": ['JEF', 'DNB', 'VIRT', 'MARA', 'RIOT', 'XP'],
"Insurance": ['EQH', 'LMND', 'MTG', 'ORI', 'RDN', 'JXN', 'FNF', 'MFC', 'LNC', 'UNM', 'TRUP'],
"DiversifiedFinancialServices": [],
"CreditServices": ['SYF', 'LC', 'NAVI', 'ALLY', 'OBDC', 'SLM', 'WU'],
"RealEstate": ['KW', 'DBRG', 'RDFN', 'EXPI', 'BEKE'],
"REITs": ['SKT', 'COLD', 'APLE', 'RC', 'HIW', 'SBRA', 'VNO', 'PEAK', 'KRC', 'MFA', 'BNL', 'WY', 'KIM', 'ROIC', 'PEB', 'STWD', 'EQC', 'PK', 'CUZ', 'MAC', 'VICI', 'ABR', 'TWO', 'NLY', 'UE', 'CUBE', 'SLG', 'LXP', 'ARI', 'OHI', 'STAG', 'DEI', 'IVR', 'IRT', 'BXMT', 'RLJ', 'VTR', 'SITC', 'DEA', 'UDR', 'OUT', 'JBGS', 'NNN', 'SHO', 'KRG', 'AMH', 'INVH', 'BRX', 'HR', 'AGNC'],
"BeveragesNonAlcoholic": ['KDP'],
"ConsumerPackagedGoods": ['HRL', 'FLO', 'CAG', 'HLF', 'KHC', 'KVUE', 'COTY', 'BYND', 'CPB'],
"Education": ['COUR', 'EDU'],
"RetailDefensive": ['USFD', 'ACI', 'SFM', 'KR'],
"TobaccoProducts": ['BTI', 'MO'],
"Biotechnology": ['VKTX', 'FOLD', 'RCUS', 'KDNY', 'ETNB', 'DICE', 'HALO', 'BTAI', 'BBIO', 'RPRX', 'TGTX', 'AUPH', 'ICPT', 'INSM', 'ROIV', 'ACAD', 'DAWN', 'TVTX', 'IMGN', 'PTGX', 'EXEL', 'ARQT', 'ABCM', 'APGE', 'RVMD', 'RLAY', 'RVNC', 'ARWR', 'FTRE', 'CBAY', 'APLS', 'RNA', 'MRVI', 'RXRX', 'CPRX', 'NTLA', 'IONS'],
"DrugManufacturers": ['OGN', 'ALKS', 'DVAX', 'PFE', 'GSK', 'TAK', 'ELAN', 'IRWD', 'VTRS', 'CTLT', 'PRGO'],
"HealthcarePlans": ['BHG'],
"HealthcareProvidersAndServices": ['PRVA', 'TDOC', 'CERT', 'EVH', 'WBA', 'MDRX', 'OPCH', 'RCM', 'AGL', 'DOCS'],
"MedicalDevicesAndInstruments": ['PHG', 'AZTA', 'ATEC', 'TNDM', 'AHCO', 'XRAY', 'WRBY', 'PACB', 'BAX', 'INMD', 'NVCR', 'NVST', 'NNOX'],
"MedicalDiagnosticsAndResearch": ['NEOG', 'NTRA', 'CDNA', 'SHC', 'TWST', 'NEO', 'GH', 'SYNH'],
"MedicalDistribution": [],
"UtilitiesIndependentPowerProducers": ['VST', 'NRG', 'FLNC'],
"UtilitiesRegulated": ['PCG', 'NFE', 'UGI', 'SBS', 'AES', 'WTRG', 'EXC', 'OGE', 'PPL', 'NI', 'CNP', 'FE'],
"TelecommunicationServices": ['LBTYA', 'T', 'CMCSA', 'FYBR', 'KT', 'LBTYK', 'RADI', 'AMX', 'BCE', 'VZ', 'TU'],
"MediaDiversified": ['MANU', 'EDR', 'TGNA', 'FOXA', 'MGNI', 'FOX', 'CNK', 'NWSA', 'IPG', 'LSXMK', 'LSXMA', 'WMG', 'PLAY'],
"InteractiveMedia": ['RBLX', 'MTCH', 'WB', 'PINS', 'BILI', 'SNAP', 'SKLZ', 'PLTK'],
"OilAndGas": ['CPE', 'GLNG', 'MRO', 'AM', 'YPF', 'PAA', 'MUR', 'HP', 'MGY', 'BP', 'OVV', 'CTRA', 'RRC', 'BKR', 'PTEN', 'SU', 'TRP', 'DK', 'ESTE', 'CVE', 'EC', 'FRO', 'TALO', 'FTI', 'AR', 'CNX', 'PBF', 'CHX', 'WMB', 'PBR.A', 'IEP', 'DO', 'EQNR', 'HAL', 'EPD', 'EURN', 'ET', 'NOG', 'CRK', 'ERF', 'PBR', 'KMI', 'TS', 'EQT', 'ENB', 'SM', 'ENLC', 'LBRT', 'STNG', 'VVV'],
"OtherEnergySources": ['CCJ'],
"AerospaceAndDefense": ['TGI', 'SPR', 'ERJ'],
"BusinessServices": ['HTZ', 'ARMK', 'WSC', 'LZ', 'UPWK'],
"Conglomerates": ['MDU'],
"Construction": ['APG', 'VRRM', 'ARLO', 'FLR', 'AZEK'],
"FarmAndHeavyConstructionMachinery": ['CNHI'],
"IndustrialDistribution": ['CNM'],
"IndustrialProducts": ['BE', 'ENVX', 'GTES', 'PLUG', 'ZWS', 'VRT', 'ATI', 'HAYW', 'TPIC', 'ARNC', 'PCT'],
"Transportation": ['AAL', 'RXO', 'ZIM', 'AZUL', 'LUV', 'DAL', 'JOBY', 'CSX', 'ZTO', 'HA', 'SAVE', 'SBLK'],
"WasteManagement": ['GFL'],
"Software": ['INFY', 'U', 'RELY', 'STNE', 'AI', 'CCCS', 'PD', 'DXC', 'KD', 'HOOD', 'FSLY', 'BMBL', 'CXM', 'WETG', 'YOU', 'IOT', 'FRSH', 'PATH', 'S', 'G', 'FLYW', 'DLO', 'AYX', 'RPD', 'BOX', 'EB', 'GDS', 'PLTR', 'DOCN', 'XRX', 'NCR', 'CFLT', 'ASAN', 'AFRM', 'HCP', 'APPS', 'UBER', 'APP', 'YEXT', 'NTNX', 'AVDX', 'TOST', 'GEN', 'ZI', 'DV', 'SMAR', 'LYFT', 'DBX', 'RNG'],
"Hardware": ['IONQ', 'HPQ', 'HLIT', 'EXTR', 'HPE', 'CIEN', 'VIAV', 'WDC', 'FLEX', 'PSTG', 'JNPR', 'SONO', 'GLW', 'CRDO', 'VNT'],
"Semiconductors": ['SMTC', 'MAXN', 'SPWR', 'RUN', 'ARRY', 'NOVA', 'INTC', 'NXT', 'CSIQ', 'NVTS', 'SHLS'],
}


holidays_list = [
"1998-01-01", "1998-01-19", "1998-02-16", "1998-04-10", "1998-05-25",
"1998-07-03", "1998-09-07", "1998-11-26", "1998-12-25", "1999-01-01",
"1999-01-18", "1999-02-15", "1999-04-02", "1999-05-31", "1999-07-05",
"1999-09-06", "1999-11-25", "1999-12-24", "2000-01-17", "2000-02-21",
"2000-04-21", "2000-05-29", "2000-07-04", "2000-09-04", "2000-11-23",
"2000-12-25", "2001-01-01", "2001-01-15", "2001-02-19", "2001-04-13",
"2001-05-28", "2001-07-04", "2001-09-03", "2001-09-11", "2001-09-12",
"2001-09-13", "2001-09-14", "2001-11-22", "2001-12-25", "2002-01-01",
"2002-01-21", "2002-02-18", "2002-03-29", "2002-05-27", "2002-07-04",
"2002-09-02", "2002-11-28", "2002-12-25", "2003-01-01", "2003-01-20",
"2003-02-17", "2003-04-18", "2003-05-26", "2003-07-04", "2003-09-01",
"2003-11-27", "2003-12-25", "2004-01-01", "2004-01-19", "2004-02-16",
"2004-04-09", "2004-05-31", "2004-06-11", "2004-07-05", "2004-09-06",
"2004-11-25", "2004-12-24", "2005-01-17", "2005-02-21", "2005-03-25",
"2005-05-30", "2005-07-04", "2005-09-05", "2005-11-24", "2005-12-26",
"2006-01-02", "2006-01-16", "2006-02-20", "2006-04-14", "2006-05-29",
"2006-07-04", "2006-09-04", "2006-11-23", "2006-12-25", "2007-01-01",
"2007-01-02", "2007-01-15", "2007-02-19", "2007-04-06", "2007-05-28",
"2007-07-04", "2007-09-03", "2007-11-22", "2007-12-25", "2008-01-01",
"2008-01-21", "2008-02-18", "2008-03-21", "2008-05-26", "2008-07-04",
"2008-09-01", "2008-11-27", "2008-12-25", "2009-01-01", "2009-01-19",
"2009-02-16", "2009-04-10", "2009-05-25", "2009-07-03", "2009-09-07",
"2009-11-26", "2009-12-25", "2010-01-01", "2010-01-18", "2010-02-15",
"2010-04-02", "2010-05-31", "2010-07-05", "2010-09-06", "2010-11-25",
"2010-12-24", "2011-01-01", "2011-01-17", "2011-02-21", "2011-04-22",
"2011-05-30", "2011-07-04", "2011-09-05", "2011-11-24", "2011-12-26",
"2012-01-02", "2012-01-16", "2012-02-20", "2012-04-06", "2012-05-28",
"2012-07-04", "2012-09-03", "2012-10-29", "2012-10-30", "2012-11-22",
"2012-12-25", "2013-01-01", "2013-01-21", "2013-02-18", "2013-03-29",
"2013-05-27", "2013-07-04", "2013-09-02", "2013-11-28", "2013-12-25",
"2014-01-01", "2014-01-20", "2014-02-17", "2014-04-18", "2014-05-26",
"2014-07-04", "2014-09-01", "2014-11-27", "2014-12-25", "2015-01-01",
"2015-01-19", "2015-02-16", "2015-04-03", "2015-05-25", "2015-07-03",
"2015-09-07", "2015-11-26", "2015-12-25", "2016-01-01", "2016-01-18",
"2016-02-15", "2016-03-25", "2016-05-30", "2016-07-04", "2016-09-05",
"2016-11-24", "2016-12-26", "2017-01-02", "2017-01-16", "2017-02-20",
"2017-04-14", "2017-05-29", "2017-07-04", "2017-09-04", "2017-11-23",
"2017-12-25", "2018-01-01", "2018-01-15", "2018-02-19", "2018-03-30",
"2018-05-28", "2018-07-04", "2018-09-03", "2018-11-22", "2018-12-05",
"2018-12-25", "2019-01-01", "2019-01-21", "2019-02-18", "2019-04-19", 
"2019-05-27", "2019-07-04", "2019-09-02", "2019-11-28", "2019-12-25", 
"2020-01-01", "2020-01-20", "2020-02-17", "2020-04-10", "2020-05-25", 
"2020-07-03", "2020-09-07", "2020-11-26", "2020-12-25", "2021-01-01", 
"2021-01-18", "2021-02-15", "2021-04-02", "2021-05-31", "2021-07-05", 
"2021-09-06", "2021-11-25", "2021-12-24", "2022-01-01", "2022-01-17", 
"2022-02-21", "2022-04-15", "2022-05-30", "2022-06-20", "2022-07-04", 
"2022-09-05", "2022-11-24", "2022-12-26", "2023-01-02", "2023-01-16", 
"2023-02-20", "2023-04-07", "2023-05-29", "2023-06-19", "2023-07-04", 
"2023-09-04", "2023-11-23", "2023-12-25", "2024-01-01", "2024-01-15", 
"2024-02-19", "2024-03-29", "2024-05-27", "2024-06-19", "2024-07-04",
]




early_close_list = [
    "1999-11-26", "2000-07-03", "2000-11-24", "2001-07-03", "2001-11-23",
    "2001-12-24", "2002-07-05", "2002-11-29", "2002-12-24", "2003-07-03",
    "2003-11-28", "2003-12-24", "2003-12-26", "2004-11-26", "2005-11-25",
    "2006-07-03", "2006-11-24", "2007-07-03", "2007-11-23", "2007-12-24",
    "2008-07-03", "2008-11-28", "2008-12-24", "2009-11-27", "2009-12-24",
    "2010-11-26", "2011-11-25", "2012-07-03", "2012-11-23", "2012-12-24",
    "2013-07-03", "2013-11-29", "2013-12-24", "2014-07-03", "2014-11-28",
    "2014-12-24", "2015-11-27", "2015-12-24", "2016-11-25", "2017-07-03",
    "2017-11-24", "2017-12-24", "2018-07-03", "2018-11-23", "2018-12-24",
    "2019-07-03", "2019-11-29", "2019-12-24", "2020-11-27", "2020-12-24",
    "2021-11-26", "2022-11-25", "2023-07-03", "2023-11-24", "2024-07-03"
]



etf_dict_Industry = {
    "AgriculturalInputs": "MOO",
    "BuildingMaterials": "ITB",
    "Chemicals": "XLB",
    "SpecialtyChemicals": "XLB",
    "LumberAndWoodProduction": "WOOD",
    "PaperAndPaperProducts": "WOOD",
    "Aluminum": "XME",
    "Copper": "XME",
    "OtherIndustrialMetalsAndMining": "XME",
    "Gold": "GLD",
    "Silver": "SLV",
    "OtherPreciousMetalsAndMining": "XME",
    "CokingCoal": "XME",
    "Steel": "SLX",
    "AutoAndTruckDealerships": "CARZ",
    "AutoManufacturers": "CARZ",
    "AutoParts": "CARZ",
    "RecreationalVehicles": "CARZ",
    "Furnishings": "XHB",
    "FixturesAndAppliances": "XHB",
    "ResidentialConstruction": "ITB",
    "TextileManufacturing": "XRT",
    "ApparelManufacturing": "XRT",
    "FootwearAndAccessories": "XRT",
    "PackagingAndContainers": "PKB",
    "PersonalServices": "IYC",
    "Restaurants": "XLY",
    "ApparelRetail": "XRT",
    "DepartmentStores": "XRT",
    "HomeImprovementRetail": "XHB",
    "LuxuryGoods": "XRT",
    "InternetRetail": "XRT",
    "SpecialtyRetail": "XRT",
    "Gambling": "BJK",
    "Leisure": "PEJ",
    "Lodging": "PEJ",
    "ResortsAndCasinos": "BJK",
    "TravelServices": "PEJ",
    "AssetManagement": "IAI",
    "BanksDiversified": "KBE",
    "BanksRegional": "KRE",
    "MortgageFinance": "MBB",
    "CapitalMarkets": "KCE",
    "FinancialDataAndStockExchanges": "KCE",
    "InsuranceLife": "KIE",
    "InsurancePropertyAndCasualty": "KIE",
    "InsuranceReinsurance": "KIE",
    "InsuranceSpecialty": "KIE",
    "InsuranceBrokers": "KIE",
    "InsuranceDiversified": "KIE",
    "ShellCompanies": "IPO",
    "FinancialConglomerates": "IYF",
    "CreditServices": "XLF",
    "RealEstateDevelopment": "ITB",
    "RealEstateServices": "IYR",
    "RealEstateDiversified": "IYR",
    "REITHealthcareFacilities": "IYR",
    "REITHotelAndMotel": "IYR",
    "REITIndustrial": "IYR",
    "REITOffice": "IYR",
    "REITResidential": "IYR",
    "REITRetail": "IYR",
    "REITMortgage": "MORT",
    "REITSpecialty": "IYR",
    "REITDiversified": "VNQ",
    "BeveragesBrewers": "PBJ",
    "BeveragesWineriesAndDistilleries": "PBJ",
    "BeveragesNonAlcoholic": "PBJ",
    "Confectioners": "PBJ",
    "FarmProducts": "MOO",
    "HouseholdAndPersonalProducts": "XLP",
    "PackagedFoods": "PBJ",
    "EducationAndTrainingServices": "EDUT",
    "DiscountStores": "XRT",
    "FoodDistribution": "RTH",
    "GroceryStores": "RTH",
    "Tobacco": "TOKE",
    "Biotechnology": "IBB",
    "DrugManufacturersGeneral": "PJP",
    "DrugManufacturersSpecialtyAndGeneric": "PJP",
    "HealthcarePlans": "IHF",
    "MedicalCareFacilities": "IHF",
    "PharmaceuticalRetailers": "IHF",
    "HealthInformationServices": "IHF",
    "MedicalDevices": "IHI",
    "MedicalInstrumentsAndSupplies": "IHI",
    "DiagnosticsAndResearch": "IHI",
    "MedicalDistribution": "IHI",
    "UtilitiesIndependentPowerProducers": "QCLN",
    "UtilitiesRenewable": "QCLN",
    "UtilitiesRegulatedWater": "PHO",
    "UtilitiesRegulatedElectric": "XLU",
    "UtilitiesRegulatedGas": "XLU",
    "UtilitiesDiversified": "XLU",
    "TelecomServices": "XTL",
    "AdvertisingAgencies": "XLC",
    "Publishing": "XLC",
    "Broadcasting": "XLC",
    "Entertainment": "XLC",
    "InternetContentAndInformation": "PNQI",
    "ElectronicGamingAndMultimedia": "GAMR",
    "OilAndGasDrilling": "XOP",
    "OilAndGasEAndP": "XOP",
    "OilAndGasIntegrated": "XLE",
    "OilAndGasMidstream": "AMLP",
    "OilAndGasRefiningAndMarketing": "CRAK",
    "OilAndGasEquipmentAndServices": "XES",
    "ThermalCoal": "XME",
    "Uranium": "URA",
    "AerospaceAndDefense": "ITA",
    "SpecialtyBusinessServices": "IYC",
    "ConsultingServices": "IYC",
    "RentalAndLeasingServices": "IYC",
    "SecurityAndProtectionServices": "HACK",
    "StaffingAndEmploymentServices": "XLY",
    "Conglomerates": "IYJ",
    "EngineeringAndConstruction": "PKB",
    "InfrastructureOperations": "IGF",
    "BuildingProductsAndEquipment": "XHB",
    "FarmAndHeavyConstructionMachinery": "XLI",
    "IndustrialDistribution": "XLI",
    "BusinessEquipmentAndSupplies": "XLI",
    "SpecialtyIndustrialMachinery": "XLI",
    "MetalFabrication": "XME",
    "PollutionAndTreatmentControls": "PHO",
    "ToolsAndAccessories": "XLI",
    "ElectricalEquipmentAndParts": "XLI",
    "AirportsAndAirServices": "IYT",
    "Airlines": "JETS",
    "Railroads": "IYT",
    "MarineShipping": "SEA",
    "Trucking": "IYT",
    "IntegratedFreightAndLogistics": "IYT",
    "WasteManagement": "EVX",
    "InformationTechnologyServices": "VGT",
    "SoftwareApplication": "IGV",
    "SoftwareInfrastructure": "IGV",
    "CommunicationEquipment": "XSD",
    "ComputerHardware": "VGT",
    "ConsumerElectronics": "XSD",
    "ElectronicComponents": "XSD",
    "ElectronicsAndComputerDistribution": "XSD",
    "ScientificAndTechnicalInstruments": "XSD",
    "SemiconductorEquipmentAndMaterials": "SMH", # Instead of SOXX
    "Semiconductors": "XSD",
    "Solar": "TAN"
}


industry_codes = {
    10110010: "AgriculturalInputs",
    10120010: "BuildingMaterials",
    10130010: "Chemicals",
    10130020: "SpecialtyChemicals",
    10140010: "LumberAndWoodProduction",
    10140020: "PaperAndPaperProducts",
    10150010: "Aluminum",
    10150020: "Copper",
    10150030: "OtherIndustrialMetalsAndMining",
    10150040: "Gold",
    10150050: "Silver",
    10150060: "OtherPreciousMetalsAndMining",
    10160010: "CokingCoal",
    10160020: "Steel",
    10200010: "AutoAndTruckDealerships",
    10200020: "AutoManufacturers",
    10200030: "AutoParts",
    10200040: "RecreationalVehicles",
    10220010: "Furnishings",
    10230010: "ResidentialConstruction",
    10240010: "TextileManufacturing",
    10240020: "ApparelManufacturing",
    10240030: "FootwearAndAccessories",
    10250010: "PackagingAndContainers",
    10260010: "PersonalServices",
    10270010: "Restaurants",
    10280010: "ApparelRetail",
    10280020: "DepartmentStores",
    10280030: "HomeImprovementRetail",
    10280040: "LuxuryGoods",
    10280050: "InternetRetail",
    10280060: "SpecialtyRetail",
    10290010: "Gambling",
    10290020: "Leisure",
    10290030: "Lodging",
    10290040: "ResortsAndCasinos",
    10290050: "TravelServices",
    10310010: "AssetManagement",
    10320010: "BanksDiversified",
    10320020: "BanksRegional",
    10320030: "MortgageFinance",
    10330010: "CapitalMarkets",
    10330020: "FinancialDataAndStockExchanges",
    10340010: "InsuranceLife",
    10340020: "InsurancePropertyAndCasualty",
    10340030: "InsuranceReinsurance",
    10340040: "InsuranceSpecialty",
    10340050: "InsuranceBrokers",
    10340060: "InsuranceDiversified",
    10350010: "ShellCompanies",
    10350020: "FinancialConglomerates",
    10360010: "CreditServices",
    10410010: "RealEstateDevelopment",
    10410020: "RealEstateServices",
    10410030: "RealEstateDiversified",
    10420010: "REITHealthcareFacilities",
    10420020: "REITHotelAndMotel",
    10420030: "REITIndustrial",
    10420040: "REITOffice",
    10420050: "REITResidential",
    10420060: "REITRetail",
    10420070: "REITMortgage",
    10420080: "REITSpecialty",
    10420090: "REITDiversified",
    20510010: "BeveragesBrewers",
    20510020: "BeveragesWineriesAndDistilleries",
    20520010: "BeveragesNonAlcoholic",
    20525010: "Confectioners",
    20525020: "FarmProducts",
    20525030: "HouseholdAndPersonalProducts",
    20525040: "PackagedFoods",
    20540010: "EducationAndTrainingServices",
    20550010: "DiscountStores",
    20550020: "FoodDistribution",
    20550030: "GroceryStores",
    20560010: "Tobacco",
    20610010: "Biotechnology",
    20620010: "DrugManufacturersGeneral",
    20620020: "DrugManufacturersSpecialtyAndGeneric",
    20630010: "HealthcarePlans",
    20645010: "MedicalCareFacilities",
    20645020: "PharmaceuticalRetailers",
    20645030: "HealthInformationServices",
    20650010: "MedicalDevices",
    20650020: "MedicalInstrumentsAndSupplies",
    20660010: "DiagnosticsAndResearch",
    20670010: "MedicalDistribution",
    20710010: "UtilitiesIndependentPowerProducers",
    20710020: "UtilitiesRenewable",
    20720010: "UtilitiesRegulatedWater",
    20720020: "UtilitiesRegulatedElectric",
    20720030: "UtilitiesRegulatedGas",
    20720040: "UtilitiesDiversified",
    30810010: "TelecomServices",
    30820010: "AdvertisingAgencies",
    30820020: "Publishing",
    30820030: "Broadcasting",
    30820040: "Entertainment",
    30830010: "InternetContentAndInformation",
    30830020: "ElectronicGamingAndMultimedia",
    30910010: "OilAndGasDrilling",
    30910020: "OilAndGasEAndP",
    30910030: "OilAndGasIntegrated",
    30910040: "OilAndGasMidstream",
    30910050: "OilAndGasRefiningAndMarketing",
    30910060: "OilAndGasEquipmentAndServices",
    30920010: "ThermalCoal",
    30920020: "Uranium",
    31010010: "AerospaceAndDefense",
    31020010: "SpecialtyBusinessServices",
    31020020: "ConsultingServices",
    31020030: "RentalAndLeasingServices",
    31020040: "SecurityAndProtectionServices",
    31020050: "StaffingAndEmploymentServices",
    31030010: "Conglomerates",
    31040010: "EngineeringAndConstruction",
    31040020: "InfrastructureOperations",
    31040030: "BuildingProductsAndEquipment",
    31050010: "FarmAndHeavyConstructionMachinery",
    31060010: "IndustrialDistribution",
    31070010: "BusinessEquipmentAndSupplies",
    31070020: "SpecialtyIndustrialMachinery",
    31070030: "MetalFabrication",
    31070040: "PollutionAndTreatmentControls",
    31070050: "ToolsAndAccessories",
    31070060: "ElectricalEquipmentAndParts",
    31080010: "AirportsAndAirServices",
    31080020: "Airlines",
    31080030: "Railroads",
    31080040: "MarineShipping",
    31080050: "Trucking",
    31080060: "IntegratedFreightAndLogistics",
    31090010: "WasteManagement",
    31110010: "InformationTechnologyServices",
    31110020: "SoftwareApplication",
    31110030: "SoftwareInfrastructure",
    31120010: "CommunicationEquipment",
    31120020: "ComputerHardware",
    31120030: "ConsumerElectronics",
    31120040: "ElectronicComponents",
    31120050: "ElectronicsAndComputerDistribution",
    31120060: "ScientificAndTechnicalInstruments",
    31130010: "SemiconductorEquipmentAndMaterials",
    31130020: "Semiconductors",
    31130030: "Solar"
}

industry_group_codes = {
    10110: "Agriculture",
    10120: "BuildingMaterials",
    10130: "Chemicals",
    10140: "ForestProducts",
    10150: "MetalsAndMining",
    10160: "Steel",
    10200: "VehiclesAndParts",
    10220: ["Furnishings", "FixturesAndAppliances"],
    10230: "HomebuildingAndConstruction",
    10240: "ManufacturingApparelAndAccessories",
    10250: "PackagingAndContainers",
    10260: "PersonalServices",
    10270: "Restaurants",
    10280: "RetailCyclical",
    10290: "TravelAndLeisure",
    10310: "AssetManagement",
    10320: "Banks",
    10330: "CapitalMarkets",
    10340: "Insurance",
    10350: "DiversifiedFinancialServices",
    10360: "CreditServices",
    10410: "RealEstate",
    10420: "REITs",
    20510: "BeveragesAlcoholic",
    20520: "BeveragesNonAlcoholic",
    20525: "ConsumerPackagedGoods",
    20540: "Education",
    20550: "RetailDefensive",
    20560: "TobaccoProducts",
    20610: "Biotechnology",
    20620: "DrugManufacturers",
    20630: "HealthcarePlans",
    20645: "HealthcareProvidersAndServices",
    20650: "MedicalDevicesAndInstruments",
    20660: "MedicalDiagnosticsAndResearch",
    20670: "MedicalDistribution",
    20710: "UtilitiesIndependentPowerProducers",
    20720: "UtilitiesRegulated",
    30810: "TelecommunicationServices",
    30820: "MediaDiversified",
    30830: "InteractiveMedia",
    30910: "OilAndGas",
    30920: "OtherEnergySources",
    31010: "AerospaceAndDefense",
    31020: "BusinessServices",
    31030: "Conglomerates",
    31040: "Construction",
    31050: "FarmAndHeavyConstructionMachinery",
    31060: "IndustrialDistribution",
    31070: "IndustrialProducts",
    31080: "Transportation",
    31090: "WasteManagement",
    31110: "Software",
    31120: "Hardware",
    31130: "Semiconductors",
}

sector_codes = {
    101: "BasicMaterials",
    102: "ConsumerCyclical",
    103: "FinancialServices",
    104: "RealEstate",
    205: "ConsumerDefensive",
    206: "Healthcare",
    207: "Utilities",
    308: "CommunicationServices",
    309: "Energy",
    310: "Industrials",
    311: "Technology",
}

stylebox_codes = {
    1: "LargeValue",
    2: "LargeCore",
    3: "LargeGrowth",
    4: "MidValue",
    5: "MidCore",
    6: "MidGrowth",
    7: "SmallValue",
    8: "SmallCore",
    9: "SmallGrowth",
}


sector_ETFs = {"BasicMaterials": "XLB", "ConsumerCyclical": "XLY", "FinancialServices": "XLF", "RealEstate": "XLRE", "ConsumerDefensive": "XLP",
 "Healthcare": "XLV", "Utilities": "XLU", "CommunicationServices": "XLC", "Energy": "XLE", "Industrials": "XLI", "Technology": "XLK",}
    


# sector_ETFs = [ "XLB",  # Materials
#                 "XLC",  # Communication Services
#                 "XLE",  # Energy
#                 "XLF",  # Financials
#                 "XLI",  # Industrials
#                 "XLK",  # Technology
#                 "XLP",  # Staples
#                 "XLRE", # Real Estate
#                 "XLU",  # Utilities
#                 "XLV",  # Health Care
#                 "XLY"]  # Discretionary 


# sector_ETFs = {
#     "Materials": "XLB",
#     "Communication Services": "XLC",
#     "Energy": "XLE",
#     "Financials": "XLF",
#     "Industrials": "XLI",
#     "Technology": "XLK",
#     "Staples": "XLP",
#     "Real Estate": "XLRE",
#     "Utilities": "XLU",
#     "Health Care": "XLV",
#     "Discretionary": "XLY"
# }


sector_dict = {
    'Agriculture': 'BasicMaterials',
    'BuildingMaterials': 'BasicMaterials',
    'Chemicals': 'BasicMaterials',
    'ForestProducts': 'BasicMaterials',
    'MetalsAndMining': 'BasicMaterials',
    'Steel': 'BasicMaterials',
    'VehiclesAndParts': 'ConsumerCyclical',
    'Furnishings': 'ConsumerCyclical',
    'FixturesAndAppliances': 'ConsumerCyclical',
    'HomebuildingAndConstruction': 'ConsumerCyclical',
    'ManufacturingApparelAndAccessories': 'ConsumerCyclical',
    'PackagingAndContainers': 'ConsumerCyclical',
    'PersonalServices': 'ConsumerCyclical',
    'Restaurants': 'ConsumerCyclical',
    'RetailCyclical': 'ConsumerCyclical',
    'TravelAndLeisure': 'ConsumerCyclical',
    'AssetManagement': 'FinancialServices',
    'Banks': 'FinancialServices',
    'CapitalMarkets': 'FinancialServices',
    'Insurance': 'FinancialServices',
    'DiversifiedFinancialServices': 'FinancialServices',
    'CreditServices': 'FinancialServices',
    'RealEstate': 'RealEstate',
    'REITs': 'RealEstate',
    'BeveragesAlcoholic': 'ConsumerDefensive',
    'BeveragesNonAlcoholic': 'ConsumerDefensive',
    'ConsumerPackagedGoods': 'ConsumerDefensive',
    'Education': 'ConsumerDefensive',
    'RetailDefensive': 'ConsumerDefensive',
    'TobaccoProducts': 'ConsumerDefensive',
    'Biotechnology': 'Healthcare',
    'DrugManufacturers': 'Healthcare',
    'HealthcarePlans': 'Healthcare',
    'HealthcareProvidersAndServices': 'Healthcare',
    'MedicalDevicesAndInstruments': 'Healthcare',
    'MedicalDiagnosticsAndResearch': 'Healthcare',
    'MedicalDistribution': 'Healthcare',
    'UtilitiesIndependentPowerProducers': 'Utilities',
    'UtilitiesRegulated': 'Utilities',
    'TelecommunicationServices': 'CommunicationServices',
    'MediaDiversified': 'CommunicationServices',
    'InteractiveMedia': 'CommunicationServices',
    'OilAndGas': 'Energy',
    'OtherEnergySources': 'Energy',
    'AerospaceAndDefense': 'Industrials',
    'BusinessServices': 'Industrials',
    'Conglomerates': 'Industrials',
    'Construction': 'Industrials',
    'FarmAndHeavyConstructionMachinery': 'Industrials',
    'IndustrialDistribution': 'Industrials',
    'IndustrialProducts': 'Industrials',
    'Transportation': 'Industrials',
    'WasteManagement': 'Industrials',
    'Software': 'Technology',
    'Hardware': 'Technology',
    'Semiconductors': 'Technology',
}

etf_dict = {
    "Agriculture": "MOO",
    "BuildingMaterials": "ITB",
    "Chemicals": "XLB",
    "ForestProducts": "WOOD",
    "MetalsAndMining": "XME",
    "Steel": "SLX",
    "VehiclesAndParts": "CARZ",
    "Furnishings": "XHB",
    "FixturesAndAppliances": "XHB",
    "HomebuildingAndConstruction": "ITB",
    "ManufacturingApparelAndAccessories": "XRT",
    "PackagingAndContainers": "PKG",
    "PersonalServices": "IYC",
    "Restaurants": "XLY",
    "RetailCyclical": "XRT",
    "TravelAndLeisure": "PEJ",
    "AssetManagement": "IAI",
    "Banks": "KBE",
    "CapitalMarkets": "KCE",
    "Insurance": "KIE",
    "DiversifiedFinancialServices": "IYF",
    "CreditServices": "XLF",
    "RealEstate": "IYR",
    "REITs": "VNQ",
    "BeveragesAlcoholic": "PBJ",
    "BeveragesNonAlcoholic": "PBJ",
    "ConsumerPackagedGoods": "KXI",
    "Education": "EDUT",
    "RetailDefensive": "XLP",
    "TobaccoProducts": "TOKE",
    "Biotechnology": "IBB",
    "DrugManufacturers": "PJP",
    "HealthcarePlans": "IHF",
    "HealthcareProvidersAndServices": "IHF",
    "MedicalDevicesAndInstruments": "IHI",
    "MedicalDiagnosticsAndResearch": "IHI",
    "MedicalDistribution": "IHI",
    "UtilitiesIndependentPowerProducers": "QCLN",
    "UtilitiesRegulated": "XLU",
    "TelecommunicationServices": "XLC",
    "MediaDiversified": "XLC",
    "InteractiveMedia": "XLC",
    "OilAndGas": "XLE",
    "OtherEnergySources": "QCLN",
    "AerospaceAndDefense": "ITA",
    "BusinessServices": "IYC",
    "Conglomerates": "IYJ",
    "Construction": "PKB",
    "FarmAndHeavyConstructionMachinery": "XLI",
    "IndustrialDistribution": "XLI",
    "IndustrialProducts": "XLI",
    "Transportation": "IYT",
    "WasteManagement": "EVX",
    "Software": "IGV",
    "Hardware": "VGT",
    "Semiconductors": "SOXX"
}