//@version=5 indicator('Otomatik Fib Uzatma ve Geri Çekmeler',"Autofib" , overlay=true, scale=scale.none) color color1 = input(color.rgb(255, 153, 0), 'Çizgi rengi') plot(close, color=color1) depthTooltip = 'Gösterge hesaplanırken dikkate alınacak minimum çubuk sayısı.' depth = input.int(title='Derinlik', defval=10, minval=1, inline='Pivotlar', tooltip=depthTooltip) reverse = input(false, 'Tersi') var extendLeft = input.bool(false, 'Sola Uzat    |    Sağa Uzat', inline='Çizgileri Uzat') var extendRight = input.bool(false, 'Sağa Uzat', inline='Çizgileri Uzat') var extending = extend.none if extendLeft and extendRight extending := extend.both extending if extendLeft and not extendRight extending := extend.none extending if not extendLeft and extendRight extending := extend.none extending lines = input(true, 'Çizgileri Göster') prices = input(true, 'Fiyatları Göster') levels = input.bool(true, 'Seviyeleri Göster', inline='Seviyeler') levelsFormat = input.string('Değerler', '', options=['Değerler', 'Yüzde'], inline='Seviyeler') labelsPosition = input.string('Sağ', 'Etiket Konumu', options=['Sol', 'Sağ']) var float upperThreshold = 0.236 var float lowerThreshold = 1.0 var line lineLastHL = na var line lineLastLH = na var line lineLast = na var float iLastH = 0 var float iLastL = 0 var float pLastH = 0 var float pLastL = 0 var float[] iPivotsH = array.new_float() var float[] iPivotsL = array.new_float() var float[] pPivotsH = array.new_float() var float[] pPivotsL = array.new_float() var isHighLast = false var float startPrice = na var float endPrice = na var float diff = na pivots(src, length, isHigh) => l2 = length * 2 c = nz(src[length]) ok = true for i = 0 to l2 by 1 if isHigh and src[i] > c ok := false ok if not isHigh and src[i] < c ok := false ok if ok [bar_index[length], c] else [int(na), float(na)] [iH, pH] = pivots(high, depth / 2, true) [iL, pL] = pivots(low, depth / 2, false) countPivotsH = array.size(iPivotsH) countPivotsL = array.size(iPivotsL) if countPivotsH > 0 and countPivotsL > 0 iLastH := array.get(iPivotsH, countPivotsH - 1) iLastL := array.get(iPivotsL, countPivotsL - 1) isHighLast := iLastH > iLastL iLastH := 1 if isHighLast if not na(iH) pLastH := array.get(pPivotsH, countPivotsH - 1) if pH > pLastH array.set(iPivotsH, countPivotsH - 1, iH) array.set(pPivotsH, countPivotsH - 1, pH) iH := na iH else if not na(iL) pLastL := array.get(pPivotsL, countPivotsL - 1) if pL < pLastL array.set(iPivotsL, countPivotsL - 1, iL) array.set(pPivotsL, countPivotsL - 1, pL) iL := na iL if not na(iH) array.push(iPivotsH, iH) array.push(pPivotsH, pH) if not na(iL) array.push(iPivotsL, iL) array.push(pPivotsL, pL) pPivotsHCopy = array.copy(pPivotsH) pPivotsLCopy = array.copy(pPivotsL) iPivotsHCopy = array.copy(iPivotsH) iPivotsLCopy = array.copy(iPivotsL) if barstate.islast for j = bar_index to 0 by 1 if array.size(iPivotsHCopy) == 0 or array.size(iPivotsLCopy) == 0 break iLastH := array.pop(iPivotsHCopy) iLastL := array.pop(iPivotsLCopy) pLastH := array.pop(pPivotsHCopy) pLastL := array.pop(pPivotsLCopy) iPrevPivot = 0.0 pPrevPivot = 0.0 isHighLast := iLastH > iLastL if isHighLast for i = array.size(iPivotsHCopy) - 1 to 0 by 1 if i < 0 break else if array.get(iPivotsHCopy, i) < iLastL break if array.get(pPivotsHCopy, i) > pLastH iLastH := array.pop(iPivotsHCopy) pLastH := array.pop(pPivotsHCopy) pLastH else array.remove(iPivotsHCopy, i) array.remove(pPivotsHCopy, i) else for i = array.size(iPivotsLCopy) - 1 to 0 by 1 if i < 0 break else if array.get(iPivotsLCopy, i) < iLastH break if array.get(pPivotsLCopy, i) < pLastL iLastL := array.pop(iPivotsLCopy) pLastL := array.pop(pPivotsLCopy) pLastL else array.remove(iPivotsLCopy, i) array.remove(pPivotsLCopy, i) if array.size(iPivotsHCopy) == 0 or array.size(iPivotsLCopy) == 0 break isHighLast := iLastH > iLastL if isHighLast iPrevPivot := array.get(iPivotsHCopy, array.size(iPivotsHCopy) - 1) pPrevPivot := array.get(pPivotsHCopy, array.size(iPivotsHCopy) - 1) pPrevPivot else iPrevPivot := array.get(iPivotsLCopy, array.size(iPivotsLCopy) - 1) pPrevPivot := array.get(pPivotsLCopy, array.size(iPivotsLCopy) - 1) pPrevPivot if isHighLast startPrice := pPrevPivot endPrice := pLastL diff := math.abs(startPrice - endPrice) if pLastH > endPrice + diff * lowerThreshold or pLastH < endPrice + diff * upperThreshold array.push(iPivotsLCopy, iLastL) array.push(pPivotsLCopy, pLastL) continue line.delete(lineLastHL) line.delete(lineLastLH) line.delete(lineLast) lineLastHL := line.new(int(iPrevPivot), pPrevPivot, int(iLastL), pLastL, color=color.rgb(255, 152, 100), width=1, style=line.style_arrow_both) lineLastLH := line.new(int(iLastL), pLastL, int(iLastH), pLastH, color=color.rgb(255, 152, 1000), width=1, style=line.style_arrow_both) lineLast := lineLastLH lineLast else startPrice := pPrevPivot endPrice := pLastH diff := math.abs(startPrice - endPrice) if pLastL < endPrice - diff * lowerThreshold or pLastL > endPrice - diff * upperThreshold array.push(iPivotsHCopy, iLastH) array.push(pPivotsHCopy, pLastH) continue line.delete(lineLastHL) line.delete(lineLastLH) line.delete(lineLast) lineLastLH := line.new(int(iPrevPivot), pPrevPivot, int(iLastH), pLastH, color=color.rgb(255, 152, 0), width=1, style=line.style_arrow_both) lineLastHL := line.new(int(iLastH), pLastH, int(iLastL), pLastL, color=color.rgb(255, 152, 0), width=1, style=line.style_arrow_both) lineLast := lineLastHL lineLast break _draw_line(price, col) => var id = line.new(0, price, 0, price, color=col, width=1, extend=extending) if not na(lineLast) and lines line.set_xy1(id, line.get_x1(lineLast), price) line.set_xy2(id, line.get_x2(lineLast), price) _draw_label(price, txt, txtColor) => if not na(price) x = labelsPosition == 'Sol' ? line.get_x1(lineLast) : not extendRight ? line.get_x2(lineLast) : bar_index labelStyle = labelsPosition == 'Sol' ? label.style_label_right : label.style_label_left align = labelsPosition == 'Sol' ? text.align_right : text.align_left labelsAlignStrLeft = txt + '\n ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ \n' labelsAlignStrRight = ' ' + txt + '\n ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ ‏ \n' labelsAlignStr = labelsPosition == 'Sol' ? labelsAlignStrLeft : labelsAlignStrRight var id = label.new(x=x, y=price, text=labelsAlignStr, textcolor=txtColor, style=labelStyle, textalign=align, color=color.rgb(0, 0, 0, 100)) label.set_xy(id, x, price) label.set_text(id, labelsAlignStr) label.set_textcolor(id, txtColor) _wrap(txt) => '(' + str.tostring(txt, '#.##') + ')' _label_txt(level, price) => if not na(price) l = levelsFormat == 'Değerler' ? str.tostring(level) : str.tostring(level * 100) + '%' (levels ? l : '') + (prices ? _wrap(price) : '') _crossing_level(sr, r) => r > sr and r < sr[1] or r < sr and r > sr[1] diff := (isHighLast ? -1 : 1) * math.abs(startPrice - endPrice) offset = isHighLast ? line.get_y1(lineLastLH) - line.get_y2(lineLastLH) : line.get_y1(lineLastHL) - line.get_y2(lineLastHL) offset := (isHighLast ? -1 : 1) * math.abs(offset) processLevel(show, value, colorL) => float m = value r = endPrice - offset + (reverse ? -1 : 1) * diff * m if show _draw_line(r, colorL) _draw_label(r, _label_txt(m, r), colorL) if _crossing_level(close, r) alert('Autofib: ' + syminfo.ticker + ' geçiş seviyesi ' + str.tostring(value)) show_0 = input.bool(true, '', inline='Seviye25') value_0 = input.int(0, '', inline='Seviye25') processLevel(show_0, value_0, color1) show_0_236 = input.bool(true, '', inline='Seviye24') value_0_236 = input.float(0.236, '', inline='Seviye24') processLevel(show_0_236, value_0_236, color1) show_0_382 = input.bool(true, '', inline='Seviye23') value_0_382 = input.float(0.382, '', inline='Seviye23') processLevel(show_0_382, value_0_382, color1) show_0_5 = input.bool(true, '', inline='Seviye22') value_0_5 = input.float(0.5, '', inline='Seviye22') processLevel(show_0_5, value_0_5, color1) show_0_618 = input.bool(true, '', inline='Seviye21') value_0_618 = input.float(0.618, '', inline='Seviye21') processLevel(show_0_618, value_0_618, color1) show_0_786 = input.bool(true, '', inline='Seviye20') value_0_786 = input.float(0.786, '', inline='Seviye20') processLevel(show_0_786, value_0_786, color1) show_1 = input.bool(true, '', inline='Seviye19') value_1 = input.int(1, '', inline='Seviye19') processLevel(show_1, value_1, color1) show_1_272 = input.bool(true, '', inline='Seviye18') value_1_272 = input.float(1.272, '', inline='Seviye18') processLevel(show_1_272, value_1_272, color1) show_1_414 = input.bool(true, '', inline='Seviye17') value_1_414 = input.float(1.414, '', inline='Seviye17') processLevel(show_1_414, value_1_414, color1) show_1_618 = input.bool(true, '', inline='Seviye16') value_1_618 = input.float(1.618, '', inline='Seviye16') processLevel(show_1_618, value_1_618, color1) show_2_618 = input.bool(true, '', inline='Seviye15') value_2_618 = input.float(2.618, '', inline='Seviye15') processLevel(show_2_618, value_2_618, color1) show_3 = input.bool(true, '', inline='Seviye14') value_3 = input.int(3, '', inline='Seviye14') processLevel(show_3, value_3, color1) show_4_236 = input.bool(true, '', inline='Seviye13') value_4_236 = input.float(4.236, '', inline='Seviye13') processLevel(show_4_236, value_4_236, color1) show_neg_0_236 = input.bool(true, '', inline='Seviye12') value_neg_0_236 = input.float(-0.236, '', inline='Seviye12') processLevel(show_neg_0_236, value_neg_0_236, color1) show_neg_0_382 = input.bool(true, '', inline='Seviye11') value_neg_0_382 = input.float(-0.382, '', inline='Seviye11') processLevel(show_neg_0_382, value_neg_0_382, color1) show_neg_0_618 = input.bool(true, '', inline='Seviye10') value_neg_0_618 = input.float(-0.618, '', inline='Seviye10') processLevel(show_neg_0_618, value_neg_0_618, color1) show_neg_0_5 = input.bool(true, '', inline='Seviye9') value_neg_0_5 = input.float(-0.5, '', inline='Seviye9') processLevel(show_neg_0_5, value_neg_0_5, color1) show_neg_0_786 = input.bool(true, '', inline='Seviye8') value_neg_0_786 = input.float(-0.786, '', inline='Seviye8') processLevel(show_neg_0_786, value_neg_0_786, color1) show_neg_1 = input.bool(true, '', inline='Seviye7') value_neg_1 = input.int(-1, '', inline='Seviye7') processLevel(show_neg_1, value_neg_1, color1) show_neg_1_272 = input.bool(true, '', inline='Seviye6') value_neg_1_272 = input.float(-1.272, '', inline='Seviye6') processLevel(show_neg_1_272, value_neg_1_272, color1) show_neg_1_414 = input.bool(true, '', inline='Seviye5') value_neg_1_414 = input.float(-1.414, '', inline='Seviye5') processLevel(show_neg_1_414, value_neg_1_414, color1) show_neg_1_618 = input.bool(true, '', inline='Seviye4') value_neg_1_618 = input.float(-1.618, '', inline='Seviye4') processLevel(show_neg_1_618, value_neg_1_618, color1) show_neg_2 = input.bool(true, '', inline='Seviye3') value_neg_2 = input.int(-2, '', inline='Seviye3') processLevel(show_neg_2, value_neg_2, color1) show_neg_2_618 = input.bool(true, '', inline='Seviye2') value_neg_2_618 = input.float(-2.618, '', inline='Seviye2') processLevel(show_neg_2_618, value_neg_2_618, color1) show_neg_3 = input.bool(true, '', inline='Seviye1') value_neg_3 = input.int(-3, '', inline='Seviye1') processLevel(show_neg_3, value_neg_3, color1) show_neg_4_236 = input.bool(true, '', inline='Seviye0') value_neg_4_236 = input.float(-4.236, '', inline='Seviye0') processLevel(show_neg_4_236, value_neg_4_236, color1) //