Skip to content

Python package for mining stock and financial data, using data from open data sources like Yahoo Finance

Notifications You must be signed in to change notification settings

ahnazary/stockdex

Repository files navigation

Publish Python Package to PyPI PyPI version

Code style: black Code style: isort flake8

Documentation Status

Stockdex

Stockdex is a Python package that provides a simple interface to access financial data from Yahoo Finance. Data is returned as a pandas DataFrame.

Installation

Install the package using pip:

pip install stockdex -U

Usage

To access main functions, use tickerproperty from TickerFactory class. The Ticker class is used to access data from Various data sources. The TickerFactory class requires a data source to be passed to it. Here is an example of how to begin using the package:

from stockdex import TickerFactory

ticker = TickerFactory(ticker="AAPL", data_source="yahoo_api").ticker

After creating the Ticker object, you can access functions defined for each data source. Below are some examples of how to access data from supported data sources.

Data from Yahoo Finance API (fast queries through Yahoo Finance API):

from stockdex import TickerFactory
from datetime import datetime

ticker = TickerFactory(ticker="AAPL", data_source="yahoo_api").ticker

# Price data (use range and dataGranularity to make range and granularity more specific)
price = ticker.price(range='1y', dataGranularity='1d')

# Current trading period of the stock (pre-market, regular, post-market trading periods)
current_trading_period = ticker.current_trading_period

# Fundamental data (use frequency, format, period1 and period2 to fine-tune the returned data)
income_statement = ticker.income_statement(frequency='quarterly')
cash_flow = ticker.cash_flow(format='raw')
balance_sheet = ticker.balance_sheet(period1=datetime(2020, 1, 1))
financials = ticker.financials(period1=datetime(2022, 1, 1), period2=datetime.today())

Data from Yahoo Finance website (web scraping):

from stockdex import TickerFactory

ticker = TickerFactory(ticker="AAPL", data_source="yahoo_web").ticker

# Summary including general financial information
summary = ticker.summary

# Financial data as it is seen in the yahoo finance website
income_stmt_web = ticker.income_stmt_web
balance_sheet = ticker.balance_sheet_web
cash_flow = ticker.cashflow_web

# Analysts and estimates
analysis = ticker.analysis

# Data about options
calls = ticker.calls
puts = ticker.puts

# Profile data 
key_executives = ticker.key_executives
description = ticker.description
corporate_governance = ticker.corporate_governance

# Data about shareholders
major_holders = ticker.major_holders
top_institutional_holders = ticker.top_institutional_holders
top_mutual_fund_holders = ticker.top_mutual_fund_holders

# Statistics
valuation_measures = ticker.valuation_measures
financial_highlights = ticker.financial_highlights
trading_information = ticker.trading_information

Stocks data from Digrin (web scraping):

Data on Digrin website includes all historical data of the stock in certain categories, unlike Yahoo Finance which only provides the last 5 years of data at most.

from stockdex import TickerFactory

ticker = TickerFactory(ticker="AAPL", data_source="digrin").ticker

# Complete historical data of the stock in certain categories
dividend = ticker.dividend
payout_ratio = ticker.payout_ratio
stock_splits = ticker.stock_splits

EU ETF data from justETF (web scraping):

For EU ETFS, the isin and security_type should be passed to the Ticker object. The isin is the International Securities Identification Number of the ETF and the security_type should be set to etf.

from stockdex import TickerFactory

etf = TickerFactory(isin="IE00B4L5Y983", security_type="etf", data_source="justetf").ticker

etf_general_info = etf.etf_general_info
etf_wkn = etf.etf_wkn
etf_description = etf.etf_description

# Basic data about the ETF
etf_basics = etf.etf_basics

# Holdings of the ETF by company, country and sector
etf_holdings_companies = etf.etf_holdings_companies
etf_holdings_countries = etf.etf_holdings_countries
etf_holdings_sectors = etf.etf_holdings_sectors


Check out sphinx documentation here for more information about the package.