Advertisement
xmd79

Standart Deviation/Error Channel (Standart Sapma/Hata Kanalı)

Oct 28th, 2023
347
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.47 KB | None | 0 0
  1. // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
  2. // © Volkan_diyor_ki_
  3.  
  4. //@version=5
  5.  
  6. indicator("Standart Deviation/Error Channel (Standart Sapma/Hata Kanalı)", overlay=true, max_labels_count=1)
  7.  
  8. // ----- ----- ----- ----- ----- Zaman fiyat değişkenleri.
  9. KisaVadeliGunSayisi = input.int(63, title="Short Term Length (Kısa Vadeli Gün Sayısı)", minval = 1, maxval = 1000)
  10. UzunVadeliGunSayisi = input.int(256, title="Long Term Length (Uzun Vadeli Gün Sayısı)", minval = 1, maxval = 1000)
  11.  
  12. Kaynak = input.source(close, title="Source (Kaynak)")
  13.  
  14. // ----- ----- ----- ----- ----- Terceih edilen zarf hesaplama yöntemi
  15. ZarfYontemi = input.bool(false, title = "Use StdDev instead StErr (StandartHata yerine StandartSapma kullan)",group = "Calculation Method (Hesaplama Yöntemi)")
  16.  
  17. // ----- ----- ----- ----- ----- Terceih edilen Standart Sapma seviyeleri
  18. MaxStDev = input.float(2.0, title="Stdev max. (Max St.Sapma)", group = "StDev Settings (Standart Sapma Ayarları)")
  19. MinStDev = input.float(1.5, title="Stdev min. (Min St.Sapma)", group = "StDev Settings (Standart Sapma Ayarları)")
  20.  
  21. // ----- ----- ----- ----- ----- Çizgi ve bant renkleri
  22. DirencCizgisiRengi = input.color(color.new(color.blue, 95), "Resistance (Direnç Çizgisi)", group = "Line Colors (Çizgiler İçin Renk Seçimi)")
  23. DestekCizgisiRengi = input.color(color.new(color.red, 95), "Support (Destek Çizgisi)", group = "Line Colors (Çizgiler İçin Renk Seçimi)")
  24. EgimCizgisiRengi = input.color(color.new(color.green, 95), "Support (Destek Çizgisi)", group = "Line Colors (Çizgiler İçin Renk Seçimi)")
  25.  
  26. DirencBandiRengi = input.color(color.new(color.blue, 85), "Resistance Band (Direnç Bandı)", group = "Band Colors (Destek direnç Bandı Renk Seçimi)")
  27. DestekBandiRengi = input.color(color.new(color.red, 85), "Support Band (Destek Bandı)", group = "Band Colors (Destek direnç Bandı Renk Seçimi)")
  28. UstHataBandiRengi = input.color(color.new(color.purple, 95), "Upside Band Filler (Ust Bant)", group = "Band Colors (Destek direnç Bandı Renk Seçimi)")
  29. AltHataBandiRengi = input.color(color.new(color.yellow, 95), "Downside Band Filler (Alt Bant)", group = "Band Colors (Destek direnç Bandı Renk Seçimi)")
  30.  
  31. // ----- ----- ----- ----- ----- Diğer ayarlar
  32. GorselAyarlar = "Other Settings (Diğer Ayarlar)"
  33.  
  34. EgimGoster = input.bool(true, "% Slope (% Eğim)", group = GorselAyarlar)
  35. GecmiseUzat_1923 = input.bool(false, "Extend lines to past values (Eğimi geçmişe doğru uzat)", group = GorselAyarlar)
  36. GelecegeUzat_100s = input.bool(false, "Extend lines to expected values (Eğimi geleceğe doğru uzat)", group = GorselAyarlar)
  37.  
  38. // ----- ----- ----- ----- ----- Eğim çizgilerinin uzatılması
  39. uzat = switch
  40. GecmiseUzat_1923 and GelecegeUzat_100s => extend.both
  41. GecmiseUzat_1923 => extend.left
  42. GelecegeUzat_100s => extend.right
  43. => extend.none
  44.  
  45. // ----- ----- ----- ----- ----- Kısa ve uzun vadeler için ortak eğim fonksiyonu
  46. // Doğrusal regresyon formülü = intercept + slope * (length - 1)
  47. // Bunu hesaplayabilmemiz için bize intercept (kesişim noktası) ve slope (eğim) değerleri gerekiyor
  48. EgimFonksiyonu(Kaynak, Uzunluk) =>
  49.  
  50. max_bars_back(Kaynak, 2000)
  51. // ----- ----- ----- ----- ----- Grafik üzerinde yeterli veri yok ise...
  52. if not barstate.islast or Uzunluk <= 1 // Bir günlük eğimi hesaplamaya çalışmayalım
  53. [float(na), float(na), float(na)]
  54. // ----- ----- ----- ----- ----- yeterli veri var ise...
  55. else
  56. // ----- ----- ----- ----- ----- Eğim ve kesişim (intercept) değişkenlerini ilklendirip sıfırlıyoruz
  57. sumX = 0.0 // x'ler toplamı
  58. sumY = 0.0 // y'ler toplamı
  59. sumXSqr = 0.0 // x'lerin karelerinin toplamı
  60. sumXY = 0.0 // xy
  61.  
  62. // ----- ----- ----- ----- ----- Eğim Ve Kesişim hesapları (en küçük kareler)
  63. for i = 0 to Uzunluk - 1 by 1
  64. Deger = Kaynak[i]
  65. HesaplananGunSayisi = i + 1.0
  66. sumX += HesaplananGunSayisi // x değerleri yani günlerin toplamı
  67. sumY += Deger // y değerlerinin (fiyat) toplamı
  68. sumXSqr += HesaplananGunSayisi * HesaplananGunSayisi // günlerin karelerinin toplamı
  69. sumXY += Deger * HesaplananGunSayisi // fiyat x günün toplamı
  70.  
  71. egim = (Uzunluk * sumXY - sumX * sumY) / (Uzunluk * sumXSqr - sumX * sumX)
  72. ortalama = sumY / Uzunluk // standart sapmayı hesaplarken işimize yarayacak
  73. kesisim = ortalama - egim * sumX / Uzunluk + egim
  74.  
  75. [egim, ortalama, kesisim] // gerekli bilgiyi alıyoruz
  76.  
  77. HataFonksiyonu(kaynak, gunsay, egim, ortalama, kesisim) =>
  78. // Buradaki işlem aslında standart sapma değil, standart hata
  79. // Aslında daha önceden hesapladığımız standart sapmayı örnek sayısının kareköküne bölerek standart hatayı bulabilirdik
  80. // Fakat farklı bir şekilde nasıl hesaplandığını göstermek için ekledim
  81. stdErr_ = 0.0
  82. aktifegimcizgisi = kesisim // son günün x eksenini dik kesen, eğim çizgisinin bittiği y seviyesi
  83. for i = 0 to gunsay-1 by 1
  84. fiyat = kaynak[i] // aktif fiyat
  85. fiyat -= aktifegimcizgisi // eğimçizgisi ile fark (aritmatik ortalama ile değil)
  86. stdErr_ += fiyat * fiyat // farkın karesini alıyoruz
  87. aktifegimcizgisi += egim // eğim çizgisini eğim kadar geriye çekiyoruz (bir gün önceye hazırlık)
  88. math.sqrt(stdErr_ / (gunsay-1))
  89.  
  90. // ----- ----- ----- ----- ----- Uzun vadeli eğim hattı hesapları
  91. [UzunEgim, UzunOrtalama, UzunIntercept] = EgimFonksiyonu (Kaynak, UzunVadeliGunSayisi)
  92. UzunVadeBaslangicFiyati = UzunIntercept + UzunEgim * (UzunVadeliGunSayisi - 1)
  93. UzunVadeBitisFiyati = UzunIntercept
  94. // ----- ----- ----- ----- ----- Kısa vadeli eğim hattı hesapları
  95. [KisaEgim, KisaOrtalama, KisaIntercept] = EgimFonksiyonu (Kaynak, KisaVadeliGunSayisi)
  96. KisaVadeBaslangicFiyati = KisaIntercept + KisaEgim * (KisaVadeliGunSayisi - 1)
  97. KisaVadeBitisFiyati = KisaIntercept
  98.  
  99. // ----- ----- ----- ----- ----- Regresyon eğrisi etrafına standart sapma veya standart hata bantları ekleyelim
  100. UzunVadeliMaxStandartSapma = 0.0
  101. UzunVadeliMinStandartSapma = 0.0
  102. KisaVadeliMaxStandartSapma = 0.0
  103. KisaVadeliMinStandartSapma = 0.0
  104.  
  105. if ZarfYontemi // Klasik standart sapma (verilerin ortalamadan farklarının karelerinin toplamının karekökü)
  106. UzunVadeliMaxStandartSapma := ta.stdev(Kaynak, UzunVadeliGunSayisi) * MaxStDev
  107. UzunVadeliMinStandartSapma := ta.stdev(Kaynak, UzunVadeliGunSayisi) * MinStDev
  108. KisaVadeliMaxStandartSapma := ta.stdev(Kaynak, KisaVadeliGunSayisi) * MaxStDev
  109. KisaVadeliMinStandartSapma := ta.stdev(Kaynak, KisaVadeliGunSayisi) * MinStDev
  110. else // Standart Hata
  111. UzunVadeliStandartHata = HataFonksiyonu (Kaynak, UzunVadeliGunSayisi, UzunEgim, UzunOrtalama, UzunIntercept)
  112. KisaVadeliStandartHata = HataFonksiyonu (Kaynak, KisaVadeliGunSayisi, KisaEgim, KisaOrtalama, KisaIntercept)
  113. UzunVadeliMaxStandartHata = UzunVadeliStandartHata * MaxStDev
  114. UzunVadeliMinStandartHata = UzunVadeliStandartHata * MinStDev
  115. KisaVadeliMaxStandartHata = KisaVadeliStandartHata * MaxStDev
  116. KisaVadeliMinStandartHata = KisaVadeliStandartHata * MinStDev
  117.  
  118. UzunVadeliStandartSapma = UzunVadeliStandartHata
  119. KisaVadeliStandartSapma = KisaVadeliStandartHata
  120. UzunVadeliMaxStandartSapma := UzunVadeliMaxStandartHata
  121. UzunVadeliMinStandartSapma := UzunVadeliMinStandartHata
  122. KisaVadeliMaxStandartSapma := KisaVadeliMaxStandartHata
  123. KisaVadeliMinStandartSapma := KisaVadeliMinStandartHata
  124.  
  125. // ----- ----- ----- ----- ----- Uzun vadeli eğim çizgisi
  126. UzunVadeEgimHatti = line.new(bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati, bar_index, UzunVadeBitisFiyati, width=1, extend=uzat, style=line.style_dashed, color=color.new(EgimCizgisiRengi, 0))
  127. var line uzunvadeliegimcizgisi = na
  128. if na(uzunvadeliegimcizgisi) and not na(UzunVadeBaslangicFiyati)
  129. UzunVadeEgimHatti := line.new(bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati, bar_index, UzunVadeBitisFiyati, width=1, extend=uzat, style=line.style_dashed, color=color.new(EgimCizgisiRengi, 0))
  130. else
  131. line.set_xy1(uzunvadeliegimcizgisi, bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati)
  132. line.set_xy2(uzunvadeliegimcizgisi, bar_index, UzunVadeBitisFiyati)
  133. na
  134. // ----- ----- ----- ----- ----- Kısa vadeli eğim çizgisi
  135. KisaVadeEgimHatti = line.new(bar_index - KisaVadeliGunSayisi + 1, KisaVadeBaslangicFiyati, bar_index, KisaVadeBitisFiyati, width=1, extend=uzat, style=line.style_dashed, color=color.new(EgimCizgisiRengi, 0))
  136. var line kisavadeliegimcizgisi = na
  137. if na(kisavadeliegimcizgisi) and not na(KisaVadeBaslangicFiyati)
  138. KisaVadeEgimHatti := line.new(bar_index - KisaVadeliGunSayisi + 1, KisaVadeBaslangicFiyati, bar_index, KisaVadeBitisFiyati, width=1, extend=uzat, style=line.style_dashed, color=color.new(EgimCizgisiRengi, 0))
  139. else
  140. line.set_xy1(uzunvadeliegimcizgisi, bar_index - UzunVadeliGunSayisi + 1, UzunVadeBaslangicFiyati)
  141. line.set_xy2(uzunvadeliegimcizgisi, bar_index, UzunVadeBitisFiyati)
  142. na
  143.  
  144. // ----- ----- ----- ----- ----- Kısa ve uzun vadeler için ortak sapma fonksiyonu
  145. // Doğrusal regresyon formülü = intercept + slope * (length - 1)
  146. // Bunu hesaplayabilmemiz için bize intercept (kesişim noktası) ve slope (eğim) değerleri gerekiyor
  147.  
  148. // ----- ----- ----- ----- ----- Uzun vadeli eğim çizgisi üzerine standart sapmayı ekleyelim
  149. 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))
  150. 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))
  151. 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))
  152. 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))
  153.  
  154. // ----- ----- ----- ----- ----- Kısa vadeli eğim çizgisi üzerine standart sapmayı ekleyelim
  155. 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))
  156. 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))
  157. 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))
  158. 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))
  159.  
  160. // ----- ----- ----- ----- ----- Uzun vadeli bantları renklendirelim
  161. linefill.new(UzunVadeUstMaxStandartSapma, UzunVadeUstMinStandartSapma, color = DirencBandiRengi)
  162. linefill.new(UzunVadeUstMinStandartSapma, UzunVadeEgimHatti, color = UstHataBandiRengi)
  163. linefill.new(UzunVadeAltMinStandartSapma, UzunVadeEgimHatti, color = AltHataBandiRengi)
  164. linefill.new(UzunVadeAltMinStandartSapma, UzunVadeAltMaxStandartSapma, color = DestekBandiRengi)
  165. // ----- ----- ----- ----- ----- Kısa vadeli bantları renklendirelim
  166. linefill.new(KisaVadeUstMaxStandartSapma, KisaVadeUstMinStandartSapma, color = DirencBandiRengi)
  167. linefill.new(KisaVadeAltMinStandartSapma, KisaVadeEgimHatti, color = AltHataBandiRengi)
  168. linefill.new(KisaVadeUstMinStandartSapma, KisaVadeEgimHatti, color = UstHataBandiRengi)
  169. linefill.new(KisaVadeAltMinStandartSapma, KisaVadeAltMaxStandartSapma, color = DestekBandiRengi)
  170.  
  171. // ----- ----- ----- ----- ----- Eğim yüzdesi
  172. if EgimGoster
  173. // ----- ----- ----- ----- ----- Uzun vadeli eğim yüzdesi
  174. UzunVadeliEgimYuzdesi = ((UzunVadeBitisFiyati-UzunVadeBaslangicFiyati)/UzunVadeBaslangicFiyati*100)
  175. 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)
  176. // ----- ----- ----- ----- ----- Kısa vadeli eğim yüzdesi
  177. KisaVadeliEgimYuzdesi = ((KisaVadeBitisFiyati-KisaVadeBaslangicFiyati)/KisaVadeBaslangicFiyati*100)
  178. 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)
  179.  
  180.  
Advertisement
Comments
  • # text 0.12 KB | 0 0
    1. 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