Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
- // © Volkan_diyor_ki_
- //@version=5
- indicator("Standart Deviation/Error Channel (Standart Sapma/Hata Kanalı)", overlay=true, max_labels_count=1)
- // ----- ----- ----- ----- ----- Zaman fiyat değişkenleri.
- KisaVadeliGunSayisi = input.int(63, title="Short Term Length (Kısa Vadeli Gün Sayısı)", minval = 1, maxval = 1000)
- UzunVadeliGunSayisi = input.int(256, title="Long Term Length (Uzun Vadeli Gün Sayısı)", minval = 1, maxval = 1000)
- Kaynak = input.source(close, title="Source (Kaynak)")
- // ----- ----- ----- ----- ----- Terceih edilen zarf hesaplama yöntemi
- ZarfYontemi = input.bool(false, title = "Use StdDev instead StErr (StandartHata yerine StandartSapma kullan)",group = "Calculation Method (Hesaplama Yöntemi)")
- // ----- ----- ----- ----- ----- Terceih edilen Standart Sapma seviyeleri
- MaxStDev = input.float(2.0, title="Stdev max. (Max St.Sapma)", group = "StDev Settings (Standart Sapma Ayarları)")
- MinStDev = input.float(1.5, title="Stdev min. (Min St.Sapma)", group = "StDev Settings (Standart Sapma Ayarları)")
- // ----- ----- ----- ----- ----- Çizgi ve bant renkleri
- DirencCizgisiRengi = input.color(color.new(color.blue, 95), "Resistance (Direnç Çizgisi)", group = "Line Colors (Çizgiler İçin Renk Seçimi)")
- DestekCizgisiRengi = input.color(color.new(color.red, 95), "Support (Destek Çizgisi)", group = "Line Colors (Çizgiler İçin Renk Seçimi)")
- EgimCizgisiRengi = input.color(color.new(color.green, 95), "Support (Destek Çizgisi)", group = "Line Colors (Çizgiler İçin Renk Seçimi)")
- DirencBandiRengi = input.color(color.new(color.blue, 85), "Resistance Band (Direnç Bandı)", group = "Band Colors (Destek direnç Bandı Renk Seçimi)")
- DestekBandiRengi = input.color(color.new(color.red, 85), "Support Band (Destek Bandı)", group = "Band Colors (Destek direnç Bandı Renk Seçimi)")
- UstHataBandiRengi = input.color(color.new(color.purple, 95), "Upside Band Filler (Ust Bant)", group = "Band Colors (Destek direnç Bandı Renk Seçimi)")
- AltHataBandiRengi = input.color(color.new(color.yellow, 95), "Downside Band Filler (Alt Bant)", group = "Band Colors (Destek direnç Bandı Renk Seçimi)")
- // ----- ----- ----- ----- ----- Diğer ayarlar
- GorselAyarlar = "Other Settings (Diğer Ayarlar)"
- EgimGoster = input.bool(true, "% Slope (% Eğim)", group = GorselAyarlar)
- GecmiseUzat_1923 = input.bool(false, "Extend lines to past values (Eğimi geçmişe doğru uzat)", group = GorselAyarlar)
- GelecegeUzat_100s = input.bool(false, "Extend lines to expected values (Eğimi geleceğe doğru uzat)", group = GorselAyarlar)
- // ----- ----- ----- ----- ----- Eğim çizgilerinin uzatılması
- uzat = switch
- GecmiseUzat_1923 and GelecegeUzat_100s => extend.both
- GecmiseUzat_1923 => extend.left
- GelecegeUzat_100s => extend.right
- => extend.none
- // ----- ----- ----- ----- ----- Kısa ve uzun vadeler için ortak eğim fonksiyonu
- // Doğrusal regresyon formülü = intercept + slope * (length - 1)
- // Bunu hesaplayabilmemiz için bize intercept (kesişim noktası) ve slope (eğim) değerleri gerekiyor
- EgimFonksiyonu(Kaynak, Uzunluk) =>
- max_bars_back(Kaynak, 2000)
- // ----- ----- ----- ----- ----- Grafik üzerinde yeterli veri yok ise...
- if not barstate.islast or Uzunluk <= 1 // Bir günlük eğimi hesaplamaya çalışmayalım
- [float(na), float(na), float(na)]
- // ----- ----- ----- ----- ----- yeterli veri var ise...
- else
- // ----- ----- ----- ----- ----- Eğim ve kesişim (intercept) değişkenlerini ilklendirip sıfırlıyoruz
- sumX = 0.0 // x'ler toplamı
- sumY = 0.0 // y'ler toplamı
- sumXSqr = 0.0 // x'lerin karelerinin toplamı
- sumXY = 0.0 // xy
- // ----- ----- ----- ----- ----- Eğim Ve Kesişim hesapları (en küçük kareler)
- for i = 0 to Uzunluk - 1 by 1
- Deger = Kaynak[i]
- HesaplananGunSayisi = i + 1.0
- sumX += HesaplananGunSayisi // x değerleri yani günlerin toplamı
- sumY += Deger // y değerlerinin (fiyat) toplamı
- sumXSqr += HesaplananGunSayisi * HesaplananGunSayisi // günlerin karelerinin toplamı
- sumXY += Deger * HesaplananGunSayisi // fiyat x günün toplamı
- egim = (Uzunluk * sumXY - sumX * sumY) / (Uzunluk * sumXSqr - sumX * sumX)
- ortalama = sumY / Uzunluk // standart sapmayı hesaplarken işimize yarayacak
- kesisim = ortalama - egim * sumX / Uzunluk + egim
- [egim, ortalama, kesisim] // gerekli bilgiyi alıyoruz
- HataFonksiyonu(kaynak, gunsay, egim, ortalama, kesisim) =>
- // Buradaki işlem aslında standart sapma değil, standart hata
- // Aslında daha önceden hesapladığımız standart sapmayı örnek sayısının kareköküne bölerek standart hatayı bulabilirdik
- // Fakat farklı bir şekilde nasıl hesaplandığını göstermek için ekledim
- stdErr_ = 0.0
- aktifegimcizgisi = kesisim // son günün x eksenini dik kesen, eğim çizgisinin bittiği y seviyesi
- for i = 0 to gunsay-1 by 1
- fiyat = kaynak[i] // aktif fiyat
- fiyat -= aktifegimcizgisi // eğimçizgisi ile fark (aritmatik ortalama ile değil)
- stdErr_ += fiyat * fiyat // farkın karesini alıyoruz
- aktifegimcizgisi += egim // eğim çizgisini eğim kadar geriye çekiyoruz (bir gün önceye hazırlık)
- math.sqrt(stdErr_ / (gunsay-1))
- // ----- ----- ----- ----- ----- Uzun vadeli eğim hattı hesapları
- [UzunEgim, UzunOrtalama, UzunIntercept] = EgimFonksiyonu (Kaynak, UzunVadeliGunSayisi)
- UzunVadeBaslangicFiyati = UzunIntercept + UzunEgim * (UzunVadeliGunSayisi - 1)
- UzunVadeBitisFiyati = UzunIntercept
- // ----- ----- ----- ----- ----- Kısa vadeli eğim hattı hesapları
- [KisaEgim, KisaOrtalama, KisaIntercept] = EgimFonksiyonu (Kaynak, KisaVadeliGunSayisi)
- KisaVadeBaslangicFiyati = KisaIntercept + KisaEgim * (KisaVadeliGunSayisi - 1)
- KisaVadeBitisFiyati = KisaIntercept
- // ----- ----- ----- ----- ----- Regresyon eğrisi etrafına standart sapma veya standart hata bantları ekleyelim
- UzunVadeliMaxStandartSapma = 0.0
- UzunVadeliMinStandartSapma = 0.0
- KisaVadeliMaxStandartSapma = 0.0
- KisaVadeliMinStandartSapma = 0.0
- if ZarfYontemi // Klasik standart sapma (verilerin ortalamadan farklarının karelerinin toplamının karekökü)
- UzunVadeliMaxStandartSapma := ta.stdev(Kaynak, UzunVadeliGunSayisi) * MaxStDev
- UzunVadeliMinStandartSapma := ta.stdev(Kaynak, UzunVadeliGunSayisi) * MinStDev
- KisaVadeliMaxStandartSapma := ta.stdev(Kaynak, KisaVadeliGunSayisi) * MaxStDev
- KisaVadeliMinStandartSapma := ta.stdev(Kaynak, KisaVadeliGunSayisi) * MinStDev
- else // Standart Hata
- UzunVadeliStandartHata = HataFonksiyonu (Kaynak, UzunVadeliGunSayisi, UzunEgim, UzunOrtalama, UzunIntercept)
- KisaVadeliStandartHata = HataFonksiyonu (Kaynak, KisaVadeliGunSayisi, KisaEgim, KisaOrtalama, KisaIntercept)
- UzunVadeliMaxStandartHata = UzunVadeliStandartHata * MaxStDev
- UzunVadeliMinStandartHata = UzunVadeliStandartHata * MinStDev
- KisaVadeliMaxStandartHata = KisaVadeliStandartHata * MaxStDev
- KisaVadeliMinStandartHata = KisaVadeliStandartHata * MinStDev
- UzunVadeliStandartSapma = UzunVadeliStandartHata
- KisaVadeliStandartSapma = KisaVadeliStandartHata
- UzunVadeliMaxStandartSapma := UzunVadeliMaxStandartHata
- UzunVadeliMinStandartSapma := UzunVadeliMinStandartHata
- KisaVadeliMaxStandartSapma := KisaVadeliMaxStandartHata
- KisaVadeliMinStandartSapma := KisaVadeliMinStandartHata
- // ----- ----- ----- ----- ----- Uzun vadeli eğim çizgisi
- UzunVadeEgimHatti = line.new(bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati, bar_index, UzunVadeBitisFiyati, width=1, extend=uzat, style=line.style_dashed, color=color.new(EgimCizgisiRengi, 0))
- var line uzunvadeliegimcizgisi = na
- if na(uzunvadeliegimcizgisi) and not na(UzunVadeBaslangicFiyati)
- UzunVadeEgimHatti := line.new(bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati, bar_index, UzunVadeBitisFiyati, width=1, extend=uzat, style=line.style_dashed, color=color.new(EgimCizgisiRengi, 0))
- else
- line.set_xy1(uzunvadeliegimcizgisi, bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati)
- line.set_xy2(uzunvadeliegimcizgisi, bar_index, UzunVadeBitisFiyati)
- na
- // ----- ----- ----- ----- ----- Kısa vadeli eğim çizgisi
- KisaVadeEgimHatti = line.new(bar_index - KisaVadeliGunSayisi + 1, KisaVadeBaslangicFiyati, bar_index, KisaVadeBitisFiyati, width=1, extend=uzat, style=line.style_dashed, color=color.new(EgimCizgisiRengi, 0))
- var line kisavadeliegimcizgisi = na
- if na(kisavadeliegimcizgisi) and not na(KisaVadeBaslangicFiyati)
- KisaVadeEgimHatti := line.new(bar_index - KisaVadeliGunSayisi + 1, KisaVadeBaslangicFiyati, bar_index, KisaVadeBitisFiyati, width=1, extend=uzat, style=line.style_dashed, color=color.new(EgimCizgisiRengi, 0))
- else
- line.set_xy1(uzunvadeliegimcizgisi, bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati)
- line.set_xy2(uzunvadeliegimcizgisi, bar_index, UzunVadeBitisFiyati)
- na
- // ----- ----- ----- ----- ----- Kısa ve uzun vadeler için ortak sapma fonksiyonu
- // Doğrusal regresyon formülü = intercept + slope * (length - 1)
- // Bunu hesaplayabilmemiz için bize intercept (kesişim noktası) ve slope (eğim) değerleri gerekiyor
- // ----- ----- ----- ----- ----- Uzun vadeli eğim çizgisi üzerine standart sapmayı ekleyelim
- UzunVadeUstMaxStandartSapma = line.new(bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati+UzunVadeliMaxStandartSapma, bar_index, UzunVadeBitisFiyati+UzunVadeliMaxStandartSapma, width=1, extend=uzat, style=line.style_dashed, color=color.new(DirencCizgisiRengi, 0))
- UzunVadeUstMinStandartSapma = line.new(bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati+UzunVadeliMinStandartSapma, bar_index, UzunVadeBitisFiyati+UzunVadeliMinStandartSapma, width=1, extend=uzat, style=line.style_dashed, color=color.new(DirencCizgisiRengi, 0))
- UzunVadeAltMaxStandartSapma = line.new(bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati-UzunVadeliMaxStandartSapma, bar_index, UzunVadeBitisFiyati-UzunVadeliMaxStandartSapma, width=1, extend=uzat, style=line.style_dashed, color=color.new(DestekCizgisiRengi, 0))
- UzunVadeAltMinStandartSapma = line.new(bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati-UzunVadeliMinStandartSapma, bar_index, UzunVadeBitisFiyati-UzunVadeliMinStandartSapma, width=1, extend=uzat, style=line.style_dashed, color=color.new(DestekCizgisiRengi, 0))
- // ----- ----- ----- ----- ----- Kısa vadeli eğim çizgisi üzerine standart sapmayı ekleyelim
- KisaVadeUstMaxStandartSapma = line.new(bar_index - KisaVadeliGunSayisi + 1, KisaVadeBaslangicFiyati+KisaVadeliMaxStandartSapma, bar_index, KisaVadeBitisFiyati+KisaVadeliMaxStandartSapma, width=1, extend=uzat, style=line.style_dashed, color=color.new(DirencCizgisiRengi, 0))
- KisaVadeUstMinStandartSapma = line.new(bar_index - KisaVadeliGunSayisi + 1, KisaVadeBaslangicFiyati+KisaVadeliMinStandartSapma, bar_index, KisaVadeBitisFiyati+KisaVadeliMinStandartSapma, width=1, extend=uzat, style=line.style_dashed, color=color.new(DirencCizgisiRengi, 0))
- KisaVadeAltMaxStandartSapma = line.new(bar_index - KisaVadeliGunSayisi + 1, KisaVadeBaslangicFiyati-KisaVadeliMaxStandartSapma, bar_index, KisaVadeBitisFiyati-KisaVadeliMaxStandartSapma, width=1, extend=uzat, style=line.style_dashed, color=color.new(DestekCizgisiRengi, 0))
- KisaVadeAltMinStandartSapma = line.new(bar_index - KisaVadeliGunSayisi + 1, KisaVadeBaslangicFiyati-KisaVadeliMinStandartSapma, bar_index, KisaVadeBitisFiyati-KisaVadeliMinStandartSapma, width=1, extend=uzat, style=line.style_dashed, color=color.new(DestekCizgisiRengi, 0))
- // ----- ----- ----- ----- ----- Uzun vadeli bantları renklendirelim
- linefill.new(UzunVadeUstMaxStandartSapma, UzunVadeUstMinStandartSapma, color = DirencBandiRengi)
- linefill.new(UzunVadeUstMinStandartSapma, UzunVadeEgimHatti, color = UstHataBandiRengi)
- linefill.new(UzunVadeAltMinStandartSapma, UzunVadeEgimHatti, color = AltHataBandiRengi)
- linefill.new(UzunVadeAltMinStandartSapma, UzunVadeAltMaxStandartSapma, color = DestekBandiRengi)
- // ----- ----- ----- ----- ----- Kısa vadeli bantları renklendirelim
- linefill.new(KisaVadeUstMaxStandartSapma, KisaVadeUstMinStandartSapma, color = DirencBandiRengi)
- linefill.new(KisaVadeAltMinStandartSapma, KisaVadeEgimHatti, color = AltHataBandiRengi)
- linefill.new(KisaVadeUstMinStandartSapma, KisaVadeEgimHatti, color = UstHataBandiRengi)
- linefill.new(KisaVadeAltMinStandartSapma, KisaVadeAltMaxStandartSapma, color = DestekBandiRengi)
- // ----- ----- ----- ----- ----- Eğim yüzdesi
- if EgimGoster
- // ----- ----- ----- ----- ----- Uzun vadeli eğim yüzdesi
- UzunVadeliEgimYuzdesi = ((UzunVadeBitisFiyati-UzunVadeBaslangicFiyati)/UzunVadeBaslangicFiyati*100)
- UYazdir = label.new(bar_index - UzunVadeliGunSayisi + 1, (UzunVadeBaslangicFiyati+UzunVadeBitisFiyati)/2, "%" + str.tostring(UzunVadeliEgimYuzdesi, "#.###"), color = color.new(color.white, 100), textcolor=color.new(EgimCizgisiRengi, 0), size=size.normal, style=label.style_label_up)
- // ----- ----- ----- ----- ----- Kısa vadeli eğim yüzdesi
- KisaVadeliEgimYuzdesi = ((KisaVadeBitisFiyati-KisaVadeBaslangicFiyati)/KisaVadeBaslangicFiyati*100)
- KYazdir = label.new(bar_index - (KisaVadeliGunSayisi + 1), (KisaVadeBaslangicFiyati+KisaVadeBitisFiyati)/2, "%" + str.tostring(KisaVadeliEgimYuzdesi, "#.###"), color = color.new(color.white, 100), textcolor=color.new(EgimCizgisiRengi, 0), size=size.normal, style=label.style_label_up)
Advertisement
Comments
-
- download all types of premium tradingview indicators codes available on telegram - https://t.me/tradingview_premium_indicator
Add Comment
Please, Sign In to add comment
Advertisement