Usage
This page covers all available functions in bdshare with complete examples. For installation instructions, see Installation. For the full API specification, see api.
Dhaka Stock Exchange (DSE)
Live Trading Data
Get current prices for all instruments or a specific symbol.
from bdshare import get_current_trade_data
# All instruments
df = get_current_trade_data()
print(df.to_string())
from bdshare import get_current_trade_data
# Single instrument (case-insensitive)
df = get_current_trade_data('GP')
print(df.to_string())
Returned columns:
Column |
Type |
Description |
|---|---|---|
symbol |
str |
Trading symbol |
ltp |
float |
Last trade price |
high |
float |
Day high |
low |
float |
Day low |
close |
float |
Closing price |
ycp |
float |
Yesterday’s closing price |
change |
float |
Price change from ycp |
trade |
int |
Number of trades |
value |
float |
Total traded value |
volume |
int |
Total traded volume |
DSEX Index Data
Get live DSEX index entries.
from bdshare import get_dsex_data
# All DSEX entries
df = get_dsex_data()
print(df.to_string())
from bdshare import get_dsex_data
# Filter by symbol
df = get_dsex_data('DSEX')
print(df.to_string())
Trading Codes
Get the full list of currently tradeable symbols.
from bdshare import get_current_trading_code
df = get_current_trading_code()
print(df['symbol'].tolist())
Historical Data
Get full OHLCV and metadata for a date range. Results are indexed by date, sorted newest-first.
from bdshare import get_hist_data
# All instruments for a date range
df = get_hist_data('2024-01-01', '2024-03-31')
print(df.to_string())
from bdshare import get_hist_data
# Specific instrument
df = get_hist_data('2024-01-01', '2024-03-31', 'ACI')
print(df.to_string())
Returned columns:
Column |
Type |
Description |
|---|---|---|
date |
str |
Index — trading date |
symbol |
str |
Trading symbol |
ltp |
float |
Last trade price |
high |
float |
Day high |
low |
float |
Day low |
open |
float |
Opening price |
close |
float |
Closing price |
ycp |
float |
Yesterday’s closing price |
trade |
int |
Number of trades |
value |
float |
Total traded value |
volume |
int |
Total traded volume |
Note
Deprecated alias: get_historical_data() still works but emits a
DeprecationWarning. Migrate to get_hist_data().
Simplified OHLCV Historical Data
Returns only open, high, low, close, volume — sorted oldest-first.
This format is directly compatible with TA libraries such as ta,
pandas-ta, and backtrader.
from bdshare import get_basic_hist_data
# All instruments
df = get_basic_hist_data('2024-01-01', '2024-03-31')
print(df.to_string())
from bdshare import get_basic_hist_data
# Specific instrument
df = get_basic_hist_data('2024-01-01', '2024-03-31', 'GP')
print(df.to_string())
from bdshare import get_basic_hist_data
import datetime as dt
# Rolling 2-year window with date set as the DataFrame index
end = dt.date.today()
start = end - dt.timedelta(days=2 * 365)
df = get_basic_hist_data(str(start), str(end), 'GP', index='date')
print(df.to_string())
Note
Deprecated alias: get_basic_historical_data() still works but emits a
DeprecationWarning. Migrate to get_basic_hist_data().
Close Price Data
Returns only closing price and prior close (ycp), indexed by date.
from bdshare import get_close_price_data
df = get_close_price_data('2024-01-01', '2024-03-31', 'ACI')
print(df.to_string())
Last Trade Price (Text File)
Fetches the DSE fixed-width text file for the most recent session.
from bdshare import get_last_trade_price_data
df = get_last_trade_price_data()
print(df.to_string())
Market & Index Summary
Current Market Summary
Returns the last 30 days of overall market data including all DSE indices, total volumes, and market capitalisation.
from bdshare import get_market_info
df = get_market_info()
print(df.to_string())
Returned columns: Date, Total Trade, Total Volume, Total Value (mn), Total Market Cap. (mn), DSEX Index, DSES Index, DS30 Index, DGEN Index.
Historical Market Summary
Fetch extended market statistics between two dates via the DSE search form.
from bdshare import get_market_info_more_data
df = get_market_info_more_data('2024-01-01', '2024-03-31')
print(df.to_string())
from bdshare import get_market_info_more_data
# Set date as the DataFrame index, sorted ascending
df = get_market_info_more_data('2024-01-01', '2024-03-31', index='date')
print(df.to_string())
Market Depth (Order Book)
Returns the live buy and sell order book for a symbol.
from bdshare import get_market_depth_data
df = get_market_depth_data('ACI')
print(df.to_string())
Returned columns: buy_price, buy_volume, sell_price, sell_volume.
P/E Ratios
Get the latest price-to-earnings ratios for all listed companies.
from bdshare import get_latest_pe
df = get_latest_pe()
print(df.to_string())
Company Profile
Returns a list of DataFrames containing detailed company information (financials, directors, shareholding, etc.).
from bdshare import get_company_info
tables = get_company_info('GP')
for t in tables:
print(t.to_string())
print()
Sector Performance
Get sector-wise performance across the market.
from bdshare import get_sector_performance
df = get_sector_performance()
print(df.to_string())
Top Gainers & Losers
from bdshare import get_top_gainers_losers
# Default: top 10
df = get_top_gainers_losers()
print(df.to_string())
from bdshare import get_top_gainers_losers
# Custom limit
df = get_top_gainers_losers(limit=20)
print(df.to_string())
News & Announcements
Unified News Dispatcher
get_news() is the recommended entry point. Use news_type to select
the category and code to filter by symbol.
news_type |
Description |
|---|---|
|
All DSE news items (default) |
|
AGM / dividend declarations |
|
|
|
Price-sensitive news |
from bdshare import get_news
# All news
df = get_news(news_type='all')
print(df.to_string())
from bdshare import get_news
# AGM declarations
df = get_news(news_type='agm')
print(df.to_string())
from bdshare import get_news
# Corporate announcements for a specific symbol
df = get_news(news_type='corporate', code='GP')
print(df.to_string())
from bdshare import get_news
# Price-sensitive news
df = get_news(news_type='psn', code='ACI')
print(df.to_string())
AGM News
from bdshare import get_agm_news
df = get_agm_news()
print(df.to_string())
Returned columns: company, yearEnd, dividend, agmDate, recordDate, venue, time.
All News
from bdshare import get_all_news
# All news (no filter)
df = get_all_news()
print(df.to_string())
from bdshare import get_all_news
# Filter by symbol
df = get_all_news(code='BEXIMCO')
print(df.to_string())
from bdshare import get_all_news
# Filter by date range and symbol
df = get_all_news('2024-01-01', '2024-03-31', 'GP')
print(df.to_string())
Corporate Announcements
from bdshare import get_corporate_announcements
df = get_corporate_announcements()
print(df.to_string())
from bdshare import get_corporate_announcements
df = get_corporate_announcements(code='GP')
print(df.to_string())
Price-Sensitive News
from bdshare import get_price_sensitive_news
df = get_price_sensitive_news()
print(df.to_string())
from bdshare import get_price_sensitive_news
df = get_price_sensitive_news(code='ACI')
print(df.to_string())
Saving Data
Save any DataFrame to CSV using the built-in Store helper.
from bdshare import get_basic_hist_data, Store
import datetime as dt
end = dt.date.today()
start = end - dt.timedelta(days=365)
df = get_basic_hist_data(str(start), str(end), 'GP')
Store(df).save() # saved to current directory as CSV
OOP Client
The BDShare class wraps all functions with automatic caching and
rate limiting (5 calls/second sliding window).
Initialisation
from bdshare import BDShare
bd = BDShare() # caching on by default
bd = BDShare(cache_enabled=False) # disable caching
bd = BDShare(api_key='your-key') # premium API key (future use)
Context Manager
Use as a context manager to ensure the session and cache are cleaned up automatically on exit:
from bdshare import BDShare
with BDShare() as bd:
df = bd.get_current_trades('GP')
print(df.to_string())
Method Reference
All methods accept a use_cache keyword argument (default True).
The table below shows each method with its cache TTL.
Market methods
bd.get_market_summary() # DSEX/DSES/DS30 indices — 1-min TTL
bd.get_company_profile('ACI') # Company profile — 1-hr TTL
bd.get_latest_pe_ratios() # All P/E ratios — 1-hr TTL
bd.get_top_movers(limit=10) # Top gainers/losers — 5-min TTL
bd.get_sector_performance() # Sector breakdown — 5-min TTL
Trading methods
bd.get_current_trades() # All live prices — 30-sec TTL
bd.get_current_trades('GP') # Single symbol
bd.get_dsex_index() # DSEX index entries — 1-min TTL
bd.get_trading_codes() # All tradeable symbols — 24-hr TTL
bd.get_historical_data( # Historical OHLCV — no TTL (opt-in)
'GP',
'2024-01-01',
'2024-03-31',
use_cache=True,
)
News methods
bd.get_news(news_type='all') # All news — 5-min TTL
bd.get_news(news_type='corporate', code='GP')
bd.get_news(news_type='psn')
Utility methods
bd.clear_cache() # Flush all cached responses
bd.configure(proxy_url='http://proxy:8080')
print(bd.version) # e.g. "2.0.0"
Error Handling
All failures raise BDShareError. Catch it specifically rather than
bare Exception so unexpected bugs are never silently swallowed.
from bdshare import get_hist_data, BDShareError
try:
df = get_hist_data('2024-01-01', '2024-03-31', 'INVALID')
except BDShareError as e:
print(f"DSE error: {e}")
Common causes of BDShareError:
Symbol not present in the response table
DSE site returned a non-200 status after all retries
Network timeout (default: 10 seconds per request)
Page structure changed on the DSE website — please open an issue
Warning
The library retries up to 3 times with exponential back-off
(0.2 s → 0.4 s → 0.8 s) before raising BDShareError. Short-lived
DSE outages are handled automatically.
Chittagong Stock Exchange (CSE)
Note
CSE support is currently in development. The functions below are
placeholders — they will raise NotImplementedError until the
CSE module is released. Track progress on
GitHub.
from bdshare import get_cse_current_trade_data
# All CSE instruments
df = get_cse_current_trade_data()
print(df.to_string())
from bdshare import get_cse_current_trade_data
# Specific CSE instrument
df = get_cse_current_trade_data('GP')
print(df.to_string())
Proxy Support
Route all requests through a proxy server (useful in restricted networks):
from bdshare import BDShare
with BDShare() as bd:
bd.configure(proxy_url='http://your-proxy-server:8080')
df = bd.get_current_trades()
print(df.to_string())
Complete Example: Stock Screener
The following example fetches live data for all instruments and screens for stocks with a positive change greater than 3 % and volume above a threshold.
from bdshare import get_current_trade_data, BDShareError
try:
df = get_current_trade_data()
except BDShareError as e:
print(f"Failed to fetch data: {e}")
raise SystemExit(1)
# Numeric columns were already cast — no conversion needed
screened = df[
(df['change'] > 3.0) &
(df['volume'] > 100_000)
].sort_values('change', ascending=False)
print(screened[['symbol', 'ltp', 'change', 'volume']].to_string())
Complete Example: Portfolio P&L
from bdshare import BDShare, BDShareError
PORTFOLIO = {
'GP': {'qty': 100, 'cost': 450.50},
'ACI': {'qty': 50, 'cost': 225.75},
'BEXIMCO': {'qty': 200, 'cost': 125.25},
}
with BDShare() as bd:
total_cost = total_value = 0.0
for symbol, pos in PORTFOLIO.items():
try:
row = bd.get_current_trades(symbol).iloc[0]
price = row['ltp']
mv = pos['qty'] * price
cost = pos['qty'] * pos['cost']
pnl = mv - cost
print(f"{symbol:10s} ltp={price:8.2f} P&L={pnl:+10.2f}")
total_cost += cost
total_value += mv
except BDShareError as e:
print(f"{symbol}: {e}")
pct = (total_value / total_cost - 1) * 100
print(f"\nTotal P&L: {total_value - total_cost:+.2f} ({pct:+.2f}%)")