SDC

  • Menü
    • Teknik Analiz
    • BorsaPin
    • Bitmeyen Senfoni
    • Halet-i Ruhiye
    • Anlık Tepkiler
    • Teknoloji
    • Karma Karışık
  • Hakkında
  • İletişim
  • BorsaPin
  • Home
  • Menü
    • Teknik Analiz
    • BorsaPin
    • Bitmeyen Senfoni
    • Halet-i Ruhiye
    • Anlık Tepkiler
    • Teknoloji
    • Karma Karışık
  • Hakkında
  • İletişim
  • BorsaPin

Ema Alignment 5

İdeal EMA Dizilim (EMA ALIGNMENT) Trading View İndikatörü

03 Ağustos 2025 BorsaPin, İndikatör, Teknik Analiz, Trading Viewalgoritmik analiz, borsa teknik göstergeler, EMA alarm sinyali, Ema Alignment, EMA analiz, EMA destek direnç, EMA dizilim indikatörü, EMA sıralama mantığı, EMA stratejisi, EMA tablosu, EMA trend tespiti, ideal EMA sıralaması, Pine Script EMA, potansiyel trend oluşumu, Teknik Analiz, tradingview EMA indikatörü, tradingview strateji, Üstel Hareketli Ortalama, yatırım stratejileri

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.

Ideal EMA Dizilim (EMA ALIGNMENT)

Kullanılan EMA Periyotları

Gösterge, aşağıdaki 10 adet üstel hareketli ortalamayı (EMA) hesaplar:

  • EMA 5, 8, 13, 21, 34, 55, 89, 144, 233, 370

Bu periyotlar kısa, orta ve uzun vadeli eğilimleri birlikte analiz etmeye olanak tanır.

Dizilim Mantığı

EMA dizilimleri büyükten küçüğe (azalan) veya küçükten büyüğe (artan) doğru sıralanabilir.

  • Fiyat, en büyük EMA’nın üzerindeyse ve EMA’lar azalan sıradaysa → İdeal EMA Yükseliş
  • Fiyat, en küçük EMA’nın altındaysa ve EMA’lar artan sıradaysa → İdeal EMA Düşüş
  • Diğer durumlarda → İdeal EMA Nötr
Dizilim kontrolü için array yapısı ve for döngüsü kullanılır.

Potansiyel Oluşum

Fiyat, en düşük ve en yüksek EMA arasında yer alıyorsa bu durum Potansiyel Oluşum olarak değerlendirilir. Trend dönüşü veya başlangıcı ihtimali yüksektir.

Grafiklerde Gösterim

  • EMA çizgileri renkli ve ayrı ayrı açılıp kapatılabilir.
  • Arka Plan Renkleri:
    • Yeşil: İdeal EMA Yükseliş
    • Kırmızı: İdeal EMA Düşüş
    • Sarı: Potansiyel oluşum
Tablo Gösterim
  • Mevcut EMA durumu
  • Son sinyalin tarihi ve kaç bar önce oluştuğu
  • Her EMA’nın değeri ve kapanış fiyatına göre fark oranı (%)
  • Tablo pozisyonu ve boyutu kullanıcı tarafından ayarlanabilir.

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!")

 

Python ile Kapanış Fiyatlarından EMA Hesaplama Betiği

03 Ağustos 2025 BorsaPin, Python, Teknik Analizalım satım sinyali, borsa, Ema, Ema Alignment, Excel otomasyonu, finansal veri, hisse senedi, İdeal Ema, idealemadown, idealemanötr, idealemaup, kapanış fiyatları, otomatik hesaplama, Python, Python ile borsa analizi, Teknik Analiz, trade, trend analizi, Üstel Hareketli Ortalama

Finans piyasalarında, fiyat hareketlerini anlamak ve geleceğe yönelik tahminlerde bulunmak için teknik analiz araçları hayati önem taşır. Bu araçların en popülerlerinden biri, özellikle kısa ve orta vadeli trendleri belirlemede etkili olan Üstel Hareketli Ortalama (Exponential Moving Average – EMA)’dır.  EMA’nın ne olduğunu, neden bu kadar önemli olduğunu ve kendi borsa verileriniz üzerinde bu analizi otomatik olarak yapacak bir Python aracını nasıl kullanabileceğinizi ele alacağız.

EMA Nedir ve Neden Önemlidir?

Hareketli ortalamalar, belirli bir zaman dilimindeki fiyatların ortalamasını alarak fiyat dalgalanmalarını yumuşatan göstergelerdir. EMA, bu ortalama hesaplamasını yaparken son fiyatlara daha fazla ağırlık vererek, basit hareketli ortalamalardan (SMA) daha hızlı tepki verir. Bu özellik, yatırımcıların son piyasa değişikliklerini daha çabuk fark etmelerini sağlar.
EMA’nın temel mantığı, fiyatın EMA’nın üzerinde olması durumunda yükseliş trendinin devam ettiğini, altında olması durumunda ise düşüş trendinin hakim olduğunu gösterir. Farklı periyotlardaki EMA’ların birbiriyle kesişimi ise alım veya satım sinyali olarak yorumlanabilir.
Örneğin, kısa vadeli bir EMA’nın (örneğin EMA 8) uzun vadeli bir EMA’yı (örneğin EMA 21) yukarı yönlü kesmesi, güçlü bir alım sinyali olarak kabul edilebilir.

Kodun İşlevleri: EMACalculator Sınıfı

Python kodu, EMACalculator adında güçlü ve modüler bir sınıf yapısına sahiptir. Bu sınıf, borsa verilerinizi otomatik olarak okur, farklı periyotlarda EMA hesaplamaları yapar ve sonuçları düzenli bir şekilde kaydeder.

Kodun ana bölümleri

ema_periods: Kod, 5, 8, 13, 21, 34, 55, 89, 144, 233, 370 gibi finansal analizde sıkça kullanılan Fibonacci sayılarına dayalı EMA periyotlarını kullanır. Bu periyotlar, farklı zaman dilimlerindeki trendleri gözlemlemenize olanak tanır.

process_single_file: Bu metot, her bir hisse senedi için ayrı ayrı EMA’ları hesaplar. Girdi olarak alınan Excel dosyasından Tarih ve Kapanış verilerini okur ve her bir EMA periyodu için yeni sütunlar oluşturur.

find_input_files: StokData/Kapanis/ klasöründeki tüm Excel dosyalarını otomatik olarak bulur. Bu, yüzlerce hisse senedi verisini tek tek elle işlemek yerine toplu bir şekilde işlem yapmanızı sağlar.

main: Programın ana akışını yöneten metottur. Giriş dosyalarını bulur, her bir dosya için EMA hesaplamasını başlatır ve işlemin sonunda başarılı/başarısız dosyaların özetini gösteren bir rapor sunar.

Bu Makale Daha önceki Makalelerin devamı niteliğinde olduğu için,  aşağıdaki makaleleri de incelemeniz büyük önem taşıyor.
Python ve PyCharm kurulumu

Gerekli kütüphanelerin kurulumu

Kapanış Datalarını çeken Script

Çalışmaların tamamını içeren Google Drive Alanı

X_02_BorsaPin_Emas.py olarak dosyayı kayıt edebilirsiniz.
Python Kodu

import pandas as pd
import os
import numpy as np
from datetime import datetime
from colorama import Fore, init
import glob

"""
Borsapin StokData/Kapanis klasöründeki hisse kapanış datalarından EMA'larını hesaplar
www.kursatsenturk.com

"""
init(autoreset=True)

class EMACalculator:
def __init__(self):
self.ema_periods = [5, 8, 13, 21, 34, 55, 89, 144, 233, 370]
self.successful_files = []
self.failed_files = []

@staticmethod
def calculate_ema(data, period):
"""EMA hesaplama fonksiyonu"""
try:
return data.ewm(span=period, adjust=False).mean()
except Exception as e:
print(f"{Fore.RED}❌ EMA hesaplama hatası (Period {period}): {e}")
return pd.Series([np.nan] * len(data))

def process_single_file(self, file_path):
"""Tek dosya için EMA hesaplama"""
ticker_name = os.path.splitext(os.path.basename(file_path))[0]
try:
print(f"{Fore.YELLOW} EMA hesaplanıyor: {ticker_name}...")

df = pd.read_excel(file_path)

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}")

if df.empty or df['Kapanış'].isna().all():
raise ValueError("Kapanış verisi boş veya geçersiz")

df = df.sort_values('Tarih').reset_index(drop=True)

result_df = pd.DataFrame()
result_df['Hisse_Adi'] = [ticker_name] * len(df)
result_df['Tarih'] = df['Tarih']
result_df['Kapanış'] = df['Kapanış']

print(f"{Fore.CYAN} ⚡ EMA hesaplanıyor: ", end="")
for i, period in enumerate(self.ema_periods):
ema_column_name = f'EMA_{period}'
print(f"{period}", end="")

ema_values = self.calculate_ema(df['Kapanış'], period)
result_df[ema_column_name] = ema_values.round(4)

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

output_folder = "StokData/Emas/"
os.makedirs(output_folder, exist_ok=True)

output_file = os.path.join(output_folder, f"{ticker_name}.xlsx")

result_df.to_excel(output_file, index=False)

print(f"{Fore.GREEN}✅ {ticker_name} EMA 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(os.path.basename(file_path))
return False

@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 []

@staticmethod
def validate_input_file(file_path):
"""Giriş dosyasını doğrulama"""
try:
df = pd.read_excel(file_path, nrows=1)
required_columns = ['Tarih', 'Kapanış']

if not all(col in df.columns for col in required_columns):
return False, f"Eksik sütunlar: {[col for col in required_columns if col not in df.columns]}"

return True, "OK"

except Exception as e:
return False, f"Dosya okuma 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 &gt; 0 else 0

print(f"\n{Fore.CYAN} ===== EMA HESAPLAMA RAPORU =====")
print(f"{Fore.BLUE} EMA Periyodları: {', '.join(map(str, self.ema_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}%")

if self.successful_files:
print(f"{Fore.GREEN} Başarılı dosyalar: {', '.join(self.successful_files[:10])}")
if len(self.successful_files) &gt; 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_ema_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 EMA hesaplama dosyaları\n")
f.write(f"# Tarih: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\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 create_sample_ema_analysis(self, ticker_name="SAMPLE"):
"""Örnek EMA analiz dosyası oluşturma"""
try:
dates = pd.date_range(start='2023-01-01', end='2024-01-01', freq='D')
np.random.seed(42)

base_price = 100
price_changes = np.random.normal(0, 2, len(dates))
prices = [base_price]

for change in price_changes[1:]:
new_price = prices[-1] * (1 + change / 100)
prices.append(max(new_price, 1))

df = pd.DataFrame({
'Tarih': dates,
'Kapanış': prices
})

result_df = pd.DataFrame()
result_df['Hisse_Adi'] = [ticker_name] * len(df)
result_df['Tarih'] = df['Tarih']
result_df['Kapanış'] = df['Kapanış']

for period in self.ema_periods:
ema_values = self.calculate_ema(df['Kapanış'], period)
result_df[f'EMA_{period}'] = ema_values.round(4)

output_folder = "StokData/Emas/"
os.makedirs(output_folder, exist_ok=True)
output_file = os.path.join(output_folder, f"{ticker_name}.xlsx")
result_df.to_excel(output_file, index=False)

print(f"{Fore.GREEN}✅ Örnek EMA dosyası oluşturuldu: {output_file}")
return True

except Exception as e:
print(f"{Fore.RED}❌ Örnek dosya oluşturma hatası: {e}")
return False

def main(self):
"""Ana fonksiyon"""
print(f"{Fore.CYAN} EMA Hesaplama Sistemi Başlatılıyor...")
print(f"{Fore.BLUE} EMA Periyodları: {', '.join(map(str, self.ema_periods))}")

input_files = self.find_input_files()

if not input_files:
print(f"{Fore.YELLOW}⚠️ Giriş dosyası bulunamadı. Örnek dosya oluşturuluyor...")
self.create_sample_ema_analysis()
return

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

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

is_valid, error_msg = self.validate_input_file(file_path)
if not is_valid:
print(f"{Fore.RED}❌ Geçersiz dosya: {os.path.basename(file_path)} - {error_msg}")
self.failed_files.append(os.path.basename(file_path))
continue

self.process_single_file(file_path)

self.save_failed_list()
self.print_summary()

print(f"\n{Fore.GREEN} EMA hesaplama işlemi tamamlandı!")
print(f"{Fore.BLUE} Çıktı klasörü: StokData/Emas/")

# Kullanım
if __name__ == "__main__":
calculator = EMACalculator()
calculator.main()

 

Bir sonraki makalede İdeal EMA dizilim (sıralama) yani Ema Alignment betiğini paylaşacağım.
Burada bütün hisseleri tarayıp belirli kurallara uyan hisseleri çalışma sayfalarında listeleteceğiz.
idealemaup, idealemadown,  idealemanötr, potansiyel taşıyan ve 1 yıllık istatistikleri gösteren çalışma sayfaları olacak.

Python ve PyCharm Kurulumu: Başlangıç Rehberi

01 Ağustos 2025 Code is prority, Python, Teknik AnalizBIST hisse verileri, Borsa analiz, Ema Alignment, EMA hesaplama, Excel borsa analiz, hisse senedi analizi, lineer regresyon kanalı, osilatör analizi, otomatik hisse tarama, Pearson korelasyonu, PyCharm, PyCharm kurulumu, Python, Python başlangıç rehberi, Python borsa verisi çekme, Python Excel çıktısı, Python kurulumu, teknik analiz Python, wave trend sinyali, Yahoo Finance Python

Python, günümüzün en popüler programlama dillerinden biridir. Veri bilimi, yapay zeka, web geliştirme, otomasyon ve daha birçok alanda yaygın olarak kullanılır. Bu makalede, Python’u bilgisayarınıza nasıl kuracağınızı ve PyCharm adlı güçlü bir geliştirme ortamını (IDE) nasıl kullanmaya başlayacağınızı adım adım öğreneceksiniz.

Python Nedir?
Python, okunabilirliği yüksek, öğrenmesi kolay ve güçlü bir programlama dilidir. Açık kaynaklıdır ve çok geniş bir kullanıcı topluluğuna sahiptir.

Python Kurulumu

Adım 1: Python Web Sitesine Gidin
Tarayıcınızda https://www.python.org adresine gidin.

Adım 2: Python Sürümünü İndirin

Ana sayfadaki “Download Python X.X.X” (örneğin 3.13.5) butonuna tıklayın. İşletim sisteminiz otomatik olarak algılanır (Windows, macOS veya Linux).

Adım 3: Kurulum Dosyasını Çalıştırın

İndirilen .exe dosyasını çalıştırın.

Kurulum ekranında mutlaka “Add Python to PATH” seçeneğini işaretleyin.

Ardından “Install Now” seçeneğine tıklayın.

Adım 4: Kurulumu Doğrulayın

Başlat Menüsü > Komut İstemi’ni (cmd) açın ve şu komutu yazın:

python –version
Python sürümünüzün yazıldığını görüyorsanız kurulum başarılıdır.

PyCharm Kurulumu

PyCharm Nedir?

PyCharm, Python için özel olarak geliştirilmiş bir IDE’dir. Kod yazmayı, çalıştırmayı, hata ayıklamayı ve projeleri yönetmeyi kolaylaştırır.

Adım 1: PyCharm Web Sitesine Gidin

https://www.jetbrains.com/pycharm adresini ziyaret edin.

Adım 2: Sürüm Seçimi

İki farklı sürüm vardır:

Community (Ücretsiz) – Başlangıç için yeterlidir.

Professional (Ücretli) – Web geliştirme, veri bilimi gibi ek özellikler içerir.

Community Edition’ı indirin.

Adım 3: Kurulumu Başlatın

İndirilen kurulum dosyasını açın ve yönergeleri takip ederek PyCharm’ı kurun.

Kurulum sırasında aşağıdaki seçenekleri işaretleyebilirsiniz:

64-bit launcher ekle

.py dosyalarını PyCharm ile ilişkilendirin

Adım 4: İlk Çalıştırma

Kurulum tamamlandıktan sonra PyCharm’ı başlatın ve tema (açık/koyu) gibi başlangıç ayarlarını yapın.

İlk Python Projeni Oluşturma

PyCharm’ı açın ve “New Project” seçeneğini seçin.

Projeye bir ad verin (örneğin: ilk_proje).

Python interpreter (yürütücü) olarak daha önce kurduğunuz Python sürümünü seçin.  (Mesela venv)

main.py adlı bir dosya oluşturun ve şu kodu yazın:

python

print(“Merhaba, Python dünyası!”)

Sağ üstteki yeşil “Run” (Çalıştır) butonuna tıklayarak kodunuzu çalıştırın.

Ek Tavsiyeler

PyCharm kısayollarına zamanla alışmak size büyük hız kazandırır.
Terminal kullanarak pip komutu ile paketler kurabilirsiniz.

Örneğin: pip install numpy
Virtual environment (sanallaştırılmış çalışma ortamı) kullanmak projelerinizi izole tutar ve karışıklığı önler.

Bir Sonraki Adımda Neler Var?

İzleyen makalelerde, Python kullanarak Yahoo Finance üzerinden BIST Spot hisse senetlerinin kapanış verilerini nasıl çekeceğimizi adım adım öğreneceğiz. Elde ettiğimiz bu verileri Excel formatında kaydederek, şu analizleri gerçekleştireceğiz:

Farklı periyotlara göre EMA (Üssel Hareketli Ortalama) hesaplamaları

Osilatör ve momentum göstergeleri

EMA Alignment analizi (ideal dizilim ve sapma durumları)

WaveTrend tabanlı sinyal üretimi

Belirli periyotlarda Doğrusal Regresyon (Linear Regression Channel) hesaplamaları

Her hisse için bu analizlerin Pearson korelasyon katsayısı ile değerlendirilmesi

Tüm bu analiz sonuçlarını Python ile  tasarlanmış Excel şablonlarına aktararak, hisse senetlerinin teknik durumlarını görsel olarak kolayca takip edebileceğiniz tarama dosyaları oluşturabileceksiniz.

EMA Alignment : Trendin Gücünü Anlamanın Anahtarı

19 Temmuz 2025 BorsaPin, Teknik AnalizBearish Crossover, Bullish Crossover, Çift EMA Kesişimleri, Ema Alignment, EMA Alignment Stratejileri, EMA Alignment stratejisi, EMA Crossovers, İdeal Ema, İdeal Ema Dizilimi, Sürekli EMA Alignment



Finansal piyasalarda başarılı işlem stratejilerinin temelinde, trendin yönünü ve gücünü doğru analiz edebilme yetisi yatar. Bu bağlamda, teknik analizde sıklıkla kullanılan Exponential Moving Average (EMA), fiyatların geçmiş değerlerini ağırlıklı olarak hesaba katarak daha duyarlı ortalamalar sunar. EMA’nın farklı periyotları bir arada analiz edildiğinde ortaya çıkan EMA Alignment (EMA Uyumu) ise, piyasanın yönü ve gücü hakkında çok daha derin sinyaller verir. Bu yazıda, EMA Alignment kavramını detaylarıyla inceleyip, yatırımcıların nasıl stratejik avantaj elde edebileceğini açıklayacağız.


EMA Nedir?

EMA, “Üssel Hareketli Ortalama” anlamına gelir ve son fiyatlara daha fazla ağırlık vererek fiyat hareketlerine daha duyarlı bir ortalama sunar. Bu sayede, klasik hareketli ortalamaya (SMA) kıyasla trend dönüşlerine daha erken tepki verir.


EMA Alignment Nedir?

EMA Alignment, farklı vadelerdeki EMA’ların birbirine göre konumunu analiz ederek piyasa trendinin yönünü ve kuvvetini yorumlama yöntemidir. Özellikle kısa, orta ve uzun vadeli EMA’lar arasında kurulan bu ilişki, trendin sürekliliği ya da zayıflığı hakkında fikir verir.

EMA Türleri:

  • Kısa Vadeli EMA: 5, 9, 13, 21 gibi periyotlar – Günlük dalgalanmaları izler.
  • Orta Vadeli EMA: 34, 55, 89 gibi periyotlar – Genel yönü destekler.
  • Uzun Vadeli EMA: 100, 144, 200, 233, 370 gibi periyotlar – Büyük trendleri gösterir.

Trend Yorumlamaları: EMA’ların Konumuna Göre

Boğa (Yükseliş) Trendi:

  • Kısa vadeli EMA’lar, uzun vadeli EMA’ların üzerindedir.
  • EMA’lar yukarı yönlü hizalanmış ve birbirinden uzaklaşma eğilimindedir.
  • Fiyat, tüm EMA’ların üzerinde seyrediyorsa, güçlü bir yükseliş eğilimi mevcuttur.

Örnek: EMA 9 > EMA 21 > EMA 50 > EMA 100 > EMA 200 → Güçlü bir boğa trendi

Ayı (Düşüş) Trendi:

  • Kısa vadeli EMA’lar, uzun vadeli EMA’ların altındadır.
  • EMA’lar aşağı yönlü dizilmişse, düşüş trendi güç kazanıyor olabilir.
  • Fiyat, EMA’ların altında kapanıyorsa, satış baskısı güçlüdür.

Örnek: EMA 9 < EMA 21 < EMA 50 < EMA 100 < EMA 200 → Güçlü bir ayı trendi


EMA Alignment Stratejileri

1. Çift EMA Kesişimleri (EMA Crossovers)

  • Bullish Crossover (Alım Sinyali): Kısa vadeli EMA (örneğin EMA 21), uzun vadeli EMA’yı (örneğin EMA 50) aşağıdan yukarı doğru keserse yükseliş başlangıcına işaret eder.
  • Bearish Crossover (Satım Sinyali): Kısa vadeli EMA, uzun vadeli EMA’yı yukarıdan aşağıya keserse düşüş başlayabilir.

Bu kesişimler genellikle EMA Alignment’ın ilk bozulduğu ya da oluştuğu noktalardır.

2. Sürekli EMA Alignment

  • Eğer kısa vadeli EMA’lar, uzun vadeli EMA’ların üzerinde uzun süre kalırsa bu, istikrarlı bir yükseliş trendinin göstergesidir.
  • Tersine, kısa vadeli EMA’lar uzunların altında uzun süre kalırsa düşüş trendinin sürekliliği anlamına gelir.

EMA’ların paralel ve açılarak yukarı yönlü hareket etmesi, trendin güçlendiğini gösterir. EMA’ların daralması ya da birbirine yaklaşması, potansiyel trend değişimine işaret edebilir.


EMA Alignment’ın Avantajları

  • Trend Onayı: Trend başlangıçlarında güvenilir bir filtre görevi görür. Yalancı sinyallerin önüne geçer.
  • Zamanlama İyileştirmesi: Trend yönüne uygun işlem açma zamanlamasını netleştirir.
  • Risk Yönetimi: Trendin zayıfladığı bölgelerde pozisyon kapatmak için sinyal üretir.
  • Görsel Netlik: Grafik üzerinde hızlıca trend durumu anlaşılabilir.

Uygulama Örneği (Teorik Senaryo)

Bir hisse senedinin EMA’ları şu şekilde sıralanmış:

  • EMA 9: 20.10
  • EMA 21: 19.50
  • EMA 50: 18.20
  • EMA 200: 15.00
  • Günlük kapanış: 20.30

Bu yapı, güçlü bir yükseliş trendine işaret eder. Fiyat, tüm EMA’ların üzerinde ve EMA’lar sırayla yukarıdan aşağıya doğru artan vadeye sahip. Yatırımcı bu uyumu trend devam ettiği sürece değerlendirebilir.


Sonuç: Trendin Haritasını EMA Alignment ile Çizin

EMA Alignment, sadece “trend var mı?” sorusuna yanıt vermez; aynı zamanda trendin gücü, istikrarı ve devam potansiyeli hakkında da değerli bilgiler sunar. Yalnızca kısa vadeli sinyallere göre değil, zaman içinde EMA’ların konumlanmasına göre strateji geliştirmek, hem risk kontrolünü artırır hem de trendleri daha güvenilir bir şekilde takip etmenizi sağlar.

Unutmayın: Her teknik analiz aracında olduğu gibi, EMA Alignment da tek başına kullanılmamalı; Wave Trend, Elliott Dalga Prensibi, RSI, Hacim, Pivot destek/dirençleri, Linear ve Polinomsal Regresyon gibi diğer analiz yöntemleriyle desteklenmelidir.


Kısaca Önerilen EMA Periyotları

Vadeler Önerilen EMA’lar
Kısa 9, 13, 21
Orta 34, 55, 89
Uzun 100, 144, 200, 233, 370

İyi yapılandırılmış bir EMA Alignment stratejisi, trend takibinde sağlam bir yol haritası oluşturur. Doğru analiz, sabır ve disiplinle birleştiğinde yatırımcılara yüksek doğrulukta sinyaller sunabilir.

Finansal Piyasalarda Teknik Analizde kullanılan İdeal EMA Up, Nötr ve Down (Ema Alignment)

09 Temmuz 2025 BorsaPin, Code is prority, Pine Script, Teknik Analiz, Trading ViewEma Alignment, İdeal Ema Down, İdeal Ema Nötr, İdeal Ema Up, Pine Script, Python, Teknik Analiz, Trading View
Ema Alignment İdeal Ema 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:

  • Son fiyatlara daha fazla duyarlıdır.
  • Trend takibinde kullanılır.
  • Fiyatın EMA’nın üzerinde veya altında olması yön tayini için önemlidir.


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.

İdeal EMA Formasyonları

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

Etiketler
Teknik AnalizaşkPythonhisse senedi analiziEma AlignmentÜstel Hareketli OrtalamaPine Scripthayattrend analizipivotEmaallahalgoritmik tradingtrend takibiyatırım stratejisiBorsaPinotomatik analizpiyasa momentumuyatırım stratejileriborsa eğitimifinansal analizborsa stratejileriborsaPython ile BIST verisi çekmePython teknik analizPython borsa analiziPearson korelasyonuStop-Lossİdeal EmadirençdestekFibonacciİdeal Ema UpTrading ViewCem Sultansonbaharmuhsin yazıcıoğlukehanetözlemhayalmasalatatürkistanbulfiravunPhp Melody
Arşiv
  • 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
Sponsor Bağlantılar
Kategoriler
  • 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
  • Telegram
  • YouTube
Son Yorumlar
  • PHP Mobil Cihazları yönlendirme için Azmi Güneş
  • Son bir hatıra için sdc
  • Arkadaşlık siteleri ve Tuzakları için can
  • Windows 7’de EasyPHP kurulumu (resimli anlatım) için mustafa
  • Bir daha sorgulayın kendinizi.. için Abdullah Çağrı ELGÜN


Borsapin Proje Google Drive

Sponsor Bağlantılar
Sponsor Bağlantılar
.

.

.

.

2025 © SDC