Sorting & Pagination¶
Control the order and number of results returned.
Sorting¶
Sort by Field¶
from tvscreener import StockScreener, StockField
ss = StockScreener()
# Largest market cap first (descending)
ss.sort_by(StockField.MARKET_CAPITALIZATION, ascending=False)
df = ss.get()
Sort Ascending¶
ss = StockScreener()
# Lowest P/E first (ascending)
ss.sort_by(StockField.PE_RATIO_TTM, ascending=True)
df = ss.get()
Common Sort Fields¶
# By market cap (largest first)
ss.sort_by(StockField.MARKET_CAPITALIZATION, ascending=False)
# Top gainers
ss.sort_by(StockField.CHANGE_PERCENT, ascending=False)
# Most active (by volume)
ss.sort_by(StockField.VOLUME, ascending=False)
# Lowest P/E
ss.sort_by(StockField.PE_RATIO_TTM, ascending=True)
# Highest dividend yield
ss.sort_by(StockField.DIVIDEND_YIELD_FY, ascending=False)
# Most oversold (lowest RSI)
ss.sort_by(StockField.RELATIVE_STRENGTH_INDEX_14, ascending=True)
Pagination¶
Set Range¶
Use set_range(from, to) to control which results are returned:
Pagination Examples¶
# First 50 results
ss.set_range(0, 50)
# Results 51-100
ss.set_range(50, 100)
# Results 101-150
ss.set_range(100, 150)
# First 500 results
ss.set_range(0, 500)
# Maximum results (up to 5000)
ss.set_range(0, 5000)
Default Behavior¶
Without set_range(), the default is 150 results:
Combining Sort and Pagination¶
Get the top 100 stocks by market cap:
ss = StockScreener()
ss.sort_by(StockField.MARKET_CAPITALIZATION, ascending=False)
ss.set_range(0, 100)
df = ss.get()
Practical Examples¶
Top 50 Gainers¶
ss = StockScreener()
ss.where(StockField.VOLUME >= 1_000_000) # Liquid stocks only
ss.sort_by(StockField.CHANGE_PERCENT, ascending=False)
ss.set_range(0, 50)
df = ss.get()
Bottom 50 Losers¶
ss = StockScreener()
ss.where(StockField.VOLUME >= 1_000_000)
ss.sort_by(StockField.CHANGE_PERCENT, ascending=True)
ss.set_range(0, 50)
df = ss.get()
Most Active Stocks¶
ss = StockScreener()
ss.sort_by(StockField.VOLUME, ascending=False)
ss.set_range(0, 100)
df = ss.get()
All S&P 500 Stocks¶
from tvscreener import IndexSymbol
ss = StockScreener()
ss.set_index(IndexSymbol.SP500)
ss.sort_by(StockField.MARKET_CAPITALIZATION, ascending=False)
ss.set_range(0, 500) # S&P 500 has ~500 constituents
df = ss.get()
Paginated Iteration¶
Process results in batches:
ss = StockScreener()
ss.sort_by(StockField.MARKET_CAPITALIZATION, ascending=False)
all_results = []
batch_size = 100
for offset in range(0, 1000, batch_size):
ss.set_range(offset, offset + batch_size)
batch = ss.get()
if batch.empty:
break
all_results.append(batch)
print(f"Fetched {offset + len(batch)} stocks")
import pandas as pd
full_df = pd.concat(all_results, ignore_index=True)
Limits¶
| Parameter | Min | Max | Default |
|---|---|---|---|
from |
0 | - | 0 |
to |
1 | 5000 | 150 |
| Results per request | - | 5000 | 150 |