Değer Skoru nasıl hesaplanır? Her katman ne yapar? Son formül ne?
V13 — Academic Tier — Final DokümanBistBull'un Değer Skoru tek bir sayı gösterir (ör: 72/100). Ama arka planda bu sayı 5 katmanlı bir zincirden geçer. Her katman bir öncekinin üzerine biner, hiçbiri diğerini bozmaz.
Kalite, Değerleme, Büyüme, Bilanço, Kâr Kalitesi, Hendek, Sermaye → ağırlıklı ortalama → 0-99 puan
Negatif özsermaye, sahte kâr, seyreltme, hype → ceza. Momentum, teknik kırılım, kurumsal akış → İvme skoru.
4 filtre: Döviz Kalkanı, Faiz Direnci, Fiyat Geçişkenliği, TMS 29. Çarpan: 0.70–1.15
3 filtre: Değer Yaratımı (ROE vs Ke), Büyüme Tuzağı (FCF test), Yaşam Döngüsü. Etki: -15 ile +6 puan.
Kullanıcının gördüğü tek sayı. Tüm katmanların birleşik sonucu.
Her hisse 7 boyutta 0-100 arası puanlanır. Her boyutun ağırlığı farklıdır. V11'de bilanço ve kâr kalitesi ağırlıkları artırılmıştır.
| Boyut | Ağırlık | Girdiler | Ne Ölçer? |
|---|---|---|---|
| Kalite | %25 | ROE, ROIC, Net Marj | Şirket kârlı mı, verimli mi? |
| Değerleme | %18 | F/K, PD/DD, FD/FAVÖK, FCF Yield | Ucuz mu pahalı mı? |
| Bilanço | %15 | NB/FAVÖK, D/E, Cari Oran, Altman Z | Borç riski var mı? |
| Kâr Kalitesi | %13 | CFO/NI, FCF Marj, Beneish M | Kâr gerçek mi sahte mi? |
| Büyüme | %12 | Gelir, HBK, FAVÖK büyüme, PEG | Büyüyor mu? |
| Sermaye | %10 | Temettü, FCF, Seyreltme, ROIC | Sermayeyi iyi kullanıyor mu? |
| Hendek | %7 | Marj stabilitesi, Fiyatlama gücü | Rekabet avantajı var mı? |
FA Pure = Σ (boyut_skoru × boyut_ağırlığı) Örnek: Kalite(82)×0.25 + Değerleme(65)×0.18 + ... = 68.3
| Durum | Ceza |
|---|---|
| Negatif özsermaye | -15 |
| Net zarar | -10 |
| Sahte kâr (CFO<0, NI>0) | -12 |
| NB/FAVÖK > 5x | -25 |
| Beneish > -1.5 | -18 |
| Boyut | Ağırlık | Girdiler |
|---|---|---|
| Momentum | %40 | RSI, MA50/200, Hacim, 20g değişim |
| Teknik Kırılım | %35 | 52W High, Golden Cross, BB, MACD |
| Kurumsal Akış | %25 | Kurumsal sahiplik, Hacim+Fiyat |
Değer Skoru = FA × 0.58
+ İvme × gate(FA) × 0.28
+ Valuation Stretch
+ Risk × 0.38
FA < 35 olan hisselerde momentum neredeyse sıfırlanır. Hype koruması. FA ≥ 65 olunca tam etki.
Felsefe: İsviçre'de %1 faizle çalışan bir modeli Türkiye'de %50 faizle kullanmak aptallıktır. Bu katman her şirkete bir "Türkiye çarpanı" uygular.
| Filtre | Ne Ölçer? | Çarpan Aralığı |
|---|---|---|
| Döviz Kalkanı | İhracat oranı, döviz borcu, reel büyüme | 0.75 – 1.15 |
| Faiz Direnci | Efektif borç maliyeti = NB/FAVÖK × %58 | 0.70 – 1.10 |
| Fiyat Geçişkenliği | Marj stabilitesi, operasyonel kaldıraç | 0.80 – 1.10 |
| TMS 29 | Enflasyon muhasebesi sahte kâr tespiti | 0.75 – 1.05 |
Birleşik çarpan = ⁴√(fx × faiz × geçişkenlik × tms29) ← geometrik ortalama Turkey-Adjusted FA = FA Pure × birleşik çarpan
NB/FAVÖK = 3 olan şirket: İsviçre'de 3×%2 = %6 (sorun yok). Türkiye'de 3×%58 = %174 (FAVÖK faizi bile ödeyemiyor). Mevcut sistem bunu "orta risk" diyor, V12 "KIRILGAN" diyor.
Damodaran (NYU Stern) + Greenwald (Columbia) çerçevesi. Türkiye'nin %50 faiz ortamına kalibre edilmiş.
Excess Return = ROE - Ke Türkiye'de Ke = %50 + β×%8 ≈ %58
| Durum | Puan | Not | Etki |
|---|---|---|---|
| ROE ≤ 0 | 5 | F | -10p |
| ROE < %25 | 12 | F | -10p — mevduatın yarısı bile değil |
| ROE < %50 (mevduat) | 25 | D | -7p — değer yıkımı |
| ROE < Ke (%58) | 42 | C | -3p — risk primi yok |
| ROE ≈ Ke | 62 | B | 0p |
| ROE > Ke + %5 | 88 | A | +3p — elit |
Reel büyüme = nominal - %40 enflasyon. FCF negatifken büyüme = nakit kara deliği.
| Durum | Not | Etki |
|---|---|---|
| Reel büyüme + FCF pozitif | A | +3p — Greenwald'un ideali |
| Dengeli büyüme | B | 0p |
| Reel küçülme | D | -3p |
| BÜYÜME TUZAĞI (3+ sinyal) | F | -5p — büyüyor ama nakit yakıyor |
| Faz | Doğru Strateji | Yanlış Yapılırsa |
|---|---|---|
| Genç Büyüme | Yüksek ROIC'le yatırım, düşük temettü OK | Düşük ROIC ama ağır CAPEX → D |
| Olgun | Nakdi dağıt (temettü/buyback) | FCF yüksek ama dağıtmıyor → -5p ceza |
| Düşüş | Nakdi dağıt, yatırımı azalt | Küçülürken ağır yatırım → D |
F/K 5, NB/FAVÖK 4.5x, gelir büyüme %25 (nominal), döviz geliri %5
Neden düştü?
V12: Efektif borç maliyeti FAVÖK'ün %261'i. Döviz geliri yok, kur riski yüksek. TMS 29 kârı şişirmiş.
V13: ROE %15 < mevduat %50 → değer yıkımı (-10). Reel küçülme %-15 (-3). Düşüş fazı (-2).
AI'ın söyleyeceği: "F/K 5 ucuz görünüyor ama parasını bankaya koysan 3.3 kat daha çok kazanırsın. Faizini bile ödeyemiyor. Nominal %25 büyüme aslında reel %-15 küçülme."
F/K 18, NB/FAVÖK -1.5 (net nakit), gelir büyüme %65, döviz %60
V12: Güçlü döviz kalkanı, net nakit, fiyatlama gücü var. V13: ROE %70 > Ke %56 → gerçek excess return. Reel %25 büyüme + FCF pozitif → nakit yaratan büyüme.
engine/ ├── scoring.py ← K1: 7 boyut FA + risk penaltileri ├── scoring_v11.py ← K1+: Non-linear gate, fatal triggers, Ciro/PD ├── technical.py ← K2: İvme (momentum, teknik, kurumsal) ├── turkey_realities.py ← K3: V12 Türkiye Gerçekleri (4 filtre) ├── turkey_enhancements.py ← K3+: Reel büyüme, getiri testi, borç riski ├── academic_layer.py ← K4: V13 Akademik (3 filtre) ← YENİ ├── analysis.py ← HEPSİNİ BİRLEŞTİREN ana fonksiyon └── ... ai/ ├── prompts_v12.py ← AI prompt şablonları (V12 Turkey-aware) ├── engine.py ← AI provider chain (Grok→OpenAI→Anthropic) └── service.py ← AI servis katmanı
| Motor | Ne yapar |
|---|---|
| Radar (Temel) | Tüm likit BIST'i yalnız temel analizle (7 boyut + Türkiye filtresi) puanlayıp kalite/değer sıralar. |
| BullWatch | Temel + hacim + fiyat teyidini birleştirip kademe (EARLY / CONFIRMED / CONVICTION) üretir; çok-faktörlü analiz skorudur. |
| BullAlfa | "İyi şirket" ile "iyi an"ı aynı anda arayan hibrit tarayıcı; kurulum durumu bildirir. |
| Cross Hunter | Teknik kırılım/momentum sinyalleri; her sinyale 1-5 güvenilirlik puanı verir. |
| FaktörLab | Cross-sectional faktör (düşük-vol + momentum + 52h-zirve) taraması; benchmark-kontrollü. |
| CONVICTION skoru | Birden çok bağımsız köşenin (temel/takas/sosyal/içeriden) aynı hisseye işaret etme derecesi; çok-faktörlü analiz skorudur. |
AL, KAÇIN) veri katmanında aynen durur; ekrana çıkarken aşağıdaki tabloyla nötr, durum-bildiren dile çevrilir. Renk (yeşil/kırmızı) analitik yön göstergesidir, metin değişse de korunur.
| İç değer (veri) | Ekran etiketi | Anlamı |
|---|---|---|
AL | Olumlu | Temel güçlü, zamanlama uygun görünüyor |
İZLE / BEKLE | Nötr | Tablo henüz net değil ya da fiyat/zamanlama uygun değil |
KAÇIN | Düşük skor | Veriler zayıf ya da risk işaret ediyor |
tahtacı sell | Olumsuz | Açık pozisyonda çıkış sinyali |
tahtacı hold / caution | Nötr | Pozisyon korunuyor / izlemede |
tier ELİT | En üst bant | Kalite bandının en üstü (~en iyi %5) |
tier GÜÇLÜ | Üst bant | Sağlam şirket |
tier ORTA | Orta bant | Ortalama |
tier ZAYIF | Alt bant | Zayıf görünüm |
tier RİSKLİ | En alt bant | Çok zayıf |
Eşleme tek kaynakta yaşar: static/js/labels.js (BBLabels). Kalite notları (Çok Başarılı / Başarılı / Orta / Zayıf / Riskli) durum tanımıdır, olduğu gibi gösterilir.
| Veri | Kaynak | Gecikme |
|---|---|---|
| Fiyat / hacim | yfinance (Yahoo Finance) | ~15-20 dakika gecikmeli olabilir |
| Mali tablolar | Temel veri sağlayıcı (PIT + tam-fetch) | Çeyreklik; KAP açıklamasına bağlı |
| Yabancı takas | İş Yatırım / borsapy | Günlük / haftalık |
| Sosyal (X) duyarlılık | Grok x_search | Yakın-zamanlı, alıntı-kaynaklı |
| KAP bildirimleri | KAP | Yayınlandıkça |
Backtest, bir kuralı geçmiş veriye uygular — "olsaydı ne olurdu". Güçlüdür ama iki tuzağı vardır: survivorship (bugün var olan hisselerle geçmişi ölçmek) ve aşırı-uydurma (kurala geçmişi ezberletmek). Bu yüzden backtest bir üst-sınırdır, garanti değil.
Forward kayıt, sinyali verildiği anda mühürleyip sonucu ileriye doğru ölçer — seçim anında bilinmeyen geleceği kullanır, dolayısıyla survivorship ve p-hacking barındırmaz. BistBull motorlarının canlı track-record'u bu mantıkla tutulur (picks kaydet → XU100-üstü ölç).
CONVICTION'a ilk geçişi (önceki gün CONVICTION değil, bugün CONVICTION) o hisseyi kaydeder. Kayıt anında giriş/kapanış boştur; kayıt geriye tarihlenemez.Kayıtlar append-only'dir (veritabanı trigger'ları silmeyi ve izinsiz güncellemeyi reddeder). Her gün, o gün mühürlenen kayıtların değişmez alanlarından (kayıt no, motor, config-hash, hisse, kayıt zamanı) bir gun_hash üretilir; günler zincir_hash = SHA-256(önceki + gun_hash) ile zincirlenir. Geçmiş bir kaydı değiştirmek ya da geriye tarihlemek zinciri kırar.
Okuyucu nasıl doğrular? scripts/verify_chain.py zinciri kayıtlardan bağımsız yeniden hesaplar; ✓ (tutarlı) ya da ✗ (ilk uyuşmazlık günü) verir. Ek olarak günlük zincir_hash public bir kayıt deposunun git geçmişine dış sabitleme ile yazılır — böylece değişmezlik terminalin kontrolü dışındaki bir zaman damgasıyla da kanıtlanır.