Welcome to cad_tickers’s documentation!

https://badge.fury.io/py/cad-tickers.svg https://codecov.io/gh/FriendlyUser/cad_tickers/branch/master/graph/badge.svg

Canadian Securities Exchange

Functions to download tickers from the cse

cad_tickers.exchanges.cse.add_descriptions_to_df(df: pandas.core.frame.DataFrame, max_workers: int = 16) → pandas.core.frame.DataFrame
Parameters:
clean_df

Dataframe with with randomly selected values. Data columns are as follows:

Company Full name of the company
Symbol Listing symbol from the cse exchange needs a mapper to yahoo finance
Industry Enum of industry including Mining
Identifier Broad category (US Cannabis)
Indices Enum such as CSE Composite
Currency Usually CAD
Trading Date when trading started
urls url to listing on cse website
max_workers
maximum number of thread workers to have
Returns:
df

Dataframe descriptions in every column if valid

Company Full name of the company
Symbol Listing symbol from the cse exchange needs a mapper to yahoo finance
Industry Enum of industry including Mining
Identifier Broad category (US Cannabis)
Indices Enum such as CSE Composite
Currency Usually CAD
Trading Date when trading started
urls url to listing on cse website
description cse description scrapped from website
cad_tickers.exchanges.cse.clean_cse_data(raw_df: pandas.core.frame.DataFrame) → pandas.core.frame.DataFrame

Removes bad data from cse dataframe.

Parameters:
raw_df

Dataframe with mostly unnamed columns from pandas df import

CSE Listings Label for Company data
Unnamed: 1 Listing symbol from the cse exchange needs a mapper to yahoo finance
Unnamed: 2 Enum of industry including Mining
Unnamed: 3 Enum such as CSE Composite
Unnamed: 4 Enum such as CSE Composite
Unnamed: 5 Usually CAD
Unnamed: 6 empty (pandas import error, dropped)
Unnamed: 7 Date when trading started
Returns:
clean_df

Dataframe with bad data removed

Company Full name of the company
Symbol Listing symbol from the cse exchange needs a mapper to yahoo finance
Industry Enum of industry including Mining
Identifier Broad category (US Cannabis)
Indices Enum such as CSE Composite
Currency Usually CAD
Trading Date when trading started
urls url to listing on cse website
cad_tickers.exchanges.cse.get_cse_files(filename: str = 'cse.xlsx', filetype: str = 'xlsx') → str

Gets excel spreadsheet from api.tsx using requests

Parameters:
filename: Name of the file to be saved filetype: Save as pdf or xlsx
Returns:
filePath returns path to file

See ://stackoverflow.com/questions/13567507/passing-csrftoken-with-python-requests

cad_tickers.exchanges.cse.get_cse_tickers_df() → pandas.core.frame.DataFrame

Grab cse dataframe from exported xlsx sheet

Returns:
clean_df

Dataframe with with randomly selected values. Data columns are as follows:

Company Full name of the company
Symbol Listing symbol from the cse exchange needs a mapper to yahoo finance
Industry Enum of industry including Mining
Identifier Broad category (US Cannabis)
Indices Enum such as CSE Composite
Currency Usually CAD
Trading Date when trading started
urls url to listing on cse website
cad_tickers.exchanges.cse.get_description_for_url(url: str) → str
Parameters:
url - link to ticker can be empty string
Returns:
description - details of what the ticker does, can be empty string

Toronto Stock Exchange

Set of functions to scrap ticker data from the toronto stock exchange.

Will definitely split into smaller files once the graphql api becomes the main api.

cad_tickers.exchanges.tsx.get_ticker_data.get_ticker_data(symbol=<class 'str'>) → Optional[dict]
Parameters:
symbol - ticker symbol from tsx, no prefix
Returns:
dict - Quote By Symbol
class cad_tickers.exchanges.tsx.gql_data.GQL

quote_by_symbol_query:

graphql properties for getQuoteBySymbol are
  • symbol
  • name
  • price
  • priceChange
  • percentChange
  • exchangeName
  • exShortName
  • exchangeCode
  • marketPlace
  • sector
  • industry
  • volume
  • openPrice
  • dayHigh
  • dayLow
  • MarketCap
  • MarketCapAllClasses
  • peRatio
  • prevClose
  • dividendFrequency
  • dividendYield
  • dividendAmount
  • dividendCurrency
  • beta
  • eps
  • exDividendDate
  • shortDescription
  • longDescription
  • website
  • email
  • phoneNumber
  • fullAddress
  • employees
  • shareOutStanding
  • totalDebtToEquity
  • totalSharesOutStanding
  • sharesESCROW
  • vwap
  • dividendPayDate
  • weeks52high
  • weeks52low
  • alpha
  • averageVolume10D
  • averageVolume30D
  • averageVolume50D
  • priceToBook
  • priceToCashFlow
  • returnOnEquity
  • returnOnAssets
  • day21MovingAvg
  • day50MovingAvg
  • day200MovingAvg
  • dividend3Years
  • dividend5Years
  • datatype
  • __typename
cad_tickers.exchanges.tsx.get_tickers.get_all_tickers_data(max_workers: int = 16)
Parameters:
max_workers - number of workers for ThreadPoolExecutor
Returns:
ticker_df - pd.DataFrame with columns of Quote By Symbol
cad_tickers.exchanges.tsx.get_tickers.get_all_tsx_tickers() → list
Returns:
all_tsx - list of tickers for toronto stock exchange
cad_tickers.exchanges.tsx.get_tickers.get_tsx_tickers(exchange='tsx') → list
Parameters:
exchange - tsx or tsxv
Returns:
symbol_list - list of symbols for exchange

Stock News

Extract news from stocks on yahoo

Finds news link from news_content.
Assumes comments are deleted from the yahoo finance news items
Parameters:
news_content - html based data for the news article
Returns:
link_href - link in html markup link_text - link text in html markup
cad_tickers.news.stock_news.find_news_source(news_content: bs4.element.Tag) → Union[None, str]

Utility function to verify news format from yahoo has not changed

when grabbing data from yahoo with requests, it seems date is not returned.

Parameters:
news_content: html based data for the news article
Returns:
source - publisher of article

wrapper div around content - such as - CNW Group 2 days ago

cad_tickers.news.stock_news.get_ynews_for_ticker(ticker: str, yahoo_base_url='https://finance.yahoo.com') → List[bs4.element.Tag]

Returns initial news items fetched from yahoo when loading quote page. Since yahoo has lazy loading, not all items are returned. Seems like ads are not loaded because of lazy loading.

Parameters:
ticker - yahoo formatted ticker str yahoo_base_url - optional parameter that is the base of the request
Returns:
news_items - list of key html content for the news item
cad_tickers.news.stock_news.scrap_news_for_ticker(ticker: str) → List[dict]

Extracts webpage data from a ticker

TODO add a delay

Parameters:
ticker - yahoo finance ticker
Returns:
news_data - list of dicts extracted from webpage
  • source - str
  • link_href - link from post (can be relative or absolute)
  • link_text - description for link
  • ticker - reference to original ticker

IIROC Halts

Find out what latest stocks have been halted from iiroc (only canada)

cad_tickers.news.iiroc_halts.get_halts_resumption() → pandas.core.frame.DataFrame

Gets the latest 25 halts from the iiroc

Returns:
halt_df

Dataframe with bad data removed

Halts Details of halts
Listing Extracted ticker from halt

Stock Utilities

Contains various utility classes

cad_tickers.util.utils.cse_ticker_to_yahoo(row: pandas.core.series.Series) → str
Parameters:
row - series from cse dataframe
Returns:
ticker - yahoo ticker for cse
cad_tickers.util.utils.make_cse_path(raw_ticker: str, raw_industry: str) → str

makes slug for ticker for the cse

Parameters:
raw_ticker - cse ticker from xlsx sheet raw_industry - verbatim industry from ticker, not slugified
Returns:
description - url for cse files for download
cad_tickers.util.utils.parse_description_tags(description_tags: List[bs4.element.Tag]) → str
Parameters:
description_tags - html tags from webpage, usually p tag containing description
Returns:
description - description for ticker
cad_tickers.util.utils.read_df_from_file(file_path: str) → pandas.core.frame.DataFrame
Parameters:
file_path - path to data
Returns:
df - excel sheet dataframe
cad_tickers.util.utils.tickers_to_ytickers(tsx_path: str, cse_path: str) → List[str]
Parameters:
tsx_path - path to clean tsx file cse_path - path to clean cse file
Returns:
ytickers - list of tickers
cad_tickers.util.utils.transform_name_to_slug(raw_ticker: str) → str
Parameters:
raw_ticker - cse ticker to be converted to slug
Returns:
transformed - raw_ticker
cad_tickers.util.utils.tsx_ticker_to_yahoo(row: pandas.core.series.Series) → str
Parameters:
ticker - ticker from pandas dataframe from cad_tickers exchange - what exchange the ticker is for
Returns:
yticker - yahoo finance ticker for tsx

Examples

Grab Descriptions for all tsx tickers

from cad_tickers.exchanges.tsx import dl_tsx_xlsx, add_descriptions_to_df_pp
from datetime import datetime
start_time = datetime.now()
df = dl_tsx_xlsx()
# df = add_descriptions_to_df(df)
df = add_descriptions_to_df_pp(df)
end_time = datetime.now()
df.to_csv('tsx_all_descriptions.csv')
print(end_time - start_time)

Indices and tables