A python package that helps to access TSETMC stock price history, Using OOP Interface
sqlalchemy
PANDAS
sqlite
pip install tehran_stocks
For first use you need initialize the database
ts-get init # Set up to sqlite database
import tehran_stocks
# On first import package initialize itself
During initialization you will prompt for downloading all prices. if you answer yes it will download all prices, otherwise you can download data
ts-get update # update all price , or download all if no price exist
ts-get group 34 ## 34 is the code for car's group.
ts-get get_groups ## get group name and group codes
from tehran_stocks import get_all_price, Stocks, update_group
get_all_price() # download and(or) update all prices
update_group(34) #download and(or) update Stocks in groupCode = 34 (Cars)
Stocks.get_group() # to see list of group codes
To access data you can use Stocks
which is an customized sqlalchemy
object, which helps you to find prices on an easy way.
from tehran_stocks import Stocks, db
# You can use query to find stocks
stock = Stocks.query.filter_by(name='كگل').first() #find by symbol(نماد)
stock = Stocks.query.filter_by(code='35700344742885862').first() # find by code on tsetmc url
stock = Stocks.query.filter(Stocks.title.like('%گل گهر%')).first() # Search by title
stock_list = Stocks.query.filter_by(group_code =34).all() # find all Stocks in Khodro
stock_list = Stocks.query.filter(Stocks.group_code.in_([13,34])).all() # all stocks in khodro and felezat
## (Advanced)or run sql query using orm or raw sql
db.session.query(Stocks.group_code, Stocks.group_name).group_by(Stocks.group_code).all()
db.session.execute('select group_code , group_name from stocks group by group_name').fetchall()
Now easily access stock price and do whatever you want with pandas
dataframes:
# use data as a pandas dataframe
>>> stock.df#
id code ticker dtyyyymmdd first high low close value vol openint per open last date
0 22491 35700344742885862 Gol-E-Gohar. 20040829 12000.0 12021.0 12000.0 12000.0 18841605000 1570000 2708 D 12000.0 12000.0 2004-08-29
>>> stock.summary()
Start date: 2004/08/29
End date: 2019/07/14
Total days: 2987
>>> stock.update()
# update stock price history
# Export to your preferred format
>>> stock.df.to_csv('price.csv')
>>> stock.df.to_excel('price.xlsx')
>>> stock.df.to_stata('price.dta')
>>> stock.get_instant_detail()
{'time': '12:29:57',
'last_price': '12950',
'last_close': '13060',
'last_high': '13300',
'last_low': '13130',
'last_open': '13330',
'trade_count': '12760',
'trade_volume': '1140',
'trade_value': '4671236',
'market_cap': '60715047900',
'date_string': '20220404',
'time_string': '122957'}
# get change in share count
>>> stock.get_shares_history()
date new_shares old_shares gdate
0 1400-12-08 00:00:00 200.000 B 100.000 B 2022-02-27
1 1400-04-20 00:00:00 100.000 B 74.400 B 2021-07-11
# get change in price ~ dividend, split, etc.
>> stock.get_dividend()
date after before dividend gdate
0 1400-04-16 00:00:00 18770 20070 1300 2021-07-07
1 1399-04-18 00:00:00 16350 17250 900 2020-07-08
)
You can change the default database by updating the config file on:
~/.tse/config.yml #unix MacOS/Linux
C:\Users\User\{USERNAME}\.tse\config.yml #Windows
Custom Config for postgresql (you may need to install pyscopg2
):
database:
database: stocks
engine: postgresql
host: localhost
password: password
port: 5432
user: postgres