Untitled

mail@pastecode.io avatar
unknown
plain_text
9 days ago
2.6 kB
1
Indexable
Never
//@version=5
indicator("Agirlikli EMA ve Ayarlanabilir Band", overlay=true, max_bars_back=1000)

// Bant genişliğini yüzde olarak belirlemek için input
band_genisligi_yuzde = input.float(1.0, title="Bant Genişliği (%)", minval=0.01, step=0.01)

// Kullanıcının kaç bar geriye bakacağını belirleyebileceği input
lookback_input = input.int(1000, title="Geriye Bakılacak Bar Sayısı", minval=1)
lookback = math.min(lookback_input, bar_index)

// Temasları saymak için fonksiyon (hem low hem de high değerlerini kullanarak)
temasSay(src, geriye_bak) =>
    var float toplam_temas = 0.0
    // Bant genişliği hesaplama
    band_genisligi = (band_genisligi_yuzde / 100) * src
    // Eğer low veya high değeri src'nin bandı içindeyse temas say
    temas = ((low <= src + band_genisligi) and (low >= src - band_genisligi)) or ((high <= src + band_genisligi) and (high >= src - band_genisligi)) ? 1 : 0
    toplam_temas := toplam_temas + temas
    bar_index >= geriye_bak ? toplam_temas - nz(toplam_temas[geriye_bak]) : na

// EMA'ları tanımla
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)

// Kullanıcının belirlediği bar sayısına göre her EMA için temasları say
temas13 = temasSay(ema13, lookback)
temas21 = temasSay(ema21, lookback)
temas34 = temasSay(ema34, lookback)
temas55 = temasSay(ema55, lookback)
temas89 = temasSay(ema89, lookback)
temas144 = temasSay(ema144, lookback)

// Toplam temasları hesapla
toplam_temas = temas13 + temas21 + temas34 + temas55 + temas89 + temas144

// Sıfıra bölmeyi önlemek için kontrol
toplam_temas := toplam_temas == 0 ? 1 : toplam_temas

// Temaslara göre ağırlıkları hesapla
a1 = temas13 / toplam_temas
a2 = temas21 / toplam_temas
a3 = temas34 / toplam_temas
a4 = temas55 / toplam_temas
a5 = temas89 / toplam_temas
a6 = temas144 / toplam_temas

// Ağırlıklı EMA'yı hesapla
agirlikli_ema = a1 * ema13 + a2 * ema21 + a3 * ema34 + a4 * ema55 + a5 * ema89 + a6 * ema144

// Ağırlıklı EMA'yı çiz
plot(agirlikli_ema, color=color.yellow, title="Optimize EMA")

// Bant genişliğini hesapla ve bantları çiz
band_genisligi = (band_genisligi_yuzde / 100) * agirlikli_ema
ust_band = agirlikli_ema + band_genisligi
alt_band = agirlikli_ema - band_genisligi

// Bantları çiz
p1 = plot(ust_band, color=color.blue, title="Üst Band")
p2 = plot(alt_band, color=color.blue, title="Alt Band")

// Bantların arasını doldur
fill(p1, p2, color=color.new(color.blue, 90))



Leave a Comment