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
// 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)

Borsapin WT Sinyal Osilatör, Wave Trend (WT) göstergesine dayalı olarak geliştirilen, alım-satım fırsatlarını görsel olarak tespit etmeye yardımcı olan gelişmiş bir teknik analiz aracıdır. Fiyatın ortalama eğilimlerinden sapmalarını ölçerek aşırı alım ve aşırı satım bölgelerini tanımlar, bu sayede yatırımcıya potansiyel dönüş noktaları hakkında bilgi verir.
Temel Özellikleri:
Wave Trend Çift Çizgi Sistemi (WT1 & WT2):
WT1 ve WT2, fiyatların içsel momentumunu ortaya koymak için iki farklı EMA (Üssel Hareketli Ortalama) ile hesaplanır. Bu çizgiler arasındaki kesişimler, alım ve satım sinyallerini oluşturur.
Aşırı Alım/Satım Seviyeleri:
Kullanıcı tarafından ayarlanabilen seviye çizgileri sayesinde WT2’nin bu bölgeleri geçmesiyle gelen sinyaller daha anlamlı hale gelir.
Aşırı alım: 53 ve 60 üzeri
Aşırı satım: -53 ve -60 altı
Histogram Gösterimi:
WT1 ile WT2 arasındaki fark histogram şeklinde çizilerek momentum gücü görsel olarak analiz edilebilir.
Alım/Satım Sinyalleri:
Al Sinyali: WT1’in WT2’yi yukarı yönde kesmesi
Dipte Al Sinyali: Bu kesişimin WT2, aşırı satım bölgesindeyken gerçekleşmesi
Sat Sinyali: WT2’nin WT1’i yukarıdan kesmesi
Tepede Sat Sinyali: Bu kesişimin WT2, aşırı alım bölgesindeyken gerçekleşmesi
Son Sinyal Tablosu:
Grafik üzerinde son oluşan sinyal ve zaman bilgisi, üst sağ köşede tablo olarak gösterilir.
Neden Kullanılmalı?
Borsapin WT Sinyal Osilatör, sadece klasik WT göstergesinden daha fazlasını sunar. Sinyallerin türünü ve konumunu ayırt etmesi, arka plan renk uyarıları ve tablo ile son sinyali açıkça belirtmesi, karar alma süreçlerini kolaylaştırır. Özellikle dip ve tepe bölgelerinde oluşan sinyaller, yüksek risk-getiri oranına sahip işlemler için avantaj sağlar.
Not: Her teknik gösterge gibi WT Sinyal Osilatör de tek başına kullanılmamalı, hacim, trend yapısı ve diğer teknik araçlarla birlikte değerlendirilmelidir.
Borsapin WT Sinyal Osilatör TradingView Pine Script Kodu
// Bu, Pine Script™ kodu Mozilla Kamu Lisansı 2.0 (MPL-2.0) altında lisanslandı
// © krstsntrk © BorsaPin codeispriority https://www.kursatsenturk.com
// Saraylarda süremem, Dağlarda sürdüğümü. Bin cihana değişmem Şu öksüz Türk'lüğümü... Atsız
//@version=5
indicator("Borsapin WT Sinyal Osilatör", shorttitle="Borsapin WT Sinyal Osilatör", overlay=false)
// Girdi Parametreleri
n1 = input.int(10, title="Kanal Uzunluğu", minval=1, maxval=500)
n2 = input.int(21, title="Ortalama Uzunluğu", minval=1, maxval=500)
obLevel1 = input.int(60, title="Aşırı Alım Seviyesi 1", minval=1, maxval=500)
obLevel2 = input.int(53, title="Aşırı Alım Seviyesi 2", minval=1, maxval=500)
osLevel1 = input.int(-60, title="Aşırı Satım Seviyesi 1", minval=-500, maxval=-1)
osLevel2 = input.int(-53, title="Aşırı Satım Seviyesi 2", minval=-500, maxval=-1)
// Wave Trend Hesaplaması
ap = (high + low + close) / 3
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)
wt1 = tci
wt2 = ta.sma(wt1, 4)
// Wave Trend Çizgilerini Çiz
plot(wt1, color=color.green, title="WT1", linewidth=2)
plot(wt2, color=color.red, title="WT2", linewidth=2)
plot(wt1 - wt2, color=color.blue, title="WT1-WT2", style=plot.style_histogram)
// Seviye Çizgileri
hline(obLevel1, "Aşırı Alım 1", color=color.red, linestyle=hline.style_dashed)
hline(obLevel2, "Aşırı Alım 2", color=color.orange, linestyle=hline.style_dashed)
hline(osLevel1, "Aşırı Satım 1", color=color.green, linestyle=hline.style_dashed)
hline(osLevel2, "Aşırı Satım 2", color=color.lime, linestyle=hline.style_dashed)
hline(0, "Sıfır Çizgisi", color=color.gray, linestyle=hline.style_solid)
// Sinyal Koşulları
buySignal = ta.crossover(wt1, wt2)
buyAtBottom = buySignal and wt2 < osLevel2
sellSignal = ta.crossover(wt2, wt1)
sellAtTop = sellSignal and wt2 > obLevel2
// Sinyal Şekilleri
plotshape(buySignal, title="Al Sinyali", location=location.bottom, color=color.green, style=shape.circle, size=size.tiny)
plotshape(buyAtBottom, title="Dipte Al Sinyali", location=location.bottom, color=color.lime, style=shape.circle, size=size.small)
plotshape(sellSignal, title="Sat Sinyali", location=location.top, color=color.red, style=shape.circle, size=size.tiny)
plotshape(sellAtTop, title="Tepede Sat Sinyali", location=location.top, color=color.maroon, style=shape.circle, size=size.small)
// Arka Plan Rengi
bgcolor(buyAtBottom ? color.new(color.green, 90) : sellAtTop ? color.new(color.red, 90) : na)
// Alarm Koşulları
alertcondition(buySignal, title="Al Sinyali", message="Wave Trend: Al Sinyali")
alertcondition(buyAtBottom, title="Dipte Al", message="Wave Trend: Dipte Al Sinyali")
alertcondition(sellSignal, title="Sat Sinyali", message="Wave Trend: Sat Sinyali")
alertcondition(sellAtTop, title="Tepede Sat", message="Wave Trend: Tepede Sat Sinyali")
// Son Sinyal ve Zaman Bilgisi
var table sigTable = table.new(position.top_right, 2, 2, frame_color=color.gray, border_width=1)
// Tarih formatlaması
yearStr = str.tostring(year)
monthStr = str.tostring(month, "00")
dayStr = str.tostring(dayofmonth, "00")
hourStr = str.tostring(hour, "00")
minuteStr = str.tostring(minute, "00")
newFormattedTime = yearStr + "-" + monthStr + "-" + dayStr + " " + hourStr + ":" + minuteStr
// Son sinyal bilgileri
var string lastSignal = na
var string lastDate = na
if buyAtBottom
lastSignal := "Dipte Al"
lastDate := newFormattedTime
else if buySignal
lastSignal := "Al"
lastDate := newFormattedTime
else if sellAtTop
lastSignal := "Tepede Sat"
lastDate := newFormattedTime
else if sellSignal
lastSignal := "Sat"
lastDate := newFormattedTime
// Tablo
table.cell(sigTable, 0, 0, "Son Sinyal", text_color=color.white, bgcolor=color.gray)
table.cell(sigTable, 1, 0, lastSignal != na ? lastSignal : "Yok", text_color=color.white, bgcolor=color.new(#3192e2, 1))
table.cell(sigTable, 0, 1, "Tarih", text_color=color.white, bgcolor=color.gray)
table.cell(sigTable, 1, 1, lastDate != na ? lastDate : "-", text_color=color.white, bgcolor=color.new(#3192e2, 25))
Borsa analizinde teknik göstergeler, yatırım kararlarının vazgeçilmez araçlarıdır. Bu yazımızda, Python kullanarak borsa hisselerinin kapanış verilerinden Wave Trend Osilatörü (WT) hesaplayan ve bu verilerden al-sat sinyalleri üreten gelişmiş bir sistem paylaşacağım.
Bu sistem, pandas, numpy, openpyxl, colorama ve glob gibi popüler Python kütüphanelerini kullanır. Önceki çalışamalarımızda ki Excel dosyalarından kapanış verilerini okur, WT1 ve WT2 eğrilerini hesaplar, Dip ve tepe bölgelerinde al-sat sinyalleri üretir, Sonuçları Excel’e kaydeder ve Başarılı/başarısız hisse senetleri için rapor oluşturur.
Wave Trend İndikatörü Nedir?
Wave Trend (WT) osilatörü, fiyatın momentumu hakkında bilgi sağlayan ve özellikle dip/tepe bölgelerinde verdiği sinyallerle ön plana çıkan bir teknik göstergedir. İki bileşenden oluşur:
WT1: Ana sinyal çizgisi
WT2: WT1’in kısa vadeli hareketli ortalaması (sinyal çizgisi)
Alım/satım sinyalleri bu iki çizginin kesişimleriyle belirlenir. Ek olarak, aşırı alım (OB) ve aşırı satım (OS) seviyeleri ile sinyallerin güvenilirliği artırılır.
1. Wave Trend Hesaplama
Kodun kalbinde, calculate_wave_trend fonksiyonu yer alıyor. Burada;
ESA (Exponential Smoothed Average) hesaplanır.
ESA’den sapmalar üzerinden CI (Composite Index) elde edilir.
CI’nın üstel ortalaması WT1, onun da 4 dönemlik ortalaması WT2 olarak alınır.
WT1 ve WT2 arasındaki kesişimlere göre sinyaller üretilir:
Buy (AL): WT1, WT2’nin üzerine çıkar
Sell(SAT): WT1, WT2’nin altına iner
BuyAtBottom(DIPTE AL): Aşırı satım bölgesinde al sinyali
SellAtTop(TEPEDE SAT): Aşırı alım bölgesinde sat sinyali
2. Dosya Taraması ve İşleme
Tüm hisse senedi kapanış verileri “StokData/Kapanis/” klasöründen otomatik olarak taranır. Her bir dosya için:
Tarih sıralaması yapılır. WT hesaplanır. Son sinyal (AL, SAT, DIPTE_AL, TEPEDE_SAT) analiz edilir.
Sonuçlar “StokData/WaveTrend/” klasörüne kaydedilir.
3. Sinyal Özeti ve Raporlama
Tüm hisseler için elde edilen sinyaller, Tarih ve WT1/WT2 değerleriyle birlikte özetlenir.
“StokData/wave_trend_signals_YYYYMMDD_HHMM.xlsx” adıyla kaydedilir.
Başarılı ve başarısız işlenen hisselerin listesi oluşturulur.
Aşağıda paylaşıcağım Python Çalışmasını X_04_BorsaPin_WaveTrend.py olarak kayıt edebilirsiniz.
Python Kodu
import pandas as pd
import numpy as np
import os
from datetime import datetime
from colorama import Fore, init
import glob
"""
Borsapin StokData/Kapanis/ klasöründeki hisse kapanış datalarından Wave Trend Sinyallerini hesaplar.
www.kursatsenturk.com
"""
init(autoreset=True)
class WaveTrendCalculator:
def __init__(self, n1=10, n2=21, ob2=53, os2=-53):
self.n1 = n1 # ESA periyodu
self.n2 = n2 # CI periyodu
self.ob2 = ob2 # Overbought seviyesi
self.os2 = os2 # Oversold seviyesi
self.successful_files = []
self.failed_files = []
self.signal_results = []
def calculate_wave_trend(self, df):
"""Wave Trend hesaplama fonksiyonu"""
try:
close = df['Kapanış']
# ESA (Exponential Smoothed Average)
esa = close.ewm(span=self.n1, adjust=False).mean()
# D (Deviation)
d = (close - esa).abs().ewm(span=self.n1, adjust=False).mean()
# CI (Currency Index)
ci = (close - esa) / (0.015 * d)
# WT1 ve WT2 hesaplama
wt1 = ci.ewm(span=self.n2, adjust=False).mean()
wt2 = wt1.rolling(window=4).mean()
# Sinyaller
buy = (wt1 > wt2) & (wt1.shift(1) <= wt2.shift(1))
buy_at_bottom = buy & (wt2 < self.os2)
sell = (wt2 > wt1) & (wt2.shift(1) <= wt1.shift(1))
sell_at_top = sell & (wt2 > self.ob2)
return wt1, wt2, buy, buy_at_bottom, sell, sell_at_top
except Exception as e:
print(f"{Fore.RED}❌ Wave Trend hesaplama hatası: {e}")
return None, None, None, None, None, None
@staticmethod
def get_last_signal(df, ticker_name):
"""Son sinyali bulma fonksiyonu"""
try:
# NaN değerleri temizle
clean_df = df.dropna(subset=['WT1', 'WT2'])
if clean_df.empty:
return None, None, None, None
# Son tarihten geriye doğru sinyal ara
for i in reversed(clean_df.index):
row = clean_df.loc[i]
date = row['Tarih']
wt1 = row['WT1']
wt2 = row['WT2']
if row['BuyAtBottom']:
return 'DIPTE_AL', date, wt1, wt2
elif row['SellAtTop']:
return 'TEPEDE_SAT', date, wt1, wt2
elif row['Buy']:
return 'AL', date, wt1, wt2
elif row['Sell']:
return 'SAT', date, wt1, wt2
return None, None, None, None
except Exception as e:
print(f"{Fore.RED}❌ {ticker_name} sinyal arama hatası: {e}")
return None, None, None, None
def process_single_file(self, file_path):
"""Tek dosya için Wave Trend hesaplama"""
# ticker_name'i en başta tanımla
ticker_name = "BILINMEYEN"
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} Wave Trend hesaplanıyor: {ticker_name}...")
# Excel dosyasını okuma
df = pd.read_excel(file_path)
# Gerekli sütunların varlığını kontrol etme
required_columns = ['Tarih', 'Kapanış']
missing_columns = [col for col in required_columns if col not in df.columns]
if missing_columns:
raise ValueError(f"Eksik sütunlar: {missing_columns}")
# Veri kontrolü
if df.empty or df['Kapanış'].isna().all():
raise ValueError("Kapanış verisi boş veya geçersiz")
# Tarihe göre sıralama
df = df.sort_values('Tarih').reset_index(drop=True)
# Wave Trend hesaplamaları
print(f"{Fore.CYAN} ⚡ Wave Trend parametreleri: n1={self.n1}, n2={self.n2}, ob={self.ob2}, os={self.os2}")
wt1, wt2, buy, buy_at_bottom, sell, sell_at_top = self.calculate_wave_trend(df)
if wt1 is None:
raise ValueError("Wave Trend hesaplama başarısız")
# Yeni DataFrame oluşturma
result_df = pd.DataFrame()
result_df['Hisse_Adi'] = [ticker_name] * len(df)
result_df['Tarih'] = df['Tarih']
result_df['Kapanış'] = df['Kapanış']
result_df['WT1'] = wt1.round(4)
result_df['WT2'] = wt2.round(4)
result_df['Buy'] = buy
result_df['BuyAtBottom'] = buy_at_bottom
result_df['Sell'] = sell
result_df['SellAtTop'] = sell_at_top
# Son sinyali bulma
signal_type, signal_date, last_wt1, last_wt2 = self.get_last_signal(result_df, ticker_name)
# Sinyal sonucunu kaydetme
if signal_type:
self.signal_results.append({
'Hisse_Adi': ticker_name,
'Sinyal': signal_type,
'Sinyal_Tarihi': pd.to_datetime(signal_date).date() if signal_date else None,
'WT1': round(last_wt1, 2) if last_wt1 else None,
'WT2': round(last_wt2, 2) if last_wt2 else None
})
# Renkli sinyal yazdırma
renk = Fore.GREEN if "AL" in signal_type else Fore.RED
print(renk + f" Son Sinyal: {signal_type} @ {signal_date}")
else:
print(f"{Fore.WHITE} ▫️ Aktif sinyal yok")
# Çıktı klasörünü oluşturma
output_folder = "StokData/WaveTrend/"
os.makedirs(output_folder, exist_ok=True)
# Dosya yolu
output_file = os.path.join(output_folder, f"{ticker_name}.xlsx")
# Excel'e kaydetme
result_df.to_excel(output_file, index=False)
print(f"{Fore.GREEN}✅ {ticker_name} Wave Trend verileri başarıyla kaydedildi.")
print(f"{Fore.BLUE} Konum: {output_file}")
print(f"{Fore.BLUE} Toplam satır: {len(result_df)}")
self.successful_files.append(ticker_name)
return True
except Exception as e:
print(f"{Fore.RED}❌ {ticker_name} için hata: {e}")
self.failed_files.append(ticker_name)
return False
@staticmethod
def find_input_files(input_folder="StokData/Kapanis/"):
"""Giriş dosyalarını bulma"""
try:
# Excel dosyalarını arama
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 save_signals_summary(self, filename=None):
"""Sinyal özetini kaydetme"""
if not self.signal_results:
print(f"{Fore.YELLOW}⚠️ Kaydedilecek sinyal yok.")
return
if filename is None:
timestamp = datetime.now().strftime('%Y%m%d_%H%M')
filename = f"StokData/wave_trend_signals_{timestamp}.xlsx"
try:
# Klasör oluşturma
os.makedirs(os.path.dirname(filename), exist_ok=True)
# Sinyal DataFrame'i oluşturma
signals_df = pd.DataFrame(self.signal_results)
# Sinyal türüne göre sıralama
signal_order = ['DIPTE_AL', 'AL', 'SAT', 'TEPEDE_SAT']
signals_df['sinyal_order'] = signals_df['Sinyal'].map({s: i for i, s in enumerate(signal_order)})
signals_df = signals_df.sort_values(['sinyal_order', 'Sinyal_Tarihi'], ascending=[True, False])
signals_df = signals_df.drop('sinyal_order', axis=1)
# Excel'e kaydetme
signals_df.to_excel(filename, index=False)
print(f"{Fore.GREEN} Sinyal özeti kaydedildi: {filename}")
print(f"{Fore.BLUE} Toplam sinyal: {len(signals_df)}")
# Sinyal türü dağılımı
signal_counts = signals_df['Sinyal'].value_counts()
for signal, count in signal_counts.items():
color = Fore.GREEN if "AL" in signal else Fore.RED
print(f"{color} {signal}: {count} adet")
except Exception as e:
print(f"{Fore.RED}❌ Sinyal özeti kaydetme hatası: {e}")
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 > 0 else 0
print(f"\n{Fore.CYAN} ===== WAVE TREND HESAPLAMA RAPORU =====")
print(f"{Fore.BLUE} Parametreler: n1={self.n1}, n2={self.n2}, OB={self.ob2}, OS={self.os2}")
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"{Fore.MAGENTA} Toplam sinyal: {len(self.signal_results)}")
if self.successful_files:
print(f"{Fore.GREEN} Başarılı dosyalar: {', '.join(self.successful_files[:10])}")
if len(self.successful_files) > 10:
print(f"{Fore.GREEN} ... ve {len(self.successful_files) - 10} dosya daha")
if self.failed_files:
print(f"{Fore.RED} Başarısız dosyalar: {', '.join(self.failed_files)}")
def save_failed_list(self, filename="basarisiz_wavetrend_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 Wave Trend hesaplama dosyaları\n")
f.write(f"# Tarih: {datetime.now().strftime('%Y-%m-%d')}\n")
f.write(f"# Parametreler: n1={self.n1}, n2={self.n2}, OB={self.ob2}, OS={self.os2}\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} Wave Trend Hesaplama Sistemi Başlatılıyor...")
print(f"{Fore.BLUE} Parametreler: n1={self.n1}, n2={self.n2}, OB={self.ob2}, OS={self.os2}")
# 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)
# Sonuçları kaydetme ve raporlama
self.save_signals_summary()
self.save_failed_list()
self.print_summary()
print(f"\n{Fore.GREEN} Wave Trend hesaplama işlemi tamamlandı!")
print(f"{Fore.BLUE} Detay dosyaları: StokData/WaveTrend/")
print(f"{Fore.BLUE} Sinyal özeti: StokData/Wave_Trend_Sinyal_*.xlsx")
# Kullanım
if __name__ == "__main__":
# Özelleştirilebilir parametreler
calculator = WaveTrendCalculator(
n1=10, # ESA periyodu
n2=21, # CI periyodu
ob2=53, # Overbought seviyesi
os2=-53 # Oversold seviyesi
)
calculator.main()
Bu Bist Tarama projesininin 6. makalesi oldu sanırım. Bir sonraki çalışmamızda yukarıda paylaştığım python betiğinin (wavetrend osilatör) TradingView üzerinde çalışan indikatör kodlarını paylaşacağım, sonrasında Python Bist Tarama çalışmaları için Osilatör değerleri yada Linear Regresyon kanalları ile ilgili betikler paylaşabilirim.
Trend takibi, finansal piyasalarda başarılı işlem stratejilerinin temelini oluşturur. Bu kapsamda, hareketli ortalamalar (MA) özellikle Exponential Moving Average (EMA), piyasa yönünü ve momentumunu belirlemede sıklıkla tercih edilen araçlardır. “Ideal EMA Dizilim” adlı bu özel gösterge, çoklu EMA’ların sıralanışını analiz ederek trendin gücünü ve netliğini ölçmeyi amaçlıyor. Önceki Makalelerde Python ile kapanış verilerini çektik, o verilerle Ema periyodlarını belirledik sonrasında ise Python ile İdeal Ema sinyallerini oluşturan betiklede bu sinyalleri Excele dökmüştük.
Gösterge, aşağıdaki 10 adet üstel hareketli ortalamayı (EMA) hesaplar:
Bu periyotlar kısa, orta ve uzun vadeli eğilimleri birlikte analiz etmeye olanak tanır.
EMA dizilimleri büyükten küçüğe (azalan) veya küçükten büyüğe (artan) doğru sıralanabilir.
Grafiklerde Gösterim
Bir Önceki Makaledeki Python idealEmaDizilim tarama çalışması dosyasıyla uyumlu çalışır.
Trading View Pine Script İdeal Ema Dizilim İndikatör Kodu
// Bu, Pine Script™ kodu Mozilla Kamu Lisansı 2.0 (MPL-2.0) altında lisanslandı
// © krstsntrk © BorsaPin codeispriority
// Saraylarda süremem, Dağlarda sürdüğümü. Bin cihana değişmem Şu öksüz Türk'lüğümü... Atsız
// @version=6
indicator("BorsaPin IdealEMA Dizilim (EMA ALIGNMENT) ", shorttitle="BorsaPin IdealEMA Dizilim (EMA ALIGNMENT)", overlay=true)
// Ayarlar
show_table = input.bool(true, "Tabloyu Göster", group="Görünüm")
table_position = input.string("Sağ Alt", "Tablo Konumu", options=["Sol Üst", "Orta Üst", "Sağ Üst", "Sol Orta", "Tam Orta", "Sağ Orta", "Sol Alt", "Orta Alt", "Sağ Alt"], group="Görünüm")
table_size = input.string("Küçük", "Tablo Boyutu", options=["Çok Küçük", "Küçük", "Normal", "Büyük"], group="Görünüm")
show_ema_lines = input.bool(true, "EMA Cizgilerini Goster", group="EMA Ayarlari")
show_background = input.bool(true, "Arka Plan Renklerini Goster", group="EMA Ayarlari")
// EMA gorunurluk ayarlari
show_ema5 = input.bool(true, "EMA 5", inline="ema1", group="EMA Cizgileri")
show_ema8 = input.bool(true, "EMA 8", inline="ema1", group="EMA Cizgileri")
show_ema13 = input.bool(true, "EMA 13", inline="ema2", group="EMA Cizgileri")
show_ema21 = input.bool(true, "EMA 21", inline="ema2", group="EMA Cizgileri")
show_ema34 = input.bool(true, "EMA 34", inline="ema3", group="EMA Cizgileri")
show_ema55 = input.bool(true, "EMA 55", inline="ema3", group="EMA Cizgileri")
show_ema89 = input.bool(true, "EMA 89", inline="ema4", group="EMA Cizgileri")
show_ema144 = input.bool(true, "EMA 144", inline="ema4", group="EMA Cizgileri")
show_ema233 = input.bool(true, "EMA 233", inline="ema5", group="EMA Cizgileri")
show_ema370 = input.bool(true, "EMA 370", inline="ema5", group="EMA Cizgileri")
// EMA Periyodları (Python kodundaki ile aynı)
ema5 = ta.ema(close, 5)
ema8 = ta.ema(close, 8)
ema13 = ta.ema(close, 13)
ema21 = ta.ema(close, 21)
ema34 = ta.ema(close, 34)
ema55 = ta.ema(close, 55)
ema89 = ta.ema(close, 89)
ema144 = ta.ema(close, 144)
ema233 = ta.ema(close, 233)
ema370 = ta.ema(close, 370)
// EMA'ları dizi olarak tanımlama
ema_values = array.new<float>()
array.push(ema_values, ema5)
array.push(ema_values, ema8)
array.push(ema_values, ema13)
array.push(ema_values, ema21)
array.push(ema_values, ema34)
array.push(ema_values, ema55)
array.push(ema_values, ema89)
array.push(ema_values, ema144)
array.push(ema_values, ema233)
array.push(ema_values, ema370)
ema_periods = array.new<int>()
array.push(ema_periods, 5)
array.push(ema_periods, 8)
array.push(ema_periods, 13)
array.push(ema_periods, 21)
array.push(ema_periods, 34)
array.push(ema_periods, 55)
array.push(ema_periods, 89)
array.push(ema_periods, 144)
array.push(ema_periods, 233)
array.push(ema_periods, 370)
// İdeal Ema Dizilim hesaplama
// Dizilimin sirali olup olmadigini kontrol etme fonksiyonu
is_descending_order(ema_array) =>
size = array.size(ema_array)
is_desc = true
for i = 0 to size - 2
if array.get(ema_array, i) < array.get(ema_array, i + 1)
is_desc := false
break
is_desc
is_ascending_order(ema_array) =>
size = array.size(ema_array)
is_asc = true
for i = 0 to size - 2
if array.get(ema_array, i) > array.get(ema_array, i + 1)
is_asc := false
break
is_asc
// Maximum ve minimum EMA değerlerini bulma
max_ema = math.max(ema5, math.max(ema8, math.max(ema13, math.max(ema21, math.max(ema34, math.max(ema55, math.max(ema89, math.max(ema144, math.max(ema233, ema370)))))))))
min_ema = math.min(ema5, math.min(ema8, math.min(ema13, math.min(ema21, math.min(ema34, math.min(ema55, math.min(ema89, math.min(ema144, math.min(ema233, ema370)))))))))
// Ideal EMA dizilim kontrolu (Python kodumuzdaki mantik)
ideal_ema_status = ""
if close > max_ema and is_descending_order(ema_values)
ideal_ema_status := "Ideal EMA Yukselis"
else if close < min_ema and is_ascending_order(ema_values)
ideal_ema_status := "Ideal EMA Dusus"
else
ideal_ema_status := "Ideal EMA Notr"
// Potansiyel olusum kontrolu
is_potential = close > min_ema and close < max_ema
// Sinyal degisimi tespiti
var string prev_status = ""
var int signal_bar = 0
var string signal_date = ""
if ideal_ema_status != prev_status
prev_status := ideal_ema_status
signal_bar := bar_index
signal_date := str.tostring(year) + "-" + str.tostring(month, "00") + "-" + str.tostring(dayofmonth, "00")
// Görseller
// EMA cizgileri - sadece secilenleri goster
plot(show_ema_lines and show_ema5 ? ema5 : na, "EMA 5", color=color.new(color.red, 0), linewidth=1)
plot(show_ema_lines and show_ema8 ? ema8 : na, "EMA 8", color=color.new(color.orange, 0), linewidth=1)
plot(show_ema_lines and show_ema13 ? ema13 : na, "EMA 13", color=color.new(color.yellow, 0), linewidth=1)
plot(show_ema_lines and show_ema21 ? ema21 : na, "EMA 21", color=color.new(color.green, 0), linewidth=1)
plot(show_ema_lines and show_ema34 ? ema34 : na, "EMA 34", color=color.new(color.blue, 0), linewidth=1)
plot(show_ema_lines and show_ema55 ? ema55 : na, "EMA 55", color=color.new(color.purple, 0), linewidth=1)
plot(show_ema_lines and show_ema89 ? ema89 : na, "EMA 89", color=color.new(color.gray, 0), linewidth=1)
plot(show_ema_lines and show_ema144 ? ema144 : na, "EMA 144", color=color.new(color.maroon, 0), linewidth=1)
plot(show_ema_lines and show_ema233 ? ema233 : na, "EMA 233", color=color.new(color.navy, 0), linewidth=1)
plot(show_ema_lines and show_ema370 ? ema370 : na, "EMA 370", color=color.new(color.black, 0), linewidth=2)
// Sinyal noktalarini isaretleme - sadece secildiginde goster
signal_color = show_background ? (ideal_ema_status == "Ideal EMA Yukselis" ? color.new(color.green, 90) : ideal_ema_status == "Ideal EMA Dusus" ? color.new(color.red, 90) : is_potential ? color.new(color.yellow, 95) : na) : na
bgcolor(signal_color)
// Tablo
if show_table and barstate.islast
// Tablo pozisyonunu dinamik olarak ayarlama
table_pos = table_position == "Sol Üst" ? position.top_left : table_position == "Orta Üst" ? position.top_center : table_position == "Sağ Üst" ? position.top_right : table_position == "Sol Orta" ? position.middle_left : table_position == "Tam Orta" ? position.middle_center : table_position == "Sağ Orta" ? position.middle_right : table_position == "Sol Alt" ? position.bottom_left : table_position == "Orta Alt" ? position.bottom_center : position.bottom_right
t_size = table_size == "Çok Küçük" ? size.tiny : table_size == "Küçük" ? size.small : table_size == "Büyük" ? size.large : size.normal
// Ana tablo olusturma
info_table = table.new(table_pos, 3, 15, bgcolor=color.new(color.white, 0), border_width=2, border_color=color.new(color.gray, 0))
// Baslik satiri
table.cell(info_table, 0, 0, "EMA DIZILIM ANALIZI", text_color=color.white, bgcolor=color.new(color.blue, 0), text_size=t_size)
table.merge_cells(info_table, 0, 0, 2, 0)
// Mevcut durum
status_color = ideal_ema_status == "Ideal EMA Yukselis" ? color.new(color.green, 70) :
ideal_ema_status == "Ideal EMA Dusus" ? color.new(color.red, 70) :
color.new(color.gray, 70)
table.cell(info_table, 0, 1, "Mevcut Durum:", text_color=color.black, bgcolor=color.new(color.silver, 70), text_size=t_size)
table.cell(info_table, 1, 1, ideal_ema_status, text_color=color.black, bgcolor=status_color, text_size=t_size)
table.cell(info_table, 2, 1, is_potential ? "Potansiyel ✓" : "", text_color=color.black, bgcolor=color.new(color.yellow, 80), text_size=t_size)
// Son sinyal bilgisi
table.cell(info_table, 0, 2, "Son Sinyal:", text_color=color.black, bgcolor=color.new(color.silver, 70), text_size=t_size)
table.cell(info_table, 1, 2, signal_date, text_color=color.black, bgcolor=color.new(color.white, 50), text_size=t_size)
table.cell(info_table, 2, 2, str.tostring(bar_index - signal_bar) + " bar once", text_color=color.black, bgcolor=color.new(color.white, 50), text_size=t_size)
// EMA bilgileri baslik
table.cell(info_table, 0, 3, "EMA", text_color=color.white, bgcolor=color.new(color.navy, 0), text_size=t_size)
table.cell(info_table, 1, 3, "Deger", text_color=color.white, bgcolor=color.new(color.navy, 0), text_size=t_size)
table.cell(info_table, 2, 3, "Kapanis Orani", text_color=color.white, bgcolor=color.new(color.navy, 0), text_size=t_size)
// EMA degerleri ve oranlari
ema_list = array.from(ema5, ema8, ema13, ema21, ema34, ema55, ema89, ema144, ema233, ema370)
ema_names = array.from("EMA 5", "EMA 8", "EMA 13", "EMA 21", "EMA 34", "EMA 55", "EMA 89", "EMA 144", "EMA 233", "EMA 370")
for i = 0 to 9
row = i + 4
ema_val = array.get(ema_list, i)
ema_name = array.get(ema_names, i)
ratio = (close / ema_val - 1) * 100
// Renk belirleme (kapanis fiyatina gore) - pastel renkler
cell_color = close > ema_val ? color.new(color.green, 80) : color.new(color.red, 80)
table.cell(info_table, 0, row, ema_name, text_color=color.black, bgcolor=color.new(color.white, 70), text_size=t_size)
table.cell(info_table, 1, row, str.tostring(math.round(ema_val, 2)), text_color=color.black, bgcolor=cell_color, text_size=t_size)
table.cell(info_table, 2, row, str.tostring(math.round(ratio, 2)) + "%", text_color=color.black, bgcolor=cell_color, text_size=t_size)
// Sinyal degisimi icin alarm
alertcondition(ideal_ema_status != prev_status[1], "Ideal EMA Sinyal Degisimi", "Ideal EMA durumu degisti")
// Spesifik sinyaller icin alarm
alertcondition(ideal_ema_status == "Ideal EMA Yukselis" and prev_status[1] != "Ideal EMA Yukselis", "Ideal EMA Yukselis", "Ideal EMA Yukselis sinyali olustu!")
alertcondition(ideal_ema_status == "Ideal EMA Dusus" and prev_status[1] != "Ideal EMA Dusus", "Ideal EMA Dusus", "Ideal EMA Dusus sinyali olustu!")
// Potansiyel olusum alarmı
alertcondition(is_potential and not is_potential[1], "Potansiyel Olusim", "Ideal EMA potansiyel olusum tespit edildi!")
GirişTeknik analiz, yatırımcıların geçmiş fiyat hareketlerinden yola çıkarak gelecekteki fiyatları tahmin etmelerine yardımcı olan güçlü bir araçtır. Bu analiz türünde sıkça kullanılan araçlardan biri de Üssel Hareketli Ortalama (EMA – Exponential Moving Average) göstergesidir.
EMA, son fiyat verilerine daha fazla ağırlık vererek trendi daha hassas şekilde yansıtır. Ancak tek başına bir EMA değeri yeterli olmayabilir. Bu nedenle, yatırımcılar farklı periyotlardaki EMA’ları kullanarak “EMA Up”, “EMA Nötr” ve “EMA Down” gibi trend yönlerini belirlemeye çalışır. Bu yazıda bu üç kavramı derinlemesine inceleyeceğiz.
EMA Nedir?
EMA, belirli bir dönem boyunca fiyatların ağırlıklı ortalamasını alır. Ağırlık, son verilere daha fazla verildiği için EMA, trend değişimlerine daha hızlı tepki verir.
EMA’nın Özellikleri:
EMA Periyotları
Genelde kullanılan EMA periyotları:
Kısa Vadeli EMA’lar: 5, 8, 13
Orta Vadeli EMA’lar: 21, 34
Uzun Vadeli EMA’lar: 55, 100, 200
Genişletmek gerekirse 5, 8 ,9, 13, 21, 34, 55, 89, 100, 144, 200, 233, 370, 610, 987 diye uzatılabilir
Kısa vade fiyat momentumunu gösterirken, uzun vadeli EMA’lar trendin yönünü anlamaya yardımcı olur.
1. EMA Up (Yükseliş Formasyonu)
Tanım: EMA Up durumu, kısa vadeli EMA’ların uzun vadeli EMA’ların üzerinde sıralandığı, tüm EMA’ların yukarı doğru eğimli olduğu bir trend yapısıdır.
Teknik Şartlar:
Kapanış Fiyatı > EMA(5) > EMA(8) > EMA(13) > EMA(21) > EMA(34) > EMA(55) > EMA(100) > EMA(200)
Hepsinin eğimi pozitiftir (yukarı yönlü).
Fiyat genellikle en kısa EMA’nın (örneğin EMA5) üstünde kalır.
Anlamı:
Güçlü ve sağlıklı bir yükseliş trendi vardır.
Alım sinyali olarak değerlendirilir. (daha&helliip;)
ALFA TREND Kıvanç Özbilgiç hocanın, kripto paralar için yazdığı al-sat sinyalleri üreten ALFA TREND isimli indikatörünü, BIST 30 endeksinde yer alan hisse senetlerini gösterecek şekilde düzenledim ve Türkçeye çevirdim. Grafikte sağ tarafta, bu hisse senetlerine ait al-sat durumları da gösterilmektedir. TradingView’de Pine Editörü’ne ekleyerek kullanmak isteyenler için uygun hale getirilmiştir.

Trading View Alfa Trend Tarayıcı Pine Script Kodu
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Kıvanç Özbilgiç hocanın alpha trend indikatörü üzerinde türkçeleştirme ve BIST20 hisselerini gösterecek şekilde editlenmiştir.
//@version=6
indicator('Alfa Trend Tarayıcı', overlay = true, format = format.price, precision = 2)
// --- ALPHATREND Ayarları ---
src = input.source(title = 'Kaynak', defval = close, group = 'ALPHATREND')
AP = input.int(title = 'Uzunluk', defval = 14, group = 'ALPHATREND')
coeff = input.float(title = 'Çarpan', defval = 1.0, step = 0.1, group = 'ALPHATREND')
novolumedata = input.bool(title = 'Değişim Hesaplaması (Hacim Verisi Yok)', defval = false, group = 'ALPHATREND')
showsignalsk = input.bool(title = 'Sinyalleri göster', defval = true, group = 'ALPHATREND')
// ATR ve alt/üst çizgiler
ATR = ta.sma(ta.tr, AP)
upT = low - ATR * coeff
downT = high + ATR * coeff
// AlphaTrend hesaplama (düzgün karşılaştırmalarla)
var float AlphaTrend = na
use_up = novolumedata ? ta.rsi(src, AP) >= 50 : ta.mfi(hlc3, AP) >= 50
AlphaTrend := use_up ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT
// Renk, tetikleyici ve sinyaller
color1 = AlphaTrend > AlphaTrend[2] ? #00E60F : AlphaTrend < AlphaTrend[2] ? #80000B : AlphaTrend[1] > AlphaTrend[3] ? #00E60F : #80000B
buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])
K1 = ta.barssince(buySignalk)
K2 = ta.barssince(sellSignalk)
O1 = ta.barssince(buySignalk[1])
O2 = ta.barssince(sellSignalk[1])
// Yön değişkeni (1 = al, -1 = sat, 0 = nötr)
var int direction = 0
direction := buySignalk and O1 > K2 ? 1 : sellSignalk and O2 > K1 ? -1 : direction[1]
// Plotlar
k1 = plot(AlphaTrend, title = 'AlfaTrend', color = color.green, linewidth = 3)
k2 = plot(AlphaTrend[2], title = 'Tetikleyici', color = color.red, linewidth = 3)
fill(k1, k2, title = 'Doldurma Rengi', color = color1)
// Sinyal şekilleri
plotshape(showsignalsk and buySignalk and O1 > K2 ? AlphaTrend[2] * 0.9999 : na, title = 'AL', text = 'AL', location = location.absolute, style = shape.labelup, size = size.tiny, color = color.green, textcolor = color.white)
plotshape(showsignalsk and sellSignalk and O2 > K1 ? AlphaTrend[2] * 1.0001 : na, title = 'SAT', text = 'SAT', location = location.absolute, style = shape.labeldown, size = size.tiny, color = color.red, textcolor = color.white)
// --- Tarayıcı ve Etiket Ayarları ---
string gr_sc = 'Tarayıcı'
string gr_sy = 'Sembol'
string t00 = 'Alfa Trend Tarayıcı'
color c00 = #686868
lb_sh = input.bool(title = 'Etiketleri Göster', defval = true, group = gr_sc)
lb_xa = input.int(title = 'Yatay Eksen', defval = 20, group = gr_sc, tooltip = 'Etiket Pozisyonu X Ekseninde')
lb_ya = input.int(title = 'Dikey Eksen', defval = 1, group = gr_sc, tooltip = 'Etiket Pozisyonu Y Ekseninde')
lb_sz = input.string(title = 'Etiketlerin Boyutu', options = ['Otomatik', 'Small', 'Normal', 'Large'], defval = 'Normal', group = gr_sc)
lb_cl = input.color(title = 'Renkler', defval = #00bb00, group = gr_sc, inline = '0')
lb_cs = input.color(title = '', defval = #ff0000, group = gr_sc, inline = '0')
// Hisseler (20 adet, varsayılan BIST örnekleri)
sh01 = input.bool(title = '01', defval = true, group = gr_sy, inline = '01')
sh02 = input.bool(title = '02', defval = true, group = gr_sy, inline = '02')
sh03 = input.bool(title = '03', defval = true, group = gr_sy, inline = '03')
sh04 = input.bool(title = '04', defval = true, group = gr_sy, inline = '04')
sh05 = input.bool(title = '05', defval = true, group = gr_sy, inline = '05')
sh06 = input.bool(title = '06', defval = true, group = gr_sy, inline = '06')
sh07 = input.bool(title = '07', defval = true, group = gr_sy, inline = '07')
sh08 = input.bool(title = '08', defval = true, group = gr_sy, inline = '08')
sh09 = input.bool(title = '09', defval = true, group = gr_sy, inline = '09')
sh10 = input.bool(title = '10', defval = true, group = gr_sy, inline = '10')
sh11 = input.bool(title = '11', defval = false, group = gr_sy, inline = '11')
sh12 = input.bool(title = '12', defval = false, group = gr_sy, inline = '12')
sh13 = input.bool(title = '13', defval = false, group = gr_sy, inline = '13')
sh14 = input.bool(title = '14', defval = false, group = gr_sy, inline = '14')
sh15 = input.bool(title = '15', defval = false, group = gr_sy, inline = '15')
sh16 = input.bool(title = '16', defval = false, group = gr_sy, inline = '16')
sh17 = input.bool(title = '17', defval = false, group = gr_sy, inline = '17')
sh18 = input.bool(title = '18', defval = false, group = gr_sy, inline = '18')
sh19 = input.bool(title = '19', defval = false, group = gr_sy, inline = '19')
sh20 = input.bool(title = '20', defval = false, group = gr_sy, inline = '20')
tf01 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '01')
tf02 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '02')
tf03 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '03')
tf04 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '04')
tf05 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '05')
tf06 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '06')
tf07 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '07')
tf08 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '08')
tf09 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '09')
tf10 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '10')
tf11 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '11')
tf12 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '12')
tf13 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '13')
tf14 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '14')
tf15 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '15')
tf16 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '16')
tf17 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '17')
tf18 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '18')
tf19 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '19')
tf20 = input.timeframe(title = '', defval = '', group = gr_sy, inline = '20')
s01 = input.symbol(title = '', group = gr_sy, inline = '01', defval = 'BIST:THYAO')
s02 = input.symbol(title = '', group = gr_sy, inline = '02', defval = 'BIST:ISCTR')
s03 = input.symbol(title = '', group = gr_sy, inline = '03', defval = 'BIST:EREGL')
s04 = input.symbol(title = '', group = gr_sy, inline = '04', defval = 'BIST:YKBNK')
s05 = input.symbol(title = '', group = gr_sy, inline = '05', defval = 'BIST:AKBNK')
s06 = input.symbol(title = '', group = gr_sy, inline = '06', defval = 'BIST:TUPRS')
s07 = input.symbol(title = '', group = gr_sy, inline = '07', defval = 'BIST:KCHOL')
s08 = input.symbol(title = '', group = gr_sy, inline = '08', defval = 'BIST:GARAN')
s09 = input.symbol(title = '', group = gr_sy, inline = '09', defval = 'BIST:EKGYO')
s10 = input.symbol(title = '', group = gr_sy, inline = '10', defval = 'BIST:ASELS')
s11 = input.symbol(title = '', group = gr_sy, inline = '11', defval = 'BIST:SASA')
s12 = input.symbol(title = '', group = gr_sy, inline = '12', defval = 'BIST:TCELL')
s13 = input.symbol(title = '', group = gr_sy, inline = '13', defval = 'BIST:PGSUS')
s14 = input.symbol(title = '', group = gr_sy, inline = '14', defval = 'BIST:BIMAS')
s15 = input.symbol(title = '', group = gr_sy, inline = '15', defval = 'BIST:SISE')
s16 = input.symbol(title = '', group = gr_sy, inline = '16', defval = 'BIST:PETKM')
s17 = input.symbol(title = '', group = gr_sy, inline = '17', defval = 'BIST:ASTOR')
s18 = input.symbol(title = '', group = gr_sy, inline = '18', defval = 'BIST:GUBRF')
s19 = input.symbol(title = '', group = gr_sy, inline = '19', defval = 'BIST:KRDMD')
s20 = input.symbol(title = '', group = gr_sy, inline = '20', defval = 'BIST:TOASO')
// --- Fonksiyonlar ---
f_screener(s) =>
int x = na
int y = na
color z = na
if s
x := direction
y := ta.barssince(x != x[1])
z := x == 1 ? lb_cl : x == -1 ? lb_cs : c00
z
[x, y, z]
f_bars(x) =>
' [' + str.tostring(x) + '] '
f_size(x) =>
x == 'Otomatik' ? size.auto : x == 'Small' ? size.small : x == 'Normal' ? size.normal : x == 'Large' ? size.large : size.auto
// Label yönetimi için array kullanarak
var label_array = array.new<label>(21, na)
f_label(index, t, c) =>
var bool result = false
if lb_sh
// Eski label'ı sil
current_label = array.get(label_array, index)
if not na(current_label)
label.delete(current_label)
// Y pozisyonu hesaplama
fix_allign = ta.highest(high, 200)
y_pos = bar_index > 200 ? fix_allign * (1 + lb_ya / 1000) : hl2 * (1 + lb_ya / 1000)
// Yeni label oluştur
new_label = label.new(x = bar_index + lb_xa, y = y_pos + index * y_pos * 0.03, text = t, textcolor = c, textalign = text.align_right, style = label.style_label_left, size = f_size(lb_sz), color = color.new(color.white, 100)) // Her label için farklı Y pozisyonu text=t, textcolor=c, textalign=text.align_right, style=label.style_label_left, size=f_size(lb_sz), color=color.new(color.white, 100))
// Yeni label'ı array'e kaydet
array.set(label_array, index, new_label)
result := true
result
else
result := false
result
result
// --- Security ile tarama (her sembol için) ---
[a01, b01, c01] = request.security(s01, tf01 == '' ? timeframe.period : tf01, f_screener(sh01))
[a02, b02, c02] = request.security(s02, tf02 == '' ? timeframe.period : tf02, f_screener(sh02))
[a03, b03, c03] = request.security(s03, tf03 == '' ? timeframe.period : tf03, f_screener(sh03))
[a04, b04, c04] = request.security(s04, tf04 == '' ? timeframe.period : tf04, f_screener(sh04))
[a05, b05, c05] = request.security(s05, tf05 == '' ? timeframe.period : tf05, f_screener(sh05))
[a06, b06, c06] = request.security(s06, tf06 == '' ? timeframe.period : tf06, f_screener(sh06))
[a07, b07, c07] = request.security(s07, tf07 == '' ? timeframe.period : tf07, f_screener(sh07))
[a08, b08, c08] = request.security(s08, tf08 == '' ? timeframe.period : tf08, f_screener(sh08))
[a09, b09, c09] = request.security(s09, tf09 == '' ? timeframe.period : tf09, f_screener(sh09))
[a10, b10, c10] = request.security(s10, tf10 == '' ? timeframe.period : tf10, f_screener(sh10))
[a11, b11, c11] = request.security(s11, tf11 == '' ? timeframe.period : tf11, f_screener(sh11))
[a12, b12, c12] = request.security(s12, tf12 == '' ? timeframe.period : tf12, f_screener(sh12))
[a13, b13, c13] = request.security(s13, tf13 == '' ? timeframe.period : tf13, f_screener(sh13))
[a14, b14, c14] = request.security(s14, tf14 == '' ? timeframe.period : tf14, f_screener(sh14))
[a15, b15, c15] = request.security(s15, tf15 == '' ? timeframe.period : tf15, f_screener(sh15))
[a16, b16, c16] = request.security(s16, tf16 == '' ? timeframe.period : tf16, f_screener(sh16))
[a17, b17, c17] = request.security(s17, tf17 == '' ? timeframe.period : tf17, f_screener(sh17))
[a18, b18, c18] = request.security(s18, tf18 == '' ? timeframe.period : tf18, f_screener(sh18))
[a19, b19, c19] = request.security(s19, tf19 == '' ? timeframe.period : tf19, f_screener(sh19))
[a20, b20, c20] = request.security(s20, tf20 == '' ? timeframe.period : tf20, f_screener(sh20))
// Metin oluşturmalar (sadece aktif hisseler için)
t01 = sh01 ? a01 == 1 ? '▲' + f_bars(b01) + s01 : a01 == -1 ? '▼' + f_bars(b01) + s01 : '■' + f_bars(b01) + s01 : ''
t02 = sh02 ? a02 == 1 ? '▲' + f_bars(b02) + s02 : a02 == -1 ? '▼' + f_bars(b02) + s02 : '■' + f_bars(b02) + s02 : ''
t03 = sh03 ? a03 == 1 ? '▲' + f_bars(b03) + s03 : a03 == -1 ? '▼' + f_bars(b03) + s03 : '■' + f_bars(b03) + s03 : ''
t04 = sh04 ? a04 == 1 ? '▲' + f_bars(b04) + s04 : a04 == -1 ? '▼' + f_bars(b04) + s04 : '■' + f_bars(b04) + s04 : ''
t05 = sh05 ? a05 == 1 ? '▲' + f_bars(b05) + s05 : a05 == -1 ? '▼' + f_bars(b05) + s05 : '■' + f_bars(b05) + s05 : ''
t06 = sh06 ? a06 == 1 ? '▲' + f_bars(b06) + s06 : a06 == -1 ? '▼' + f_bars(b06) + s06 : '■' + f_bars(b06) + s06 : ''
t07 = sh07 ? a07 == 1 ? '▲' + f_bars(b07) + s07 : a07 == -1 ? '▼' + f_bars(b07) + s07 : '■' + f_bars(b07) + s07 : ''
t08 = sh08 ? a08 == 1 ? '▲' + f_bars(b08) + s08 : a08 == -1 ? '▼' + f_bars(b08) + s08 : '■' + f_bars(b08) + s08 : ''
t09 = sh09 ? a09 == 1 ? '▲' + f_bars(b09) + s09 : a09 == -1 ? '▼' + f_bars(b09) + s09 : '■' + f_bars(b09) + s09 : ''
t10 = sh10 ? a10 == 1 ? '▲' + f_bars(b10) + s10 : a10 == -1 ? '▼' + f_bars(b10) + s10 : '■' + f_bars(b10) + s10 : ''
t11 = sh11 ? a11 == 1 ? '▲' + f_bars(b11) + s11 : a11 == -1 ? '▼' + f_bars(b11) + s11 : '■' + f_bars(b11) + s11 : ''
t12 = sh12 ? a12 == 1 ? '▲' + f_bars(b12) + s12 : a12 == -1 ? '▼' + f_bars(b12) + s12 : '■' + f_bars(b12) + s12 : ''
t13 = sh13 ? a13 == 1 ? '▲' + f_bars(b13) + s13 : a13 == -1 ? '▼' + f_bars(b13) + s13 : '■' + f_bars(b13) + s13 : ''
t14 = sh14 ? a14 == 1 ? '▲' + f_bars(b14) + s14 : a14 == -1 ? '▼' + f_bars(b14) + s14 : '■' + f_bars(b14) + s14 : ''
t15 = sh15 ? a15 == 1 ? '▲' + f_bars(b15) + s15 : a15 == -1 ? '▼' + f_bars(b15) + s15 : '■' + f_bars(b15) + s15 : ''
t16 = sh16 ? a16 == 1 ? '▲' + f_bars(b16) + s16 : a16 == -1 ? '▼' + f_bars(b16) + s16 : '■' + f_bars(b16) + s16 : ''
t17 = sh17 ? a17 == 1 ? '▲' + f_bars(b17) + s17 : a17 == -1 ? '▼' + f_bars(b17) + s17 : '■' + f_bars(b17) + s17 : ''
t18 = sh18 ? a18 == 1 ? '▲' + f_bars(b18) + s18 : a18 == -1 ? '▼' + f_bars(b18) + s18 : '■' + f_bars(b18) + s18 : ''
t19 = sh19 ? a19 == 1 ? '▲' + f_bars(b19) + s19 : a19 == -1 ? '▼' + f_bars(b19) + s19 : '■' + f_bars(b19) + s19 : ''
t20 = sh20 ? a20 == 1 ? '▲' + f_bars(b20) + s20 : a20 == -1 ? '▼' + f_bars(b20) + s20 : '■' + f_bars(b20) + s20 : ''
// Etiketleri ekle
if lb_sh
f_label(0, t00, c00)
if t01 != ''
f_label(1, t01, c01)
if t02 != ''
f_label(2, t02, c02)
if t03 != ''
f_label(3, t03, c03)
if t04 != ''
f_label(4, t04, c04)
if t05 != ''
f_label(5, t05, c05)
if t06 != ''
f_label(6, t06, c06)
if t07 != ''
f_label(7, t07, c07)
if t08 != ''
f_label(8, t08, c08)
if t09 != ''
f_label(9, t09, c09)
if t10 != ''
f_label(10, t10, c10)
if t11 != ''
f_label(11, t11, c11)
if t12 != ''
f_label(12, t12, c12)
if t13 != ''
f_label(13, t13, c13)
if t14 != ''
f_label(14, t14, c14)
if t15 != ''
f_label(15, t15, c15)
if t16 != ''
f_label(16, t16, c16)
if t17 != ''
f_label(17, t17, c17)
if t18 != ''
f_label(18, t18, c18)
if t19 != ''
f_label(19, t19, c19)
if t20 != ''
f_label(20, t20, c20)
Finansal piyasalarda işlem yapan yatırımcılar için fiyat hareketlerini anlamak çoğu zaman zorlayıcıdır. İşte bu noktada hareketli ortalamalar (Moving Averages) devreye girer. Fiyat verilerini düzleştirerek trendleri daha anlaşılır hale getirir ve yatırımcılara yol gösterici olur.
Bu makalede, hareketli ortalamaların tanımını, çeşitlerini, avantajlarını ve teknik analizde nasıl kullanılmaları gerektiğini tüm detaylarıyla ele alacağız. (daha&helliip;)
Son Yorumlar