borsapy 0.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,969 @@
1
+ Metadata-Version: 2.4
2
+ Name: borsapy
3
+ Version: 0.4.0
4
+ Summary: Turkish financial markets data library - yfinance-like API for BIST stocks, forex, crypto, and more
5
+ Project-URL: Homepage, https://github.com/saidsurucu/borsapy
6
+ Project-URL: Documentation, https://github.com/saidsurucu/borsapy#readme
7
+ Project-URL: Repository, https://github.com/saidsurucu/borsapy
8
+ Project-URL: Issues, https://github.com/saidsurucu/borsapy/issues
9
+ Author: Said Surucu
10
+ License: Apache-2.0
11
+ License-File: LICENSE
12
+ Keywords: bist,crypto,finance,forex,market-data,stocks,turkey
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Financial and Insurance Industry
16
+ Classifier: License :: OSI Approved :: Apache Software License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Topic :: Office/Business :: Financial :: Investment
24
+ Requires-Python: >=3.9
25
+ Requires-Dist: beautifulsoup4>=4.12.0
26
+ Requires-Dist: httpx>=0.27.0
27
+ Requires-Dist: lxml>=5.0.0
28
+ Requires-Dist: openpyxl>=3.1.0
29
+ Requires-Dist: pandas>=2.0.0
30
+ Requires-Dist: pydantic>=2.0.0
31
+ Requires-Dist: urllib3>=2.0.0
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
34
+ Requires-Dist: pytest>=7.0.0; extra == 'dev'
35
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
36
+ Description-Content-Type: text/markdown
37
+
38
+ # borsapy
39
+
40
+ [![PyPI version](https://img.shields.io/pypi/v/borsapy)](https://pypi.org/project/borsapy/)
41
+ [![PyPI downloads](https://img.shields.io/pypi/dm/borsapy)](https://pypi.org/project/borsapy/)
42
+ [![Python version](https://img.shields.io/pypi/pyversions/borsapy)](https://pypi.org/project/borsapy/)
43
+ [![License](https://img.shields.io/pypi/l/borsapy)](https://github.com/saidsurucu/borsapy/blob/master/LICENSE)
44
+ [![Documentation](https://img.shields.io/badge/docs-API%20Reference-blue)](https://saidsurucu.github.io/borsapy/borsapy.html)
45
+
46
+ Türk finansal piyasaları için Python veri kütüphanesi. BIST hisseleri, döviz, kripto, yatırım fonları ve ekonomik veriler için yfinance benzeri API.
47
+
48
+ [![Star History Chart](https://api.star-history.com/svg?repos=saidsurucu/borsapy&type=date&legend=top-left)](https://www.star-history.com/#saidsurucu/borsapy&type=date&legend=top-left)
49
+
50
+ ## Kurulum
51
+
52
+ ```bash
53
+ pip install borsapy
54
+ ```
55
+
56
+ ## Hızlı Başlangıç
57
+
58
+ ```python
59
+ import borsapy as bp
60
+
61
+ # Hisse senedi verisi
62
+ hisse = bp.Ticker("THYAO")
63
+ print(hisse.info) # Anlık fiyat ve şirket bilgileri
64
+ print(hisse.history(period="1ay")) # Geçmiş OHLCV verileri
65
+ print(hisse.balance_sheet) # Bilanço
66
+
67
+ # Çoklu hisse
68
+ data = bp.download(["THYAO", "GARAN", "AKBNK"], period="1ay")
69
+ print(data)
70
+
71
+ # Döviz
72
+ usd = bp.FX("USD")
73
+ print(usd.current) # Güncel kur
74
+ print(usd.history(period="1ay")) # Geçmiş veriler
75
+
76
+ # Kripto
77
+ btc = bp.Crypto("BTCTRY")
78
+ print(btc.current) # Güncel fiyat
79
+
80
+ # Yatırım fonu
81
+ fon = bp.Fund("AAK")
82
+ print(fon.info) # Fon bilgileri
83
+
84
+ # Enflasyon
85
+ enf = bp.Inflation()
86
+ print(enf.latest()) # Son TÜFE verileri
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Ticker (Hisse Senedi)
92
+
93
+ `Ticker` sınıfı, BIST hisse senetleri için kapsamlı veri erişimi sağlar.
94
+
95
+ ### Temel Kullanım
96
+
97
+ ```python
98
+ import borsapy as bp
99
+
100
+ hisse = bp.Ticker("THYAO")
101
+
102
+ # Hızlı fiyat bilgisi (cache'den, API çağrısı yapmaz)
103
+ print(hisse.fast_info["last_price"]) # Son fiyat
104
+ print(hisse.fast_info["previous_close"]) # Önceki kapanış
105
+ print(hisse.fast_info["volume"]) # Hacim
106
+ print(hisse.fast_info["market_cap"]) # Piyasa değeri
107
+ print(hisse.fast_info["pe_ratio"]) # F/K oranı
108
+ print(hisse.fast_info["free_float"]) # Halka açıklık oranı
109
+ print(hisse.fast_info["foreign_ratio"]) # Yabancı oranı
110
+
111
+ # Detaylı bilgiler (tüm verileri yükler)
112
+ print(hisse.info["last"]) # Son fiyat
113
+ print(hisse.info["marketCap"]) # Piyasa değeri
114
+ print(hisse.info["trailingPE"]) # F/K oranı
115
+ print(hisse.info["dividendYield"]) # Temettü verimi
116
+ ```
117
+
118
+ ### Fiyat Geçmişi
119
+
120
+ ```python
121
+ # Dönem bazlı
122
+ df = hisse.history(period="1ay") # Son 1 ay
123
+ df = hisse.history(period="3ay") # Son 3 ay
124
+ df = hisse.history(period="1y") # Son 1 yıl
125
+ df = hisse.history(period="max") # Tüm geçmiş
126
+
127
+ # Tarih aralığı
128
+ df = hisse.history(start="2024-01-01", end="2024-06-30")
129
+
130
+ # Farklı zaman dilimleri (interval)
131
+ df = hisse.history(period="1g", interval="1m") # 1 dakikalık mumlar
132
+ df = hisse.history(period="1g", interval="3m") # 3 dakikalık mumlar
133
+ df = hisse.history(period="1g", interval="5m") # 5 dakikalık mumlar
134
+ df = hisse.history(period="1g", interval="15m") # 15 dakikalık mumlar
135
+ df = hisse.history(period="1g", interval="30m") # 30 dakikalık mumlar
136
+ df = hisse.history(period="1g", interval="45m") # 45 dakikalık mumlar
137
+ df = hisse.history(period="5g", interval="1h") # Saatlik mumlar
138
+ df = hisse.history(period="1ay", interval="1d") # Günlük mumlar (varsayılan)
139
+ ```
140
+
141
+ ### Finansal Tablolar
142
+
143
+ ```python
144
+ # Yıllık tablolar
145
+ print(hisse.balance_sheet) # Bilanço
146
+ print(hisse.income_stmt) # Gelir tablosu
147
+ print(hisse.cashflow) # Nakit akış
148
+
149
+ # Çeyreklik tablolar
150
+ print(hisse.quarterly_balance_sheet)
151
+ print(hisse.quarterly_income_stmt)
152
+ print(hisse.quarterly_cashflow)
153
+
154
+ # TTM (Son 12 ay)
155
+ print(hisse.ttm_income_stmt)
156
+ print(hisse.ttm_cashflow)
157
+ ```
158
+
159
+ ### Temettü ve Sermaye Artırımları
160
+
161
+ ```python
162
+ print(hisse.dividends) # Temettü geçmişi
163
+ print(hisse.splits) # Sermaye artırımları
164
+ print(hisse.actions) # Tüm kurumsal işlemler
165
+
166
+ # Geçmiş verilerde temettü ve split
167
+ df = hisse.history(period="1y", actions=True)
168
+ ```
169
+
170
+ ### Ortaklık Yapısı
171
+
172
+ ```python
173
+ print(hisse.major_holders) # Ana ortaklar
174
+ ```
175
+
176
+ ### Analist Verileri
177
+
178
+ ```python
179
+ print(hisse.analyst_price_targets) # Hedef fiyatlar
180
+ print(hisse.recommendations_summary) # AL/TUT/SAT dağılımı
181
+ print(hisse.recommendations) # Detaylı tavsiyeler
182
+ ```
183
+
184
+ ### KAP Bildirimleri
185
+
186
+ ```python
187
+ print(hisse.news) # Son bildirimler
188
+ print(hisse.calendar) # Beklenen açıklamalar
189
+ print(hisse.earnings_dates) # Finansal rapor tarihleri
190
+ ```
191
+
192
+ ### Diğer Bilgiler
193
+
194
+ ```python
195
+ print(hisse.isin) # ISIN kodu
196
+ print(hisse.info["sector"]) # Sektör
197
+ print(hisse.info["industry"]) # Alt sektör
198
+ print(hisse.info["website"]) # Web sitesi
199
+ print(hisse.info["longBusinessSummary"]) # Faaliyet konusu
200
+ ```
201
+
202
+ ---
203
+
204
+ ## Tickers ve download (Çoklu Hisse)
205
+
206
+ Birden fazla hisse için toplu veri çekme.
207
+
208
+ ### Tickers Sınıfı
209
+
210
+ ```python
211
+ import borsapy as bp
212
+
213
+ # Birden fazla hisse
214
+ hisseler = bp.Tickers(["THYAO", "GARAN", "AKBNK"])
215
+
216
+ # Her hissenin bilgilerine erişim
217
+ for sembol in hisseler.symbols:
218
+ ticker = hisseler.tickers[sembol]
219
+ print(f"{sembol}: {ticker.info['last']}")
220
+ ```
221
+
222
+ ### download Fonksiyonu
223
+
224
+ ```python
225
+ # Basit kullanım
226
+ df = bp.download(["THYAO", "GARAN", "AKBNK"], period="1ay")
227
+
228
+ # Ticker bazlı gruplama
229
+ df = bp.download(["THYAO", "GARAN"], period="1ay", group_by="ticker")
230
+
231
+ # Sütun bazlı gruplama (varsayılan)
232
+ df = bp.download(["THYAO", "GARAN"], period="1ay", group_by="column")
233
+ ```
234
+
235
+ ---
236
+
237
+ ## Index (Endeksler)
238
+
239
+ BIST endekslerine erişim - 79 endeks, bileşen listeleri dahil.
240
+
241
+ ### Temel Kullanım
242
+
243
+ ```python
244
+ import borsapy as bp
245
+
246
+ # Mevcut endeksler (33 popüler endeks)
247
+ print(bp.indices())
248
+ # ['XU100', 'XU050', 'XU030', 'XKTUM', 'XK100', 'XK030', 'XBANK', ...]
249
+
250
+ # Detaylı liste (bileşen sayısı ile)
251
+ print(bp.indices(detailed=True))
252
+ # [{'symbol': 'XU100', 'name': 'BIST 100', 'count': 100}, ...]
253
+
254
+ # Tüm BIST endeksleri (79 endeks)
255
+ print(bp.all_indices())
256
+ # [{'symbol': 'X030C', 'name': 'BIST 30 Capped', 'count': 30}, ...]
257
+
258
+ # Endeks verisi
259
+ xu100 = bp.Index("XU100")
260
+ print(xu100.info) # Güncel değer, değişim
261
+ print(xu100.history(period="1ay")) # OHLCV geçmişi
262
+ ```
263
+
264
+ ### Endeks Bileşenleri
265
+
266
+ ```python
267
+ # Endeks içindeki hisseler
268
+ xu030 = bp.Index("XU030")
269
+ print(xu030.components) # [{'symbol': 'AKBNK', 'name': 'AKBANK'}, ...]
270
+ print(xu030.component_symbols) # ['AKBNK', 'ASELS', 'BIMAS', ...]
271
+ print(len(xu030.components)) # 30
272
+
273
+ # Katılım endeksleri
274
+ xk030 = bp.Index("XK030") # BIST Katılım 30
275
+ print(xk030.components) # Faizsiz finans uyumlu 30 hisse
276
+ print(xk030.component_symbols)
277
+
278
+ xktum = bp.Index("XKTUM") # BIST Katılım Tüm
279
+ print(len(xktum.components)) # 218 hisse
280
+ ```
281
+
282
+ ### Desteklenen Endeksler
283
+
284
+ | Kategori | Endeksler |
285
+ |----------|-----------|
286
+ | Ana | XU100, XU050, XU030, XUTUM |
287
+ | Katılım | XKTUM, XK100, XK050, XK030, XKTMT |
288
+ | Sektör | XBANK, XUSIN, XUMAL, XUTEK, XGIDA, XHOLD, ... |
289
+ | Tematik | XSRDK, XKURY, XYLDZ, XSPOR, XGMYO, ... |
290
+ | Şehir | XSIST, XSANK, XSIZM, XSBUR, ... |
291
+
292
+ ---
293
+
294
+ ## FX (Döviz ve Emtia)
295
+
296
+ Döviz kurları ve emtia fiyatları. **65 döviz** desteği.
297
+
298
+ ### Döviz Kurları
299
+
300
+ ```python
301
+ import borsapy as bp
302
+
303
+ usd = bp.FX("USD")
304
+ print(usd.current) # Güncel kur
305
+ print(usd.history(period="1ay")) # Geçmiş veriler
306
+
307
+ # Majör dövizler
308
+ eur = bp.FX("EUR")
309
+ gbp = bp.FX("GBP")
310
+ chf = bp.FX("CHF")
311
+ jpy = bp.FX("JPY")
312
+ cad = bp.FX("CAD")
313
+ aud = bp.FX("AUD")
314
+
315
+ # Diğer dövizler (65 döviz destekleniyor)
316
+ rub = bp.FX("RUB") # Rus Rublesi
317
+ cny = bp.FX("CNY") # Çin Yuanı
318
+ sar = bp.FX("SAR") # Suudi Riyali
319
+ aed = bp.FX("AED") # BAE Dirhemi
320
+ inr = bp.FX("INR") # Hindistan Rupisi
321
+ # ... ve daha fazlası
322
+ ```
323
+
324
+ ### Desteklenen Dövizler
325
+
326
+ | Kategori | Dövizler |
327
+ |----------|----------|
328
+ | Majör | USD, EUR, GBP, CHF, JPY, CAD, AUD, NZD |
329
+ | Avrupa | DKK, SEK, NOK, PLN, CZK, HUF, RON, BGN, HRK, RSD, BAM, MKD, ALL, MDL, UAH, BYR, ISK |
330
+ | Ortadoğu & Afrika | AED, SAR, QAR, KWD, BHD, OMR, JOD, IQD, IRR, LBP, SYP, EGP, LYD, TND, DZD, MAD, ZAR, ILS |
331
+ | Asya & Pasifik | CNY, INR, PKR, LKR, IDR, MYR, THB, PHP, KRW, KZT, AZN, GEL, SGD, HKD, TWD |
332
+ | Amerika | MXN, BRL, ARS, CLP, COP, PEN, UYU, CRC |
333
+ | Diğer | RUB, DVZSP1 (Sepet Kur) |
334
+
335
+ ### Banka Kurları
336
+
337
+ ```python
338
+ import borsapy as bp
339
+
340
+ usd = bp.FX("USD")
341
+
342
+ # Tüm bankaların kurları
343
+ print(usd.bank_rates) # DataFrame: bank, buying, selling, updated
344
+ # bank buying selling updated
345
+ # 0 Akbank 34.85 35.15 2024-01-15 10:30:00
346
+ # 1 Garanti 34.82 35.12 2024-01-15 10:28:00
347
+ # ...
348
+
349
+ # Tek banka kuru
350
+ print(usd.bank_rate("akbank")) # {'buying': 34.85, 'selling': 35.15, ...}
351
+ print(usd.bank_rate("garanti"))
352
+
353
+ # Desteklenen bankalar
354
+ print(bp.banks()) # ['akbank', 'garanti', 'isbank', ...]
355
+ ```
356
+
357
+ ### Altın ve Emtialar
358
+
359
+ ```python
360
+ # Altın (TRY)
361
+ gram_altin = bp.FX("gram-altin")
362
+ ceyrek = bp.FX("ceyrek-altin")
363
+ yarim = bp.FX("yarim-altin")
364
+ tam = bp.FX("tam-altin")
365
+ cumhuriyet = bp.FX("cumhuriyet-altin")
366
+ ata = bp.FX("ata-altin")
367
+
368
+ # Diğer değerli metaller (TRY)
369
+ gumus = bp.FX("gram-gumus")
370
+ ons_altin = bp.FX("ons-altin")
371
+ platin = bp.FX("gram-platin")
372
+
373
+ # Emtia (USD)
374
+ brent = bp.FX("BRENT") # Brent Petrol
375
+ silver = bp.FX("XAG-USD") # Gümüş Ons
376
+ platinum = bp.FX("XPT-USD") # Platin Spot
377
+ palladium = bp.FX("XPD-USD") # Paladyum Spot
378
+
379
+ print(gram_altin.current)
380
+ print(gram_altin.history(period="1ay"))
381
+ ```
382
+
383
+ ### Kurum Fiyatları (Kuyumcu/Banka)
384
+
385
+ ```python
386
+ # Değerli metal kurum fiyatları
387
+ gold = bp.FX("gram-altin")
388
+
389
+ # Tüm kurumların fiyatları
390
+ print(gold.institution_rates)
391
+ # institution institution_name asset buy sell spread
392
+ # 0 altinkaynak Altınkaynak gram-altin 6315.00 6340.00 0.40
393
+ # 1 akbank Akbank gram-altin 6310.00 6330.00 0.32
394
+
395
+ # Tek kurum fiyatı
396
+ print(gold.institution_rate("kapalicarsi"))
397
+ print(gold.institution_rate("akbank"))
398
+
399
+ # Desteklenen emtialar
400
+ print(bp.metal_institutions())
401
+ # ['gram-altin', 'gram-gumus', 'ons-altin', 'gram-platin']
402
+ ```
403
+
404
+ ### Kurum Bazlı Geçmiş (Metal + Döviz)
405
+
406
+ ```python
407
+ # Metal geçmişi
408
+ gold = bp.FX("gram-altin")
409
+ gold.institution_history("akbank", period="1mo") # Akbank 1 aylık
410
+ gold.institution_history("kapalicarsi", period="3mo") # Kapalıçarşı 3 aylık
411
+
412
+ # Döviz geçmişi
413
+ usd = bp.FX("USD")
414
+ usd.institution_history("akbank", period="1mo") # Akbank USD 1 aylık
415
+ usd.institution_history("garanti-bbva", period="5d") # Garanti 5 günlük
416
+
417
+ # 27 kurum destekleniyor (bankalar + kuyumcular)
418
+ # Kuyumcular (kapalicarsi, harem, altinkaynak) OHLC verir
419
+ # Bankalar (akbank, garanti) sadece Close verir
420
+ ```
421
+
422
+ ---
423
+
424
+ ## Crypto (Kripto Para)
425
+
426
+ BtcTurk üzerinden kripto para verileri.
427
+
428
+ ```python
429
+ import borsapy as bp
430
+
431
+ # Mevcut çiftler
432
+ print(bp.crypto_pairs())
433
+
434
+ # Bitcoin/TRY
435
+ btc = bp.Crypto("BTCTRY")
436
+ print(btc.current) # Güncel fiyat
437
+ print(btc.history(period="1ay")) # OHLCV geçmişi
438
+
439
+ # Ethereum/TRY
440
+ eth = bp.Crypto("ETHTRY")
441
+ print(eth.current)
442
+ ```
443
+
444
+ ---
445
+
446
+ ## Fund (Yatırım Fonları)
447
+
448
+ TEFAS üzerinden yatırım fonu verileri.
449
+
450
+ ### Temel Kullanım
451
+
452
+ ```python
453
+ import borsapy as bp
454
+
455
+ # Fon arama
456
+ print(bp.search_funds("banka"))
457
+
458
+ # Fon verisi
459
+ fon = bp.Fund("AAK")
460
+ print(fon.info) # Fon bilgileri
461
+ print(fon.history(period="1ay")) # Fiyat geçmişi
462
+ print(fon.performance) # Performans verileri
463
+ ```
464
+
465
+ ### Varlık Dağılımı
466
+
467
+ ```python
468
+ # Portföy varlık dağılımı
469
+ print(fon.allocation) # Son 7 günlük dağılım
470
+ print(fon.allocation_history(period="3ay")) # Son 3 ay (max ~100 gün)
471
+ # date asset_type asset_name weight
472
+ # 0 2024-01-15 Hisse Senedi Stocks 45.2
473
+ # 1 2024-01-15 Ters-Repo Reverse Repo 30.1
474
+ # ...
475
+
476
+ # info içinde de mevcut (ekstra API çağrısı yok)
477
+ print(fon.info['allocation'])
478
+ print(fon.info['isin']) # ISIN kodu
479
+ print(fon.info['daily_return']) # Günlük getiri
480
+ print(fon.info['weekly_return']) # Haftalık getiri
481
+ print(fon.info['category_rank']) # Kategori sırası (örn: 20/181)
482
+ ```
483
+
484
+ ### Fon Tarama
485
+
486
+ ```python
487
+ # Getiri kriterlerine göre filtrele
488
+ df = bp.screen_funds(fund_type="YAT", min_return_1y=50) # >%50 1Y getiri
489
+ df = bp.screen_funds(fund_type="EMK", min_return_ytd=20) # Emeklilik fonları
490
+ df = bp.screen_funds(min_return_1m=5) # Son 1 ayda >%5
491
+
492
+ # Fon tipleri: YAT (yatırım), EMK (emeklilik), None (tümü)
493
+ ```
494
+
495
+ ### Fon Karşılaştırma
496
+
497
+ ```python
498
+ # Birden fazla fonu karşılaştır (max 10)
499
+ result = bp.compare_funds(["AAK", "TTE", "AFO"])
500
+
501
+ print(result['funds']) # Fon detayları listesi
502
+ print(result['rankings']) # Sıralamalar
503
+ # by_return_1y: ['AFO', 'TTE', 'AAK']
504
+ # by_size: ['AFO', 'TTE', 'AAK']
505
+ # by_risk_asc: ['AAK', 'TTE', 'AFO']
506
+
507
+ print(result['summary']) # Özet
508
+ # fund_count: 3
509
+ # total_size: 23554985554.72
510
+ # avg_return_1y: 53.65
511
+ # best_return_1y: 100.84
512
+ # worst_return_1y: 28.15
513
+ ```
514
+
515
+ ### Risk Metrikleri
516
+
517
+ ```python
518
+ fon = bp.Fund("YAY")
519
+
520
+ # Sharpe oranı (10Y tahvil faizi ile)
521
+ print(fon.sharpe_ratio()) # 1Y Sharpe
522
+ print(fon.sharpe_ratio(period="3y")) # 3Y Sharpe
523
+
524
+ # Tüm risk metrikleri
525
+ metrics = fon.risk_metrics(period="1y")
526
+ print(metrics['annualized_return']) # Yıllık getiri (%)
527
+ print(metrics['annualized_volatility']) # Yıllık volatilite (%)
528
+ print(metrics['sharpe_ratio']) # Sharpe oranı
529
+ print(metrics['sortino_ratio']) # Sortino oranı (downside risk)
530
+ print(metrics['max_drawdown']) # Maksimum düşüş (%)
531
+
532
+ # Uzun dönem desteği
533
+ fon.history(period="3y") # 3 yıllık veri
534
+ fon.history(period="5y") # 5 yıllık veri
535
+ fon.history(period="max") # Tüm veri (5 yıla kadar)
536
+ ```
537
+
538
+ ---
539
+
540
+ ## Inflation (Enflasyon)
541
+
542
+ TCMB enflasyon verileri.
543
+
544
+ ```python
545
+ import borsapy as bp
546
+
547
+ enf = bp.Inflation()
548
+
549
+ # Son TÜFE verileri (Tüketici Fiyat Endeksi)
550
+ print(enf.latest())
551
+ print(enf.tufe()) # TÜFE geçmişi
552
+
553
+ # ÜFE verileri (Üretici Fiyat Endeksi)
554
+ print(enf.ufe())
555
+
556
+ # Enflasyon hesaplayıcı
557
+ # 100.000 TL'nin 2020-01'den 2024-01'e değeri
558
+ sonuc = enf.calculate(100000, "2020-01", "2024-01")
559
+ print(sonuc)
560
+ ```
561
+
562
+ ---
563
+
564
+ ## VIOP (Vadeli İşlem ve Opsiyon)
565
+
566
+ İş Yatırım üzerinden vadeli işlem ve opsiyon verileri.
567
+
568
+ ```python
569
+ import borsapy as bp
570
+
571
+ viop = bp.VIOP()
572
+
573
+ # Tüm vadeli işlem kontratları
574
+ print(viop.futures)
575
+
576
+ # Tüm opsiyonlar
577
+ print(viop.options)
578
+
579
+ # Vadeli işlem alt kategorileri
580
+ print(viop.stock_futures) # Pay vadeli
581
+ print(viop.index_futures) # Endeks vadeli
582
+ print(viop.currency_futures) # Döviz vadeli
583
+ print(viop.commodity_futures) # Emtia vadeli
584
+
585
+ # Opsiyon alt kategorileri
586
+ print(viop.stock_options) # Pay opsiyonları
587
+ print(viop.index_options) # Endeks opsiyonları
588
+
589
+ # Sembol bazlı arama
590
+ print(viop.get_by_symbol("THYAO")) # THYAO'nun tüm türevleri
591
+ ```
592
+
593
+ ---
594
+
595
+ ## Bond (Tahvil/Bono)
596
+
597
+ Türk devlet tahvili faiz oranları.
598
+
599
+ ```python
600
+ import borsapy as bp
601
+
602
+ # Tüm tahvil faizleri
603
+ print(bp.bonds())
604
+ # name maturity yield change change_pct
605
+ # 0 2 Yıllık Tahvil 2Y 26.42 0.40 1.54
606
+ # 1 5 Yıllık Tahvil 5Y 27.15 0.35 1.31
607
+ # 2 10 Yıllık Tahvil 10Y 28.03 0.42 1.52
608
+
609
+ # Tek tahvil
610
+ bond = bp.Bond("10Y") # 2Y, 5Y, 10Y
611
+ print(bond.yield_rate) # Faiz oranı (örn: 28.03)
612
+ print(bond.yield_decimal) # Ondalık (örn: 0.2803)
613
+ print(bond.change_pct) # Günlük değişim (%)
614
+ print(bond.info) # Tüm bilgiler
615
+
616
+ # Risk-free rate (DCF hesaplamaları için)
617
+ rfr = bp.risk_free_rate() # 10Y faiz oranı (ondalık)
618
+ print(rfr) # 0.2803
619
+ ```
620
+
621
+ ---
622
+
623
+ ## EconomicCalendar (Ekonomik Takvim)
624
+
625
+ Ekonomik olaylar ve göstergeler.
626
+
627
+ ```python
628
+ import borsapy as bp
629
+
630
+ cal = bp.EconomicCalendar()
631
+
632
+ # Bu haftanın olayları
633
+ df = cal.events(period="1w")
634
+ # Date Time Country Importance Event Actual Forecast Previous
635
+ # 0 2024-01-15 10:00 Türkiye high İşsizlik Oranı (Kas) 9.2% 9.3% 9.1%
636
+ # 1 2024-01-16 14:30 ABD high Perakende Satışlar (Ara) 0.6% 0.4% 0.3%
637
+
638
+ # Filtreleme
639
+ df = cal.events(period="1ay", country="TR") # Sadece Türkiye
640
+ df = cal.events(period="1w", importance="high") # Sadece önemli
641
+ df = cal.events(country="TR", importance="high") # TR + önemli
642
+
643
+ # Kısayollar
644
+ df = cal.today() # Bugünkü olaylar
645
+ df = cal.this_week() # Bu hafta
646
+ df = cal.this_month() # Bu ay
647
+
648
+ # Fonksiyon olarak
649
+ df = bp.economic_calendar(period="1w", country="TR")
650
+
651
+ # Desteklenen ülkeler
652
+ # TR (Türkiye), US (ABD), EU (Euro Bölgesi), DE (Almanya),
653
+ # GB (İngiltere), JP (Japonya), CN (Çin)
654
+
655
+ # Önem seviyeleri: high, medium, low
656
+ ```
657
+
658
+ ---
659
+
660
+ ## Screener (Hisse Tarama)
661
+
662
+ BIST hisselerini 40+ kritere göre filtreleme (İş Yatırım API).
663
+
664
+ ### Hızlı Başlangıç
665
+
666
+ ```python
667
+ import borsapy as bp
668
+
669
+ # Hazır şablonlar
670
+ df = bp.screen_stocks(template="high_dividend") # Temettü verimi > %2
671
+ df = bp.screen_stocks(template="low_pe") # F/K < 10
672
+ df = bp.screen_stocks(template="high_roe") # ROE > %15
673
+ df = bp.screen_stocks(template="high_upside") # Getiri potansiyeli > 0
674
+
675
+ # Doğrudan filtreler
676
+ df = bp.screen_stocks(pe_max=10) # F/K en fazla 10
677
+ df = bp.screen_stocks(dividend_yield_min=3) # Temettü verimi min %3
678
+ df = bp.screen_stocks(roe_min=20, pb_max=2) # ROE > %20, PD/DD < 2
679
+
680
+ # Sektör/endeks ile kombine
681
+ df = bp.screen_stocks(sector="Bankacılık", dividend_yield_min=3)
682
+ df = bp.screen_stocks(sector="Holding", pe_max=8)
683
+ ```
684
+
685
+ ### Mevcut Şablonlar
686
+
687
+ | Şablon | Açıklama | Kriter |
688
+ |--------|----------|--------|
689
+ | `small_cap` | Küçük şirketler | Piyasa değeri < ~43B TL |
690
+ | `mid_cap` | Orta boy şirketler | Piyasa değeri 43B-215B TL |
691
+ | `large_cap` | Büyük şirketler | Piyasa değeri > 215B TL |
692
+ | `high_dividend` | Yüksek temettü | Temettü verimi > %2 |
693
+ | `low_pe` | Düşük F/K | F/K < 10 |
694
+ | `high_roe` | Yüksek ROE | ROE > %15 |
695
+ | `high_upside` | Pozitif potansiyel | Getiri potansiyeli > 0 |
696
+ | `low_upside` | Negatif potansiyel | Getiri potansiyeli < 0 |
697
+ | `high_volume` | Yüksek hacim | 3 aylık hacim > $1M |
698
+ | `low_volume` | Düşük hacim | 3 aylık hacim < $0.5M |
699
+ | `high_net_margin` | Yüksek kar marjı | Net kar marjı > %10 |
700
+ | `high_return` | Haftalık artış | 1 hafta getiri > 0 |
701
+ | `high_foreign_ownership` | Yüksek yabancı oranı | Yabancı oranı > %30 |
702
+ | `buy_recommendation` | AL tavsiyesi | Analist tavsiyesi: AL |
703
+ | `sell_recommendation` | SAT tavsiyesi | Analist tavsiyesi: SAT |
704
+
705
+ ### Fluent API (Gelişmiş Kullanım)
706
+
707
+ ```python
708
+ screener = bp.Screener()
709
+
710
+ # Değerleme filtreleri
711
+ screener.add_filter("pe", max=15) # F/K < 15
712
+ screener.add_filter("pb", max=2) # PD/DD < 2
713
+ screener.add_filter("ev_ebitda", max=8) # FD/FAVÖK < 8
714
+
715
+ # Temettü filtresi
716
+ screener.add_filter("dividend_yield", min=3) # Temettü verimi > %3
717
+
718
+ # Karlılık filtreleri
719
+ screener.add_filter("roe", min=15) # ROE > %15
720
+ screener.add_filter("net_margin", min=10) # Net kar marjı > %10
721
+
722
+ # Piyasa değeri (TL, milyon)
723
+ screener.add_filter("market_cap", min=10000) # > 10 milyar TL
724
+
725
+ # Getiri filtreleri
726
+ screener.add_filter("return_1w", min=0) # Haftalık getiri pozitif
727
+ screener.add_filter("return_1m", min=5) # Aylık getiri > %5
728
+
729
+ # Sektör/endeks/tavsiye
730
+ screener.set_sector("Bankacılık")
731
+ screener.set_index("BIST 100")
732
+ screener.set_recommendation("AL") # AL, TUT, SAT
733
+
734
+ results = screener.run()
735
+ ```
736
+
737
+ ### Tüm Filtre Kriterleri
738
+
739
+ #### Fiyat ve Piyasa Değeri
740
+ | Kriter | Açıklama |
741
+ |--------|----------|
742
+ | `price` | Kapanış fiyatı (TL) |
743
+ | `market_cap` | Piyasa değeri (mn TL) |
744
+ | `market_cap_usd` | Piyasa değeri (mn $) |
745
+ | `float_ratio` | Halka açıklık oranı (%) |
746
+ | `float_market_cap` | Halka açık piyasa değeri (mn $) |
747
+
748
+ #### Değerleme Çarpanları
749
+ | Kriter | Açıklama |
750
+ |--------|----------|
751
+ | `pe` | Cari F/K (Fiyat/Kazanç) |
752
+ | `pb` | Cari PD/DD (Piyasa Değeri/Defter Değeri) |
753
+ | `ev_ebitda` | Cari FD/FAVÖK |
754
+ | `ev_sales` | Cari FD/Satışlar |
755
+ | `pe_2025` | 2025 tahmini F/K |
756
+ | `pb_2025` | 2025 tahmini PD/DD |
757
+ | `ev_ebitda_2025` | 2025 tahmini FD/FAVÖK |
758
+ | `pe_hist_avg` | Tarihsel ortalama F/K |
759
+ | `pb_hist_avg` | Tarihsel ortalama PD/DD |
760
+
761
+ #### Temettü
762
+ | Kriter | Açıklama |
763
+ |--------|----------|
764
+ | `dividend_yield` | 2024 temettü verimi (%) |
765
+ | `dividend_yield_2025` | 2025 tahmini temettü verimi (%) |
766
+ | `dividend_yield_5y_avg` | 5 yıllık ortalama temettü verimi (%) |
767
+
768
+ #### Karlılık
769
+ | Kriter | Açıklama |
770
+ |--------|----------|
771
+ | `roe` | Cari ROE (%) |
772
+ | `roa` | Cari ROA (%) |
773
+ | `net_margin` | 2025 net kar marjı (%) |
774
+ | `ebitda_margin` | 2025 FAVÖK marjı (%) |
775
+ | `roe_2025` | 2025 tahmini ROE |
776
+ | `roa_2025` | 2025 tahmini ROA |
777
+
778
+ #### Getiri (Relatif - Endekse Göre)
779
+ | Kriter | Açıklama |
780
+ |--------|----------|
781
+ | `return_1d` | 1 gün relatif getiri (%) |
782
+ | `return_1w` | 1 hafta relatif getiri (%) |
783
+ | `return_1m` | 1 ay relatif getiri (%) |
784
+ | `return_1y` | 1 yıl relatif getiri (%) |
785
+ | `return_ytd` | Yıl başından beri relatif getiri (%) |
786
+
787
+ #### Getiri (TL Bazlı)
788
+ | Kriter | Açıklama |
789
+ |--------|----------|
790
+ | `return_1d_tl` | 1 gün TL getiri (%) |
791
+ | `return_1w_tl` | 1 hafta TL getiri (%) |
792
+ | `return_1m_tl` | 1 ay TL getiri (%) |
793
+ | `return_1y_tl` | 1 yıl TL getiri (%) |
794
+ | `return_ytd_tl` | Yıl başından beri TL getiri (%) |
795
+
796
+ #### Hacim ve Likidite
797
+ | Kriter | Açıklama |
798
+ |--------|----------|
799
+ | `volume_3m` | 3 aylık ortalama hacim (mn $) |
800
+ | `volume_12m` | 12 aylık ortalama hacim (mn $) |
801
+
802
+ #### Yabancı ve Hedef Fiyat
803
+ | Kriter | Açıklama |
804
+ |--------|----------|
805
+ | `foreign_ratio` | Yabancı oranı (%) |
806
+ | `foreign_ratio_1w_change` | Yabancı oranı 1 haftalık değişim (baz puan) |
807
+ | `foreign_ratio_1m_change` | Yabancı oranı 1 aylık değişim (baz puan) |
808
+ | `target_price` | Hedef fiyat (TL) |
809
+ | `upside_potential` | Getiri potansiyeli (%) |
810
+
811
+ #### Endeks Ağırlıkları
812
+ | Kriter | Açıklama |
813
+ |--------|----------|
814
+ | `bist100_weight` | BIST 100 endeks ağırlığı |
815
+ | `bist50_weight` | BIST 50 endeks ağırlığı |
816
+ | `bist30_weight` | BIST 30 endeks ağırlığı |
817
+
818
+ ### Örnek Stratejiler
819
+
820
+ ```python
821
+ import borsapy as bp
822
+
823
+ # Değer Yatırımı: Düşük çarpanlar, yüksek temettü
824
+ screener = bp.Screener()
825
+ screener.add_filter("pe", max=10)
826
+ screener.add_filter("pb", max=1.5)
827
+ screener.add_filter("dividend_yield", min=4)
828
+ value_stocks = screener.run()
829
+
830
+ # Büyüme Yatırımı: Yüksek ROE, pozitif momentum
831
+ screener = bp.Screener()
832
+ screener.add_filter("roe", min=20)
833
+ screener.add_filter("return_1m", min=0)
834
+ screener.add_filter("market_cap", min=50000) # Büyük şirketler (>50B TL)
835
+ growth_stocks = screener.run()
836
+
837
+ # Temettü Avcısı: Banka hisseleri, yüksek temettü
838
+ df = bp.screen_stocks(
839
+ sector="Bankacılık",
840
+ dividend_yield_min=5,
841
+ pe_max=6
842
+ )
843
+
844
+ # Yabancı Takibi: Yabancıların ilgi gösterdiği hisseler
845
+ screener = bp.Screener()
846
+ screener.add_filter("foreign_ratio", min=40)
847
+ screener.add_filter("foreign_ratio_1m_change", min=1) # Son 1 ayda artan
848
+ foreign_favorites = screener.run()
849
+
850
+ # Analist Favorileri: AL tavsiyeli, yüksek potansiyel
851
+ df = bp.screen_stocks(
852
+ template="buy_recommendation",
853
+ upside_potential_min=20
854
+ )
855
+ ```
856
+
857
+ ### Yardımcı Fonksiyonlar
858
+
859
+ ```python
860
+ # Tüm filtre kriterleri (API'den)
861
+ print(bp.screener_criteria())
862
+ # [{'id': '7', 'name': 'Kapanış (TL)', 'min': '1.1', 'max': '14087.5'}, ...]
863
+
864
+ # Sektör listesi (53 sektör)
865
+ print(bp.sectors())
866
+ # ['Bankacılık', 'Holding ve Yatırım', 'Enerji', 'Gıda', ...]
867
+
868
+ # Endeks listesi
869
+ print(bp.stock_indices())
870
+ # ['BIST 30', 'BIST 50', 'BIST 100', 'BIST BANKA', ...]
871
+ ```
872
+
873
+ ### Çıktı Formatı
874
+
875
+ ```python
876
+ df = bp.screen_stocks(template="high_dividend")
877
+ print(df.columns)
878
+ # Index(['symbol', 'name', 'criteria_7', 'criteria_33', ...], dtype='object')
879
+ #
880
+ # symbol: Hisse kodu (THYAO, GARAN, vb.)
881
+ # name: Şirket adı
882
+ # criteria_X: İlgili kriter değerleri (X = kriter ID)
883
+ ```
884
+
885
+ ---
886
+
887
+ ## Şirket Listesi
888
+
889
+ BIST şirketlerini listeleme ve arama.
890
+
891
+ ```python
892
+ import borsapy as bp
893
+
894
+ # Tüm şirketler
895
+ df = bp.companies()
896
+ print(df)
897
+
898
+ # Şirket arama
899
+ sonuc = bp.search_companies("banka")
900
+ print(sonuc)
901
+ ```
902
+
903
+ ---
904
+
905
+ ## Veri Kaynakları
906
+
907
+ | Modül | Kaynak | Açıklama |
908
+ |-------|--------|----------|
909
+ | Ticker | İş Yatırım, Paratic, KAP, hedeffiyat.com.tr, isinturkiye.com.tr | Hisse verileri, finansallar, bildirimler, analist hedefleri, ISIN |
910
+ | Index | Paratic | BIST endeksleri |
911
+ | FX | canlidoviz.com, doviz.com | 65 döviz, altın, emtia (canlidoviz); banka/kurum kurları (doviz.com) |
912
+ | Crypto | BtcTurk | Kripto para verileri |
913
+ | Fund | TEFAS | Yatırım fonu verileri, varlık dağılımı, tarama/karşılaştırma |
914
+ | Inflation | TCMB | Enflasyon verileri |
915
+ | VIOP | İş Yatırım | Vadeli işlem ve opsiyon |
916
+ | Bond | doviz.com | Devlet tahvili faiz oranları (2Y, 5Y, 10Y) |
917
+ | EconomicCalendar | doviz.com | Ekonomik takvim (TR, US, EU, DE, GB, JP, CN) |
918
+ | Screener | İş Yatırım | Hisse tarama (İş Yatırım gelişmiş hisse arama) |
919
+
920
+ ---
921
+
922
+ ## yfinance ile Karşılaştırma
923
+
924
+ ### Ortak Özellikler
925
+ - `Ticker`, `Tickers` sınıfları
926
+ - `download()` fonksiyonu
927
+ - `info`, `history()`, finansal tablolar
928
+ - Temettü, split, kurumsal işlemler
929
+ - Analist hedefleri ve tavsiyeler
930
+
931
+ ### borsapy'ye Özgü
932
+ - **FX**: Döviz ve emtia verileri + banka kurları (doviz.com)
933
+ - **Crypto**: Kripto para (BtcTurk)
934
+ - **Fund**: Yatırım fonları + varlık dağılımı + tarama/karşılaştırma (TEFAS)
935
+ - **Inflation**: Enflasyon verileri ve hesaplayıcı (TCMB)
936
+ - **VIOP**: Vadeli işlem ve opsiyon (İş Yatırım)
937
+ - **Bond**: Devlet tahvili faiz oranları + risk_free_rate (doviz.com)
938
+ - **EconomicCalendar**: Ekonomik takvim - 7 ülke desteği (doviz.com)
939
+ - **Screener**: Hisse tarama - 50+ kriter, sektör/endeks filtreleme (İş Yatırım)
940
+ - **KAP Entegrasyonu**: Resmi bildirimler ve takvim
941
+
942
+ ---
943
+
944
+ ## Katkıda Bulunma
945
+
946
+ Ek özellik istekleri ve öneriler için [GitHub Discussions](https://github.com/saidsurucu/borsapy/discussions) üzerinden tartışma açabilirsiniz.
947
+
948
+ ---
949
+
950
+ ## Sorumluluk Reddi
951
+
952
+ Bu kütüphane aracılığıyla erişilen veriler, ilgili veri kaynaklarına aittir:
953
+ - **İş Yatırım** (isyatirim.com.tr): Finansal tablolar, hisse tarama, VIOP
954
+ - **Paratic** (paratic.com): Hisse OHLCV, endeksler
955
+ - **KAP** (kap.org.tr): Şirket bildirimleri, ortaklık yapısı
956
+ - **TCMB**: Enflasyon verileri
957
+ - **BtcTurk**: Kripto para verileri
958
+ - **TEFAS** (tefas.gov.tr): Yatırım fonu verileri
959
+ - **doviz.com**: Döviz kurları, banka kurları, ekonomik takvim, tahvil faizleri
960
+ - **hedeffiyat.com.tr**: Analist hedef fiyatları
961
+ - **isinturkiye.com.tr**: ISIN kodları
962
+
963
+ Kütüphane yalnızca kişisel kullanım amacıyla hazırlanmıştır ve veriler ticari amaçlarla kullanılamaz.
964
+
965
+ ---
966
+
967
+ ## Lisans
968
+
969
+ Apache 2.0