}L i,lddlZddlmZddlZddlmZmZddlmZddl m Z m Z ddl m Zdd l mZdd l mZm Z mZed Zed Zdd dddZddededgdedddggdddededddgeddd ged!d"d#ged!d$d%gedd&d'ggddd(ededdd)geddd ged!d"d#ged!d$d%gedd&d*ggdddeded!d+d ged!dd gedd,d-gedgdgdd&dededdd ged!d"d#gedd&d.ggdd dd/dededdd gedd$dgedd0d1ggd2ddededd"d#gedgdgdddeded3gd4edd5dged!dd gedgdgd6ddeded3gd4edd5dged3gd7edgdgddd8ededgd9edgd:edd;dgedgd?edd@dAggd6dd8ededgd:edd;dgedgd?eddBdCgedd@dAggd6dd8ededdBdDgedgd:edd;dgedd@dAggd6dd8ededdBdEgedgd:edd;dgedd@dAggd6dd8ededdBdFgedgd:edd;dgedd@dAggd6ddededd$dgedgd:edd;dGgedd@dAggd6dHZe dIe edJdKLiddddddddef dMeee efdNedOedPedQedRedSedTefdUZy)VN)Union) _QUERY1_URL_ _SENTINEL_)YfData)dynamic_docstring'generate_list_table_from_dict_universal) EquityQuery) FundQuery) QueryBaser r z/v1/finance/screenerz/predefined/savedguid)offsetcountuserId userIdType eodvolumedescandzis-in)exchangeNMSNYQltzepsgrowth.lasttwelvemonths) sortFieldsortTypequery percentchangeDESCgteqregionusgteintradaymarketcapi5w intradayprice dayvolumei:ASCgi Nz quarterlyrevenuegrowth.quarterlysector Technologyi@KLz,short_percentage_of_shares_outstanding.value avgdailyvol3mi@ )rrrrrbtwn)zperatio.lasttwelvemonthsr pegratio_5y)rrr)r(ld( lh] fundnetassets) categorynamezForeign Large ValuezForeign Large BlendzForeign Large GrowthzForeign Small/Mid GrowthzForeign Small/Mid BlendzForeign Small/Mid Value)performanceratingoverallr*initialinvestmentiannualreturnnavy1categoryrank2)riskratingoverallr rr#rNASr4zHigh Yield Bondz Large Blendz Large GrowthzMid-Cap Growthi)aggressive_small_caps day_gainers day_losersgrowth_technology_stocks most_activesmost_shorted_stockssmall_cap_gainersundervalued_growth_stocksundervalued_large_capsconservative_foreign_fundshigh_yield_bondportfolio_anchorssolid_large_growth_fundssolid_midcap_growth_fundstop_mutual_fundspredefined_screenersTzPredefined queries (Dec-2024))bulletstitlerrsizerrsortAscrrc &| tur*tjdtdt || } n t |} dddd d d d } ||dkDr t d||dkDr t d|?t |tr/t|} | d}|| d}|| djdk(}i} |||||||d} ddddd}d } t |tr|+tjdtd|}d }| d| d<| d=||d<| jD] \}}| |||<| jt|} |j|j'd"d#dSt |t(r0| D]}|| vs| | | || |<| d$rd%nd&| d<| d$=| } || d<nt d't+|d(| t d)t | dt,rd*| d+<nt | dt.rd,| d+<| dj1| d<| j3t4| |-}|j|j'd"d#dS#tjj j"$r|tvrt%d |d!wxYw).a Run a screen: predefined query, or custom query. :Parameters: * Defaults only apply if query = EquityQuery or FundQuery query : str | Query: The query to execute, either name of predefined or custom query. For predefined list run yf.PREDEFINED_SCREENER_QUERIES.keys() offset : int The offset for the results. Default 0. size : int number of results to return. Default 100, maximum 250 (Yahoo) Use count instead for predefined queries. count : int number of results to return. Default 25, maximum 250 (Yahoo) Use size instead for custom queries. sortField : str field to sort by. Default "ticker" sortAsc : bool Sort ascending? Default False userId : str The user ID. Default empty. userIdType : str Type of user ID (e.g., "guid"). Default "guid". Example: predefined query .. code-block:: python import yfinance as yf response = yf.screen("aggressive_small_caps") Example: custom query .. code-block:: python import yfinance as yf from yfinance import EquityQuery q = EquityQuery('and', [ EquityQuery('gt', ['percentchange', 3]), EquityQuery('eq', ['region', 'us']) ]) response = yf.screen(q, sortField = 'percentchange', sortAsc = True) To access predefineds query code .. code-block:: python import yfinance as yf query = yf.PREDEFINED_SCREENER_QUERIES['aggressive_small_caps'] {predefined_screeners} z=Set proxy via new config function: yf.set_config(proxy=proxy)r) stacklevel)sessionproxy)rRrrtickerFrr)rrrrOrrNz.Yahoo limits query count to 250, reduce count.z,Yahoo limits query size to 250, reduce size.rrrasc)rrrNrrOrrzfinance.yahoo.comfalsezen-USUS) corsDomain formattedlangr%zQScreen 'size' argument is deprecated for predefined screens, set 'count' instead.rNrscrIds)urlparamszyfinance.screen: 'z%' is probably not a predefined query.financeresultrOr,r!z*Query must be type str or QueryBase, not ""zNo query providedEQUITY quoteType MUTUALFUND)bodyr^)rwarningswarnDeprecationWarningr ValueError isinstancestrPREDEFINED_SCREENER_QUERIESloweritemsget_PREDEFINED_URL_raise_for_status curl_cffirequests exceptions HTTPErrorprintjsonr typeEqyQyFndQyto_dictpost_SCREENER_URL_)rrrNrrrOrrrRrS_datadefaults post_queryfields params_dictkvrespresponses `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/yfinance/screener/screener.pyscreenr5s/z J UWivwxwe4w'  H US[IJJ D3JGHH j407 7#  ";/I ? ,224=G9ahtzKUVF!47T[gklKJ%   MMmpBOP QED$VnF7Ov % H<<> #CAa}!" A #yy-kyB   ! ! # yy{9%h/22 E9 % (A&)"3$QKq  ('-Y&7UVz 9  # 7Ed5k]RSTUU },--*W%u-"* ; Jw' /". ;$W-557Jwzz.!+#.0H  ==?9 %h / 22E!!,,66 77*5'1VWX  s :IAJ)rrtypingrrfyfinance.constrr yfinance.datarutilsrr rr ryr rzr r}rp!PREDEFINED_SCREENER_BODY_DEFAULTSrlrkintboolrrrs 3 N'%44 >!56$%%67RV%! +6&%*55B\3]_deimIKMlN`O3P&QR /F"557K+LeTX[ceiZjNkmrsx|OQ[{\n]_dejm|~l@_ACHIMP[]bOcCd+efg.5"557N+OQVW[^fhl]mQnpuv{RT^~_q`bghmpABoCbDFKLPS^`eRfFg+hij-8V).uuUEgikDl7motuz~Z\^}_p`bghlowyEnFbGINOVXrIs7t*u!v!,"55$7G+H%PUXkmwWxJy|ABFITV]H^|_+`ab$&@n|B%*55$?O3PRWX\_npq^rRsuz{CRTZB[v\3]&^_&1f!&uuT`/achimqDFLpMdNPUVZ]|~@\APBDIJQSqDrtyz~AOQb@ctdfklps}DrEfF/G"HI%+!&uuTNM;Z/[]bcjmO^PRWX\_rtz^{R|~CDHKjlnJo~prwx|IKP~QrR/S"TU,2).uuTNTbCc7dfklsvXgY[`aeh{}CgD[EGLMQTsuwSxGy{@AEHRTYGZ{[7\*]!^-3).uuTNTdCe7fhmnuxZi[]bcgj}EiF]GINOSVuwyUzI{}BCGJTV[I\}]7^*_"`$*!&uuTOR;P/QSXY`cETFHMNRUhjnToHprwx|IKP~QrR/S"TU;B*,SToy}Fe-fgh! "JY3%[)34Y3Y3Y3Y3 Y3  Y3  Y3Y3hY3r