Blog

  • Sample Page
  • Hakkında
  • Kullanım
  • İletişim
  • Gizlilik
  • BorsaPin

BorsaPin 2

Borsapin EMA Sinyal Tablosu (Kısa, Orta, Uzun Vade)

Ağustos 10, 2025 BorsaPin, Teknik Analiz, Trading Viewal sat sinyali, algoritmik trading, aylık analiz, backtesting, borsa eğitimi, borsa sinyali, BorsaPin, çoklu varlık analizi, çoklu zaman dilimi analizi, day trading, destek direnç, ema crossover, fibonacci ema, fibonacci sayıları, grafik analizi, günlük analiz, hacim analizi, haftalık analiz, hisse senedi analizi, kısa vade sinyali, kripto para analizi, momentum indikatörü, orta vade sinyali, otomatik sinyal, performans analizi, Pine Script, piyasa analizi, piyasa momentumu, portföy yönetimi, pozisyon trading, quantitative analysis, risk yönetimi, sinyal tablosu, Stop-Loss, swing trading, Teknik Analiz, teknik indikatör, trading stratejisi, tradingview indikatörü, tradingview kodu, trend analizi, trend takibi, Üstel Hareketli Ortalama, uzun vade sinyali, volatilite analizi, yatırım stratejisi

Teknik analizde hareketli ortalamalar, piyasanın genel trendini ve momentum değişimlerini anlamak için kullanılan en temel araçlardan biridir.
Borsapin EMA Sinyal Tablosu, Fibonacci sayı dizisine dayalı EMA (Üstel Hareketli Ortalama) sistemini kullanarak yatırımcılara üç farklı zaman diliminde (kısa, orta, uzun vade) sinyal üreten gelişmiş bir indikatördür.

Fibonacci EMA Serileri
Kısa Vade EMA’lar: 5, 8, 13, 21

En hızlı tepki veren ortalamalar, Günlük işlemler için ideal , Kısa vadeli trend değişimlerini yakalar

Orta Vade EMA’lar: 34, 55

Orta vadeli trendin yönünü belirler, Haftalık strateji geliştiriciler için uygun, Gürültüyü filtreler, daha güvenilir sinyaller üretir

Uzun Vade EMA’lar: 89, 144

Ana trendin yönünü gösterir, Uzun vadeli yatırım kararları için kritik, En az yanıltıcı sinyaller üretir

Kısa Vade Sinyal Sistemi Mantığı

AL Sinyali Başlangıcı: Fiyat tüm EMA’ların (5,8,13,21) üzerinde ve EMA’ların eğimi yukarı yönlü
Sinyal Devamı: EMA 21’in altına geçici sarkmalarda bile, EMA eğimi yukarı yönlü kaldığı sürece AL sinyali bozulmaz
SAT Sinyali: Fiyat EMA 21’in altında ve EMA eğimi aşağı yönlü ise

Orta ve Uzun Vade Sistemlerin Mantığı

AL Sinyali: Fiyat ilgili EMA’ların üzerinde
SAT Sinyali: Fiyat kritik EMA seviyesinin altında (55 ve 89)

Aynı anda üç farklı perspektiften piyasayı değerlendirebilirsiniz. Kısa vadeli gürültüyü uzun vadeli trendden ayırabilirsiniz. Sinyal çakışmalarında güçlü fırsatları belirleyebilirsiniz.

Bar sayacı ile sinyalin ne kadar süredir aktif olduğunu görebilir, Güç göstergesi (⭐) ile sinyalin kalitesini değerlendirme yapabilirsiniz,

Avantajları 
Farklı zaman dilimlerinde çelişkili sinyallerde temkinli olmanızı sağlar. Kısa vade sinyaller ile  giriş/çıkış noktalarını,  Orta-uzun vade sinyalleri ile ana trend yönünün teyidi, Sinyal tarihlerini takip ederek performans analizi yapabilirsiniz. Farklı hisseler için aynı kriterlerde karşılaştırma yapabilir, ayrıca sektörel rotasyonda hangi hisselerin güçlü olduğunu belirleme şansına sahip olabilirsiniz. Varlıklara sistematik yaklaşıp, duygusal karar almanızı engeller. Size Objektif sinyal üretimlerini gösterir.

 

Dezavantajları ve Riskleri
EMA’lar geçmiş verilerle hesaplandığı için sinyaller gecikmeli gelir, Hızlı piyasa hareketlerinde geç kalabilir. Trend dönüş noktalarında yanıltıcı sinyaller verebilir. Yatay seyreden piyasalarda çok fazla sinyal üretebilir. Whipsaw (sahte sinyal) riski yüksek. Kısa vadede sık giriş-çıkış maliyetleri artabilir. Piyasa sadece teknik faktörlerden etkilenmez. Haberlere, makro ekonomik değişimlere tepki verebilir. Hacim, volatilite gibi faktörleri  indikatör hesaplamıyor. Geçmiş verilerle mükemmel çalışan parametreler gelecekte başarısız olabilir. Mesala Fibonacci sayıları her piyasa için optimal olmayabilir. Farklı volatilite ortamlarında farklı sonuçlar verebilir

 

Uyarılar 

Diğer teknik indikatörlerle teyit edin. Hacim analizini ihmal etmeyin, Para Giriş çıkışlarını kontrol edin, Temel analiz ile destekleyin. Yüksek Volatilite Dönemlerinde Özellikle dikkat etmeniz önerilir.  Borsapin EMA Sinyal Tablosu, Fibonacci sayı dizisinin doğal uyumunu teknik analize taşıyan, çoklu zaman diliminde objektif sinyaller üreten güçlü bir araçtır. Doğru kullanıldığında yatırımcılara önemli avantajlar sağlarken, limitasyonlarının da farkında olunması gerekmektedir. En önemlisi, hiçbir teknik indikatör tek başına %100 başarılı değildir. Bu sistemi, kapsamlı bir analiz sürecinin bir parçası olarak kullanmak, risk yönetimi kurallarıyla desteklemek ve sürekli performansını takip etmek başarılı sonuçlar için kritik öneme sahiptir. Geçmiş performans gelecekteki sonuçları garanti etmez. Her yatırım kararında kendi risk toleransınızı göz önünde bulundurun ve gerektiğinde profesyonel destek alın.

Trading View Pine Script Kodu

[code lang=”js”]

// Bu, Pine Script™ kodu Mozilla Kamu Lisansı 2.0 (MPL-2.0) altında lisanslandı
// © krstsntrk © BorsaPin codeispriority
//@version=6

indicator("BorsaPin Ema Sinyal Tablosu", overlay=true)

// Borsapin Ema Sinyal Tablosu
// Kısa Vade Fibonacci EMA’ları (5, 8, 13, 21)
ema5 = input.int(5, "EMA 5", minval=1, group="Kısa Vade")
ema8 = input.int(8, "EMA 8", minval=1, group="Kısa Vade")
ema13 = input.int(13, "EMA 13", minval=1, group="Kısa Vade")
ema21a = input.int(21, "EMA 21", minval=1, group="Kısa Vade")

// Orta Vade Fibonacci EMA’ları (34, 55)
ema34 = input.int(34, "EMA 34", minval=1, group="Orta Vade")
ema55a = input.int(55, "EMA 55", minval=1, group="Orta Vade")

// Uzun Vade Fibonacci EMA’ları (89, 144)
ema89 = input.int(89, "EMA 89", minval=1, group="Uzun Vade")
ema144 = input.int(144, "EMA 144", minval=1, group="Uzun Vade")

// Görsel ayarlar
showTable = input.bool(true, "Tabloyu Göster")
tablePos = input.string("Sağ Üst", "Tablo Konumu", options=["Sol Üst", "Sağ Üst", "Sol Alt", "Sağ Alt"])
showEMAs = input.bool(true, "EMA Çizgilerini Göster", group="Görsel")
onlyDaily = input.bool(false, "Sadece Günlük Verileri Göster", group="Görsel")

// Günlük Zaman Dilimi Verileri
[dailyClose, dailyFib5, dailyFib8, dailyFib13, dailyFib21a, dailyFib34, dailyFib55a, dailyFib89, dailyFib144] = request.security(syminfo.tickerid, "1D", [close, ta.ema(close, ema5), ta.ema(close, ema8), ta.ema(close, ema13), ta.ema(close, ema21a), ta.ema(close, ema34), ta.ema(close, ema55a), ta.ema(close, ema89), ta.ema(close, ema144)])

// Günlük veriler için sinyal hesaplamaları
dailyEgimYukari = dailyFib5 > dailyFib5[1] and dailyFib8 > dailyFib8[1] and dailyFib13 > dailyFib13[1] and dailyFib21a > dailyFib21a[1]
dailyEgimAsagi = dailyFib21a < dailyFib21a[1] and dailyFib13 < dailyFib13[1]

// Günlük sinyaller
dailySinyalKisaAL = dailyClose > dailyFib5 and dailyClose > dailyFib8 and dailyClose > dailyFib13 and dailyClose > dailyFib21a and dailyEgimYukari
dailySinyalKisaSAT = dailyClose < dailyFib21a and dailyEgimAsagi
dailySinyalOrtaAL = dailyClose > dailyFib34 and dailyClose > dailyFib55a
dailySinyalOrtaSAT = dailyClose < dailyFib55a
dailySinyalUzunAL = dailyClose > dailyFib89 and dailyClose > dailyFib144
dailySinyalUzunSAT = dailyClose < dailyFib144
// Fibonacci EMA Hesapları
fib5 = ta.ema(close, ema5)
fib8 = ta.ema(close, ema8)
fib13 = ta.ema(close, ema13)
fib21a = ta.ema(close, ema21a)

fib34 = ta.ema(close, ema34)
fib55a = ta.ema(close, ema55a)

fib89 = ta.ema(close, ema89)
fib144 = ta.ema(close, ema144)

// Günlük sinyal durumları
var string dailyKisaSinyalDurumu = "BEKLİYOR"
var string dailyOrtaSinyalDurumu = "BEKLİYOR"
var string dailyUzunSinyalDurumu = "BEKLİYOR"

var int dailyKisaBarSayaci = 0
var int dailyOrtaBarSayaci = 0
var int dailyUzunBarSayaci = 0

var string dailyTarihKisa = "Yok"
var string dailyTarihOrta = "Yok"
var string dailyTarihUzun = "Yok"

// Günlük sinyal mantıkları
if dailySinyalKisaAL and dailyKisaSinyalDurumu[1] != "AL"
dailyKisaSinyalDurumu := "AL"
dailyKisaBarSayaci := 1
dailyTarihKisa := str.format("{0,date,dd.MM.yyyy}", time)
else if dailyKisaSinyalDurumu[1] == "AL" and dailyClose > dailyFib21a and dailyEgimYukari
dailyKisaSinyalDurumu := "AL"
dailyKisaBarSayaci += 1
else if dailySinyalKisaSAT
dailyKisaSinyalDurumu := "SAT"
if dailyKisaSinyalDurumu[1] != "SAT"
dailyKisaBarSayaci := 1
dailyTarihKisa := str.format("{0,date,dd.MM.yyyy}", time)
else
dailyKisaBarSayaci += 1
else
if dailyKisaSinyalDurumu[1] == "AL"
dailyKisaSinyalDurumu := "AL"
dailyKisaBarSayaci += 1
else
dailyKisaSinyalDurumu := "BEKLİYOR"
dailyKisaBarSayaci := 0

if dailySinyalOrtaAL
dailyOrtaSinyalDurumu := "AL"
if dailyOrtaSinyalDurumu[1] != "AL"
dailyOrtaBarSayaci := 1
dailyTarihOrta := str.format("{0,date,dd.MM.yyyy}", time)
else
dailyOrtaBarSayaci += 1
else if dailySinyalOrtaSAT
dailyOrtaSinyalDurumu := "SAT"
if dailyOrtaSinyalDurumu[1] != "SAT"
dailyOrtaBarSayaci := 1
dailyTarihOrta := str.format("{0,date,dd.MM.yyyy}", time)
else
dailyOrtaBarSayaci += 1
else
dailyOrtaSinyalDurumu := "BEKLİYOR"
dailyOrtaBarSayaci := 0

if dailySinyalUzunAL
dailyUzunSinyalDurumu := "AL"
if dailyUzunSinyalDurumu[1] != "AL"
dailyUzunBarSayaci := 1
dailyTarihUzun := str.format("{0,date,dd.MM.yyyy}", time)
else
dailyUzunBarSayaci += 1
else if dailySinyalUzunSAT
dailyUzunSinyalDurumu := "SAT"
if dailyUzunSinyalDurumu[1] != "SAT"
dailyUzunBarSayaci := 1
dailyTarihUzun := str.format("{0,date,dd.MM.yyyy}", time)
else
dailyUzunBarSayaci += 1
else
dailyUzunSinyalDurumu := "BEKLİYOR"
dailyUzunBarSayaci := 0

// EMA Çizgileri
plot(showEMAs ? fib5 : na, "EMA 5", color=color.new(color.maroon, 50), linewidth=1)
plot(showEMAs ? fib8 : na, "EMA 8", color=color.new(color.blue, 50), linewidth=1)
plot(showEMAs ? fib13 : na, "EMA 13", color=color.new(color.green, 50), linewidth=1)
plot(showEMAs ? fib21a : na, "EMA 21", color=color.new(color.orange, 30), linewidth=1)
plot(showEMAs ? fib34 : na, "EMA 34", color=color.new(color.purple, 30), linewidth=1)
plot(showEMAs ? fib55a : na, "EMA 55", color=color.new(color.red, 20), linewidth=2)
plot(showEMAs ? fib89 : na, "EMA 89", color=color.new(color.fuchsia, 40), linewidth=2)
plot(showEMAs ? fib144 : na, "EMA 144", color=color.new(color.aqua, 40), linewidth=2)

// KISA VADE Sinyalleri Detaylı Sinyal Mantığı Her Vade İçin Ayrı
// Eğim kontrolü
kisaVadeEgimYukari = fib5 > fib5[1] and fib8 > fib8[1] and fib13 > fib13[1] and fib21a > fib21a[1]

// AL sinyali: Tüm EMA’ların üzerinde ve eğim yukarı
sinyalKisaAL = close > fib5 and close > fib8 and close > fib13 and close > fib21a and kisaVadeEgimYukari

// SAT sinyali: EMA 21’in altına düşmesi ve eğim aşağı
kisaVadeEgimAsagi = fib21a < fib21a[1] and fib13 < fib13[1]
sinyalKisaSAT = close < fib21a and kisaVadeEgimAsagi

// ORTA VADE Sinyalleri (Kısa vade mantığı uygulandı)
sinyalOrtaAL = close > fib34 and close > fib55a and fib34 > fib55a

sinyalOrtaSAT = close < fib55a

// UZUN VADE Sinyalleri (Sadece fiyat kontrolü)
sinyalUzunAL = close > fib89 and close > fib144

sinyalUzunSAT = close < fib144

// Sinyal Durumu Değişkenleri
var string kisaSinyalDurumu = "BEKLİYOR"
var string ortaSinyalDurumu = "BEKLİYOR"
var string uzunSinyalDurumu = "BEKLİYOR"

var int kisaBarSayaci = 0
var int ortaBarSayaci = 0
var int uzunBarSayaci = 0

var string tarihKisa = "Yok"
var string tarihOrta = "Yok"
var string tarihUzun = "Yok"

// KISA VADE Sinyal Mantığı – Sürekli AL Mantığı
if sinyalKisaAL and kisaSinyalDurumu[1] != "AL"
// İlk AL sinyali – tarih ve bar sayacı sıfırla
kisaSinyalDurumu := "AL"
kisaBarSayaci := 1
tarihKisa := str.format("{0,date,dd.MM.yyyy}", time)
else if kisaSinyalDurumu[1] == "AL" and close > fib21a and kisaVadeEgimYukari
// AL sinyali devam ediyor – EMA 21 üzerinde ve eğim yukarı
kisaSinyalDurumu := "AL"
kisaBarSayaci += 1
else if sinyalKisaSAT
// SAT sinyali
kisaSinyalDurumu := "SAT"
if kisaSinyalDurumu[1] != "SAT"
kisaBarSayaci := 1
tarihKisa := str.format("{0,date,dd.MM.yyyy}", time)
else
kisaBarSayaci += 1
else
// Belirsizlik durumu
if kisaSinyalDurumu[1] == "AL"
kisaSinyalDurumu := "AL"
kisaBarSayaci += 1
else
kisaSinyalDurumu := "BEKLİYOR"
kisaBarSayaci := 0

// ORTA VADE Sinyal Mantığı
if sinyalOrtaAL
ortaSinyalDurumu := "AL"
if ortaSinyalDurumu[1] != "AL"
ortaBarSayaci := 0
tarihOrta := str.format("{0,date,dd.MM.yyyy} ", time)
else
ortaBarSayaci += 1
else if sinyalOrtaSAT
ortaSinyalDurumu := "SAT"
if ortaSinyalDurumu[1] != "SAT"
ortaBarSayaci := 0
tarihOrta := str.format("{0,date,dd.MM.yyyy} ", time)
else
ortaBarSayaci += 1
else
ortaSinyalDurumu := "BEKLİYOR"
ortaBarSayaci := 0

// UZUN VADE Sinyal Mantığı
if sinyalUzunAL
uzunSinyalDurumu := "AL"
if uzunSinyalDurumu[1] != "AL"
uzunBarSayaci := 0
tarihUzun := str.format("{0,date,dd.MM.yyyy} ", time)
else
uzunBarSayaci += 1
else if sinyalUzunSAT
uzunSinyalDurumu := "SAT"
if uzunSinyalDurumu[1] != "SAT"
uzunBarSayaci := 0
tarihUzun := str.format("{0,date,dd.MM.yyyy}", time)
else
uzunBarSayaci += 1
else
uzunSinyalDurumu := "BEKLİYOR"
uzunBarSayaci := 0

// Tablo konumu belirleme
tablePosition = if tablePos == "Sol Üst"
position.top_left
else if tablePos == "Sağ Üst"
position.top_right
else if tablePos == "Sol Alt"
position.bottom_left
else if tablePos == "Sağ Alt"
position.bottom_right
else
position.top_right

// Tablo Oluşturma
if showTable
var table tablo = table.new(tablePosition, 5, 4, border_width=1, bgcolor=color.white, border_color=color.gray)

// Başlık satırı
table.cell(tablo, 0, 0, "Vade", bgcolor=color.new(color.blue, 80), text_color=color.black, text_size=size.small)
table.cell(tablo, 1, 0, "Sinyal Tarihi", bgcolor=color.new(color.blue, 80), text_color=color.black, text_size=size.small)
table.cell(tablo, 2, 0, "Bar", bgcolor=color.new(color.blue, 80), text_color=color.black, text_size=size.small)
table.cell(tablo, 3, 0, "Durum", bgcolor=color.new(color.blue, 80), text_color=color.black, text_size=size.small)
table.cell(tablo, 4, 0, "Güç", bgcolor=color.new(color.blue, 80), text_color=color.black, text_size=size.small)

// KISA VADE SATIRI
// Hangi veriler kullanılacak
useKisaSinyalDurumu = onlyDaily ? dailyKisaSinyalDurumu : kisaSinyalDurumu
useKisaBarSayaci = onlyDaily ? dailyKisaBarSayaci : kisaBarSayaci
useTarihKisa = onlyDaily ? dailyTarihKisa : tarihKisa
useKisaClose = onlyDaily ? dailyClose : close
useKisaFib5 = onlyDaily ? dailyFib5 : fib5
useKisaFib8 = onlyDaily ? dailyFib8 : fib8

kisaRenk = if useKisaSinyalDurumu == "AL"
if useKisaClose < useKisaFib8 and useKisaClose > useKisaFib5
color.new(color.green, 40) // Orta Güçlü AL
else if useKisaClose < useKisaFib5
color.new(color.green, 60) // Zayıf AL
else
color.new(color.green, 20) // Güçlü AL
else if useKisaSinyalDurumu == "SAT"
color.new(color.red, 20)
else
color.new(color.gray, 40)

kisaDurumText = if useKisaSinyalDurumu == "AL" and useKisaClose < useKisaFib8
"AL (Zayıf)"
else if useKisaSinyalDurumu == "AL" and useKisaClose > useKisaFib8
"AL (Güçlü)"
else
useKisaSinyalDurumu

kisaGuc = if useKisaSinyalDurumu == "AL"
if useKisaBarSayaci <= 5
"⭐⭐⭐"
else if useKisaBarSayaci <= 15
"⭐⭐"
else if useKisaBarSayaci <= 30
"⭐"
else
""
else if useKisaSinyalDurumu == "SAT"
if useKisaBarSayaci <= 5
"⭐⭐⭐"
else if useKisaBarSayaci <= 15
"⭐⭐"
else if useKisaBarSayaci <= 30
"⭐"
else
""
else
"⏳"

kisaBarText = useKisaSinyalDurumu == "BEKLİYOR" ? "" : str.tostring(useKisaBarSayaci)

table.cell(tablo, 0, 1, "Kısa Vade", text_size=size.small)
table.cell(tablo, 1, 1, useTarihKisa, text_size=size.tiny)
table.cell(tablo, 2, 1, kisaBarText, text_size=size.small)
table.cell(tablo, 3, 1, kisaDurumText, bgcolor=kisaRenk, text_color=color.white, text_size=size.small)
table.cell(tablo, 4, 1, kisaGuc, text_size=size.small)

// ORTA VADE SATIRI
ortaRenk = if ortaSinyalDurumu == "AL"
if close < fib34 and close > fib55a
color.new(color.green, 60) // Zayıf AL
else if close > fib34
color.new(color.green, 20) // Güçlü AL
else
color.new(color.green, 40) // Orta AL
else if ortaSinyalDurumu == "SAT"
color.new(color.red, 20)
else
color.new(color.gray, 40)

ortaDurumText = if ortaSinyalDurumu == "AL" and close < fib34
"AL (Zayıf)"
else if ortaSinyalDurumu == "AL" and close > fib34
"AL (Güçlü)"
else
ortaSinyalDurumu

ortaGuc = if ortaSinyalDurumu == "AL"
if ortaBarSayaci <= 5
"⭐⭐⭐"
else if ortaBarSayaci <= 15
"⭐⭐"
else if ortaBarSayaci <= 30
"⭐"
else
""
else if ortaSinyalDurumu == "SAT"
if ortaBarSayaci <= 5
"⭐⭐⭐"
else if ortaBarSayaci <= 15
"⭐⭐"
else if ortaBarSayaci <= 30
"⭐"
else
""
else
"⏳"

ortaBarText = ortaSinyalDurumu == "BEKLİYOR" ? "" : str.tostring(ortaBarSayaci)

table.cell(tablo, 0, 2, "Orta Vade", text_size=size.small)
table.cell(tablo, 1, 2, tarihOrta, text_size=size.tiny)
table.cell(tablo, 2, 2, ortaBarText, text_size=size.small)
table.cell(tablo, 3, 2, ortaDurumText, bgcolor=ortaRenk, text_color=color.white, text_size=size.small)
table.cell(tablo, 4, 2, ortaGuc, text_size=size.small)

// UZUN VADE SATIRI
uzunRenk = if uzunSinyalDurumu == "AL"
if close < fib89 and close > fib144
color.new(color.green, 60) // Zayıf AL
else if close > fib89
color.new(color.green, 20) // Güçlü AL
else
color.new(color.green, 40) // Orta AL
else if uzunSinyalDurumu == "SAT"
color.new(color.red, 20)
else
color.new(color.gray, 40)

uzunDurumText = if uzunSinyalDurumu == "AL" and close < fib89
"AL (Zayıf)"
else if uzunSinyalDurumu == "AL" and close > fib89
"AL (Güçlü)"
else
uzunSinyalDurumu

uzunGuc = if uzunSinyalDurumu == "AL"
if uzunBarSayaci <= 5
"⭐⭐⭐⭐"
else if uzunBarSayaci <= 15
"⭐⭐⭐"
else if uzunBarSayaci <= 30
"⭐⭐"
else if uzunBarSayaci <= 50
"⭐"
else
""
else if uzunSinyalDurumu == "SAT"
if uzunBarSayaci <= 5
"⭐⭐⭐⭐"
else if uzunBarSayaci <= 15
"⭐⭐⭐"
else if uzunBarSayaci <= 30
"⭐⭐"
else if uzunBarSayaci <= 50
"⭐"
else
""
else
"⏳"

uzunBarText = uzunSinyalDurumu == "BEKLİYOR" ? "" : str.tostring(uzunBarSayaci)

table.cell(tablo, 0, 3, "Uzun Vade", text_size=size.small)
table.cell(tablo, 1, 3, tarihUzun, text_size=size.tiny)
table.cell(tablo, 2, 3, uzunBarText, text_size=size.small)
table.cell(tablo, 3, 3, uzunDurumText, bgcolor=uzunRenk, text_color=color.white, text_size=size.small)
table.cell(tablo, 4, 3, uzunGuc, text_size=size.small)
[/code]

Python BorsaPin Lineer Regresyon ve Pearson Analizi Betiği

Ağustos 6, 2025 BorsaPin, Python, Teknik Analizborsa analizi, borsa stratejileri, borsa verisi analizi, BorsaPin, breakout sinyalleri, EMA dizilimi, Excel dosyası, Excel raporu, Excel veri işleme, finansal analiz, finansal analiz araçları, finansal korelasyon, finansal raporlama., finansal veri analizi, finansal veri görselleştirme, fırsat analizi, hisse senedi analizi, hisse senedi trendleri, istatistiksel analiz, kanal fırsatları, lineer regresyon analizi, Pearson korelasyonu, Python betiği, Python ile yatırım analizi, regresyon analizi Python, Teknik Analiz, veri analizi, yatırım analiz araçları, yatırım fırsatları, yatırım fırsatları tespiti, yatırım kararları, yatırımcılar için araçlar

Bu Python betiği, X_01_BorsaPin_StokData.py  Python betiğiyle oluşturulan StokData/Kapanis klasöründeki hisse kapanış verilerinden lineer regresyon trend analizi ve Pearson korelasyon ölçümleri yaparak detaylı teknik analiz raporu üretir. Analizler, Excel formatında renklendirilmiş ve filtrelenebilir şekilde kayıt altına alınır.

Terminalden şu iki komutu çalıştırın .
python.exe -m pip install --upgrade pip
pip install pandas numpy scipy colorama openpyxl

Kodun Temel Özellikleri

Lineer Regresyon Analizi: Kapanış fiyatları üzerinden trend çizgisi (slope), kanal bandı, standart sapma gibi metrikleri hesaplar.
Pearson Korelasyon: Trendin gücünü ölçmek için farklı periyotlarda Pearson korelasyon katsayısı hesaplanır.

 

Fırsat Tespiti:

Kanal Altı Fırsatları: Alt banda yakın fiyat hareketleri ve güçlü korelasyon içeren hisseler.

Breakout Adayları: Üst banda yakın olup yükseliş sinyali veren hisseler.

EMA Dizilim Entegrasyonu: Farklı script tarafından oluşturulan EMA analizleriyle birleştirilebilir.

Otomatik Excel Raporu: Tüm veriler biçimlendirilmiş bir Excel dosyasına kaydedilir (filtrelenebilir, renklendirilmiş).

Başarısız Dosya Takibi: Hatalı veriler ayrı bir .txt dosyasına kaydedilir. Analiz Süreci Otomatik Gerçekleşir:

Tüm dosyalar sırasıyla işlenir. Lineer regresyon analizleri yapılır. Fırsatlar belirlenir. Sonuçlar Excel ve TXT dosyalarına kaydedilir.

Üretilen Dosyalar

StokData/lineer_regresyon_analiz.xlsx → Ana analiz dosyası
StokData/LinearRegression/lineer_regresyon_analiz_YYYY-MM-DD.xlsx → Arşiv dosyası

basarisiz_regresyon_dosyalari.txt → Başarısız analizlerin listesi

Excel Sayfaları
TumSonuclar: Tüm hisse ve periyot sonuçları
IdealPearson: En güçlü Pearson korelasyonuna sahip hisseler
KanalFirsatlari_Top50: Kanal altına yakın fırsatlar
BreakoutAdaylari_Top50: Yükselişe aday hisseler
Periyot_XXX: Her analiz periyodu için ayrı sayfalar
Istatistikler: Genel başarı ve analiz özetleri

Avantajları

Otomatik, hızlı ve güvenilir teknik analiz.  Yatırım kararlarını destekleyecek fırsat ve sinyal tespiti. Excel üzerinden kolay görsel analiz ve filtreleme imkânı

Bu betik, teknik analizde trend doğruluğunu ve fırsatları istatistiksel olarak belirlemek isteyen yatırımcılar için güçlü bir araçtır. Özellikle BIST verileriyle çalışan sistemlerde regresyon ve Pearson tabanlı analiz ile öne çıkan hisseleri kolayca tespit etmeye yardımcı olur.

LinReg tarama çalışmamızı X_05_BorsaPin_LinReg_Tarama.py adıyla kayıt edebilirsiniz.
Python Betiği

[php]

import pandas as pd
import numpy as np
import os
import glob
from scipy.stats import linregress, pearsonr
from datetime import datetime, timedelta
from colorama import Fore, init
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.utils import get_column_letter
from typing import List, Dict, Optional

"""
Borsapin StokData/Kapanis klasöründeki hisse verilerinden Lineer Regresyon ve Pearson analizi yapar
www.kursatsenturk.com

"""

init(autoreset=True)

class LinearRegressionAnalyzer:
def __init__(self):
self.pearson_periods = [55, 89, 144, 233, 370, 610, 987]
self.analysis_periods = [55, 89, 144, 233, 370, 610, 987] # Özel analiz periyotları
self.successful_files = []
self.failed_files = []

# Sonuç listeleri
self.all_results = []
self.period_results = {period: [] for period in self.pearson_periods}
self.ideal_pearson = []
self.channel_opportunities = []
self.breakout_candidates = []
self.statistics = {}

@staticmethod
def calculate_regression(data_df: pd.DataFrame, period: int) -&gt; Optional[Dict]:
"""Lineer regresyon ve kanal hesaplama"""
try:
# Son ‘period’ a kadar veriyi al
data_df = data_df.tail(period).copy()
if len(data_df) &lt; period:
return None

# X ekseni (zaman) ve Y ekseni (fiyat) değerleri
x = np.arange(len(data_df))
y = data_df["Kapanış"].values

# Lineer regresyon hesaplama
slope, intercept, r_value, p_value, std_err = linregress(x, y)

# Trend çizgisi hesaplama
trend_line = intercept + slope * x

# Residual (artık) değerler ve standart sapma
residuals = y – trend_line
std_dev = np.std(residuals)

# Kanal bantları (2 standart sapma)
upper_channel = trend_line + 2 * std_dev
lower_channel = trend_line – 2 * std_dev

# Pearson korelasyon katsayısı
corr, _ = pearsonr(x, y)

# Son değerler
upper_channel_value = round(float(upper_channel[-1]), 2)
lower_channel_value = round(float(lower_channel[-1]), 2)
trend_value = round(float(trend_line[-1]), 2)
last_price = float(y[-1])

# Yüzde farkları
upper_diff_pct = round((last_price – upper_channel_value) / last_price * 100, 2)
lower_diff_pct = round((last_price – lower_channel_value) / last_price * 100, 2)
trend_diff_pct = round((last_price – trend_value) / last_price * 100, 2)

# Trend yönü ve güç
trend_direction = "Yükseliş" if slope &gt; 0 else "Düşüş"
trend_strength = "Güçlü" if abs(slope) &gt; 0.05 else "Orta" if abs(slope) &gt; 0.01 else "Zayıf"

# Kanal pozisyonu
channel_position = "Üst Bant" if upper_diff_pct &gt;= -2 else "Alt Bant" if lower_diff_pct &lt;= 2 else "Orta"

return {
"Periyot": period,
"Kanal_Ust": upper_channel_value,
"Kanal_Alt": lower_channel_value,
"Trend_Cizgisi": trend_value,
"Ust_Fark_Pct": upper_diff_pct,
"Alt_Fark_Pct": lower_diff_pct,
"Trend_Fark_Pct": trend_diff_pct,
"Trend_Yonu": trend_direction,
"Trend_Gucu": trend_strength,
"Kanal_Pozisyonu": channel_position,
"Pearson": round(corr, 4),
"R_Kare": round(r_value ** 2, 4),
"Slope": round(slope, 6),
"P_Value": round(p_value, 6),
"Std_Error": round(std_err, 6)
}

except Exception as e:
print(f"{Fore.RED}❌ Regresyon hesaplama hatası (Period {period}): {e}")
return None

def process_single_file(self, file_path: str) -&gt; bool:
"""Tek dosya için lineer regresyon analizi"""
ticker_name = None
try:
# Dosya adından hisse adını alma
file_name = os.path.basename(file_path)
ticker_name = os.path.splitext(file_name)[0]

print(f"{Fore.YELLOW} Lineer regresyon analizi: {ticker_name}…")

# Excel dosyasını okuma
df = pd.read_excel(file_path)

# Gerekli sütunların varlığını kontrol etme
if ‘Tarih’ not in df.columns or ‘Kapanış’ not in df.columns:
raise ValueError("Tarih veya Kapanış sütunu bulunamadı")

# Veri temizleme ve sıralama
df = df[["Tarih", "Kapanış"]].dropna()
df["Tarih"] = pd.to_datetime(df["Tarih"])
df = df.sort_values("Tarih").reset_index(drop=True)
df["Kapanış"] = pd.to_numeric(df["Kapanış"], errors=’coerce’)
df = df.dropna()

if df.empty:
raise ValueError("Veri boş veya geçersiz")

last_close = round(float(df["Kapanış"].iloc[-1]), 2)
last_date = df["Tarih"].iloc[-1]

print(f"{Fore.CYAN} ⚡ Periyotlar hesaplanıyor: ", end="")

# Her periyot için analiz
ticker_pearson_data = {"Hisse_Adi": ticker_name, "Kapanış": last_close, "Tarih": last_date}

for i, period in enumerate(self.pearson_periods):
print(f"{period}", end="")

result = self.calculate_regression(df.copy(), period)
if result:
# Ana sonuç listesine ekle
main_result = {
"Hisse_Adi": ticker_name,
"Kapanış": last_close,
"Tarih": last_date,
**result
}
self.all_results.append(main_result)

# Periyot bazlı sonuçlara ekle
self.period_results[period].append(main_result)

# İdeal Pearson için veri toplama
ticker_pearson_data[f"Pearson_{period}"] = result["Pearson"]
ticker_pearson_data[f"Kanal_Pozisyon_{period}"] = result["Kanal_Pozisyonu"]
ticker_pearson_data[f"Alt_Fark_{period}"] = result["Alt_Fark_Pct"]
ticker_pearson_data[f"Ust_Fark_{period}"] = result["Ust_Fark_Pct"]

if i &lt; len(self.pearson_periods) – 1:
print(", ", end="")
print()

# İdeal Pearson listesine ekle
self.ideal_pearson.append(ticker_pearson_data)

# Özel analizler için kontrol
self.analyze_opportunities(ticker_name, last_close, last_date, df)

print(f"{Fore.GREEN}✅ {ticker_name} analizi tamamlandı.")
self.successful_files.append(ticker_name)
return True

except Exception as e:
print(f"{Fore.RED}❌ {ticker_name if ticker_name else file_path} için hata: {e}")
self.failed_files.append(os.path.basename(file_path))
return False

def analyze_opportunities(self, ticker_name: str, last_close: float, last_date, df: pd.DataFrame):
"""Fırsat analizi – kanal alt bandı ve breakout adayları"""
try:
for period in self.analysis_periods:
result = self.calculate_regression(df.copy(), period)
if result:
# Alt banda yakın fırsatlar (Alt fark &lt;= 4% ve Pearson &gt;= 0.7)
if (-2 &lt;= result["Alt_Fark_Pct"] &lt;= 4 and
abs(result["Pearson"]) &gt;= 0.7):
self.channel_opportunities.append({
"Hisse_Adi": ticker_name,
"Kapanış": last_close,
"Tarih": last_date,
"Periyot": period,
"Alt_Fark_Pct": result["Alt_Fark_Pct"],
"Pearson": result["Pearson"],
"Trend_Yonu": result["Trend_Yonu"],
"Kanal_Alt": result["Kanal_Alt"],
"Kanal_Ust": result["Kanal_Ust"],
"Potansiyel_Kazanc": round((result["Kanal_Ust"] – last_close) / last_close * 100, 2)
})

# Breakout adayları (Üst fark &gt;= -4% ve Pearson &gt;= 0.8)
if (-4 &lt;= result["Ust_Fark_Pct"] &lt;= 2 and
abs(result["Pearson"]) &gt;= 0.8):
self.breakout_candidates.append({
"Hisse_Adi": ticker_name,
"Kapanış": last_close,
"Tarih": last_date,
"Periyot": period,
"Ust_Fark_Pct": result["Ust_Fark_Pct"],
"Pearson": result["Pearson"],
"Trend_Yonu": result["Trend_Yonu"],
"Kanal_Ust": result["Kanal_Ust"],
"Hedef_Fiyat": round(result["Kanal_Ust"] * 1.05, 2) # %5 üst hedef
})

except Exception as e:
print(f"{Fore.RED}❌ Fırsat analizi hatası ({ticker_name}): {e}")

def calculate_statistics(self):
"""İstatistik hesaplama"""
try:
print(f"{Fore.CYAN} İstatistikler hesaplanıyor…")

# Genel istatistikler
stats = {
"Toplam_Analiz_Edilen": len(self.successful_files),
"Basarisiz_Dosya": len(self.failed_files)
}

# Periyot bazlı istatistikler
for period in self.pearson_periods:
period_data = self.period_results[period]
if period_data:
pearson_values = [item["Pearson"] for item in period_data if item.get("Pearson")]
stats[f"Ortalama_Pearson_{period}"] = round(np.mean(pearson_values), 4) if pearson_values else 0
stats[f"Yuksek_Pearson_Sayisi_{period}"] = len([p for p in pearson_values if abs(p) &gt;= 0.8])

# Fırsat istatistikleri
stats["Kanal_Alt_Firsatlari"] = len(self.channel_opportunities)
stats["Breakout_Adaylari"] = len(self.breakout_candidates)

# Trend analizi
trend_up = len([item for item in self.all_results if item.get("Trend_Yonu") == "Yükseliş"])
trend_down = len([item for item in self.all_results if item.get("Trend_Yonu") == "Düşüş"])
stats["Yukselis_Trendi"] = trend_up
stats["Dusus_Trendi"] = trend_down

self.statistics = stats
return stats

except Exception as e:
print(f"{Fore.RED}❌ İstatistik hesaplama hatası: {e}")
return {}

@staticmethod
def find_input_files(input_folder="StokData/Kapanis/"):
"""Giriş dosyalarını bulma"""
try:
pattern = os.path.join(input_folder, "*.xlsx")
files = glob.glob(pattern)

if not files:
print(f"{Fore.RED}❌ {input_folder} klasöründe Excel dosyası bulunamadı!")
return []

print(f"{Fore.BLUE} {len(files)} adet Excel dosyası bulundu.")
return files

except Exception as e:
print(f"{Fore.RED}❌ Dosya arama hatası: {e}")
return []

def merge_ema_data(self):
"""EMA dizilim verilerini birleştirme"""
try:
ema_file = "StokData/idealema_analiz.xlsx"
if os.path.exists(ema_file):
print(f"{Fore.CYAN} EMA verileri birleştiriliyor…")
ema_df = pd.read_excel(ema_file, sheet_name="IdealEMAUp")
ema_mapping = dict(zip(ema_df["Hisse_Adi"], ema_df["EMA_Dizilim"]))

# Tüm sonuçlara EMA bilgisi ekle
for result in self.all_results:
result["EMA_Dizilim"] = ema_mapping.get(result["Hisse_Adi"], "Bilinmiyor")

for result in self.ideal_pearson:
result["EMA_Dizilim"] = ema_mapping.get(result["Hisse_Adi"], "Bilinmiyor")

print(f"{Fore.GREEN}✅ EMA verileri başarıyla birleştirildi.")
else:
print(f"{Fore.YELLOW}⚠️ EMA dosyası bulunamadı: {ema_file}")

except Exception as e:
print(f"{Fore.RED}❌ EMA veri birleştirme hatası: {e}")

@staticmethod
def write_sheet_with_formatting(excel_writer, df, sheet_name, freeze_panes=None):
"""Excel sayfası yazma ve biçimlendirme"""
try:
if isinstance(df, list):
df = pd.DataFrame(df)

if df.empty:
df = pd.DataFrame([{"Mesaj": "Veri bulunamadı"}])

df.to_excel(excel_writer, sheet_name=sheet_name, index=False)
ws = excel_writer.sheets[sheet_name]

# Başlık biçimlendirme
header_fill = PatternFill(start_color=’4472C4′, end_color=’4472C4′, fill_type=’solid’)
for col_num, column in enumerate(df.columns, 1):
cell = ws.cell(row=1, column=col_num)
cell.font = Font(bold=True, color=’FFFFFF’)
cell.fill = header_fill
cell.alignment = Alignment(horizontal=’center’)

# Sütun genişlikleri
if any(keyword in str(column) for keyword in [‘Tarih’, ‘Date’]):
ws.column_dimensions[get_column_letter(col_num)].width = 15
elif any(keyword in str(column) for keyword in [‘Hisse’, ‘CODE’]):
ws.column_dimensions[get_column_letter(col_num)].width = 12
elif any(keyword in str(column) for keyword in [‘Pearson’, ‘Fark’, ‘Pct’]):
ws.column_dimensions[get_column_letter(col_num)].width = 18
else:
ws.column_dimensions[get_column_letter(col_num)].width = 20

# Veri satırlarını biçimlendirme
for row_num in range(2, len(df) + 2):
for col_num in range(1, len(df.columns) + 1):
cell = ws.cell(row=row_num, column=col_num)
cell.alignment = Alignment(horizontal=’center’)
column_name = df.columns[col_num – 1]

# Pearson değerleri için renklendirme
if ‘Pearson’ in str(column_name) and isinstance(cell.value, (int, float)):
if abs(cell.value) &gt;= 0.9:
cell.fill = PatternFill(start_color=’00FF00′, end_color=’00FF00′, fill_type=’solid’)
elif abs(cell.value) &gt;= 0.8:
cell.fill = PatternFill(start_color=’90EE90′, end_color=’90EE90′, fill_type=’solid’)
elif abs(cell.value) &gt;= 0.7:
cell.fill = PatternFill(start_color=’FFFF99′, end_color=’FFFF99′, fill_type=’solid’)

# Fark yüzdeleri için renklendirme
elif ‘Alt_Fark’ in str(column_name) and isinstance(cell.value, (int, float)):
if -2 &lt;= cell.value &lt;= 4:
cell.fill = PatternFill(start_color=’FFFFCC’, end_color=’FFFFCC’, fill_type=’solid’)

elif ‘Ust_Fark’ in str(column_name) and isinstance(cell.value, (int, float)):
if -4 &lt;= cell.value &lt;= 2:
cell.fill = PatternFill(start_color=’FFCCCC’, end_color=’FFCCCC’, fill_type=’solid’)

# Freeze panes
if freeze_panes:
ws.freeze_panes = freeze_panes

# AutoFilter ekleme (başlık satırına)
if len(df) &gt; 0:
ws.auto_filter.ref = f"A1:{get_column_letter(len(df.columns))}{len(df) + 1}"

except Exception as e:
print(f"{Fore.RED}❌ Excel biçimlendirme hatası ({sheet_name}): {e}")

def save_results(self):
"""Sonuçları Excel’e kaydetme"""
try:
# Klasörler oluşturma
output_folder = "StokData/LinearRegression/"
os.makedirs(output_folder, exist_ok=True)

# Dosya isimleri
today = datetime.today().strftime(‘%Y-%m-%d’)
main_file = os.path.join("StokData", "lineer_regresyon_analiz.xlsx")
archive_file = os.path.join(output_folder, f"lineer_regresyon_analiz_{today}.xlsx")

# Veri hazırlama
print(f"{Fore.GREEN} Excel dosyası hazırlanıyor…")

# Sıralama işlemleri
# İdeal Pearson – maksimum mutlak Pearson değerine göre sırala
ideal_pearson_df = pd.DataFrame(self.ideal_pearson)
if not ideal_pearson_df.empty:
pearson_cols = [col for col in ideal_pearson_df.columns if ‘Pearson_’ in col]
if pearson_cols:
ideal_pearson_df[‘Max_Abs_Pearson’] = ideal_pearson_df[pearson_cols].abs().max(axis=1)
ideal_pearson_df = ideal_pearson_df.sort_values(‘Max_Abs_Pearson’, ascending=False)

# Kanal fırsatları – Pearson değerine göre sırala (İlk 50)
channel_opp_df = pd.DataFrame(self.channel_opportunities)
if not channel_opp_df.empty:
channel_opp_df = channel_opp_df.sort_values([‘Pearson’, ‘Alt_Fark_Pct’], ascending=[False, True]).head(
50)

# Breakout adayları – Pearson değerine göre sırala (İlk 50)
breakout_df = pd.DataFrame(self.breakout_candidates)
if not breakout_df.empty:
breakout_df = breakout_df.sort_values([‘Pearson’, ‘Ust_Fark_Pct’], ascending=[False, False]).head(50)

# İstatistikler
stats_df = pd.DataFrame([
{"Metrik": key, "Deger": value} for key, value in self.statistics.items()
])

# Ana dosyayı kaydet
print(f"{Fore.GREEN} Ana dosya kaydediliyor: {main_file}")
with pd.ExcelWriter(main_file, engine=’openpyxl’) as writer:
# Ana sayfalar
self.write_sheet_with_formatting(writer, pd.DataFrame(self.all_results), "TumSonuclar", "A2")
self.write_sheet_with_formatting(writer, ideal_pearson_df, "IdealPearson", "A2")
self.write_sheet_with_formatting(writer, channel_opp_df, "KanalFirsatlari_Top50", "A2")
self.write_sheet_with_formatting(writer, breakout_df, "BreakoutAdaylari_Top50", "A2")
self.write_sheet_with_formatting(writer, stats_df, "Istatistikler", "A2")

# Periyot bazlı sayfalar
for period in self.pearson_periods:
period_df = pd.DataFrame(self.period_results[period])
if not period_df.empty:
period_df = period_df.sort_values(‘Pearson’, ascending=False)
self.write_sheet_with_formatting(writer, period_df, f"Periyot_{period}", "A2")

# Arşiv dosyasını kaydet
print(f"{Fore.BLUE} Arşiv dosyası kaydediliyor: {archive_file}")
with pd.ExcelWriter(archive_file, engine=’openpyxl’) as writer:
self.write_sheet_with_formatting(writer, pd.DataFrame(self.all_results), "TumSonuclar", "A2")
self.write_sheet_with_formatting(writer, ideal_pearson_df, "IdealPearson", "A2")
self.write_sheet_with_formatting(writer, channel_opp_df, "KanalFirsatlari_Top50", "A2")
self.write_sheet_with_formatting(writer, breakout_df, "BreakoutAdaylari_Top50", "A2")
self.write_sheet_with_formatting(writer, stats_df, "Istatistikler", "A2")

for period in self.pearson_periods:
period_df = pd.DataFrame(self.period_results[period])
if not period_df.empty:
period_df = period_df.sort_values(‘Pearson’, ascending=False)
self.write_sheet_with_formatting(writer, period_df, f"Periyot_{period}", "A2")

return True

except Exception as e:
print(f"{Fore.RED}❌ Sonuç kaydetme hatası: {e}")
return False

def print_summary(self):
"""Özet rapor"""
total = len(self.successful_files) + len(self.failed_files)
success_rate = (len(self.successful_files) / total * 100) if total &gt; 0 else 0

print(f"\n{Fore.CYAN} ===== LİNEER REGRESYON ANALİZ RAPORU =====")
print(f"{Fore.BLUE} Analiz Periyotları: {‘, ‘.join(map(str, self.pearson_periods))}")
print(f"{Fore.GREEN}✅ Başarılı: {len(self.successful_files)}")
print(f"{Fore.RED}❌ Başarısız: {len(self.failed_files)}")
print(f"{Fore.BLUE} Başarı oranı: {success_rate:.1f}%")

print(f"\n{Fore.MAGENTA} SONUÇLAR:")
print(f"{Fore.GREEN} Toplam Analiz: {len(self.all_results)}")
print(f"{Fore.YELLOW} Kanal Alt Fırsatları: {len(self.channel_opportunities)}")
print(f"{Fore.RED} Breakout Adayları: {len(self.breakout_candidates)}")
print(f"{Fore.BLUE} İdeal Pearson Sayısı: {len(self.ideal_pearson)}")

# En yüksek Pearson değerleri
if self.all_results:
high_pearson = [r for r in self.all_results if abs(r.get(‘Pearson’, 0)) &gt;= 0.9]
print(f"{Fore.GREEN} ⭐ Yüksek Pearson (&gt;=0.9): {len(high_pearson)}")

def save_failed_list(self, filename="basarisiz_regresyon_dosyalari.txt"):
"""Başarısız dosyaları kaydetme"""
if self.failed_files:
try:
with open(filename, ‘w’, encoding=’utf-8′) as f:
f.write("# Başarısız Lineer Regresyon analizi dosyaları\n")
f.write(f"# Tarih: {datetime.now().strftime(‘%Y-%m-%d’)}\n\n")
for file_name in self.failed_files:
f.write(f"{file_name}\n")
print(f"{Fore.YELLOW} Başarısız dosyalar {filename} dosyasına kaydedildi.")
except Exception as e:
print(f"{Fore.RED}❌ Başarısız dosya listesi kaydetme hatası: {e}")

def main(self):
"""Ana fonksiyon"""
print(f"{Fore.CYAN} Lineer Regresyon ve Pearson Analizi Başlatılıyor…")
print(f"{Fore.BLUE} Analiz Periyotları: {‘, ‘.join(map(str, self.pearson_periods))}")
print(f"{Fore.BLUE} Özel Analiz Periyotları: {‘, ‘.join(map(str, self.analysis_periods))}")

# Giriş dosyalarını bulma
input_files = self.find_input_files()

if not input_files:
return

print(f"{Fore.BLUE} Toplam işlenecek dosya: {len(input_files)}\n")

# Dosyaları işleme
for i, file_path in enumerate(input_files, 1):
print(f"\n{Fore.MAGENTA}[{i}/{len(input_files)}] İşleniyor…")
self.process_single_file(file_path)

# EMA verilerini birleştirme
self.merge_ema_data()

# İstatistikleri hesaplama
self.calculate_statistics()

# Sonuçları kaydetme
success = self.save_results()

if success:
self.print_summary()

# Başarısız dosyaları kaydetme
self.save_failed_list()

print(f"\n{Fore.GREEN} Lineer regresyon analizi tamamlandı!")
print(f"{Fore.BLUE} Ana dosya: StokData/lineer_regresyon_analiz.xlsx")
print(f"{Fore.BLUE} Arşiv klasörü: StokData/LinearRegression/")

# Kullanım
if __name__ == "__main__":
analyzer = LinearRegressionAnalyzer()
analyzer.main()
[/php]

Recent Posts

  • Kod gösterimleri ile ilgili sıkıntı
  • Borsapin EMA Sinyal Tablosu (Kısa, Orta, Uzun Vade)
  • Python BorsaPin Lineer Regresyon ve Pearson Analizi Betiği
  • Borsapin TradingView WT Sinyal Osilatör: Piyasa Dönüşlerini Tespit Etmede Güçlü Bir Araç
  • Python ile Borsa Verilerinden Wave Trend İndikatörü Sinyal Tarama Betiği

Recent Comments

  1. ateş - Pine Script ile Günlük, Haftalık, Aylık ve Yıllık Pivot Noktaları Gösteren Gelişmiş Tablo İndikatörü
  2. ateş - Pine Script ile Günlük, Haftalık, Aylık ve Yıllık Pivot Noktaları Gösteren Gelişmiş Tablo İndikatörü
  3. sdc - Pine Script ile Günlük, Haftalık, Aylık ve Yıllık Pivot Noktaları Gösteren Gelişmiş Tablo İndikatörü
  4. ateş - Pine Script ile Günlük, Haftalık, Aylık ve Yıllık Pivot Noktaları Gösteren Gelişmiş Tablo İndikatörü
  5. Borsapin :) - Pine Script ile Günlük, Haftalık, Aylık ve Yıllık Pivot Noktaları Gösteren Gelişmiş Tablo İndikatörü

Archives

  • Ağustos 2025
  • Temmuz 2025
  • Nisan 2025
  • Şubat 2025
  • Ocak 2025
  • Kasım 2024
  • Ekim 2024
  • Temmuz 2024
  • Mart 2024
  • Ocak 2023
  • Ağustos 2018
  • Temmuz 2016
  • Kasım 2015
  • Kasım 2014
  • Aralık 2013
  • Eylül 2013
  • Kasım 2012
  • Ekim 2012
  • Haziran 2011
  • Mart 2011
  • Şubat 2011
  • Ocak 2011
  • Aralık 2010
  • Kasım 2010
  • Eylül 2010
  • Ağustos 2010
  • Temmuz 2010
  • Haziran 2010
  • Mayıs 2010
  • Nisan 2010
  • Mart 2010
  • Şubat 2010
  • Ocak 2010
  • Aralık 2009
  • Kasım 2009
  • Ekim 2009
  • Eylül 2009
  • Ağustos 2009
  • Temmuz 2009
  • Haziran 2009
  • Mayıs 2009
  • Nisan 2009
  • Mart 2009
  • Şubat 2009
  • Ocak 2009
  • Aralık 2008
  • Kasım 2008

Categories

  • Anlık Tepkiler
  • Bilinçaltı Sayıklamaları
  • Bitmeyen Senfoni
  • Blog
  • BorsaPin
  • Bu nedir ?
  • Code is prority
  • Halet-i Ruhiye
  • İndikatör
  • Karma Karışık
  • Pine Script
  • Python
  • Teknik Analiz
  • Teknoloji
  • Trading View
  • Wordpress
Footer Sidebar 1

Drop a widget on "Footer Sidebar 1" sidebar at Appearance > Widgets page.

Footer Sidebar 2

Drop a widget on "Footer Sidebar 2" sidebar at Appearance > Widgets page.

Footer Sidebar 3

Drop a widget on "Footer Sidebar 3" sidebar at Appearance > Widgets page.

Footer Sidebar 4

Drop a widget on "Footer Sidebar 4" sidebar at Appearance > Widgets page.

2026 © Blog
Truemag theme by StrictThemes