یکی از ابزارهای پر کاربرد در تحلیل تکنیکال فیبوناچی اکستنشن می باشد و در این پست به معرفی اندیکاتور Auto Fib Extension در تریدینگ ویو می پردازیم که به کمک این ابزار می توانید به صورت اتوماتیک فیبوناچی اکستنشن را رسم کنید. این سری پست ها بیشتر برای فعالین ارز دیجیتال تهیه می گردد البته برای معامله گران بورس و فارکس نیز بسیار کاربردی می باشد.
تعریف اندیکاتور Auto Fib Extension
Auto Fib Extension ابزاری است که سطوح قیمتی هدف را پس از اصلاح محاسبه می کند. فیبو اکستنشن همچنین مناطق احتمالی برگشت قیمت را نشان می دهد و سطوح احتمالی قیمت را پس از اتمام اصلاحات نشان می دهد. این سطوح بر اساس ضرایب کلیدی فیبوناچی و حرکت قیمت نماد در نمودار محاسبه می گردد.
برای استفاده از اندیکاتور جدید Auto Fib Extension ، از دکمه Indicators در نمودار خود استفاده کنید و اندیکاتور Auto Fib Extension را در برگه Built-ins پیدا کنید.
شیوه استفاده فیبوناچی اکستنشن Fib Extension
افزونه های فیبوناچی فرمول خاصی ندارند. سطوح افزونه بر اساس دنباله فیبوناچی محاسبه می شود و متداول ترین سطوح 61.8، ، 100، ، 161.8، ، 200، و 261.8 است. ابزار ترسیم مبتنی بر روند می باشد روند بر اساس سه نقطه تعیین شده توسط معامله گر مشخص می گردد : دو نقطه اول خط روند را مشخص می کند ، نقطه آخر سطح بازده را مشخص می کند. پس از تعیین نقاط ، خطوط سطح افقی ترسیم می گردد.
فیبوناچی اکستنشن به دو روش به نمودار اضافه می گردد که در ادامه مشاهده می فرمایید
1-شیوه اضافه کردن اندیکاتور Auto Fib Extension به تریدینگ ویو به روش انتخاب اندیکاتور

اسکریپت اندیکاتور Auto Fib Extension
//@version=4
study("Auto Fib Extension", overlay=true)
depthTooltip = "The minimum number of bars that will be taken into account when calculating the indicator."
depth = input(title="Depth", type=input.integer, defval=10, minval=1, inline = "Pivots", tooltip=depthTooltip)
reverse = input(false, "Reverse")
var extendLeft = input(false, "Extend Left | Extend Right", inline = "Extend Lines")
var extendRight = input(true, "", inline = "Extend Lines")
var extending = extend.none
if extendLeft and extendRight
extending := extend.both
if extendLeft and not extendRight
extending := extend.left
if not extendLeft and extendRight
extending := extend.right
prices = input(true, "Show Prices")
levels = input(true, "Show Levels", inline = "Levels")
levelsFormat = input("Values", "", options = ["Values", "Percent"], inline = "Levels")
labelsPosition = input("Left", "Labels Position", options = ["Left", "Right"])
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
if isHigh and src[i] > c
ok := false
if not isHigh and src[i] < c
ok := false
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
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
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
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
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)
else
array.remove(iPivotsHCopy, i)
array.remove(pPivotsHCopy, i)
else
for i = array.size(iPivotsLCopy)-1 to 0
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)
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)
else
iPrevPivot := array.get(iPivotsLCopy, array.size(iPivotsLCopy)-1)
pPrevPivot := array.get(pPivotsLCopy, array.size(iPivotsLCopy)-1)
if isHighLast
startPrice := pPrevPivot
endPrice := pLastL
diff := 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.red, width=1, style=line.style_dashed)
lineLastLH := line.new(int(iLastL), pLastL, int(iLastH), pLastH, color=color.green, width=1, style=line.style_dashed)
lineLast := lineLastLH
else
startPrice := pPrevPivot
endPrice := pLastH
diff := 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.red, width=1, style=line.style_dashed)
lineLastHL := line.new(int(iLastH), pLastH, int(iLastL), pLastL, color=color.green, width=1, style=line.style_dashed)
lineLast := lineLastHL
break
_draw_line(price, col) =>
var id = line.new(0, price, 0, price, color=col, width=1, extend=extending)
if not na(lineLast)
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 == "Left" ? line.get_x1(lineLast) : not extendRight ? line.get_x2(lineLast) : bar_index
labelStyle = labelsPosition == "Left" ? label.style_label_right : label.style_label_left
align = labelsPosition == "Left" ? text.align_right : text.align_left
labelsAlignStrLeft = txt + '\n \n'
labelsAlignStrRight = ' ' + txt + '\n \n'
labelsAlignStr = labelsPosition == "Left" ? labelsAlignStrLeft : labelsAlignStrRight
var id = label.new(x=x, y=price, text=labelsAlignStr, textcolor=txtColor, style=labelStyle, textalign=align, color=#00000000)
label.set_xy(id, x, price)
label.set_text(id, labelsAlignStr)
label.set_textcolor(id, txtColor)
_wrap(txt) =>
"(" + tostring(txt, "#.##") + ")"
_label_txt(level, price) =>
if not na(price)
l = levelsFormat == "Values" ? tostring(level) : 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) * 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) * 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 + " crossing level " + tostring(value))
show_0 = input(true, "", inline = "Level0")
value_0 = input(0, "", inline = "Level0")
color_0 = input(#787b86, "", inline = "Level0")
processLevel(show_0, value_0, color_0)
show_0_236 = input(true, "", inline = "Level0")
value_0_236 = input(0.236, "", inline = "Level0")
color_0_236 = input(#f44336, "", inline = "Level0")
processLevel(show_0_236, value_0_236, color_0_236)
show_0_382 = input(true, "", inline = "Level1")
value_0_382 = input(0.382, "", inline = "Level1")
color_0_382 = input(#81c784, "", inline = "Level1")
processLevel(show_0_382, value_0_382, color_0_382)
show_0_5 = input(true, "", inline = "Level1")
value_0_5 = input(0.5, "", inline = "Level1")
color_0_5 = input(#4caf50, "", inline = "Level1")
processLevel(show_0_5, value_0_5, color_0_5)
show_0_618 = input(true, "", inline = "Level2")
value_0_618 = input(0.618, "", inline = "Level2")
color_0_618 = input(#009688, "", inline = "Level2")
processLevel(show_0_618, value_0_618, color_0_618)
show_0_65 = input(false, "", inline = "Level2")
value_0_65 = input(0.65, "", inline = "Level2")
color_0_65 = input(#009688, "", inline = "Level2")
processLevel(show_0_65, value_0_65, color_0_65)
show_0_786 = input(true, "", inline = "Level3")
value_0_786 = input(0.786, "", inline = "Level3")
color_0_786 = input(#64b5f6, "", inline = "Level3")
processLevel(show_0_786, value_0_786, color_0_786)
show_1 = input(true, "", inline = "Level3")
value_1 = input(1, "", inline = "Level3")
color_1 = input(#787b86, "", inline = "Level3")
processLevel(show_1, value_1, color_1)
show_1_272 = input(false, "", inline = "Level4")
value_1_272 = input(1.272, "", inline = "Level4")
color_1_272 = input(#81c784, "", inline = "Level4")
processLevel(show_1_272, value_1_272, color_1_272)
show_1_414 = input(false, "", inline = "Level4")
value_1_414 = input(1.414, "", inline = "Level4")
color_1_414 = input(#f44336, "", inline = "Level4")
processLevel(show_1_414, value_1_414, color_1_414)
show_1_618 = input(true, "", inline = "Level5")
value_1_618 = input(1.618, "", inline = "Level5")
color_1_618 = input(#2196f3, "", inline = "Level5")
processLevel(show_1_618, value_1_618, color_1_618)
show_1_65 = input(false, "", inline = "Level5")
value_1_65 = input(1.65, "", inline = "Level5")
color_1_65 = input(#2196f3, "", inline = "Level5")
processLevel(show_1_65, value_1_65, color_1_65)
show_2_618 = input(true, "", inline = "Level6")
value_2_618 = input(2.618, "", inline = "Level6")
color_2_618 = input(#f44336, "", inline = "Level6")
processLevel(show_2_618, value_2_618, color_2_618)
show_2_65 = input(false, "", inline = "Level6")
value_2_65 = input(2.65, "", inline = "Level6")
color_2_65 = input(#f44336, "", inline = "Level6")
processLevel(show_2_65, value_2_65, color_2_65)
show_3_618 = input(true, "", inline = "Level7")
value_3_618 = input(3.618, "", inline = "Level7")
color_3_618 = input(#9c27b0, "", inline = "Level7")
processLevel(show_3_618, value_3_618, color_3_618)
show_3_65 = input(false, "", inline = "Level7")
value_3_65 = input(3.65, "", inline = "Level7")
color_3_65 = input(#9c27b0, "", inline = "Level7")
processLevel(show_3_65, value_3_65, color_3_65)
show_4_236 = input(true, "", inline = "Level8")
value_4_236 = input(4.236, "", inline = "Level8")
color_4_236 = input(#e91e63, "", inline = "Level8")
processLevel(show_4_236, value_4_236, color_4_236)
show_4_618 = input(false, "", inline = "Level8")
value_4_618 = input(4.618, "", inline = "Level8")
color_4_618 = input(#81c784, "", inline = "Level8")
processLevel(show_4_618, value_4_618, color_4_618)
show_neg_0_236 = input(false, "", inline = "Level9")
value_neg_0_236 = input(-0.236, "", inline = "Level9")
color_neg_0_236 = input(#f44336, "", inline = "Level9")
processLevel(show_neg_0_236, value_neg_0_236, color_neg_0_236)
show_neg_0_382 = input(false, "", inline = "Level9")
value_neg_0_382 = input(-0.382, "", inline = "Level9")
color_neg_0_382 = input(#81c784, "", inline = "Level9")
processLevel(show_neg_0_382, value_neg_0_382, color_neg_0_382)
show_neg_0_618 = input(false, "", inline = "Level10")
value_neg_0_618 = input(-0.618, "", inline = "Level10")
color_neg_0_618 = input(#009688, "", inline = "Level10")
processLevel(show_neg_0_618, value_neg_0_618, color_neg_0_618)
show_neg_0_65 = input(false, "", inline = "Level10")
value_neg_0_65 = input(-0.65, "", inline = "Level10")
color_neg_0_65 = input(#009688, "", inline = "Level10")
processLevel(show_neg_0_65, value_neg_0_65, color_neg_0_65)
2-شیوه اضافه کردن اندیکاتور Auto Fib Extension به تریدینگ ویو با استفاده از اسکریپت

شیوه تنظیم کردن این اندیکاتور
اصلا برای استفاده از این اندیکاتور نیاز به تغییر در تنظیمات آن نداریم. اما این اندیکاتور تنظیمات زیادی برای تنظیم رنگ و ضخامت خطوط دارد که در ادامه مشاهده می فرمایید.


نویسنده و گرد آورنده : مصطفی اجارستاقی
کاربرگرامی جهت بهبود کیفی مطالب لطفا دیدگاه های ارزشند خود را با ما به اشتراک بگذارید.




باسلام
آیا برای استفاده باید هتما اشتراک تریدینگ ویو داشته باشیم
با سلام
برای استفاده از امکانات اندیکاتور ها و اسکریپت نویسی در سایت تریدینگ ویو نیاز به اشتراک ندارد ولی باید ثبت نام را انجام دهید که آن هم رایگان و ظرف یک دقیقه انجام می گیرد.
موفق و موید باشید