İNDİKATÖR TABLOSU RENK DEĞERLEME KOŞULLARI TABLOSU
//@version=5
indicator("Temel Analiz Değerlendirme", overlay = true)
// KULLANICI AYARLARI - Tablo pozisyonu ve boyutu
tabloPozisyonu = input.string("top_right", "Tablo Pozisyonu", options = ["top_left", "top_center", "top_right", "middle_left", "middle_center", "middle_right", "bottom_left", "bottom_center", "bottom_right"])
tabloGenisligi = input.int(2, "Tablo Genişliği (Sütun Sayısı)", minval=1, maxval=5)
tabloYuksekligi = input.int(15, "Tablo Yüksekliği (Satır Sayısı)", minval=5, maxval=30)
tabloArkaPlanRengi = input.color(color.gray, "Tablo Arka Plan Rengi")
tabloKenarlikGenisligi = input.int(1, "Tablo Kenarlık Genişliği", minval=0, maxval=5)
// Yazı boyutu ayarı
yaziBoyutu = input.string("normal", "Yazı Boyutu", options = ["tiny", "small", "normal", "large", "huge"])
// Tabloyu tanimla - Kullanıcı ayarlarına göre
var tbl = table.new(position = tabloPozisyonu, columns = tabloGenisligi, rows = tabloYuksekligi, bgcolor = tabloArkaPlanRengi, border_width = tabloKenarlikGenisligi)
// Finansal Verileri Cekme
sembol = syminfo.tickerid
// Ornek Finansal Veri Cekme ve Hesaplamalar
toplamHisseSenedi = request.financial(sembol, "TOTAL_SHARES_OUTSTANDING", "FQ")
piyasaDegeri = toplamHisseSenedi * close
hisseBasiKarak = request.financial(sembol, "EARNINGS_PER_SHARE", "TTM")
kazancVerimi = (hisseBasiKarak / close) * 100
hisseBasiDefterDegeri = request.financial(sembol, "BOOK_VALUE_PER_SHARE", "FQ")
fiyatDefterOrani = close / hisseBasiDefterDegeri
sulandirilmisHisseSenedi = request.financial(sembol, "DILUTED_SHARES_OUTSTANDING", "FQ")
isletmeFaaliyetleriNakitAkisi = request.financial(sembol, "CASH_F_OPERATING_ACTIVITIES", "TTM")
fiyatNakitAkisOrani = close * sulandirilmisHisseSenedi / isletmeFaaliyetleriNakitAkisi
fkOrani = close / hisseBasiKarak
hisseBasiSerbestNakitAkisi = request.financial(sembol, "FREE_CASH_FLOW_PER_SHARE", "TTM")
fiyatSerbestNakitAkisOrani = close / hisseBasiSerbestNakitAkisi
toplamGelir = request.financial(sembol, "TOTAL_REVENUE", "TTM")
fiyatSatisOrani = piyasaDegeri / toplamGelir
hisseBasiMaddiDefterDegeri = request.financial(sembol, "BOOK_TANGIBLE_PER_SHARE", "FQ")
fiyatMaddiDefterOrani = close / hisseBasiMaddiDefterDegeri
toplamBorc = request.financial(sembol, "TOTAL_DEBT", "FQ")
toplamOzsermaye = request.financial(sembol, "TOTAL_EQUITY", "FQ")
borcOzsermayeOrani = toplamBorc / toplamOzsermaye
netGelir = request.financial(sembol, "NET_INCOME", "TTM")
ozsermayeKarliligi = (netGelir / toplamOzsermaye) * 100
donenVarliklar = request.financial(sembol, "TOTAL_CURRENT_ASSETS", "FQ")
kisaVadeliYukumlulukler = request.financial(sembol, "TOTAL_CURRENT_LIABILITIES", "FQ")
asitTestOrani = (donenVarliklar - request.financial(sembol, "INVENTORY_FINISHED_GOODS", "FQ")) / kisaVadeliYukumlulukler
faaliyetGeliri = request.financial(sembol, "OPER_INCOME", "TTM")
faaliyetMarji = (faaliyetGeliri / toplamGelir) * 100
nakitVeBenzerleri = request.financial(sembol, "CASH_N_EQUIVALENTS", "FQ")
girisimDegeri = piyasaDegeri + toplamBorc - nakitVeBenzerleri
fvok = request.financial(sembol, "EBIT", "TTM")
faizGideri = request.financial(sembol, "INTEREST_EXPENSE_ON_DEBT", "TTM")
faizKarsilamaOrani = fvok / faizGideri
satislarinMaliyeti = request.financial(sembol, "COST_OF_GOODS", "TTM")
brutKarMarji = ((toplamGelir - satislarinMaliyeti) / toplamGelir) * 100
netBorcGeriOdeme = request.financial(sembol, "REDUCTION_OF_LONG_TERM_DEBT", "TTM")
yeniBorc = request.financial(sembol, "SUPPLYING_OF_LONG_TERM_DEBT", "TTM")
ozsermayeyeSerbestNakitAkisi = isletmeFaaliyetleriNakitAkisi - netBorcGeriOdeme + yeniBorc
hisseBasiTemettu = request.financial(sembol, "DPS_COMMON_STOCK_PRIM_ISSUE", "TTM")
temettuVerimi = (hisseBasiTemettu / close) * 100
// ECONOMIC PROFIT (EKONOMIK KAR) HESAPLAMALARI
yatirilanSermaye = toplamOzsermaye + toplamBorc - nakitVeBenzerleri
vergiOrani = 0.20
nopat = fvok * (1 - vergiOrani)
roic = (nopat / yatirilanSermaye) * 100
varsayilanWACC = input.float(10.0, "Varsayilan WACC (EKONOMIK KAR) (%)", minval=0, maxval=30, step=0.5)
wacc = varsayilanWACC
ekonomikKar = roic - wacc
// Ekonomik Kar degerlendirmesi
ekonomikKarYorum = ekonomikKar > 0 ? "Deger Yaratiyor (Pozitif)" : ekonomikKar < 0 ? "Deger Yok Ediyor (Negatif)" : "Notr (Sifir)"
ekonomikKarRengi = ekonomikKar > 0 ? color.new(color.green, 50) : ekonomikKar < 0 ? color.new(color.red, 50) : color.new(color.yellow, 50)
// RENK FONKSİYONLARI - İsteğe göre düzenlendi
// 1. Faiz Karşılama Oranı (>1.5 yeşil, altı kırmızı)
renkFaizKarsilama(deger) =>
deger > 1.5 ? color.new(color.green, 50) : color.new(color.red, 50)
// 2. Brüt Kar Marjı (>%20 yeşil, altı kırmızı)
renkBrutKarMarji(deger) =>
deger > 20 ? color.new(color.green, 50) : color.new(color.red, 50)
// 3. Temettü Verimi (>%2 yeşil, altı kırmızı)
renkTemettuVerimi(deger) =>
deger > 2 ? color.new(color.green, 50) : color.new(color.red, 50)
// 4. Fiyat/Defter Değeri (0.5-3 arası yeşil, dışı kırmızı)
renkFiyatDefter(deger) =>
(deger >= 0.5 and deger <= 3) ? color.new(color.green, 50) : color.new(color.red, 50)
// 5. Fiyat/Nakit Akışı (5-15 arası yeşil, dışı kırmızı)
renkFiyatNakitAkis(deger) =>
(deger >= 5 and deger <= 15) ? color.new(color.green, 50) : color.new(color.red, 50)
// 6. Fiyat/Serbest Nakit Akışı (10-20 arası yeşil, dışı kırmızı)
renkFiyatSerbestNakit(deger) =>
(deger >= 10 and deger <= 20) ? color.new(color.green, 50) : color.new(color.red, 50)
// 7. Fiyat/Kazanç (<10 yeşil, üstü kırmızı)
renkFK(deger) =>
deger < 10 ? color.new(color.green, 50) : color.new(color.red, 50)
// 8. Borç/Özsermaye (<2 yeşil, üstü kırmızı)
renkBorcOzsermaye(deger) =>
deger < 2 ? color.new(color.green, 50) : color.new(color.red, 50)
// 9. Özsermaye Karlılığı (>%15 yeşil, altı kırmızı)
renkROE(deger) =>
deger > 15 ? color.new(color.green, 50) : color.new(color.red, 50)
// 10. Asit-Test Oranı (0.5-1 arası yeşil, dışı kırmızı)
renkAsitTest(deger) =>
(deger >= 0.5 and deger <= 1) ? color.new(color.green, 50) : color.new(color.red, 50)
// 11. Faaliyet Marjı (>%15 yeşil, altı kırmızı)
renkFaaliyetMarji(deger) =>
deger > 15 ? color.new(color.green, 50) : color.new(color.red, 50)
// 12. Girişim Değeri ve Özsermayeye Serbest Nakit Akışı (her zaman yeşil)
renkHepYesil(deger) =>
color.new(color.green, 50)
// YEŞİL SAYISINI HESAPLA
yesilSayisi = 0
// Her bir metrik için yeşil mi kontrol et
yesilSayisi := yesilSayisi + (faizKarsilamaOrani > 1.5 ? 1 : 0)
yesilSayisi := yesilSayisi + (brutKarMarji > 20 ? 1 : 0)
yesilSayisi := yesilSayisi + (temettuVerimi > 2 ? 1 : 0)
yesilSayisi := yesilSayisi + 1 // Girişim Değeri her zaman yeşil
yesilSayisi := yesilSayisi + 1 // Özsermayeye Serbest Nakit Akışı her zaman yeşil
yesilSayisi := yesilSayisi + (fiyatDefterOrani >= 0.5 and fiyatDefterOrani <= 3 ? 1 : 0)
yesilSayisi := yesilSayisi + (fiyatNakitAkisOrani >= 5 and fiyatNakitAkisOrani <= 15 ? 1 : 0)
yesilSayisi := yesilSayisi + (fiyatSerbestNakitAkisOrani >= 10 and fiyatSerbestNakitAkisOrani <= 20 ? 1 : 0)
yesilSayisi := yesilSayisi + (fkOrani < 10 ? 1 : 0)
yesilSayisi := yesilSayisi + (borcOzsermayeOrani < 2 ? 1 : 0)
yesilSayisi := yesilSayisi + (ozsermayeKarliligi > 15 ? 1 : 0)
yesilSayisi := yesilSayisi + (asitTestOrani >= 0.5 and asitTestOrani <= 1 ? 1 : 0)
yesilSayisi := yesilSayisi + (faaliyetMarji > 15 ? 1 : 0)
yesilSayisi := yesilSayisi + (ekonomikKar > 0 ? 1 : 0)
// Yeşil sayısına göre değerlendirme ve renk
degerlendirme = yesilSayisi >= 12 ? "⭐ MÜKEMMEL" : yesilSayisi >= 9 ? "👍 İYİ" : yesilSayisi >= 6 ? "👌 ORTALAMA" : "⚠️ RİSKLİ"
yatirimKarari = yesilSayisi >= 12 ? "Güçlü finansal yapı, düşük risk" : yesilSayisi >= 9 ? "Bazı zayıf noktalar var, araştırılmalı" : yesilSayisi >= 6 ? "Dikkatli incelenmeli, riskler var" : "Yüksek risk, kaçınılmalı veya detaylı analiz gerekli"
degerlendirmeRengi = yesilSayisi >= 12 ? color.new(color.green, 50) :
yesilSayisi >= 9 ? color.new(color.teal, 50) :
yesilSayisi >= 6 ? color.new(color.orange, 50) :
color.new(color.red, 50)
// TABLO HÜCRELERİNİ DOLDUR - Yazı boyutu ayarı ile
// İlk 13 satiri doldur - Etiketler gri
table.cell(tbl, 0, 0, "Faiz Karşılama Oranı (>1.5)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 1, "Brüt Kar Marjı (>%20)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 2, "Temettü Verimi (>%2)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 3, "Girişim Değeri", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 4, "Özsermayeye Serbest Nakit", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 5, "Fiyat/Defter (0.5-3)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 6, "Fiyat/Nakit Akışı (5-15)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 7, "Fiyat/S. Nakit (10-20)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 8, "Fiyat/Kazanç (<10)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 9, "Borç/Özsermaye (<2)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 10, "Özsermaye Karlılığı (>%15)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 11, "Asit-Test Oranı (0.5-1)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 12, "Faaliyet Marjı (>%15)", bgcolor = color.gray, text_size = yaziBoyutu)
table.cell(tbl, 0, 13, "Ekonomik Kar (>0)", bgcolor = color.gray, text_size = yaziBoyutu)
// 15. satır - DEĞERLENDİRME SATIRI
table.cell(tbl, 0, 14, "🔍 TOPLU DEĞERLENDİRME", bgcolor = color.gray, text_size = yaziBoyutu)
// Tablo hucrelerini degerlerle doldur - RENKLER YENI KOSULLARA GÖRE
table.cell(tbl, 1, 0, str.tostring(math.round(faizKarsilamaOrani,2)), bgcolor = renkFaizKarsilama(faizKarsilamaOrani), text_size = yaziBoyutu)
table.cell(tbl, 1, 1, str.tostring(math.round(brutKarMarji,2)) + "%", bgcolor = renkBrutKarMarji(brutKarMarji), text_size = yaziBoyutu)
table.cell(tbl, 1, 2, str.tostring(math.round(temettuVerimi,2)) + "%", bgcolor = renkTemettuVerimi(temettuVerimi), text_size = yaziBoyutu)
table.cell(tbl, 1, 3, str.tostring(math.round(girisimDegeri / 1e9,2)) + " milyar TL", bgcolor = renkHepYesil(girisimDegeri), text_size = yaziBoyutu)
table.cell(tbl, 1, 4, str.tostring(math.round(ozsermayeyeSerbestNakitAkisi / 1e6,2)) + " milyon TL", bgcolor = renkHepYesil(ozsermayeyeSerbestNakitAkisi), text_size = yaziBoyutu)
table.cell(tbl, 1, 5, str.tostring(math.round(fiyatDefterOrani,2)), bgcolor = renkFiyatDefter(fiyatDefterOrani), text_size = yaziBoyutu)
table.cell(tbl, 1, 6, str.tostring(math.round(fiyatNakitAkisOrani,2)), bgcolor = renkFiyatNakitAkis(fiyatNakitAkisOrani), text_size = yaziBoyutu)
table.cell(tbl, 1, 7, str.tostring(math.round(fiyatSerbestNakitAkisOrani,2)), bgcolor = renkFiyatSerbestNakit(fiyatSerbestNakitAkisOrani), text_size = yaziBoyutu)
table.cell(tbl, 1, 8, str.tostring(math.round(fkOrani,2)), bgcolor = renkFK(fkOrani), text_size = yaziBoyutu)
table.cell(tbl, 1, 9, str.tostring(math.round(borcOzsermayeOrani,2)), bgcolor = renkBorcOzsermaye(borcOzsermayeOrani), text_size = yaziBoyutu)
table.cell(tbl, 1, 10, str.tostring(math.round(ozsermayeKarliligi,2)) + "%", bgcolor = renkROE(ozsermayeKarliligi), text_size = yaziBoyutu)
table.cell(tbl, 1, 11, str.tostring(math.round(asitTestOrani,2)), bgcolor = renkAsitTest(asitTestOrani), text_size = yaziBoyutu)
table.cell(tbl, 1, 12, str.tostring(math.round(faaliyetMarji,2)) + "%", bgcolor = renkFaaliyetMarji(faaliyetMarji), text_size = yaziBoyutu)
table.cell(tbl, 1, 13, str.tostring(math.round(ekonomikKar,2)) + "%\n" + ekonomikKarYorum, bgcolor = ekonomikKarRengi, text_size = yaziBoyutu)
// 15. satır değerleri - DEĞERLENDİRME (alt alta yazılmış)
table.cell(tbl, 1, 14, "Yeşil Sayısı: " + str.tostring(yesilSayisi) + "/14\n" +
degerlendirme + "\n" +
yatirimKarari, bgcolor = degerlendirmeRengi, text_size = yaziBoyutu)
🔴🟢 RENK KURALLARI ÖZETİ
# METRİK YEŞİL ŞARTI KIRMIZI ŞARTI
1 Faiz Karşılama Oranı > 1.5 ≤ 1.5
2 Brüt Kar Marjı > %20 ≤ %20
3 Temettü Verimi > %2 ≤ %2
4 Girişim Değeri Her zaman yeşil -
5 Özsermayeye S. Nakit Akışı Her zaman yeşil -
6 Fiyat/Defter Değeri 0.5 - 3 arası <0.5 veya >3
7 Fiyat/Nakit Akışı 5 - 15 arası <5 veya >15
8 Fiyat/Serbest Nakit Akışı 10 - 20 arası <10 veya >20
9 Fiyat/Kazanç (F/K) < 10 ≥ 10
10 Borç/Özsermaye < 2 ≥ 2
11 Özsermaye Karlılığı (ROE) > %15 ≤ %15
12 Asit-Test Oranı 0.5 - 1 arası <0.5 veya >1
13 Faaliyet Marjı > %15 ≤ %15
14 Ekonomik Kar > 0 ≤ 0
Bu kod, TradingView platformunda çalışan bir Temel Analiz göstergesidir. İşlevi, bir hisse senedinin finansal sağlığını ve değerlemesini, şirketin mali tablolarından (bilanço, gelir tablosu, nakit akış tablosu) alınan verilerle analiz ederek bir tablo halinde göstermektir.
Kısaca, "Bir hisse senedi kağıt üstünde ne kadar sağlıklı ve ucuz?" sorusuna cevap arar.
İşte kodun adım adım ne yaptığı:
indicator("Temel Analiz Değerlendirme", overlay = true): Grafiğin üzerine çizim yapacak bir gösterge oluşturur.
Kullanıcıya, tablonun grafikte nerede duracağı (sağ üst, sol alt gibi), boyutu, arka plan rengi ve yazı puntosu gibi ayarları değiştirebileceği bir panel sunar.
request.financial() fonksiyonu ile hisse senedinin geçmiş mali verilerini çeker. Örneğin:
Hisse Başına Kazanç (HBK veya EPS)
Toplam Borç
Net Gelir
Nakit Akışları
Toplanan ham verileri kullanarak yatırımcıların en çok kullandığı temel analiz oranlarını hesaplar:
Değerleme Oranları: F/K (Fiyat/Kazanç), PD/DD (Piyasa Değeri/Defter Değeri), Fiyat/Satış, Fiyat/Nakit Akışı.
Karlılık Oranları: Özsermaye Karlılığı (ROE), Brüt Kar Marjı, Faaliyet Marjı.
Finansal Sağlık Oranları: Borç/Özsermaye, Asit-Test Oranı (likidite), Faiz Karşılama Oranı.
Nakit Akışı: Girişim Değeri, Özsermayeye Serbest Nakit Akışı.
Getiri: Temettü Verimi.
Ekonomik Kar (Ekonomik Profit): Şirketin sermaye maliyetinin üzerinde bir getiri yaratıp yaratmadığını hesaplar (ROIC - WACC).
Hesaplanan her bir oranı, belirli bir eşik değere göre değerlendirir ve hücreyi yeşil veya kırmızıya boyar.
Yeşil: İyi, güvenli veya ucuz olduğunu gösteren aralıkta (örn: F/K 10'un altındaysa yeşil).
Kırmızı: Riskli veya pahalı olabileceğini gösteren aralıkta (örn: Borç/Özsermaye 2'nin üstündeyse kırmızı).
Tabloda kaç tane yeşil hücre olduğunu sayar (yesilSayisi).
Bu yeşil sayısına göre hisse senedine bir not verir (örn: 12/14 yeşil ise "⭐ MÜKEMMEL", 6/14 ise "👌 ORTALAMA").
Bu nota uygun bir yatırım yorumu yazar (örn: "Güçlü finansal yapı, düşük risk").
Tüm bu hesaplamaları ve renkli değerlendirmeleri, kullanıcının grafik üzerinde görebileceği düzenli bir tablo halinde sunar. Tablonun en alt satırında da nihai skor ve yatırım kararı özeti yer alır. (Tabi ki de bu bir değerleme kendiniz de bilanço ile karşılaştırma yapınız.)
Özetle: Bu gösterge, bir hisse senedinin mali tablolarını analiz edip, onlarca finansal oranı tek bir bakışta anlaşılır (yeşil/kırmızı) ve notlandırılmış bir tabloya dönüştürerek yatırımcıya ZAMAN kazandıran bir araçtır.