Import python venv for stability
This commit is contained in:
@@ -0,0 +1,719 @@
|
||||
_QUERY1_URL_ = 'https://query1.finance.yahoo.com'
|
||||
_BASE_URL_ = 'https://query2.finance.yahoo.com'
|
||||
_ROOT_URL_ = 'https://finance.yahoo.com'
|
||||
|
||||
_SENTINEL_ = object()
|
||||
|
||||
fundamentals_keys = {
|
||||
'financials': ["TaxEffectOfUnusualItems", "TaxRateForCalcs", "NormalizedEBITDA", "NormalizedDilutedEPS",
|
||||
"NormalizedBasicEPS", "TotalUnusualItems", "TotalUnusualItemsExcludingGoodwill",
|
||||
"NetIncomeFromContinuingOperationNetMinorityInterest", "ReconciledDepreciation",
|
||||
"ReconciledCostOfRevenue", "EBITDA", "EBIT", "NetInterestIncome", "InterestExpense",
|
||||
"InterestIncome", "ContinuingAndDiscontinuedDilutedEPS", "ContinuingAndDiscontinuedBasicEPS",
|
||||
"NormalizedIncome", "NetIncomeFromContinuingAndDiscontinuedOperation", "TotalExpenses",
|
||||
"RentExpenseSupplemental", "ReportedNormalizedDilutedEPS", "ReportedNormalizedBasicEPS",
|
||||
"TotalOperatingIncomeAsReported", "DividendPerShare", "DilutedAverageShares", "BasicAverageShares",
|
||||
"DilutedEPS", "DilutedEPSOtherGainsLosses", "TaxLossCarryforwardDilutedEPS",
|
||||
"DilutedAccountingChange", "DilutedExtraordinary", "DilutedDiscontinuousOperations",
|
||||
"DilutedContinuousOperations", "BasicEPS", "BasicEPSOtherGainsLosses", "TaxLossCarryforwardBasicEPS",
|
||||
"BasicAccountingChange", "BasicExtraordinary", "BasicDiscontinuousOperations",
|
||||
"BasicContinuousOperations", "DilutedNIAvailtoComStockholders", "AverageDilutionEarnings",
|
||||
"NetIncomeCommonStockholders", "OtherunderPreferredStockDividend", "PreferredStockDividends",
|
||||
"NetIncome", "MinorityInterests", "NetIncomeIncludingNoncontrollingInterests",
|
||||
"NetIncomeFromTaxLossCarryforward", "NetIncomeExtraordinary", "NetIncomeDiscontinuousOperations",
|
||||
"NetIncomeContinuousOperations", "EarningsFromEquityInterestNetOfTax", "TaxProvision",
|
||||
"PretaxIncome", "OtherIncomeExpense", "OtherNonOperatingIncomeExpenses", "SpecialIncomeCharges",
|
||||
"GainOnSaleOfPPE", "GainOnSaleOfBusiness", "OtherSpecialCharges", "WriteOff",
|
||||
"ImpairmentOfCapitalAssets", "RestructuringAndMergernAcquisition", "SecuritiesAmortization",
|
||||
"EarningsFromEquityInterest", "GainOnSaleOfSecurity", "NetNonOperatingInterestIncomeExpense",
|
||||
"TotalOtherFinanceCost", "InterestExpenseNonOperating", "InterestIncomeNonOperating",
|
||||
"OperatingIncome", "OperatingExpense", "OtherOperatingExpenses", "OtherTaxes",
|
||||
"ProvisionForDoubtfulAccounts", "DepreciationAmortizationDepletionIncomeStatement",
|
||||
"DepletionIncomeStatement", "DepreciationAndAmortizationInIncomeStatement", "Amortization",
|
||||
"AmortizationOfIntangiblesIncomeStatement", "DepreciationIncomeStatement", "ResearchAndDevelopment",
|
||||
"SellingGeneralAndAdministration", "SellingAndMarketingExpense", "GeneralAndAdministrativeExpense",
|
||||
"OtherGandA", "InsuranceAndClaims", "RentAndLandingFees", "SalariesAndWages", "GrossProfit",
|
||||
"CostOfRevenue", "TotalRevenue", "ExciseTaxes", "OperatingRevenue", "LossAdjustmentExpense",
|
||||
"NetPolicyholderBenefitsAndClaims", "PolicyholderBenefitsGross", "PolicyholderBenefitsCeded",
|
||||
"OccupancyAndEquipment", "ProfessionalExpenseAndContractServicesExpense", "OtherNonInterestExpense"],
|
||||
'balance-sheet': ["TreasurySharesNumber", "PreferredSharesNumber", "OrdinarySharesNumber", "ShareIssued", "NetDebt",
|
||||
"TotalDebt", "TangibleBookValue", "InvestedCapital", "WorkingCapital", "NetTangibleAssets",
|
||||
"CapitalLeaseObligations", "CommonStockEquity", "PreferredStockEquity", "TotalCapitalization",
|
||||
"TotalEquityGrossMinorityInterest", "MinorityInterest", "StockholdersEquity",
|
||||
"OtherEquityInterest", "GainsLossesNotAffectingRetainedEarnings", "OtherEquityAdjustments",
|
||||
"FixedAssetsRevaluationReserve", "ForeignCurrencyTranslationAdjustments",
|
||||
"MinimumPensionLiabilities", "UnrealizedGainLoss", "TreasuryStock", "RetainedEarnings",
|
||||
"AdditionalPaidInCapital", "CapitalStock", "OtherCapitalStock", "CommonStock", "PreferredStock",
|
||||
"TotalPartnershipCapital", "GeneralPartnershipCapital", "LimitedPartnershipCapital",
|
||||
"TotalLiabilitiesNetMinorityInterest", "TotalNonCurrentLiabilitiesNetMinorityInterest",
|
||||
"OtherNonCurrentLiabilities", "LiabilitiesHeldforSaleNonCurrent", "RestrictedCommonStock",
|
||||
"PreferredSecuritiesOutsideStockEquity", "DerivativeProductLiabilities", "EmployeeBenefits",
|
||||
"NonCurrentPensionAndOtherPostretirementBenefitPlans", "NonCurrentAccruedExpenses",
|
||||
"DuetoRelatedPartiesNonCurrent", "TradeandOtherPayablesNonCurrent",
|
||||
"NonCurrentDeferredLiabilities", "NonCurrentDeferredRevenue",
|
||||
"NonCurrentDeferredTaxesLiabilities", "LongTermDebtAndCapitalLeaseObligation",
|
||||
"LongTermCapitalLeaseObligation", "LongTermDebt", "LongTermProvisions", "CurrentLiabilities",
|
||||
"OtherCurrentLiabilities", "CurrentDeferredLiabilities", "CurrentDeferredRevenue",
|
||||
"CurrentDeferredTaxesLiabilities", "CurrentDebtAndCapitalLeaseObligation",
|
||||
"CurrentCapitalLeaseObligation", "CurrentDebt", "OtherCurrentBorrowings", "LineOfCredit",
|
||||
"CommercialPaper", "CurrentNotesPayable", "PensionandOtherPostRetirementBenefitPlansCurrent",
|
||||
"CurrentProvisions", "PayablesAndAccruedExpenses", "CurrentAccruedExpenses", "InterestPayable",
|
||||
"Payables", "OtherPayable", "DuetoRelatedPartiesCurrent", "DividendsPayable", "TotalTaxPayable",
|
||||
"IncomeTaxPayable", "AccountsPayable", "TotalAssets", "TotalNonCurrentAssets",
|
||||
"OtherNonCurrentAssets", "DefinedPensionBenefit", "NonCurrentPrepaidAssets",
|
||||
"NonCurrentDeferredAssets", "NonCurrentDeferredTaxesAssets", "DuefromRelatedPartiesNonCurrent",
|
||||
"NonCurrentNoteReceivables", "NonCurrentAccountsReceivable", "FinancialAssets",
|
||||
"InvestmentsAndAdvances", "OtherInvestments", "InvestmentinFinancialAssets",
|
||||
"HeldToMaturitySecurities", "AvailableForSaleSecurities",
|
||||
"FinancialAssetsDesignatedasFairValueThroughProfitorLossTotal", "TradingSecurities",
|
||||
"LongTermEquityInvestment", "InvestmentsinJointVenturesatCost",
|
||||
"InvestmentsInOtherVenturesUnderEquityMethod", "InvestmentsinAssociatesatCost",
|
||||
"InvestmentsinSubsidiariesatCost", "InvestmentProperties", "GoodwillAndOtherIntangibleAssets",
|
||||
"OtherIntangibleAssets", "Goodwill", "NetPPE", "AccumulatedDepreciation", "GrossPPE", "Leases",
|
||||
"ConstructionInProgress", "OtherProperties", "MachineryFurnitureEquipment",
|
||||
"BuildingsAndImprovements", "LandAndImprovements", "Properties", "CurrentAssets",
|
||||
"OtherCurrentAssets", "HedgingAssetsCurrent", "AssetsHeldForSaleCurrent", "CurrentDeferredAssets",
|
||||
"CurrentDeferredTaxesAssets", "RestrictedCash", "PrepaidAssets", "Inventory",
|
||||
"InventoriesAdjustmentsAllowances", "OtherInventories", "FinishedGoods", "WorkInProcess",
|
||||
"RawMaterials", "Receivables", "ReceivablesAdjustmentsAllowances", "OtherReceivables",
|
||||
"DuefromRelatedPartiesCurrent", "TaxesReceivable", "AccruedInterestReceivable", "NotesReceivable",
|
||||
"LoansReceivable", "AccountsReceivable", "AllowanceForDoubtfulAccountsReceivable",
|
||||
"GrossAccountsReceivable", "CashCashEquivalentsAndShortTermInvestments",
|
||||
"OtherShortTermInvestments", "CashAndCashEquivalents", "CashEquivalents", "CashFinancial",
|
||||
"CashCashEquivalentsAndFederalFundsSold"],
|
||||
'cash-flow': ["ForeignSales", "DomesticSales", "AdjustedGeographySegmentData", "FreeCashFlow",
|
||||
"RepurchaseOfCapitalStock", "RepaymentOfDebt", "IssuanceOfDebt", "IssuanceOfCapitalStock",
|
||||
"CapitalExpenditure", "InterestPaidSupplementalData", "IncomeTaxPaidSupplementalData",
|
||||
"EndCashPosition", "OtherCashAdjustmentOutsideChangeinCash", "BeginningCashPosition",
|
||||
"EffectOfExchangeRateChanges", "ChangesInCash", "OtherCashAdjustmentInsideChangeinCash",
|
||||
"CashFlowFromDiscontinuedOperation", "FinancingCashFlow", "CashFromDiscontinuedFinancingActivities",
|
||||
"CashFlowFromContinuingFinancingActivities", "NetOtherFinancingCharges", "InterestPaidCFF",
|
||||
"ProceedsFromStockOptionExercised", "CashDividendsPaid", "PreferredStockDividendPaid",
|
||||
"CommonStockDividendPaid", "NetPreferredStockIssuance", "PreferredStockPayments",
|
||||
"PreferredStockIssuance", "NetCommonStockIssuance", "CommonStockPayments", "CommonStockIssuance",
|
||||
"NetIssuancePaymentsOfDebt", "NetShortTermDebtIssuance", "ShortTermDebtPayments",
|
||||
"ShortTermDebtIssuance", "NetLongTermDebtIssuance", "LongTermDebtPayments", "LongTermDebtIssuance",
|
||||
"InvestingCashFlow", "CashFromDiscontinuedInvestingActivities",
|
||||
"CashFlowFromContinuingInvestingActivities", "NetOtherInvestingChanges", "InterestReceivedCFI",
|
||||
"DividendsReceivedCFI", "NetInvestmentPurchaseAndSale", "SaleOfInvestment", "PurchaseOfInvestment",
|
||||
"NetInvestmentPropertiesPurchaseAndSale", "SaleOfInvestmentProperties",
|
||||
"PurchaseOfInvestmentProperties", "NetBusinessPurchaseAndSale", "SaleOfBusiness",
|
||||
"PurchaseOfBusiness", "NetIntangiblesPurchaseAndSale", "SaleOfIntangibles", "PurchaseOfIntangibles",
|
||||
"NetPPEPurchaseAndSale", "SaleOfPPE", "PurchaseOfPPE", "CapitalExpenditureReported",
|
||||
"OperatingCashFlow", "CashFromDiscontinuedOperatingActivities",
|
||||
"CashFlowFromContinuingOperatingActivities", "TaxesRefundPaid", "InterestReceivedCFO",
|
||||
"InterestPaidCFO", "DividendReceivedCFO", "DividendPaidCFO", "ChangeInWorkingCapital",
|
||||
"ChangeInOtherWorkingCapital", "ChangeInOtherCurrentLiabilities", "ChangeInOtherCurrentAssets",
|
||||
"ChangeInPayablesAndAccruedExpense", "ChangeInAccruedExpense", "ChangeInInterestPayable",
|
||||
"ChangeInPayable", "ChangeInDividendPayable", "ChangeInAccountPayable", "ChangeInTaxPayable",
|
||||
"ChangeInIncomeTaxPayable", "ChangeInPrepaidAssets", "ChangeInInventory", "ChangeInReceivables",
|
||||
"ChangesInAccountReceivables", "OtherNonCashItems", "ExcessTaxBenefitFromStockBasedCompensation",
|
||||
"StockBasedCompensation", "UnrealizedGainLossOnInvestmentSecurities", "ProvisionandWriteOffofAssets",
|
||||
"AssetImpairmentCharge", "AmortizationOfSecurities", "DeferredTax", "DeferredIncomeTax",
|
||||
"DepreciationAmortizationDepletion", "Depletion", "DepreciationAndAmortization",
|
||||
"AmortizationCashFlow", "AmortizationOfIntangibles", "Depreciation", "OperatingGainsLosses",
|
||||
"PensionAndEmployeeBenefitExpense", "EarningsLossesFromEquityInvestments",
|
||||
"GainLossOnInvestmentSecurities", "NetForeignCurrencyExchangeGainLoss", "GainLossOnSaleOfPPE",
|
||||
"GainLossOnSaleOfBusiness", "NetIncomeFromContinuingOperations",
|
||||
"CashFlowsfromusedinOperatingActivitiesDirect", "TaxesRefundPaidDirect", "InterestReceivedDirect",
|
||||
"InterestPaidDirect", "DividendsReceivedDirect", "DividendsPaidDirect", "ClassesofCashPayments",
|
||||
"OtherCashPaymentsfromOperatingActivities", "PaymentsonBehalfofEmployees",
|
||||
"PaymentstoSuppliersforGoodsandServices", "ClassesofCashReceiptsfromOperatingActivities",
|
||||
"OtherCashReceiptsfromOperatingActivities", "ReceiptsfromGovernmentGrants", "ReceiptsfromCustomers"]}
|
||||
|
||||
_PRICE_COLNAMES_ = ['Open', 'High', 'Low', 'Close', 'Adj Close']
|
||||
|
||||
quote_summary_valid_modules = (
|
||||
"summaryProfile", # contains general information about the company
|
||||
"summaryDetail", # prices + volume + market cap + etc
|
||||
"assetProfile", # summaryProfile + company officers
|
||||
"fundProfile",
|
||||
"price", # current prices
|
||||
"quoteType", # quoteType
|
||||
"esgScores", # Environmental, social, and governance (ESG) scores, sustainability and ethical performance of companies
|
||||
"incomeStatementHistory",
|
||||
"incomeStatementHistoryQuarterly",
|
||||
"balanceSheetHistory",
|
||||
"balanceSheetHistoryQuarterly",
|
||||
"cashFlowStatementHistory",
|
||||
"cashFlowStatementHistoryQuarterly",
|
||||
"defaultKeyStatistics", # KPIs (PE, enterprise value, EPS, EBITA, and more)
|
||||
"financialData", # Financial KPIs (revenue, gross margins, operating cash flow, free cash flow, and more)
|
||||
"calendarEvents", # future earnings date
|
||||
"secFilings", # SEC filings, such as 10K and 10Q reports
|
||||
"upgradeDowngradeHistory", # upgrades and downgrades that analysts have given a company's stock
|
||||
"institutionOwnership", # institutional ownership, holders and shares outstanding
|
||||
"fundOwnership", # mutual fund ownership, holders and shares outstanding
|
||||
"majorDirectHolders",
|
||||
"majorHoldersBreakdown",
|
||||
"insiderTransactions", # insider transactions, such as the number of shares bought and sold by company executives
|
||||
"insiderHolders", # insider holders, such as the number of shares held by company executives
|
||||
"netSharePurchaseActivity", # net share purchase activity, such as the number of shares bought and sold by company executives
|
||||
"earnings", # earnings history
|
||||
"earningsHistory",
|
||||
"earningsTrend", # earnings trend
|
||||
"industryTrend",
|
||||
"indexTrend",
|
||||
"sectorTrend",
|
||||
"recommendationTrend",
|
||||
"futuresChain",
|
||||
)
|
||||
|
||||
# map last updated as of 2025.12.19
|
||||
SECTOR_INDUSTY_MAPPING = {
|
||||
'Basic Materials': {'Specialty Chemicals',
|
||||
'Gold',
|
||||
'Building Materials',
|
||||
'Copper',
|
||||
'Steel',
|
||||
'Agricultural Inputs',
|
||||
'Chemicals',
|
||||
'Other Industrial Metals & Mining',
|
||||
'Lumber & Wood Production',
|
||||
'Aluminum',
|
||||
'Other Precious Metals & Mining',
|
||||
'Coking Coal',
|
||||
'Paper & Paper Products',
|
||||
'Silver'},
|
||||
'Communication Services': {'Advertising Agencies',
|
||||
'Broadcasting',
|
||||
'Electronic Gaming & Multimedia',
|
||||
'Entertainment',
|
||||
'Internet Content & Information',
|
||||
'Publishing',
|
||||
'Telecom Services'},
|
||||
'Consumer Cyclical': {'Apparel Manufacturing',
|
||||
'Apparel Retail',
|
||||
'Auto & Truck Dealerships',
|
||||
'Auto Manufacturers',
|
||||
'Auto Parts',
|
||||
'Department Stores',
|
||||
'Footwear & Accessories',
|
||||
'Furnishings, Fixtures & Appliances',
|
||||
'Gambling',
|
||||
'Home Improvement Retail',
|
||||
'Internet Retail',
|
||||
'Leisure',
|
||||
'Lodging',
|
||||
'Luxury Goods',
|
||||
'Packaging & Containers',
|
||||
'Personal Services',
|
||||
'Recreational Vehicles',
|
||||
'Residential Construction',
|
||||
'Resorts & Casinos',
|
||||
'Restaurants',
|
||||
'Specialty Retail',
|
||||
'Textile Manufacturing',
|
||||
'Travel Services'},
|
||||
'Consumer Defensive': {'Beverages—Brewers',
|
||||
'Beverages—Non-Alcoholic',
|
||||
'Beverages—Wineries & Distilleries',
|
||||
'Confectioners',
|
||||
'Discount Stores',
|
||||
'Education & Training Services',
|
||||
'Farm Products',
|
||||
'Food Distribution',
|
||||
'Grocery Stores',
|
||||
'Household & Personal Products',
|
||||
'Packaged Foods',
|
||||
'Tobacco'},
|
||||
'Energy': {'Oil & Gas Drilling',
|
||||
'Oil & Gas E&P',
|
||||
'Oil & Gas Equipment & Services',
|
||||
'Oil & Gas Integrated',
|
||||
'Oil & Gas Midstream',
|
||||
'Oil & Gas Refining & Marketing',
|
||||
'Thermal Coal',
|
||||
'Uranium'},
|
||||
'Financial Services': {'Asset Management',
|
||||
'Banks—Diversified',
|
||||
'Banks—Regional',
|
||||
'Capital Markets',
|
||||
'Credit Services',
|
||||
'Financial Conglomerates',
|
||||
'Financial Data & Stock Exchanges',
|
||||
'Insurance Brokers',
|
||||
'Insurance—Diversified',
|
||||
'Insurance—Life',
|
||||
'Insurance—Property & Casualty',
|
||||
'Insurance—Reinsurance',
|
||||
'Insurance—Specialty',
|
||||
'Mortgage Finance',
|
||||
'Shell Companies'},
|
||||
'Healthcare': {'Biotechnology',
|
||||
'Diagnostics & Research',
|
||||
'Drug Manufacturers—General',
|
||||
'Drug Manufacturers—Specialty & Generic',
|
||||
'Health Information Services',
|
||||
'Healthcare Plans',
|
||||
'Medical Care Facilities',
|
||||
'Medical Devices',
|
||||
'Medical Instruments & Supplies',
|
||||
'Medical Distribution',
|
||||
'Pharmaceutical Retailers'},
|
||||
'Industrials': {'Aerospace & Defense',
|
||||
'Airlines',
|
||||
'Airports & Air Services',
|
||||
'Building Products & Equipment',
|
||||
'Business Equipment & Supplies',
|
||||
'Conglomerates',
|
||||
'Consulting Services',
|
||||
'Electrical Equipment & Parts',
|
||||
'Engineering & Construction',
|
||||
'Farm & Heavy Construction Machinery',
|
||||
'Industrial Distribution',
|
||||
'Infrastructure Operations',
|
||||
'Integrated Freight & Logistics',
|
||||
'Marine Shipping',
|
||||
'Metal Fabrication',
|
||||
'Pollution & Treatment Controls',
|
||||
'Railroads',
|
||||
'Rental & Leasing Services',
|
||||
'Security & Protection Services',
|
||||
'Specialty Business Services',
|
||||
'Specialty Industrial Machinery',
|
||||
'Staffing & Employment Services',
|
||||
'Tools & Accessories',
|
||||
'Trucking',
|
||||
'Waste Management'},
|
||||
'Real Estate': {'Real Estate—Development',
|
||||
'Real Estate Services',
|
||||
'Real Estate—Diversified',
|
||||
'REIT—Healthcare Facilities',
|
||||
'REIT—Hotel & Motel',
|
||||
'REIT—Industrial',
|
||||
'REIT—Office',
|
||||
'REIT—Residential',
|
||||
'REIT—Retail',
|
||||
'REIT—Mortgage',
|
||||
'REIT—Specialty',
|
||||
'REIT—Diversified'},
|
||||
'Technology': {'Communication Equipment',
|
||||
'Computer Hardware',
|
||||
'Consumer Electronics',
|
||||
'Electronic Components',
|
||||
'Electronics & Computer Distribution',
|
||||
'Information Technology Services',
|
||||
'Scientific & Technical Instruments',
|
||||
'Semiconductor Equipment & Materials',
|
||||
'Semiconductors',
|
||||
'Software—Application',
|
||||
'Software—Infrastructure',
|
||||
'Solar'},
|
||||
'Utilities': {'Utilities—Diversified',
|
||||
'Utilities—Independent Power Producers',
|
||||
'Utilities—Regulated Electric',
|
||||
'Utilities—Regulated Gas',
|
||||
'Utilities—Regulated Water',
|
||||
'Utilities—Renewable'},
|
||||
}
|
||||
SECTOR_INDUSTY_MAPPING_LC = {}
|
||||
for k in SECTOR_INDUSTY_MAPPING.keys():
|
||||
k2 = k.lower().replace('& ', '').replace('- ', '').replace(', ', ' ').replace(' ', '-')
|
||||
SECTOR_INDUSTY_MAPPING_LC[k2] = []
|
||||
for v in SECTOR_INDUSTY_MAPPING[k]:
|
||||
v2 = v.lower().replace('& ', '').replace('- ', '').replace(', ', ' ').replace(' ', '-')
|
||||
SECTOR_INDUSTY_MAPPING_LC[k2].append(v2)
|
||||
|
||||
# _MIC_TO_YAHOO_SUFFIX maps Market Identifier Codes (MIC) to Yahoo Finance market suffixes.
|
||||
# c.f. :
|
||||
# https://help.yahoo.com/kb/finance-for-web/SLN2310.html;_ylt=AwrJKiCZFo9g3Y8AsDWPAwx.;_ylu=Y29sbwMEcG9zAzEEdnRpZAMEc2VjA3Ny?locale=en_US
|
||||
# https://www.iso20022.org/market-identifier-codes
|
||||
|
||||
_MIC_TO_YAHOO_SUFFIX = {
|
||||
'XCBT': 'CBT', 'XCME': 'CME', 'IFUS': 'NYB', 'CECS': 'CMX', 'XNYM': 'NYM', 'XNYS': '', 'XNAS': '', # United States
|
||||
'XBUE': 'BA', # Argentina
|
||||
'XVIE': 'VI', # Austria
|
||||
'XASX': 'AX', 'XAUS': 'XA', # Australia
|
||||
'XBRU': 'BR', # Belgium
|
||||
'BVMF': 'SA', # Brazil
|
||||
'CNSX': 'CN', 'NEOE': 'NE', 'XTSE': 'TO', 'XTSX': 'V', # Canada
|
||||
'XSGO': 'SN', # Chile
|
||||
'XSHG': 'SS', 'XSHE': 'SZ', # China
|
||||
'XBOG': 'CL', # Colombia
|
||||
'XPRA': 'PR', # Czech Republic
|
||||
'XCSE': 'CO', # Denmark
|
||||
'XCAI': 'CA', # Egypt
|
||||
'XTAL': 'TL', # Estonia
|
||||
'CEUX': 'XD', 'XEUR': 'NX', # Europe (Cboe Europe, Euronext)
|
||||
'XHEL': 'HE', # Finland
|
||||
'XPAR': 'PA', # France
|
||||
'XBER': 'BE', 'XBMS': 'BM', 'XDUS': 'DU', 'XFRA': 'F', 'XHAM': 'HM', 'XHAN': 'HA', 'XMUN': 'MU', 'XSTU': 'SG', 'XETR': 'DE', # Germany
|
||||
'XATH': 'AT', # Greece
|
||||
'XHKG': 'HK', # Hong Kong
|
||||
'XBUD': 'BD', # Hungary
|
||||
'XICE': 'IC', # Iceland
|
||||
'XBOM': 'BO', 'XNSE': 'NS', # India
|
||||
'XIDX': 'JK', # Indonesia
|
||||
'XDUB': 'IR', # Ireland
|
||||
'XTAE': 'TA', # Israel
|
||||
'MTAA': 'MI', 'EUTL': 'TI', # Italy
|
||||
'XTKS': 'T', # Japan
|
||||
'XKFE': 'KW', # Kuwait
|
||||
'XRIS': 'RG', # Latvia
|
||||
'XVIL': 'VS', # Lithuania
|
||||
'XKLS': 'KL', # Malaysia
|
||||
'XMEX': 'MX', # Mexico
|
||||
'XAMS': 'AS', # Netherlands
|
||||
'XNZE': 'NZ', # New Zealand
|
||||
'XOSL': 'OL', # Norway
|
||||
'XPHS': 'PS', # Philippines
|
||||
'XWAR': 'WA', # Poland
|
||||
'XLIS': 'LS', # Portugal
|
||||
'XQAT': 'QA', # Qatar
|
||||
'XBSE': 'RO', # Romania
|
||||
'XSES': 'SI', # Singapore
|
||||
'XJSE': 'JO', # South Africa
|
||||
'XKRX': 'KS', 'KQKS': 'KQ', # South Korea
|
||||
'BMEX': 'MC', # Spain
|
||||
'XSAU': 'SR', # Saudi Arabia
|
||||
'XSTO': 'ST', # Sweden
|
||||
'XSWX': 'SW', # Switzerland
|
||||
'ROCO': 'TWO', 'XTAI': 'TW', # Taiwan
|
||||
'XBKK': 'BK', # Thailand
|
||||
'XIST': 'IS', # Turkey
|
||||
'XDFM': 'AE', # UAE
|
||||
'AQXE': 'AQ', 'XCHI': 'XC', 'XLON': 'L', 'ILSE': 'IL', # United Kingdom
|
||||
'XCAR': 'CR', # Venezuela
|
||||
'XSTC': 'VN' # Vietnam
|
||||
}
|
||||
|
||||
def merge_two_level_dicts(dict1, dict2):
|
||||
result = dict1.copy()
|
||||
for key, value in dict2.items():
|
||||
if key in result:
|
||||
# If both are sets, merge them
|
||||
if isinstance(value, set) and isinstance(result[key], set):
|
||||
result[key] = result[key] | value
|
||||
# If both are dicts, merge their contents
|
||||
elif isinstance(value, dict) and isinstance(result[key], dict):
|
||||
result[key] = {
|
||||
k: (result[key].get(k, set()) | v if isinstance(v, set)
|
||||
else v) if k in result[key]
|
||||
else v
|
||||
for k, v in value.items()
|
||||
}
|
||||
else:
|
||||
result[key] = value
|
||||
return result
|
||||
|
||||
EQUITY_SCREENER_EQ_MAP = {
|
||||
"exchange": {
|
||||
'ar': {'BUE'},
|
||||
'at': {'VIE'},
|
||||
'au': {'ASX'},
|
||||
'be': {'BRU'},
|
||||
'br': {'SAO'},
|
||||
'ca': {'CNQ', 'NEO', 'TOR', 'VAN'},
|
||||
'ch': {'EBS'},
|
||||
'cl': {'SGO'},
|
||||
'cn': {'SHH', 'SHZ'},
|
||||
'co': {'BVC'},
|
||||
'cz': {'PRA'},
|
||||
'de': {'BER', 'DUS', 'FRA', 'HAM', 'GER', 'MUN', 'STU'},
|
||||
'dk': {'CPH'},
|
||||
'ee': {'TAL'},
|
||||
'eg': {'CAI'},
|
||||
'es': {'MCE'},
|
||||
'fi': {'HEL'},
|
||||
'fr': {'PAR'},
|
||||
'gb': {'AQS', 'IOB', 'LSE'},
|
||||
'gr': {'ATH'},
|
||||
'hk': {'HKG'},
|
||||
'hu': {'BUD'},
|
||||
'id': {'JKT'},
|
||||
'ie': {'ISE'},
|
||||
'il': {'TLV'},
|
||||
'in': {'BSE', 'NSI'},
|
||||
'is': {'ICE'},
|
||||
'it': {'MIL'},
|
||||
'jp': {'FKA', 'JPX', 'SAP'},
|
||||
'kr': {'KOE', 'KSC'},
|
||||
'kw': {'KUW'},
|
||||
'lk': {},
|
||||
'lt': {'LIT'},
|
||||
'lv': {'RIS'},
|
||||
'mx': {'MEX'},
|
||||
'my': {'KLS'},
|
||||
'nl': {'AMS'},
|
||||
'no': {'OSL'},
|
||||
'nz': {'NZE'},
|
||||
'pe': {},
|
||||
'ph': {'PHP', 'PHS'},
|
||||
'pk': {},
|
||||
'pl': {'WSE'},
|
||||
'pt': {'LIS'},
|
||||
'qa': {'DOH'},
|
||||
'ro': {'BVB'},
|
||||
'ru': {},
|
||||
'sa': {'SAU'},
|
||||
'se': {'STO'},
|
||||
'sg': {'SES'},
|
||||
'sr': {},
|
||||
'sw': {'EBS'},
|
||||
'th': {'SET'},
|
||||
'tr': {'IST'},
|
||||
'tw': {'TAI', 'TWO'},
|
||||
'us': {'ASE', 'BTS', 'CXI', 'NCM', 'NGM', 'NMS', 'NYQ', 'OEM', 'OQB', 'OQX', 'PCX', 'PNK', 'YHD'},
|
||||
've': {'CCS'},
|
||||
'vn': {},
|
||||
'za': {'JNB'}
|
||||
},
|
||||
"sector": {
|
||||
"Basic Materials", "Industrials", "Communication Services", "Healthcare",
|
||||
"Real Estate", "Technology", "Energy", "Utilities", "Financial Services",
|
||||
"Consumer Defensive", "Consumer Cyclical"
|
||||
},
|
||||
"industry": SECTOR_INDUSTY_MAPPING,
|
||||
"peer_group": {
|
||||
"US Fund Equity Energy",
|
||||
"US CE Convertibles",
|
||||
"EAA CE UK Large-Cap Equity",
|
||||
"EAA CE Other",
|
||||
"US Fund Financial",
|
||||
"India CE Multi-Cap",
|
||||
"US Fund Foreign Large Blend",
|
||||
"US Fund Consumer Cyclical",
|
||||
"EAA Fund Global Equity Income",
|
||||
"China Fund Sector Equity Financial and Real Estate",
|
||||
"US Fund Equity Precious Metals",
|
||||
"EAA Fund RMB Bond - Onshore",
|
||||
"China Fund QDII Greater China Equity",
|
||||
"US Fund Large Growth",
|
||||
"EAA Fund Germany Equity",
|
||||
"EAA Fund Hong Kong Equity",
|
||||
"EAA CE UK Small-Cap Equity",
|
||||
"US Fund Natural Resources",
|
||||
"US CE Preferred Stock",
|
||||
"India Fund Sector - Financial Services",
|
||||
"US Fund Diversified Emerging Mkts",
|
||||
"EAA Fund South Africa & Namibia Equity",
|
||||
"China Fund QDII Sector Equity",
|
||||
"EAA CE Sector Equity Biotechnology",
|
||||
"EAA Fund Switzerland Equity",
|
||||
"US Fund Large Value",
|
||||
"EAA Fund Asia ex-Japan Equity",
|
||||
"US Fund Health",
|
||||
"US Fund China Region",
|
||||
"EAA Fund Emerging Europe ex-Russia Equity",
|
||||
"EAA Fund Sector Equity Industrial Materials",
|
||||
"EAA Fund Japan Large-Cap Equity",
|
||||
"EAA Fund EUR Corporate Bond",
|
||||
"US Fund Technology",
|
||||
"EAA CE Global Large-Cap Blend Equity",
|
||||
"Mexico Fund Mexico Equity",
|
||||
"US Fund Trading--Leveraged Equity",
|
||||
"EAA Fund Sector Equity Consumer Goods & Services",
|
||||
"US Fund Large Blend",
|
||||
"EAA Fund Global Flex-Cap Equity",
|
||||
"EAA Fund EUR Aggressive Allocation - Global",
|
||||
"EAA Fund China Equity",
|
||||
"EAA Fund Global Large-Cap Growth Equity",
|
||||
"US CE Options-based",
|
||||
"EAA Fund Sector Equity Financial Services",
|
||||
"EAA Fund Europe Large-Cap Blend Equity",
|
||||
"EAA Fund China Equity - A Shares",
|
||||
"EAA Fund USD Corporate Bond",
|
||||
"EAA Fund Eurozone Large-Cap Equity",
|
||||
"China Fund Aggressive Allocation Fund",
|
||||
"EAA Fund Sector Equity Technology",
|
||||
"EAA Fund Global Emerging Markets Equity",
|
||||
"EAA Fund EUR Moderate Allocation - Global",
|
||||
"EAA Fund Other Bond",
|
||||
"EAA Fund Denmark Equity",
|
||||
"EAA Fund US Large-Cap Blend Equity",
|
||||
"India Fund Large-Cap",
|
||||
"Paper & Forestry",
|
||||
"Containers & Packaging",
|
||||
"US Fund Miscellaneous Region",
|
||||
"Energy Services",
|
||||
"EAA Fund Other Equity",
|
||||
"Homebuilders",
|
||||
"Construction Materials",
|
||||
"China Fund Equity Funds",
|
||||
"Steel",
|
||||
"Consumer Durables",
|
||||
"EAA Fund Global Large-Cap Blend Equity",
|
||||
"Transportation Infrastructure",
|
||||
"Precious Metals",
|
||||
"Building Products",
|
||||
"Traders & Distributors",
|
||||
"Electrical Equipment",
|
||||
"Auto Components",
|
||||
"Construction & Engineering",
|
||||
"Aerospace & Defense",
|
||||
"Refiners & Pipelines",
|
||||
"Diversified Metals",
|
||||
"Textiles & Apparel",
|
||||
"Industrial Conglomerates",
|
||||
"Household Products",
|
||||
"Commercial Services",
|
||||
"Food Retailers",
|
||||
"Semiconductors",
|
||||
"Media",
|
||||
"Automobiles",
|
||||
"Consumer Services",
|
||||
"Technology Hardware",
|
||||
"Transportation",
|
||||
"Telecommunication Services",
|
||||
"Oil & Gas Producers",
|
||||
"Machinery",
|
||||
"Retailing",
|
||||
"Healthcare",
|
||||
"Chemicals",
|
||||
"Food Products",
|
||||
"Diversified Financials",
|
||||
"Real Estate",
|
||||
"Insurance",
|
||||
"Utilities",
|
||||
"Pharmaceuticals",
|
||||
"Software & Services",
|
||||
"Banks"
|
||||
}
|
||||
}
|
||||
EQUITY_SCREENER_EQ_MAP['region'] = EQUITY_SCREENER_EQ_MAP['exchange'].keys()
|
||||
ordered_keys = ['region'] + [k for k in EQUITY_SCREENER_EQ_MAP.keys() if k != 'region']
|
||||
EQUITY_SCREENER_EQ_MAP = {k:EQUITY_SCREENER_EQ_MAP[k] for k in ordered_keys}
|
||||
FUND_SCREENER_EQ_MAP = {
|
||||
"exchange": {
|
||||
'us': {'NAS'}
|
||||
}
|
||||
}
|
||||
COMMON_SCREENER_FIELDS = {
|
||||
"price":{
|
||||
"eodprice",
|
||||
"intradaypricechange",
|
||||
"intradayprice"
|
||||
},
|
||||
"eq_fields": {
|
||||
"exchange"},
|
||||
}
|
||||
FUND_SCREENER_FIELDS = {
|
||||
"eq_fields": {
|
||||
"categoryname",
|
||||
"performanceratingoverall",
|
||||
"initialinvestment",
|
||||
"annualreturnnavy1categoryrank",
|
||||
"riskratingoverall"}
|
||||
}
|
||||
FUND_SCREENER_FIELDS = merge_two_level_dicts(FUND_SCREENER_FIELDS, COMMON_SCREENER_FIELDS)
|
||||
EQUITY_SCREENER_FIELDS = {
|
||||
"eq_fields": {
|
||||
"region",
|
||||
"sector",
|
||||
"peer_group",
|
||||
"industry"},
|
||||
"price":{
|
||||
"lastclosemarketcap.lasttwelvemonths",
|
||||
"percentchange",
|
||||
"lastclose52weekhigh.lasttwelvemonths",
|
||||
"fiftytwowkpercentchange",
|
||||
"lastclose52weeklow.lasttwelvemonths",
|
||||
"intradaymarketcap"},
|
||||
"trading":{
|
||||
"beta",
|
||||
"avgdailyvol3m",
|
||||
"pctheldinsider",
|
||||
"pctheldinst",
|
||||
"dayvolume",
|
||||
"eodvolume"},
|
||||
"short_interest":{
|
||||
"short_percentage_of_shares_outstanding.value",
|
||||
"short_interest.value",
|
||||
"short_percentage_of_float.value",
|
||||
"days_to_cover_short.value",
|
||||
"short_interest_percentage_change.value"},
|
||||
"valuation":{
|
||||
"bookvalueshare.lasttwelvemonths",
|
||||
"lastclosemarketcaptotalrevenue.lasttwelvemonths",
|
||||
"lastclosetevtotalrevenue.lasttwelvemonths",
|
||||
"pricebookratio.quarterly",
|
||||
"peratio.lasttwelvemonths",
|
||||
"lastclosepricetangiblebookvalue.lasttwelvemonths",
|
||||
"lastclosepriceearnings.lasttwelvemonths",
|
||||
"pegratio_5y"},
|
||||
"profitability":{
|
||||
"consecutive_years_of_dividend_growth_count",
|
||||
"returnonassets.lasttwelvemonths",
|
||||
"returnonequity.lasttwelvemonths",
|
||||
"forward_dividend_per_share",
|
||||
"forward_dividend_yield",
|
||||
"returnontotalcapital.lasttwelvemonths"},
|
||||
"leverage":{
|
||||
"lastclosetevebit.lasttwelvemonths",
|
||||
"netdebtebitda.lasttwelvemonths",
|
||||
"totaldebtequity.lasttwelvemonths",
|
||||
"ltdebtequity.lasttwelvemonths",
|
||||
"ebitinterestexpense.lasttwelvemonths",
|
||||
"ebitdainterestexpense.lasttwelvemonths",
|
||||
"lastclosetevebitda.lasttwelvemonths",
|
||||
"totaldebtebitda.lasttwelvemonths"},
|
||||
"liquidity":{
|
||||
"quickratio.lasttwelvemonths",
|
||||
"altmanzscoreusingtheaveragestockinformationforaperiod.lasttwelvemonths",
|
||||
"currentratio.lasttwelvemonths",
|
||||
"operatingcashflowtocurrentliabilities.lasttwelvemonths"},
|
||||
"income_statement":{
|
||||
"totalrevenues.lasttwelvemonths",
|
||||
"netincomemargin.lasttwelvemonths",
|
||||
"grossprofit.lasttwelvemonths",
|
||||
"ebitda1yrgrowth.lasttwelvemonths",
|
||||
"dilutedepscontinuingoperations.lasttwelvemonths",
|
||||
"quarterlyrevenuegrowth.quarterly",
|
||||
"epsgrowth.lasttwelvemonths",
|
||||
"netincomeis.lasttwelvemonths",
|
||||
"ebitda.lasttwelvemonths",
|
||||
"dilutedeps1yrgrowth.lasttwelvemonths",
|
||||
"totalrevenues1yrgrowth.lasttwelvemonths",
|
||||
"operatingincome.lasttwelvemonths",
|
||||
"netincome1yrgrowth.lasttwelvemonths",
|
||||
"grossprofitmargin.lasttwelvemonths",
|
||||
"ebitdamargin.lasttwelvemonths",
|
||||
"ebit.lasttwelvemonths",
|
||||
"basicepscontinuingoperations.lasttwelvemonths",
|
||||
"netepsbasic.lasttwelvemonths"
|
||||
"netepsdiluted.lasttwelvemonths"},
|
||||
"balance_sheet":{
|
||||
"totalassets.lasttwelvemonths",
|
||||
"totalcommonsharesoutstanding.lasttwelvemonths",
|
||||
"totaldebt.lasttwelvemonths",
|
||||
"totalequity.lasttwelvemonths",
|
||||
"totalcurrentassets.lasttwelvemonths",
|
||||
"totalcashandshortterminvestments.lasttwelvemonths",
|
||||
"totalcommonequity.lasttwelvemonths",
|
||||
"totalcurrentliabilities.lasttwelvemonths",
|
||||
"totalsharesoutstanding"},
|
||||
"cash_flow":{
|
||||
"forward_dividend_yield",
|
||||
"leveredfreecashflow.lasttwelvemonths",
|
||||
"capitalexpenditure.lasttwelvemonths",
|
||||
"cashfromoperations.lasttwelvemonths",
|
||||
"leveredfreecashflow1yrgrowth.lasttwelvemonths",
|
||||
"unleveredfreecashflow.lasttwelvemonths",
|
||||
"cashfromoperations1yrgrowth.lasttwelvemonths"},
|
||||
"esg":{
|
||||
"esg_score",
|
||||
"environmental_score",
|
||||
"governance_score",
|
||||
"social_score",
|
||||
"highest_controversy"}
|
||||
}
|
||||
EQUITY_SCREENER_FIELDS = merge_two_level_dicts(EQUITY_SCREENER_FIELDS, COMMON_SCREENER_FIELDS)
|
||||
|
||||
USER_AGENTS = [
|
||||
# Chrome
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
|
||||
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
|
||||
|
||||
# Firefox
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.7; rv:135.0) Gecko/20100101 Firefox/135.0",
|
||||
"Mozilla/5.0 (X11; Linux i686; rv:135.0) Gecko/20100101 Firefox/135.0",
|
||||
|
||||
# Safari
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_7_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Safari/605.1.15",
|
||||
|
||||
# Edge
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/131.0.2903.86"
|
||||
]
|
||||
Reference in New Issue
Block a user