Selecting Fields¶
Control which data columns are returned in your results.
Basic Selection¶
Use select() to choose specific fields:
from tvscreener import StockScreener, StockField
ss = StockScreener()
ss.select(
StockField.NAME,
StockField.PRICE,
StockField.CHANGE_PERCENT,
StockField.VOLUME
)
df = ss.get()
Select All Fields¶
Retrieve all ~3,500 available fields:
ss = StockScreener()
ss.select_all()
df = ss.get()
print(f"Columns: {len(df.columns)}") # ~3,500 columns
Performance
select_all() returns a large DataFrame. Use it for exploration, then narrow down to needed fields.
Field Discovery¶
Search by Name¶
# Find RSI-related fields
matches = StockField.search("rsi")
for field in matches[:10]:
print(field.name)
Technical Indicators¶
# Get all technical indicator fields
technicals = StockField.technicals()
for field in technicals[:10]:
print(field.name)
Recommendations¶
# Get analyst recommendation fields
recs = StockField.recommendations()
for field in recs:
print(field.name)
Field Presets¶
Pre-defined groups of commonly used fields:
# Valuation fields
ss.select(*StockField.valuations())
# Dividend fields
ss.select(*StockField.dividends())
# Oscillator fields
ss.select(*StockField.oscillators())
# Moving averages
ss.select(*StockField.moving_averages())
# Performance fields
ss.select(*StockField.performance())
Field Properties¶
Each field has properties you can inspect:
field = StockField.PRICE
print(field.label) # Human-readable name
print(field.field_name) # API field name
print(field.format) # Data format (currency, percent, etc.)
Common Field Categories¶
Price & Volume¶
ss.select(
StockField.PRICE,
StockField.OPEN,
StockField.HIGH,
StockField.LOW,
StockField.CLOSE,
StockField.VOLUME
)
Valuation¶
ss.select(
StockField.PE_RATIO_TTM,
StockField.PRICE_TO_BOOK_FY,
StockField.PRICE_TO_SALES_FY,
StockField.EV_TO_EBITDA_TTM,
StockField.MARKET_CAPITALIZATION
)
Dividends¶
ss.select(
StockField.DIVIDEND_YIELD_FY,
StockField.DIVIDENDS_PER_SHARE_FY,
StockField.PAYOUT_RATIO_TTM,
StockField.EX_DIVIDEND_DATE
)
Performance¶
ss.select(
StockField.CHANGE_PERCENT,
StockField.WEEKLY_PERFORMANCE,
StockField.MONTHLY_PERFORMANCE,
StockField.PERFORMANCE_3_MONTH,
StockField.PERFORMANCE_6_MONTH,
StockField.PERFORMANCE_YTD,
StockField.PERFORMANCE_1_YEAR
)
Technical Indicators¶
ss.select(
StockField.RELATIVE_STRENGTH_INDEX_14,
StockField.MACD_LEVEL_12_26,
StockField.MACD_SIGNAL_12_26,
StockField.SIMPLE_MOVING_AVERAGE_50,
StockField.SIMPLE_MOVING_AVERAGE_200,
StockField.EXPONENTIAL_MOVING_AVERAGE_20,
StockField.AVERAGE_TRUE_RANGE_14,
StockField.BOLLINGER_UPPER_BAND_20,
StockField.BOLLINGER_LOWER_BAND_20
)
Profitability¶
ss.select(
StockField.RETURN_ON_EQUITY_TTM,
StockField.RETURN_ON_ASSETS_TTM,
StockField.GROSS_MARGIN_TTM,
StockField.NET_MARGIN_TTM,
StockField.OPERATING_MARGIN_TTM
)
Combining Selection with Filtering¶
ss = StockScreener()
# Filter
ss.where(StockField.PRICE > 10)
ss.where(StockField.MARKET_CAPITALIZATION > 1e9)
# Select (order doesn't matter)
ss.select(
StockField.NAME,
StockField.PRICE,
StockField.MARKET_CAPITALIZATION
)
df = ss.get()
Chaining Methods¶
df = (
StockScreener()
.select(StockField.NAME, StockField.PRICE, StockField.VOLUME)
.where(StockField.PRICE > 100)
.sort_by(StockField.VOLUME, ascending=False)
.get()
)
Default Fields¶
If you don't call select(), a default set of fields is returned:
Field Count by Screener¶
| Screener | Field Count |
|---|---|
| Stock | ~3,526 |
| Crypto | ~3,108 |
| Forex | ~2,965 |
| Bond | ~201 |
| Futures | ~393 |
| Coin | ~3,026 |