isyatirimhisse
, İş Yatırım'ın web sitesinden veri çekme işlemlerini kolaylaştırmak amacıyla geliştirilmiş, isteğe göre özelleştirilebilir bir Python kütüphanesidir.
*** UYARI ***
isyatirimhisse
, resmi İş Yatırım Menkul Değerler A.Ş. kütüphanesi değildir ve şirket tarafından doğrulanmamıştır. Kullanıcılar, kütüphaneyi kullanmadan önce ilgili tüm verilere erişim için İş Yatırım Menkul Değerler A.Ş.'nin kullanım koşullarını ve haklarını incelemelidir. isyatirimhisse
, yalnızca kişisel kullanım amaçları için tasarlanmıştır.
Kütüphaneyi kullanmak için aşağıdaki adımları izleyin:
- Python'ı sisteminize yükleyin: https://www.python.org/downloads/
- Terminali açın ve paketi yüklemek için aşağıdaki komutu çalıştırın:
pip install isyatirimhisse
Spesifik bir versiyona ait kurulum yapacaksanız aşağıdaki örnekte olduğu gibi komutu çalıştırabilirsiniz.
pip install isyatirimhisse==3.0.0
Yüklü paketin versiyonuna aşağıdaki komut yardımıyla ulaşabilirsiniz.
pip show isyatirimhisse
from isyatirimhisse import fetch_data, fetch_financials, visualize_data
fetch_data
: Belirtilen hisse senetlerine ve endekslere ait verileri alır.fetch_financials
: Belirtilen hisse senetlerine ait finansal tabloları alır.visualize_data
: Belirtilen hisse senetlerine ait verileri görselleştirir vefetch_data
çıktıları ile uyumlu çalışması için tasarlanmıştır.
Asenkron programlama, bir programın belirli görevleri eşzamanlı olarak yürütebilmesini sağlayan bir programlama yaklaşımıdır.
Bir başka açıdan asenkron programlama, web sitelerine gönderilen isteklerin (HTTP istekleri gibi) cevaplarını beklerken programın başka işlemleri yapabilmesini sağlayan bir programlama tekniğidir. Geleneksel senkron programlamada, bir istek gönderildiğinde programın çalışması o isteğin cevabını alana kadar durur. Asenkron programlamada ise isteklerin cevapları bekleme süreci boyunca bile program başka işlemleri yapabilir.
Async yapıdaki bir fonksiyon en basit haliyle aşağıdaki gibi çalıştırılabilir.
import asyncio
async def main():
veriler = await fetch_data(symbol='THYAO', start_date='01-01-2023')
return veriler
async def run():
sonuc = await main()
print(sonuc)
# Diğer işlemler burada yapılabilir.
async def main_wrapper():
gorev = asyncio.create_task(run())
await gorev
await main_wrapper()
Yukarıdaki örnek özelinde yapılan işlemler aşağıdaki gibidir.
-
İlk olarak,
asyncio
isimli bir modül içe aktarılır. Bu modül, asenkron programlamayı desteklemek için kullanılır. -
main
isminde bir asenkron fonksiyon tanımlanır. Bu fonksiyon,fetch_data
isimli bir başka asenkron fonksiyonu çağırıyor. -
main
fonksiyonu,fetch_data
fonksiyonundan gelen veriyiveriler
değişkenine atamak içinawait
anahtar kelimesini kullanarak veriyi bekliyor. Bu,fetch_data
fonksiyonunun bir asenkron işlev olduğu ve tamamlanana kadarmain
fonksiyonunun duraklayacağı anlamına gelir. -
main
fonksiyonu sonucundaveriler
değişkeni elde edilir ve bu verireturn
ifadesiyle döndürülür. -
run
isminde başka bir asenkron fonksiyon tanımlanır. Bu fonksiyon,main
fonksiyonunu çağırıyor ve sonucunusonuc
değişkenine atıyor. -
run
fonksiyonu,sonuc
değişkenini ekrana basarak sonucu görüntülüyor. -
main_wrapper
isimli bir asenkron fonksiyon daha tanımlanıyor. Bu fonksiyon,run
fonksiyonunu bir asenkron görev olarak oluşturuyor ve bu görevin tamamlanmasını bekliyor. -
Son olarak,
await main_wrapper()
ifadesi ilemain_wrapper
fonksiyonu çağrılıyor ve bu, tüm asenkron işlemlerin yürütülmesini sağlıyor.
symbol
(str veya list, varsayılan None): Hisse senedi sembolü veya sembollerinin listesi (örn.'AKBNK'
veya['AKBNK','THYAO']
).stock_market_index
(str veya list, varsayılan None): Endeks sembolü veya sembollerinin listesi (örn.'XU100'
veya['XU100','XBANK']
).start_date
(str, varsayılan None): Verilerin 'GG-AA-YYYY' formatında başlangıç tarihi (örn.'03-01-2023'
).end_date
(str, varsayılan None): Verilerin 'GG-AA-YYYY' formatında bitiş tarihi (örn.'31-07-2023'
). Eğer belirtilmezse, sistem tarihini (bugünkü tarihi) otomatik olarak kullanır.frequency
(str, varsayılan '1d'): Veri frekansı ('1d'
: Günlük,'1w'
: Haftalık,'1m'
: Aylık,'1y'
: Yıllık).observation
(str, varsayılan 'last'): Haftalık, aylık ve yıllık frekanslarda istenen gözlem ('last'
: Son,'mean'
: Ortalama).calculate_return
(bool, varsayılan False): Getiri hesaplanacak mı?log_return
(bool, varsayılan True): Logaritmik getiri mi hesaplanacak?drop_na
(bool, varsayılan True): Eksik değerler kaldırılacak mı?save_to_excel
(bool, varsayılan False): Excel dosyasına kaydedilecek mi?excel_file_name
(str, varsayılan None): Kaydedilecek excel dosyasının ismi (örn. 'data.xlsx' veya 'data'). Geçerli bir dosya ismi belirtilmezse, sistem tarihi kullanılarak 'data_YYYYMMDD.xlsx' ismiyle kaydedilir. Eğer kaydedilecek dizinde aynı isimden başka bir dosya varsa farklı bir isimle kaydeder.language
(str, varsayılan 'en'): Çıktıların dili ('tr'
: Türkçe,'en'
: İngilizce).exchange
(str, varsayılan 'TL'): Hisse senedi fiyatları için para birimi ('TL'
: Türk Lirası,'USD'
: ABD Doları).
fetch_data
fonksiyonu bir pandas veri çerçevesi döndürür.
# Örnek 1: Tek hisse senedine ait başlangıç tarihi belli ve son işlem gününe kadar olan kapanış fiyatlarını al.
import asyncio
async def main():
symbol = 'GARAN'
start_date = '03-01-2023'
veriler = await fetch_data(
symbol=symbol,
start_date=start_date
)
return veriler
async def run():
sonuc = await main()
print(sonuc)
async def main_wrapper():
gorev = asyncio.create_task(run())
await gorev
await main_wrapper()
# Örnek 2: Birden fazla hisse senedine ait başlangıç tarihi belli ve son işlem gününe kadar olan haftalık ortalama kapanış fiyatlarını al.
import asyncio
async def main():
symbol = ['GARAN', 'THYAO']
start_date = '03-01-2023'
frequency = '1w'
observation = 'mean'
veriler = await fetch_data(
symbol=symbol,
start_date=start_date,
frequency=frequency,
observation=observation
)
return veriler
async def run():
sonuc = await main()
print(sonuc)
async def main_wrapper():
gorev = asyncio.create_task(run())
await gorev
await main_wrapper()
# Örnek 3: Birden fazla hisse senedine ait başlangıç ve bitiş tarihleri belli aylık USD kapanış fiyatları üzerinden basit getirileri al.
import asyncio
async def main():
symbol = ['GARAN', 'THYAO']
start_date = '01-12-2021'
end_date = '30-12-2022'
frequency = '1m'
calculate_return = True
log_return = False
exchange = 'USD'
veriler = await fetch_data(
symbol=symbol,
start_date=start_date,
end_date=end_date,
frequency=frequency,
calculate_return=calculate_return,
log_return=log_return,
exchange=exchange
)
return veriler
async def run():
sonuc = await main()
print(sonuc)
async def main_wrapper():
gorev = asyncio.create_task(run())
await gorev
await main_wrapper()
# Örnek 4: Birden fazla hisse senedine ait başlangıç ve bitiş tarihleri belli eksik değerleri kaldırmadan yıllık ortalama USD kapanış fiyatlarını al. Ayrıca dosya ismi belirtmeden excel dosyasına kaydet ve çıktıları Türkçe yap.
import asyncio
async def main():
symbol = ['EUPWR', 'THYAO']
start_date = '02-01-2012'
end_date = '30-12-2022'
frequency = '1y'
drop_na = False
save_to_excel = True
language = 'tr'
exchange = 'USD'
veriler = await fetch_data(
symbol=symbol,
start_date=start_date,
end_date=end_date,
frequency=frequency,
drop_na=drop_na,
save_to_excel=False,
language=language,
exchange=exchange
)
return veriler
async def run():
sonuc = await main()
print(sonuc)
async def main_wrapper():
gorev = asyncio.create_task(run())
await gorev
await main_wrapper()
# Not: Örnekte bulunan EUPWR hisse senedinin 2023 yılı öncesi verileri olmadığı için çıktıda görünmeyecektir.
# Örnek 5: Birden fazla hisse senedine ve endekse ait başlangıç ve bitiş tarihleri belli eksik değerleri kaldırmadan aylık ortalama USD kapanış fiyatlarını al. Ayrıca dosya ismi belirtmeden excel dosyasına kaydet ve çıktıları Türkçe yap.
import asyncio
async def main():
symbol = ['GARAN', 'THYAO']
stock_market_index = ['XU030', 'XBANK']
start_date = '02-01-2012'
end_date = '31-07-2023'
frequency = '1m'
drop_na = False
save_to_excel = True
language = 'tr'
exchange = 'USD'
veriler = await fetch_data(
symbol=symbol,
stock_market_index=stock_market_index,
start_date=start_date,
end_date=end_date,
frequency=frequency,
drop_na=drop_na,
save_to_excel=save_to_excel,
language=language,
exchange=exchange
)
return veriler
async def run():
sonuc = await main()
print(sonuc)
async def main_wrapper():
gorev = asyncio.create_task(run())
await gorev
await main_wrapper()
symbol
(str veya list, varsayılan None): Hisse senedi sembolü veya sembollerinin listesi (örn.'AKBNK'
veya['AKBNK','THYAO']
).start_year
(str, varsayılan None): Finansal tabloların YYYY formatında başlangıç yılı (örn.'2022'
).end_year
(str, varsayılan None): Finansal tabloların YYYY formatında bitiş yılı (örn.'2023'
).exchange
(str, varsayılan 'TRY'): Finansal tablolar için para birimi ('TRY'
: Türk Lirası,'USD'
: ABD Doları).financial_group
(str, varsayılan '1'): Finansal tablo türü ('1'
: Seri XI NO:29,'2'
: Konsolide Olmayan UFRS,'3'
: Konsolide UFRS).save_to_excel
(bool, varsayılan False): Excel dosyasına kaydedilecek mi?language
(str, varsayılan 'en'): Çıktıların dili ('tr'
: Türkçe,'en'
: İngilizce).
fetch_financials
fonksiyonu bir sözlük döndürür.
# Örnek 1: Tek bir hisse senedi için finansal tabloları çek ve dili Türkçe olarak ayarlayıp excel dosyasına kaydet.
symbol='THYAO'
start_year='2022'
end_year='2023'
save_to_excel=True
language='tr'
veri = fetch_financials(
symbol=symbol,
start_year=start_year,
end_year=end_year,
save_to_excel=save_to_excel,
language=language
)
# Örnek 2: Birden fazla hisse senedi için konsolide olmayan UFRS'ye göre finansal tabloları çek.
symbols=['AKBNK', 'THYAO']
start_year='2022'
end_year='2023'
financial_group='2'
language='tr'
veri = fetch_financials(
symbol=symbols,
start_year=start_year,
end_year=end_year,
financial_group=financial_group,
language=language
)
# Örnek 3: Belirtilen birden fazla hisse senedi için USD bazlı finansal tabloları al ve örnek bir hisse senedine ait finansal tablolara Türkçe kullanarak ulaş.
symbols=['AKBNK', 'THYAO']
start_year='2018'
language='tr'
exchange='USD'
veri = fetch_financials(
symbol=symbols,
start_year=start_year,
language=language,
exchange=exchange
)
# Örnekte bulunan THYAO hisse senedinin finansal tabloları
thyao_finansallar=veri['THYAO']
# İstenen hisse senedine ait finansal tablolar gelmiyorsa veri kaynağı belirtilen financial_group parametresi değerine ait tabloyu yayınlamamıştır.
# Örnek 4: Sözlük tipinde saklanan veriler bir veri çerçevesinde aşağıdaki gibi bir araya getirilebilir.
symbols=['SISE', 'THYAO']
start_year='2018'
language='tr'
exchange='USD'
veri = fetch_financials(
symbol=symbols,
start_year=start_year,
language=language,
exchange=exchange
)
birlestirilmis_veri = pd.DataFrame()
for symbol, data in veri.items():
data = data.rename(columns={symbol: 'KALEM'})
data['SEMBOL'] = symbol
birlestirilmis_veri = pd.concat([birlestirilmis_veri, data], ignore_index=True)
df
(pandas DataFrame, varsayılan None): Hisse senedi verilerinin bulunduğu pandas DataFrame.plot_type
(str, varsayılan '1'). Görselleştirme türü ('1'
: Çizgi Grafiği,'2'
: Korelasyon Isı Matrisi,'3'
: Dağılım Matrisi).normalization
(bool, varsayılan False): Veriler normalize edilecek mi? True olarak ayarlandığında veriler 0 ile 1 arasında ölçeklendirilir.language
(str, varsayılan 'en'): Çıktıların dili ('tr'
: Türkçe,'en'
: İngilizce).**kwargs
: Görselleştirme türlerine özel ek seçenekler. Bu parametreler, belirli bir görselleştirme türü için özel ayarlamalar yapmak için kullanılabilir.- Görselleştirme Türleri için **kwargs Parametreleri:
- Çizgi Grafiği:
linewidth
(float, varsayılan 1.5): Çizgi kalınlığı.fontsize
(int, varsayılan 12): Başlık büyüklüğü.figsize
(tuple, varsayılan (10, 6)): Grafik çıktısının boyutu.
- Korelasyon Isı Matrisi:
cmap
(str, varsayılan 'coolwarm'): Renk haritası.vmin
(float, varsayılan -1): Renk haritasındaki en küçük değer.vmax
(float, varsayılan 1): Renk haritasindaki en büyük değer.fontsize
(int, varsayılan 12): Başlık büyüklüğü.figsize
(tuple, varsayılan (10, 6)): Grafik çıktısının boyutu.
- Dağılım Matrisi:
alpha
(float, varsayılan 0.5): Nokta şeffaflığı.fontsize
(int, varsayılan 12): Başlık büyüklüğü.height
(float, varsayılan 2.5): Her alt grafiğin yüksekliği.aspect
(float, varsayılan 1): Her alt grafiğin genişlik-yükselik oranı.
- Çizgi Grafiği:
- Görselleştirme Türleri için **kwargs Parametreleri:
visualize_data
fonksiyonu, pandas veri çerçevesi içerisindeki verileri grafikler ve görsel öğelerle temsil eder.
import asyncio
async def main():
symbol = ['AKBNK', 'THYAO', 'GARAN', 'SISE', 'EREGL', 'BIMAS']
start_date='01-01-2013'
end_date='31-07-2023'
veriler = await fetch_data(
symbol=symbol,
start_date=start_date,
end_date=end_date
)
return veriler
async def run():
sonuc = await main()
# Çizgi grafik, fiyatları normalize et, çizgileri kalınlaştır, başlığı büyüt ve çıktıyı Türkçe al.
visualize_data(
df=sonuc,
plot_type='1',
normalization=True,
language='tr',
linewidth=2,
fontsize=14
)
async def main_wrapper():
gorev = asyncio.create_task(run())
await gorev
await main_wrapper()
import asyncio
async def main():
symbol = ['AKBNK', 'THYAO', 'GARAN', 'SISE', 'EREGL', 'BIMAS']
start_date='01-12-2012'
end_date='31-07-2023'
frequency='1m'
calculate_return=True
veriler = await fetch_data(
symbol=symbol,
start_date=start_date,
end_date=end_date,
frequency=frequency,
calculate_return=calculate_return
)
return veriler
async def run():
sonuc = await main()
# Korelasyon ısı matrisi, ek bir parametre ekleme ve çıktıyı Türkçe al.
visualize_data(
df=sonuc,
plot_type='2',
language='tr'
)
async def main_wrapper():
gorev = asyncio.create_task(run())
await gorev
await main_wrapper()
import asyncio
async def main():
symbol = ['AKBNK', 'THYAO', 'GARAN']
start_date='01-12-2012'
end_date='31-07-2023'
frequency='1m'
calculate_return=True
veriler = await fetch_data(
symbol=symbol,
start_date=start_date,
end_date=end_date,
frequency=frequency,
calculate_return=calculate_return
)
return veriler
async def run():
sonuc = await main()
# Dağılım matrisi, daha şeffaf ve çıktıyı Türkçe al.
visualize_data(
df=sonuc,
plot_type='3',
language='tr',
alpha=0.1
)
async def main_wrapper():
gorev = asyncio.create_task(run())
await gorev
await main_wrapper()
- Kütüphane, İş Yatırım'ın web sitesindeki verilere bağımlıdır. Bu nedenle, verilerin doğruluğu ve sürekliliği için lütfen ilgili web sitesini kontrol edin: İş Yatırım
- Kütüphanenin geliştirilmesi ve iyileştirilmesi için geri bildirimlerinizi bekliyorum. GitHub reposuna katkıda bulunun: GitHub Repo
- Herhangi bir sorun veya öneride lütfen GitHub reposundaki "Issue" bölümünden yeni bir konu açarak bildirim sağlayın: GitHub Issues
- İlk sürüm yayınlandı.
veri_cek
fonksiyonundaki parametreleri kontrol eden koşul ifadeleri güncellendi.json
kütüphanesi kaldırıldı.veri_cek
fonksiyonuna200
HTTP kodu koşul ile beraber eklendi ve takibe alındı.
veri_gorsel
fonksiyonu eklendi. Fonksiyon, 3 farklı veri türünde görselleştirme yapma imkanı sunuyor.veri_cek
fonksiyonuna pandas DataFrame'i excel olarak kaydedecek parametreler eklendi.
- 0.2.0 sürümündeki kurulum hatası giderildi.
- Dokümantasyondaki Türkçe karakter problemi giderildi.
- Dokümantasyonda görünmeyen görseller görünür hale getirildi.
- Fonksiyonlar İngilizce diline çevrildi.
veri_cek
:fetch_data
veri_gorsel
:visualize_data
- Finansal (Mali) tabloları alabilmeyi sağlayan
fetch_financials
fonksiyonu eklendi. - Fonksiyonlara çıktıları iki dilde (İngilizce ve Türkçe) alabilme özelliği eklendi.
fetch_data
fonksiyonu, hisse senetlerinin TL bazlı fiyatlarının yanı sıra USD bazlı fiyatlarını da alabilme imkanı sunacak şekilde güncellendi.visualize_data
fonksiyonuna ekstra özellik ekleyebilmeyi sağlayan **kwargs parametreleri genişletildi.- Dokümantasyon içeriği Türkçe ve İngilizce olacak şekilde güncellendi.
fetch_data
fonksiyonundakicurrency
parametresiexchange
olarak değiştirildi.fetch_financials
fonksiyonundakiselenium
paketi bağımlılığı kaldırıldı.fetch_financials
fonksiyonu ile finansal tablolar tek bir tablo olarak alınacak şekilde güncellendi.fetch_financials
fonksiyonundakistart_period
veend_period
parametreleri sırasıylastart_year
veend_year
olarak güncellendi.fetch_financials
fonksiyonunaexchange
vefinancial_group
parametreleri eklendi.fetch_data
vefetch_financials
fonksiyonlarındaki kontroller artırıldı.
fetch_data
fonksiyonuna endekslere ait verileri çekmeyi sağlayacakstock_market_index
parametresi eklenmiştir.fetch_financials
fonksiyonları ile çekilen finansalların kalemlerinde bulunan boşluklar kaldırılmıştır.
fetch_data
fonksiyonu ile gönderilen istekler kontrol edilecek.
- 2.1.1 sürümündeki kod hatası düzeltilmiştir.
- Gönderilen isteklerdeki zaman kısıtlaması iyileştirildi.
fetch_data
fonksiyonu asenkron yapıya geçirilmiştir.fetch_data
fonksiyonundaki sembol parametresi 400 sembol ile sınırlandırılmıştır.visualize_data
fonksiyonunun çalıştırılma şekli asenkron yapı nedeniyle değişmiştir.
Bu proje MIT Lisansı altında lisanslanmıştır.
isyatirimhisse
is a customizable Python library developed to simplify data fetching from IS Investment's website.
*** WARNING ***
isyatirimhisse
is not the official IS Investment Securities library and has not been verified by the company. Users should review IS Investment Securities' terms of use and rights to access all relevant data before using the library. isyatirimhisse
is intended for personal use only.
Follow the steps below to use the library:
- Install Python on your system: https://www.python.org/downloads/
- Open the terminal and run the following command to install the package:
pip install isyatirimhisse
If you want to install a specific version, you can run the command as in the example below.
pip install isyatirimhisse==3.0.0
You can find the version of the installed package with the following command.
pip show isyatirimhisse
from isyatirimhisse import fetch_data, fetch_financials, visualize_data
fetch_data
: Fetches data for the specified stocks and indices.fetch_financials
: Fetches financial statements for the specified stocks.visualize_data
: Visualizes the data for the specified stocks is designed to work with the outputs offetch_data
.
Asynchronous programming is an approach to programming that enables a program to execute certain tasks concurrently.
In another sense, asynchronous programming is a programming technique that allows a program to perform other tasks while waiting for responses to actions like requests sent to websites (such as HTTP requests). In traditional synchronous programming, when a request is sent, the program halts its execution until it receives the response for that request. However, in asynchronous programming, the program can perform other tasks even while waiting for the responses to actions.
A function with an asynchronous structure can be executed as shown below.
import asyncio
async def main():
data = await fetch_data(symbol='THYAO', start_date='01-01-2023')
return data
async def run():
result = await main()
print(result)
# Other operations can be done here.
async def main_wrapper():
task = asyncio.create_task(run())
await task
await main_wrapper()
The operations performed in the given example are as follows:
-
Firstly, a module named
asyncio
is imported. This module is used to support asynchronous programming. -
An asynchronous function named
main
is defined. This function calls another asynchronous function namedfetch_data
. -
The
main
function uses theawait
keyword to wait for the data from thefetch_data
function to be assigned to thedata
variable. This signifies that thefetch_data
function is asynchronous, and themain
function will pause until it completes. -
Upon completion of the
main
function, thedata
variable is obtained and returned using thereturn
statement. -
Another asynchronous function named
run
is defined. This function calls themain
function and assigns its result to theresult
variable. -
The
run
function displays theresult
variable's value on the screen to show the outcome. -
Yet another asynchronous function named
main_wrapper
is defined. This function creates an asynchronous task with therun
function and awaits the completion of this task. -
Finally, the statement
await main_wrapper()
is used to call themain_wrapper
function, which ensures the execution of all asynchronous processes.
symbol
(str or list, default None): The stock symbol or list of symbols (e.g.'AKBNK'
or['AKBNK','THYAO']
).stock_market_index
(str or list, default None): The index symbol or list of indices (e.g.'XU100'
or['XU100','XBANK']
).start_date
(str, default None): Start date of the data in 'DD-MM-YYYY' format (e.g.'03-01-2023'
).end_date
(str, default None): End date of the data in 'DD-MM-YYYY' format (e.g.31-07-2023
). If not specified, it automatically uses the system date (today's date).frequency
(str, default '1d'): Data frequency ('1d'
: Daily,'1w'
: Weekly,'1m'
: Monthly,'1y'
: Yearly).observation
(str, default 'last'): The desired observation at weekly, monthly and yearly frequencies ('last'
: Last,'mean'
: Average).calculate_return
(bool, default False): Will the return be calculated?log_return
(bool, default True): Will a logarithmic return be calculated?drop_na
(bool, default True): Will missing values be removed?save_to_excel
(bool, default False): Will it be saved in excel file?excel_file_name
(str, default None): The name of the excel file to save to (e.g. 'data.xlsx' or 'data'). If no valid file name is specified, it will be saved as 'data_YYYYMMDD.xlsx' using the system date. If there is another file with the same name in the directory to be saved, it will save with a different name.language
(str, default 'en'): The language of the output ('tr'
: Turkish,'en'
: English).exchange
(str, default 'TL'): Exchange for stock prices ('TL'
: Turkish Lira,'USD'
: US Dollar).
The fetch_data
function returns a pandas data frame.
# Example 1: Get the closing prices of a single stock with a given start date up to the last trading day.
import asyncio
async def main():
symbol = 'GARAN'
start_date = '03-01-2023'
data = await fetch_data(
symbol=symbol,
start_date=start_date
)
return data
async def run():
result = await main()
print(result)
async def main_wrapper():
task = asyncio.create_task(run())
await task
await main_wrapper()
# Example 2: Get the weekly average closing prices of multiple stocks with a given start date up to the last trading day.
import asyncio
async def main():
symbol = ['GARAN', 'THYAO']
start_date = '03-01-2023'
frequency = '1w'
observation = 'mean'
data = await fetch_data(
symbol=symbol,
start_date=start_date,
frequency=frequency,
observation=observation
)
return data
async def run():
result = await main()
print(result)
async def main_wrapper():
task = asyncio.create_task(run())
await task
await main_wrapper()
# Example 3: Get the simple returns of multiple stocks based on monthly USD closing prices with specific start and end dates.
import asyncio
async def main():
symbol = ['GARAN', 'THYAO']
start_date = '01-12-2021'
end_date = '30-12-2022'
frequency = '1m'
calculate_return = True
log_return = False
exchange = 'USD'
data = await fetch_data(
symbol=symbol,
start_date=start_date,
end_date=end_date,
frequency=frequency,
calculate_return=calculate_return,
log_return=log_return,
exchange=exchange
)
return data
async def run():
result = await main()
print(result)
async def main_wrapper():
task = asyncio.create_task(run())
await task
await main_wrapper()
# Example 4: Get the annual average USD closing prices of multiple stocks without removing missing values with specific start and end dates. Also save to excel file without specifying a filename.
import asyncio
async def main():
symbol = ['EUPWR', 'THYAO']
start_date = '02-01-2012'
end_date = '30-12-2022'
frequency = '1y'
drop_na = False
save_to_excel = True
exchange = 'USD'
data = await fetch_data(
symbol=symbol,
start_date=start_date,
end_date=end_date,
frequency=frequency,
drop_na=drop_na,
save_to_excel=save_to_excel,
exchange=exchange
)
return data
async def run():
result = await main()
print(result)
async def main_wrapper():
task = asyncio.create_task(run())
await task
await main_wrapper()
# Note: The EUPWR stock in the example will not appear in the output as it does not have data before 2023.
# Example 5: Get the monthly average USD closing prices of multiple stocks and indices without removing missing values with specific start and end dates. Also save to excel file without specifying a filename.
import asyncio
async def main():
symbol = ['GARAN', 'THYAO']
stock_market_index = ['XU030', 'XBANK']
start_date = '02-01-2012'
end_date = '30-12-2022'
frequency = '1m'
drop_na = False
save_to_excel = True
exchange = 'USD'
data = await fetch_data(
symbol=symbol,
stock_market_index=stock_market_index,
start_date=start_date,
end_date=end_date,
frequency=frequency,
drop_na=drop_na,
save_to_excel=save_to_excel,
exchange=exchange
)
return data
async def run():
result = await main()
print(result)
async def main_wrapper():
task = asyncio.create_task(run())
await task
await main_wrapper()
symbol
(str or list, default None): Stock symbol or list of symbols (e.g.'AKBNK'
or['AKBNK','THYAO']
).start_year
(str, default None): Start year of the financial statements in 'YYYY' format (e.g.'2022'
).end_year
(str, default None): End year of the financial statements in 'YYYY' format (e.g.'2023'
).exchange
(str, default 'TRY'): Exchange for financial statements ('TRY'
: Turkish Lira,'USD'
: US Dollar).financial_group
(str, default '1'): Type of financial statement ('1'
: Series XI NO:29,'2'
: Non-Consolidated IFRS,'3'
: Consolidated IFRS).save_to_excel
(bool, default False): Will it be saved in excel file?language
(str, default 'en'): Language of the outputs ('tr'
: Turkish,'en'
: English).
The fetch_financials
function returns a dictionary.
# Example 1: Get the financial statements for a single stock, and save to excel file.
symbol='THYAO'
start_year='2022'
end_year='2023'
save_to_excel=True
data=fetch_financials(
symbol=symbol,
start_year=start_year,
end_year=end_year,
save_to_excel=save_to_excel
)
# Example 2: Get the financial statements for multiple stocks according to non-consolidated IFRS.
symbols=['AKBNK', 'THYAO']
start_year='2022'
end_year='2023'
financial_group='2'
data=fetch_financials(
symbol=symbols,
start_year=start_year,
end_year=end_year
)
# Example 3: Get financial statements for multiple specified stocks and access the balance sheet of a sample stock.
symbols=['AKBNK', 'THYAO']
start_year='2022'
end_year='2023'
data=fetch_financials(
symbol=symbols,
start_year=start_year,
end_year=end_year
)
# Financial statements of the THYAO stock in the example
thyao_financials=data['THYAO']
# If the financial statements of the requested stock are not available, the data source has not published the table associated with the specified financial_group parameter.
# Example 4: Data stored in a dictionary type can be combined in a data frame as follows.
symbols=['SISE', 'THYAO']
start_year='2018'
language='en'
exchange='USD'
veri = fetch_financials(
symbol=symbols,
start_year=start_year,
language=language,
exchange=exchange
)
merged_data = pd.DataFrame()
for symbol, data in veri.items():
data = data.rename(columns={symbol: 'ITEM'})
data['SYMBOL'] = symbol
merged_data = pd.concat([merged_data, data], ignore_index=True)
df
(pandas DataFrame, default None): The pandas DataFrame with stock data.plot_type
(str, default '1'). Visualization type ('1'
: Line Chart,'2'
: Correlation Heat Matrix,'3'
: Scatter Matrix).normalization
(bool, default False): Will the data be normalized? When set to True the data is scaled between 0 and 1.language
(str, default 'en'): Language of the outputs ('tr'
: Turkish,'en'
: English).**kwargs
: Additional options specific to visualization types. These parameters can be used to make special adjustments for a specific visualization type.- **kwargs Parameters for Visualization Types:
- Line Graph:
linewidth
(float, default 1.5): Line thickness.fontsize
(int, default 12): Title size.figsize
(tuple, default (10, 6)): Size of the graph output.
- Correlation Heat Matrix:
cmap
(str, default 'coolwarm'): Color map.vmin
(float, default -1): The smallest value in the color map.vmax
(float, default 1): The largest value in the color map.fontsize
(int, default 12): Title size.figsize
(tuple, default (10, 6)): Size of the graph output.
- Scatter Matrix:
alpha
(float, default 0.5): Point transparency.fontsize
(int, default 12): Title size.height
(float, default 2.5): Height of each subgraph.aspect
(float, default 1): The width-to-height ratio of each subgraph.
- Line Graph:
- **kwargs Parameters for Visualization Types:
The visualize_data
function represents the data in the pandas data frame with graphs and visual elements.
import asyncio
async def main():
symbol = ['AKBNK', 'THYAO', 'GARAN', 'SISE', 'EREGL', 'BIMAS']
start_date = '01-01-2013'
end_date = '31-07-2023'
data = await fetch_data(
symbol=symbol,
start_date=start_date,
end_date=end_date
)
return data
async def run():
result = await main()
# Example 1: Line chart with normalized prices, thicker lines, increased title size, and output in English.
visualize_data(
df=result,
plot_type='1',
normalization=True,
linewidth=2,
fontsize=14
)
async def main_wrapper():
task = asyncio.create_task(run())
await task
await main_wrapper()
import asyncio
async def main():
symbol = ['AKBNK', 'THYAO', 'GARAN', 'SISE', 'EREGL', 'BIMAS']
start_date = '01-12-2012'
end_date = '31-07-2023'
frequency = '1m'
calculate_return = True
data = await fetch_data(
symbol=symbol,
start_date=start_date,
end_date=end_date,
frequency=frequency,
calculate_return=calculate_return
)
return data
async def run():
result = await main()
# Example 2: Correlation heat matrix with default parameters and output in English.
visualize_data(
df=result,
plot_type='2'
)
async def main_wrapper():
task = asyncio.create_task(run())
await task
await main_wrapper()
import asyncio
async def main():
symbol = ['AKBNK', 'THYAO', 'GARAN']
start_date = '01-12-2012'
end_date = '31-07-2023'
frequency = '1m'
calculate_return = True
data = await fetch_data(
symbol=symbol,
start_date=start_date,
end_date=end_date,
frequency=frequency,
calculate_return=calculate_return
)
return data
async def run():
result = await main()
# Example 3: Scatter matrix with higher transparency, and output in English.
visualize_data(
df=result,
plot_type='3',
alpha=0.1
)
async def main_wrapper():
task = asyncio.create_task(run())
await task
await main_wrapper()
- The library is dependent on the data on IS Investment's website. Therefore, please check the relevant website for the accuracy and continuity of the data: IS Investment
- I welcome your feedback for the development and improvement of the library. Contribute to the GitHub repo: GitHub Repo
- Please report any issues or suggestions by opening a new issue in the "Issue" section of the GitHub repo: GitHub Issues
- First version released.
- Updated condition statements that check parameters in the
veri_cek
function. - Removed the
json
library. - Added
200
HTTP code with a condition to theveri_cek
function and added tracking.
- Added the
veri_gorsel
function, which allows visualization in 3 different data types. - Added parameters to the
veri_cek
function to save pandas DataFrame as excel.
- Resolved the installation error present in version 0.2.0.
- Fixed the Turkish character problem in the documentation.
- Made images that were not visible in the documentation visible.
- The functions were translated into English.
veri_cek
:fetch_data
veri_gorsel
:visualize_data
- Added
fetch_financials
function to fetch financial statements. - Added the ability to get outputs in two languages (English and Turkish) for the functions.
- Updated the
fetch_data
function to fetch both TRY-based and USD-based prices of stocks. - Extended **kwargs parameters for the
visualize_data
function to allow adding extra features. - Updated documentation content to be available in both Turkish and English.
- Changed the
currency
parameter in thefetch_data
function toexchange
. - Removed the dependency on the
selenium
package from thefetch_financials
function. - Updated the
fetch_financials
function to acquire financial statements as a single table. - Renamed the
start_period
andend_period
parameters in thefetch_financials
function tostart_year
andend_year
, respectively. - Added new parameters,
exchange
andfinancial_group
, to thefetch_financials
function. - Enhanced checks and validations in both the
fetch_data
andfetch_financials
functions.
- Added the
stock_market_index
parameter to thefetch_data
function to fetch data for specific stock market indices. - Removed the spaces in the items of the financials fetched with the
fetch_financials
functions.
- Requests sent by the
fetch_data
function will be controlled.
- Fixed a code bug in version 2.1.1.
- Improved the time restriction on sent requests.
- The
fetch_data
function is asynchronous. - The symbol parameter in the
fetch_data
function is limited to 400 symbols. - The way
visualize_data
is executed changed due to its asynchronous structure.
This project is licensed under the MIT License.