// This indicator is created under TechnoBlooms - Innovating Trading Indicators and Strategies. // All rights reserved. Unauthorized copying or distribution is prohibited. // © TechnoBlooms //@version=6 indicator("AutoFibGauge (TechnoBlooms) ", overlay=true) //---------------------------------------------------------------------------- // Initialize with a default value that's not NaN //---------------------------------------------------------------------------- var float highestHigh = 0.0 var float lowestLow = 0.0 var float level0 = na var float level100 = na var float level236 = na var float level382 = na var float level500 = na var float level618 = na var float level786 = na // Variables for labels var label label0 = na var label label100 = na var label label236 = na var label label382 = na var label label500 = na var label label618 = na var label label786 = na var int positionState = 0 // 0 = neutral, 1 = buy, -1 = sell Thermometer_position = input.string("Middle right", title="Position", options=["Middle left", "Middle right"], group='Thermometer Settings') //------------------------------------------------------------------------------- //input how many candles to consider for drawing fibonacci //------------------------------------------------------------------------------- num_of_cand = input(25,"No of Candles to find fib") //------------------------------------------------------------------------------- // Calculate the highest high and lowest low of the last n candles //------------------------------------------------------------------------------- highestHigh := ta.highest(high, num_of_cand) lowestLow := ta.lowest(low, num_of_cand) hhBar = ta.highestbars(high, num_of_cand) llBar = ta.lowestbars(low, num_of_cand) // Calculate actual bar indices (negative offsets need to be converted) currentBar = bar_index highBarIndex = currentBar + hhBar lowBarIndex = currentBar + llBar //------------------------------------------------------------------------------- // Calculate Simple Moving Average (SMA) //------------------------------------------------------------------------------- SLength = input(20,"Short Length") LLength = input(55,"Long Length") // You can adjust this to change the SMA period Strend = ta.sma(close,SLength) LTrend = ta.sma(close, LLength) //------------------------------------------------------------------------------------------- // Determine if we're in an uptrend or downtrend based on the current close relative to SMA //------------------------------------------------------------------------------------------- isUptrend = Strend > LTrend barColor = isUptrend ?#26a6c6 : #9c1f98 barcolor(barColor, title="Trend-Based Bar Color") //---------------------------------------- //Choose Visibility of MA lines //---------------------------------------- showSMAShort = input.bool(false,"Short SMA") showSMALong = input.bool(false,"Long SMA") //--------------------------------------------------- //Choose which all fib lines to display //--------------------------------------------------- showFib0 = input.bool(true, "Fib 0",group = "Show Fib Lines") showFib236 = input.bool(true,"Fib 23.6",group = "Show Fib Lines") showFib382 = input.bool(true,"Fib 38.2",group = "Show Fib Lines") showFib500 = input.bool(true,"Fib 50",group = "Show Fib Lines") showFib618 = input.bool(true,"Fib 61.8",group = "Show Fib Lines") showFib786 = input.bool(true,"Fib 78.6",group = "Show Fib Lines") showFib100 = input.bool(true,"Fib 100",group = "Show Fib Lines") //---------------------------------------------------------------- // Choose background color of thermometer //---------------------------------------------------------------- color0 = color.from_gradient(0, 0, 7, color.aqua, color.purple) color1 = color.from_gradient(1, 0, 7, color.aqua, color.purple) color2 = color.from_gradient(2, 0, 7, color.aqua, color.purple) color3 = color.from_gradient(3, 0, 7, color.aqua, color.purple) color4 = color.from_gradient(4, 0, 7, color.aqua, color.purple) color5 = color.from_gradient(5, 0, 7, color.aqua, color.purple) color6 = color.from_gradient(6, 0, 7, color.aqua, color.purple) color7 = color.from_gradient(7, 7, 14, color.purple, color.red) color8 = color.from_gradient(8, 7, 14, color.purple, color.red) color9 = color.from_gradient(9, 7, 14, color.purple, color.red) color10 = color.from_gradient(10, 7, 14, color.purple, color.red) color11 = color.from_gradient(11, 7, 14, color.purple, color.red) color12 = color.from_gradient(12, 7, 14, color.purple, color.red) color13 = color.from_gradient(13, 7, 14,color.purple, color.red) //--------------------------------------------------------------------- // Calculate Fibonacci levels based on trend //--------------------------------------------------------------------- if not na(highestHigh) and not na(lowestLow) and highestHigh != lowestLow float diff = highestHigh - lowestLow if isUptrend level0 := highestHigh level100 := lowestLow level236 := highestHigh - (diff * 0.236) level382 := highestHigh - (diff * 0.382) level500 := highestHigh - (diff * 0.500) level618 := highestHigh - (diff * 0.618) level786 := highestHigh - (diff * 0.786) else level0 := lowestLow level100 := highestHigh level236 := lowestLow + (diff * 0.236) level382 := lowestLow + (diff * 0.382) level500 := lowestLow + (diff * 0.500) level618 := lowestLow + (diff * 0.618) level786 := lowestLow + (diff * 0.786) //------------------------------------------------- // Delete old labels //------------------------------------------------- label.delete(label0) label.delete(label100) label.delete(label236) label.delete(label382) label.delete(label500) label.delete(label618) label.delete(label786) //---------------------------------------------------- // Draw new labels, considering trend //---------------------------------------------------- if showFib0 label0 := label.new(bar_index+5, level0, text="0.0%", color=color0, textcolor=color.white, style=label.style_label_left) if showFib100 label100 := label.new(bar_index+5, level100, text="100.0%", color=color12, textcolor=color.white, style=label.style_label_left) if showFib236 label236 := label.new(bar_index+5, level236, text="23.6%", color=color2, textcolor=color.white, style=label.style_label_left) if showFib382 label382 := label.new(bar_index+5, level382, text="38.2%", color=color4, textcolor=color.white, style=label.style_label_left) if showFib500 label500 := label.new(bar_index+5, level500, text="50.0%", color=color6, textcolor=color.white, style=label.style_label_left) if showFib618 label618 := label.new(bar_index+5, level618, text="61.8%", color=color8, textcolor=color.white, style=label.style_label_left) if showFib786 label786 := label.new(bar_index+5, level786, text="78.6%", color=color10, textcolor=color.white, style=label.style_label_left) //--------------------------------------------------------------- // Draw straight lines to 20 candles back //--------------------------------------------------------------- var line line0 = na var line line100 = na var line line236 = na var line line382 = na var line line500 = na var line line618 = na var line line786 = na line.delete(line0) line.delete(line100) line.delete(line236) line.delete(line382) line.delete(line500) line.delete(line618) line.delete(line786) if showFib0 line0 := line.new(bar_index[num_of_cand], level0, bar_index+5, level0, color=color0, width=1) if showFib100 line100 := line.new(bar_index[num_of_cand], level100, bar_index+5, level100, color=color12, width=1) if showFib236 line236 := line.new(bar_index[num_of_cand], level236, bar_index+5, level236, color=color2, width=1) if showFib382 line382 := line.new(bar_index[num_of_cand], level382, bar_index+5, level382, color=color4, width=1) if showFib500 line500 := line.new(bar_index[num_of_cand], level500, bar_index+5, level500, color=color6,width = 1) if showFib618 line618 := line.new(bar_index[num_of_cand], level618, bar_index+5, level618, color=color8,width = 1) if showFib786 line786 := line.new(bar_index[num_of_cand], level786, bar_index+5, level786, color=color10,width = 1) // Draw dashed line for showing Fib range var line fibline = na //------------------------------------------------------------------------- //Highlight Golden Ration region //------------------------------------------------------------------------- var box box1 = na var box box2 = na var box box3 = na var box box2_lower = na var box box2_upper = na var box box3_lower = na var box box3_upper = na // Draw gradient shading with darker areas above and below 61.8%, fading toward 38.2% and 78.6% // Delete previous boxes if not na(box1) box.delete(box1) if not na(box2_lower) box.delete(box2_lower) if not na(box2_upper) box.delete(box2_upper) if not na(box3_lower) box.delete(box3_lower) if not na(box3_upper) box.delete(box3_upper) // Base layer: Full range (38.2% to 78.6%) - lightest shade // box1 := box.new(left=bar_index[num_of_cand], top=level786, right=bar_index+5, bottom=level382, bgcolor=color.new(color.yellow, 100), border_width=0) // Middle layers: Split around 61.8%, fading outward box2_lower := box.new(left=bar_index[num_of_cand], top=(level618 + level382)/2, right=bar_index+5, bottom=level382, bgcolor=color.new(color.yellow, 100), border_width=0) box2_upper := box.new(left=bar_index[num_of_cand], top=level786, right=bar_index+5, bottom=(level786 + level618)/2, bgcolor=color.new(color.yellow, 100), border_width=0) // Core layers: Closest to 61.8%, darkest shade box3_lower := box.new(left=bar_index[num_of_cand], top=level618, right=bar_index+5, bottom=(level618 + level382)/2, bgcolor=color.new(color.yellow, 85), border_width=0) box3_upper := box.new(left=bar_index[num_of_cand], top=(level786 + level618)/2, right=bar_index+5, bottom=level618, bgcolor=color.new(color.yellow, 85), border_width=0) if isUptrend line.delete(fibline) fibline := line.new(lowBarIndex, lowestLow, highBarIndex, highestHigh, color=color.gray, style=line.style_dashed) else line.delete(fibline) fibline := line.new(highBarIndex, highestHigh, lowBarIndex, lowestLow, color=color.gray, style=line.style_dashed) //------------------------- // Plot SMA //------------------------- plot(showSMAShort? Strend:na, title="SMA", color=color.blue, linewidth=1) plot(showSMALong? LTrend:na, title="Strend", color=#f321b4, linewidth=1) //----------------------------------------------------------- //create labels in Thermometer when trend = 1 (uptrend) //----------------------------------------------------------- var table_position = Thermometer_position == 'Top right' ? position.top_right : Thermometer_position == 'Top left' ? position.top_left : Thermometer_position == 'Top center' ? position.top_center : Thermometer_position == 'Bottom right' ? position.bottom_right : Thermometer_position == 'Bottom left' ? position.bottom_left : Thermometer_position == 'Bottom center' ? position.bottom_center : Thermometer_position == 'Middle right' ? position.middle_right : position.middle_right tbl = table.new(position=table_position, columns = 100, rows=100) closenum=math.round(close,0) if level0 < level100 table.cell(tbl,0,0,text = label100.get_text() , text_color = #f83f8c) table.cell(tbl,0,11,text = label236.get_text() ,text_color = #f83f8c) table.cell(tbl,0,8,text = label382.get_text() ,text_color = #f83f8c) table.cell(tbl,0,5,text = label618.get_text() , text_color =#f83f8c) table.cell(tbl,0,2,text = label786.get_text(),text_color = #f83f8c) table.cell(tbl,0,13,text = label0.get_text(), text_color = #f83f8c) table.cell(tbl,2,13,text = str.tostring(level0," #,###"), text_color = #f83f8c) table.cell(tbl,2,11,text = str.tostring(level236, " #,###"),text_color = #f83f8c) table.cell(tbl,2,8,text = str.tostring(level382, " #,###"),text_color = #f83f8c) table.cell(tbl,2,5,text = str.tostring(level618, " #,###"), text_color =#f83f8c) table.cell(tbl,2,2,text = str.tostring(level786, " #,###"),text_color = #f83f8c) table.cell(tbl,2,0,text = str.tostring(level100," #,###"), text_color = #f83f8c) for i = 0 to 13 by 1 table.cell(tbl, 1, i, "", bgcolor = i < 8 ? color.from_gradient(i, 0, 7, color.aqua, color.purple) : color.from_gradient(i, 7, 14, color.purple, color.red)) var reg = 0 bkcolor = color.aqua if closenum > level0 and closenum < level236 reg := 12 if closenum > level236 and closenum < level382 reg := 9 if closenum > level382 and closenum < level618 reg := 6 if closenum > level618 and closenum < level786 reg := 3 if closenum > level786 and closenum < level100 reg := 1 if closenum == level0 reg := 0 if closenum == level236 reg := 11 if closenum == level382 reg := 8 if closenum == level618 reg := 5 if closenum == level786 reg := 2 if reg == 12 bkcolor := color12 if reg == 9 bkcolor := color9 if reg == 6 bkcolor := color6 if reg == 3 bkcolor := color3 if reg == 1 bkcolor := color1 if reg == 2 bkcolor := color2 if reg == 4 bkcolor := color4 if reg == 5 bkcolor := color5 if reg == 7 bkcolor := color7 if reg == 8 bkcolor := color8 if reg == 10 bkcolor := color10 if reg == 11 bkcolor := color11 if reg == 13 bkcolor := color13 table.cell(tbl,1,reg,"🌕", text_size = size.small,bgcolor = bkcolor) //----------------------------------------------------------- //create labels in Thermometer //----------------------------------------------------------- else table.cell(tbl,0,13,text = label100.get_text() , text_color = #f83f8c) table.cell(tbl,0,2,text = label236.get_text() ,text_color = #f83f8c) table.cell(tbl,0,5,text = label382.get_text() ,text_color = #f83f8c) table.cell(tbl,0,8,text = label618.get_text() , text_color =#f83f8c) table.cell(tbl,0,11,text = label786.get_text(),text_color = #f83f8c) table.cell(tbl,0,0,text = label0.get_text(), text_color = #f83f8c) table.cell(tbl,2,0,text = str.tostring(level0," #,###"), text_color = #f83f8c) table.cell(tbl,2,2,text = str.tostring(level236, " #,###"),text_color = #f83f8c) table.cell(tbl,2,5,text = str.tostring(level382, " #,###"),text_color = #f83f8c) table.cell(tbl,2,8,text = str.tostring(level618, " #,###"), text_color =#f83f8c) table.cell(tbl,2,11,text = str.tostring(level786, " #,###"),text_color = #f83f8c) table.cell(tbl,2,13,text = str.tostring(level100," #,###"), text_color = #f83f8c) for i = 0 to 13 by 1 table.cell(tbl, 1, i, "", bgcolor = i < 8 ? color.from_gradient(i, 0, 7, color.aqua, color.purple) : color.from_gradient(i, 7, 14, color.purple, color.red)) var reg = 0 bkcolor = color.aqua if closenum > level100 and closenum < level786 reg := 12 if closenum > level786 and closenum < level618 reg := 9 if closenum > level618 and closenum < level382 reg := 6 if closenum > level382 and closenum < level236 reg := 3 if closenum > level236 and closenum < level0 reg := 1 if closenum == level0 reg := 0 if closenum == level236 reg := 11 if closenum == level382 reg := 8 if closenum == level618 reg := 5 if closenum == level786 reg := 2 if reg == 12 bkcolor := color12 if reg == 9 bkcolor := color9 if reg == 6 bkcolor := color6 if reg == 3 bkcolor := color3 if reg == 1 bkcolor := color1 if reg == 2 bkcolor := color2 if reg == 4 bkcolor := color4 if reg == 5 bkcolor := color5 if reg == 7 bkcolor := color7 if reg == 8 bkcolor := color8 if reg == 10 bkcolor := color10 if reg == 11 bkcolor := color11 if reg == 13 bkcolor := color13 table.cell(tbl,1,reg,"🌕", text_size = size.small,bgcolor = bkcolor)