tradingview_screener.screeners
1from __future__ import annotations 2 3from tradingview_screener.query import Query, DEFAULT_RANGE, URL 4 5 6def stocks(market: str = 'america') -> Query: 7 """ 8 Screener for stocks (common, preferred, DRs, and non-ETF funds), filtered to primary listings 9 only and sorted by market cap descending. 10 11 :param market: Market/country to scan, e.g. ``'america'``, ``'italy'``, ``'germany'``. 12 Defaults to ``'america'``. 13 """ 14 return Query(market) 15 16 17def coin() -> Query: 18 """ 19 Screener for crypto coins (CoinMarketCap universe), sorted by overall rank ascending. 20 """ 21 q = Query() 22 q.url = URL.format(market='coin') 23 q.query = { 24 'markets': ['coin'], 25 'symbols': {}, 26 'options': {'lang': 'en'}, 27 'columns': [ 28 'ticker-view', 29 'crypto_total_rank', 30 'close', 31 'type', 32 'typespecs', 33 'pricescale', 34 'minmov', 35 'fractional', 36 'minmove2', 37 'currency', 38 '24h_close_change|5', 39 'market_cap_calc', 40 'fundamental_currency_code', 41 '24h_vol_cmc', 42 'circulating_supply', 43 '24h_vol_to_market_cap', 44 'socialdominance', 45 'crypto_common_categories.tr', 46 'TechRating_1D', 47 'TechRating_1D.tr', 48 ], 49 'sort': {'sortBy': 'crypto_total_rank', 'sortOrder': 'asc'}, 50 'range': DEFAULT_RANGE.copy(), 51 'ignore_unknown_fields': False, 52 } 53 return q 54 55 56def crypto() -> Query: 57 """ 58 Screener for centralised-exchange (CEX) crypto pairs, sorted by 24 h volume descending. 59 """ 60 q = Query() 61 q.url = URL.format(market='crypto') 62 q.query = { 63 'markets': ['crypto'], 64 'symbols': {}, 65 'options': {'lang': 'en'}, 66 'columns': [ 67 'ticker-view', 68 'exchange.tr', 69 'provider-id', 70 'close', 71 'type', 72 'typespecs', 73 'pricescale', 74 'minmov', 75 'fractional', 76 'minmove2', 77 'currency', 78 '24h_close_change|5', 79 '24h_vol|5', 80 '24h_vol_change|5', 81 'TechRating_1D', 82 'TechRating_1D.tr', 83 ], 84 'filter2': { 85 'operator': 'and', 86 'operands': [ 87 {'expression': {'left': 'centralization', 'operation': 'equal', 'right': 'cex'}} 88 ], 89 }, 90 'sort': {'sortBy': '24h_vol|5', 'sortOrder': 'desc'}, 91 'range': DEFAULT_RANGE.copy(), 92 'ignore_unknown_fields': False, 93 } 94 return q 95 96 97def crypto_dex() -> Query: 98 """ 99 Screener for decentralised-exchange (DEX) spot pairs priced in USD, sorted by 24 h transaction 100 count descending. 101 """ 102 q = Query() 103 q.url = URL.format(market='crypto') 104 q.query = { 105 'markets': ['crypto'], 106 'symbols': {}, 107 'options': {'lang': 'en'}, 108 'columns': [ 109 'ticker-view', 110 'blockchain-id.tr', 111 'blockchain-id', 112 'exchange.tr', 113 'provider-id', 114 'close', 115 'type', 116 'typespecs', 117 'pricescale', 118 'minmov', 119 'fractional', 120 'minmove2', 121 'currency', 122 '24h_close_change|5', 123 'dex_txs_count_24h', 124 'dex_trading_volume_24h', 125 'dex_txs_count_uniq_24h', 126 'dex_total_liquidity', 127 'fully_diluted_value', 128 'TechRating_1D', 129 'TechRating_1D.tr', 130 ], 131 'filter2': { 132 'operator': 'and', 133 'operands': [ 134 { 135 'operation': { 136 'operator': 'and', 137 'operands': [ 138 { 139 'expression': { 140 'left': 'centralization', 141 'operation': 'equal', 142 'right': 'dex', 143 } 144 }, 145 { 146 'expression': { 147 'left': 'currency_id', 148 'operation': 'equal', 149 'right': 'USD', 150 } 151 }, 152 ], 153 } 154 }, 155 { 156 'operation': { 157 'operator': 'or', 158 'operands': [ 159 { 160 'operation': { 161 'operator': 'and', 162 'operands': [ 163 { 164 'expression': { 165 'left': 'type', 166 'operation': 'equal', 167 'right': 'spot', 168 } 169 } 170 ], 171 } 172 } 173 ], 174 } 175 }, 176 ], 177 }, 178 'sort': {'sortBy': 'dex_txs_count_24h', 'sortOrder': 'desc'}, 179 'range': DEFAULT_RANGE.copy(), 180 'ignore_unknown_fields': False, 181 } 182 return q 183 184 185def forex() -> Query: 186 """ 187 Screener for forex currency pairs, sorted by traded value descending. 188 """ 189 q = Query() 190 q.url = URL.format(market='forex') 191 q.query = { 192 'markets': ['forex'], 193 'symbols': {}, 194 'options': {'lang': 'en'}, 195 'columns': ['name', 'close', 'volume', 'currency'], 196 'sort': {'sortBy': 'Value.Traded', 'sortOrder': 'desc'}, 197 'range': DEFAULT_RANGE.copy(), 198 'ignore_unknown_fields': False, 199 } 200 return q 201 202 203def futures() -> Query: 204 """ 205 Screener for futures contracts, sorted by traded value descending. 206 """ 207 q = Query() 208 q.url = URL.format(market='futures') 209 q.query = { 210 'markets': ['futures'], 211 'symbols': {}, 212 'options': {'lang': 'en'}, 213 'columns': ['name', 'close', 'volume', 'currency'], 214 'sort': {'sortBy': 'Value.Traded', 'sortOrder': 'desc'}, 215 'range': DEFAULT_RANGE.copy(), 216 'ignore_unknown_fields': False, 217 } 218 return q 219 220 221def bond() -> Query: 222 """ 223 Screener for bonds, sorted by S&P long-term rating descending. 224 """ 225 q = Query() 226 q.url = URL.format(market='bond') 227 q.query = { 228 'markets': ['bond'], 229 'symbols': {}, 230 'options': {'lang': 'en'}, 231 'columns': [ 232 'ticker-view', 233 'exchange.tr', 234 'source-logoid', 235 'isin-displayed', 236 'yield_to_worst', 237 'close_pct', 238 'close_net', 239 'type', 240 'typespecs', 241 'fundamental_currency_code', 242 'current_coupon', 243 'maturity_date', 244 'redemption_type.tr', 245 'bond_issuer_type.tr', 246 'bond_snp_rating_lt.tr', 247 'bond_fitch_rating_lt.tr', 248 ], 249 'sort': {'sortBy': 'bond_snp_rating_lt', 'sortOrder': 'desc'}, 250 'range': DEFAULT_RANGE.copy(), 251 'ignore_unknown_fields': False, 252 } 253 return q 254 255 256def cfd() -> Query: 257 """ 258 Screener for CFDs (contracts for difference), sorted by traded value descending. 259 """ 260 q = Query() 261 q.url = URL.format(market='cfd') 262 q.query = { 263 'markets': ['cfd'], 264 'symbols': {}, 265 'options': {'lang': 'en'}, 266 'columns': ['name', 'close', 'volume', 'currency'], 267 'sort': {'sortBy': 'Value.Traded', 'sortOrder': 'desc'}, 268 'range': DEFAULT_RANGE.copy(), 269 'ignore_unknown_fields': False, 270 } 271 return q 272 273 274def options(underlying: str) -> Query: 275 """ 276 :param underlying: The underlying symbol to filter by, e.g. ``'CME_MINI:ESM2026'``. 277 """ 278 q = Query() 279 q.url = 'https://scanner.tradingview.com/options/scan2?label-product=options-builder' 280 q.query = { 281 'columns': [ 282 'ask', 283 'bid', 284 'currency', 285 'delta', 286 'expiration', 287 'gamma', 288 'iv', 289 'option-type', 290 'pricescale', 291 'rho', 292 'root', 293 'strike', 294 'theoPrice', 295 'theta', 296 'vega', 297 'bid_iv', 298 'ask_iv', 299 ], 300 'filter2': { 301 'operator': 'and', 302 'operands': [{'expression': {'left': 'type', 'operation': 'equal', 'right': 'option'}}], 303 }, 304 'ignore_unknown_fields': False, 305 'index_filters': [{'name': 'underlying_symbol', 'values': [underlying]}], 306 'options': {'lang': 'en'}, 307 'range': DEFAULT_RANGE.copy(), 308 } 309 return q
7def stocks(market: str = 'america') -> Query: 8 """ 9 Screener for stocks (common, preferred, DRs, and non-ETF funds), filtered to primary listings 10 only and sorted by market cap descending. 11 12 :param market: Market/country to scan, e.g. ``'america'``, ``'italy'``, ``'germany'``. 13 Defaults to ``'america'``. 14 """ 15 return Query(market)
Screener for stocks (common, preferred, DRs, and non-ETF funds), filtered to primary listings only and sorted by market cap descending.
Parameters
- market: Market/country to scan, e.g.
'america','italy','germany'. Defaults to'america'.
18def coin() -> Query: 19 """ 20 Screener for crypto coins (CoinMarketCap universe), sorted by overall rank ascending. 21 """ 22 q = Query() 23 q.url = URL.format(market='coin') 24 q.query = { 25 'markets': ['coin'], 26 'symbols': {}, 27 'options': {'lang': 'en'}, 28 'columns': [ 29 'ticker-view', 30 'crypto_total_rank', 31 'close', 32 'type', 33 'typespecs', 34 'pricescale', 35 'minmov', 36 'fractional', 37 'minmove2', 38 'currency', 39 '24h_close_change|5', 40 'market_cap_calc', 41 'fundamental_currency_code', 42 '24h_vol_cmc', 43 'circulating_supply', 44 '24h_vol_to_market_cap', 45 'socialdominance', 46 'crypto_common_categories.tr', 47 'TechRating_1D', 48 'TechRating_1D.tr', 49 ], 50 'sort': {'sortBy': 'crypto_total_rank', 'sortOrder': 'asc'}, 51 'range': DEFAULT_RANGE.copy(), 52 'ignore_unknown_fields': False, 53 } 54 return q
Screener for crypto coins (CoinMarketCap universe), sorted by overall rank ascending.
57def crypto() -> Query: 58 """ 59 Screener for centralised-exchange (CEX) crypto pairs, sorted by 24 h volume descending. 60 """ 61 q = Query() 62 q.url = URL.format(market='crypto') 63 q.query = { 64 'markets': ['crypto'], 65 'symbols': {}, 66 'options': {'lang': 'en'}, 67 'columns': [ 68 'ticker-view', 69 'exchange.tr', 70 'provider-id', 71 'close', 72 'type', 73 'typespecs', 74 'pricescale', 75 'minmov', 76 'fractional', 77 'minmove2', 78 'currency', 79 '24h_close_change|5', 80 '24h_vol|5', 81 '24h_vol_change|5', 82 'TechRating_1D', 83 'TechRating_1D.tr', 84 ], 85 'filter2': { 86 'operator': 'and', 87 'operands': [ 88 {'expression': {'left': 'centralization', 'operation': 'equal', 'right': 'cex'}} 89 ], 90 }, 91 'sort': {'sortBy': '24h_vol|5', 'sortOrder': 'desc'}, 92 'range': DEFAULT_RANGE.copy(), 93 'ignore_unknown_fields': False, 94 } 95 return q
Screener for centralised-exchange (CEX) crypto pairs, sorted by 24 h volume descending.
98def crypto_dex() -> Query: 99 """ 100 Screener for decentralised-exchange (DEX) spot pairs priced in USD, sorted by 24 h transaction 101 count descending. 102 """ 103 q = Query() 104 q.url = URL.format(market='crypto') 105 q.query = { 106 'markets': ['crypto'], 107 'symbols': {}, 108 'options': {'lang': 'en'}, 109 'columns': [ 110 'ticker-view', 111 'blockchain-id.tr', 112 'blockchain-id', 113 'exchange.tr', 114 'provider-id', 115 'close', 116 'type', 117 'typespecs', 118 'pricescale', 119 'minmov', 120 'fractional', 121 'minmove2', 122 'currency', 123 '24h_close_change|5', 124 'dex_txs_count_24h', 125 'dex_trading_volume_24h', 126 'dex_txs_count_uniq_24h', 127 'dex_total_liquidity', 128 'fully_diluted_value', 129 'TechRating_1D', 130 'TechRating_1D.tr', 131 ], 132 'filter2': { 133 'operator': 'and', 134 'operands': [ 135 { 136 'operation': { 137 'operator': 'and', 138 'operands': [ 139 { 140 'expression': { 141 'left': 'centralization', 142 'operation': 'equal', 143 'right': 'dex', 144 } 145 }, 146 { 147 'expression': { 148 'left': 'currency_id', 149 'operation': 'equal', 150 'right': 'USD', 151 } 152 }, 153 ], 154 } 155 }, 156 { 157 'operation': { 158 'operator': 'or', 159 'operands': [ 160 { 161 'operation': { 162 'operator': 'and', 163 'operands': [ 164 { 165 'expression': { 166 'left': 'type', 167 'operation': 'equal', 168 'right': 'spot', 169 } 170 } 171 ], 172 } 173 } 174 ], 175 } 176 }, 177 ], 178 }, 179 'sort': {'sortBy': 'dex_txs_count_24h', 'sortOrder': 'desc'}, 180 'range': DEFAULT_RANGE.copy(), 181 'ignore_unknown_fields': False, 182 } 183 return q
Screener for decentralised-exchange (DEX) spot pairs priced in USD, sorted by 24 h transaction count descending.
186def forex() -> Query: 187 """ 188 Screener for forex currency pairs, sorted by traded value descending. 189 """ 190 q = Query() 191 q.url = URL.format(market='forex') 192 q.query = { 193 'markets': ['forex'], 194 'symbols': {}, 195 'options': {'lang': 'en'}, 196 'columns': ['name', 'close', 'volume', 'currency'], 197 'sort': {'sortBy': 'Value.Traded', 'sortOrder': 'desc'}, 198 'range': DEFAULT_RANGE.copy(), 199 'ignore_unknown_fields': False, 200 } 201 return q
Screener for forex currency pairs, sorted by traded value descending.
204def futures() -> Query: 205 """ 206 Screener for futures contracts, sorted by traded value descending. 207 """ 208 q = Query() 209 q.url = URL.format(market='futures') 210 q.query = { 211 'markets': ['futures'], 212 'symbols': {}, 213 'options': {'lang': 'en'}, 214 'columns': ['name', 'close', 'volume', 'currency'], 215 'sort': {'sortBy': 'Value.Traded', 'sortOrder': 'desc'}, 216 'range': DEFAULT_RANGE.copy(), 217 'ignore_unknown_fields': False, 218 } 219 return q
Screener for futures contracts, sorted by traded value descending.
222def bond() -> Query: 223 """ 224 Screener for bonds, sorted by S&P long-term rating descending. 225 """ 226 q = Query() 227 q.url = URL.format(market='bond') 228 q.query = { 229 'markets': ['bond'], 230 'symbols': {}, 231 'options': {'lang': 'en'}, 232 'columns': [ 233 'ticker-view', 234 'exchange.tr', 235 'source-logoid', 236 'isin-displayed', 237 'yield_to_worst', 238 'close_pct', 239 'close_net', 240 'type', 241 'typespecs', 242 'fundamental_currency_code', 243 'current_coupon', 244 'maturity_date', 245 'redemption_type.tr', 246 'bond_issuer_type.tr', 247 'bond_snp_rating_lt.tr', 248 'bond_fitch_rating_lt.tr', 249 ], 250 'sort': {'sortBy': 'bond_snp_rating_lt', 'sortOrder': 'desc'}, 251 'range': DEFAULT_RANGE.copy(), 252 'ignore_unknown_fields': False, 253 } 254 return q
Screener for bonds, sorted by S&P long-term rating descending.
257def cfd() -> Query: 258 """ 259 Screener for CFDs (contracts for difference), sorted by traded value descending. 260 """ 261 q = Query() 262 q.url = URL.format(market='cfd') 263 q.query = { 264 'markets': ['cfd'], 265 'symbols': {}, 266 'options': {'lang': 'en'}, 267 'columns': ['name', 'close', 'volume', 'currency'], 268 'sort': {'sortBy': 'Value.Traded', 'sortOrder': 'desc'}, 269 'range': DEFAULT_RANGE.copy(), 270 'ignore_unknown_fields': False, 271 } 272 return q
Screener for CFDs (contracts for difference), sorted by traded value descending.
275def options(underlying: str) -> Query: 276 """ 277 :param underlying: The underlying symbol to filter by, e.g. ``'CME_MINI:ESM2026'``. 278 """ 279 q = Query() 280 q.url = 'https://scanner.tradingview.com/options/scan2?label-product=options-builder' 281 q.query = { 282 'columns': [ 283 'ask', 284 'bid', 285 'currency', 286 'delta', 287 'expiration', 288 'gamma', 289 'iv', 290 'option-type', 291 'pricescale', 292 'rho', 293 'root', 294 'strike', 295 'theoPrice', 296 'theta', 297 'vega', 298 'bid_iv', 299 'ask_iv', 300 ], 301 'filter2': { 302 'operator': 'and', 303 'operands': [{'expression': {'left': 'type', 'operation': 'equal', 'right': 'option'}}], 304 }, 305 'ignore_unknown_fields': False, 306 'index_filters': [{'name': 'underlying_symbol', 'values': [underlying]}], 307 'options': {'lang': 'en'}, 308 'range': DEFAULT_RANGE.copy(), 309 } 310 return q
Parameters
- **underlying: The underlying symbol to filter by, e.g.
'CME_MINI**: ESM2026'.