last ...
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
//
|
||||
// HTF Proves ...
|
||||
|
||||
// //
|
||||
// double scoreMultiplier = 1.5;
|
||||
|
||||
// //
|
||||
// bool isConsolidationScoreBullish =
|
||||
// provider.consolidationBullishScore > (provider.consolidationBearishScore * scoreMultiplier);
|
||||
|
||||
// //
|
||||
// bool isConsolidationScoreBearish =
|
||||
// provider.consolidationBearishScore > (provider.consolidationBullishScore * scoreMultiplier);
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
// //
|
||||
// // Detect Kumo Trend ...
|
||||
// bool isKumoBullish = provider.decisionXConditions.isSenkouSpanAOverB;
|
||||
// bool isKumoBearish = provider.decisionXConditions.isSenkouSpanAUnderB;
|
||||
|
||||
// //
|
||||
// // Detect Nearest Cross ...
|
||||
// XOHCL tkCrossedBar;
|
||||
// ENUM_X_DIRECTION tkCrossDir;
|
||||
// bool hasNearestTenkanSenKijunSenCross =
|
||||
// provider
|
||||
// .decisionCycleHelper
|
||||
// .DetectNearestTenKijCross(
|
||||
// tkCrossedBar,
|
||||
// tkCrossDir,
|
||||
// zIndex //
|
||||
// );
|
||||
|
||||
// //
|
||||
// bool isNearestTenkensSenCrossedOverKijunSen =
|
||||
// hasNearestTenkanSenKijunSenCross &&
|
||||
// IsBullish(tkCrossDir);
|
||||
|
||||
// //
|
||||
// bool isNearestTenkensSenCrossedUnderKijunSen =
|
||||
// hasNearestTenkanSenKijunSenCross &&
|
||||
// IsBearish(tkCrossDir);
|
||||
|
||||
// //
|
||||
// // Detect Nearest Volume ...
|
||||
// XOHCL vSwitchedBar;
|
||||
// ENUM_X_DIRECTION vSwitchedDir;
|
||||
// bool isVolumeSwitched =
|
||||
// provider
|
||||
// .decisionCycleHelper
|
||||
// .DetectNearestVolumeSwitched(
|
||||
// vSwitchedBar,
|
||||
// vSwitchedDir,
|
||||
// zIndex //
|
||||
// );
|
||||
// bool isVolumeBullish =
|
||||
// isVolumeSwitched &&
|
||||
// IsBullish(vSwitchedDir);
|
||||
// bool isVolumeBearish =
|
||||
// isVolumeSwitched &&
|
||||
// IsBearish(vSwitchedDir);
|
||||
|
||||
// //
|
||||
// // Detect Nearest Delta Crossed ...
|
||||
// XOHCL deltaCrossedBar;
|
||||
// ENUM_X_DIRECTION deltaCrossedDir;
|
||||
// bool isDeltaCrossed =
|
||||
// provider
|
||||
// .decisionCycleHelper
|
||||
// .DetectNearestDeltaSwitched(
|
||||
// deltaCrossedBar,
|
||||
// deltaCrossedDir,
|
||||
// zIndex //
|
||||
// );
|
||||
// bool isDeltaBullish =
|
||||
// isDeltaCrossed &&
|
||||
// IsBullish(deltaCrossedDir);
|
||||
// bool isDeltaBearish =
|
||||
// isDeltaCrossed &&
|
||||
// IsBearish(deltaCrossedDir);
|
||||
|
||||
// //
|
||||
// // Detect Nearest Str Switched ...
|
||||
// XOHCL strSwitchedBar;
|
||||
// ENUM_X_DIRECTION strSwitchedDir;
|
||||
// bool isStrSwitched =
|
||||
// provider
|
||||
// .decisionCycleHelper
|
||||
// .DetectNearestStrSwitched(
|
||||
// strSwitchedBar,
|
||||
// strSwitchedDir,
|
||||
// zIndex //
|
||||
// );
|
||||
// bool isStrBullish =
|
||||
// isStrSwitched &&
|
||||
// IsBullish(deltaCrossedDir);
|
||||
// bool isStrBearish =
|
||||
// isStrSwitched &&
|
||||
// IsBearish(deltaCrossedDir);
|
||||
|
||||
// //
|
||||
// // Detect Price in TK Zone ...
|
||||
// bool isBarInsideTKZone =
|
||||
// isNearestTenkensSenCrossedOverKijunSen
|
||||
// ? cBar.low < provider.decisionXConditions.tenkanSenBuffer[cIndex]
|
||||
// : isNearestTenkensSenCrossedUnderKijunSen
|
||||
// ? cBar.high > provider.decisionXConditions.tenkanSenBuffer[cIndex]
|
||||
// : false;
|
||||
|
||||
// //
|
||||
// // Checking Bar Based on Positions State ...
|
||||
// ENUM_X_DIRECTION iBarPosDir;
|
||||
// bool isBarValidForDir = provider.decisionCycleHelper
|
||||
// .mBarAnalyser
|
||||
// .IsValidForPosition(
|
||||
// cBar,
|
||||
// iBarPosDir //
|
||||
// );
|
||||
// bool isBarValidForBullish =
|
||||
// isBarValidForDir &&
|
||||
// IsBullish(iBarPosDir);
|
||||
// bool isBarValidForBearish =
|
||||
// isBarValidForDir &&
|
||||
// IsBearish(iBarPosDir);
|
||||
|
||||
//
|
||||
// Summarize Conditions ...
|
||||
|
||||
//
|
||||
isBullish =
|
||||
//
|
||||
false
|
||||
// isStrBullish &&
|
||||
// isKumoBullish &&
|
||||
// isDeltaBullish &&
|
||||
// isVolumeBullish &&
|
||||
// isBarInsideTKZone &&
|
||||
// isBarValidForBullish &&
|
||||
// isConsolidationScoreBullish &&
|
||||
// isNearestTenkensSenCrossedOverKijunSen
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
//
|
||||
false
|
||||
// isStrBearish &&
|
||||
// isKumoBearish &&
|
||||
// isDeltaBearish &&
|
||||
// isVolumeBearish &&
|
||||
// isBarInsideTKZone &&
|
||||
// isBarValidForBearish &&
|
||||
// isConsolidationScoreBearish &&
|
||||
// isNearestTenkensSenCrossedUnderKijunSen
|
||||
//
|
||||
;
|
||||
@@ -0,0 +1,411 @@
|
||||
// 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)
|
||||
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
|
||||
// © Mattes00
|
||||
|
||||
//@version=6
|
||||
indicator("25-75 Percentile SuperTrend | Mattes", shorttitle = "25-75 ST | Mattes", overlay = true)
|
||||
|
||||
subject = input.int (14,"Supertrend length", minval = 2 , group="25-75 Percentile SuperTrend")
|
||||
mult = input.float (1, "Multiplier", step=0.05,group="25-75 Percentile SuperTrend")
|
||||
slen = input.int (27, "Percentile length", group="25-75 Percentile SuperTrend")
|
||||
src_2575 = input.source(high, "Median smoothing source", group="25-75 Percentile SuperTrend")
|
||||
|
||||
smooth_lower = ta.percentile_nearest_rank(src_2575, slen, 25)
|
||||
smooth_upper = ta.percentile_nearest_rank(src_2575, slen, 75)
|
||||
|
||||
|
||||
Percentile_SuperTrend_func(mult, atrPeriod) =>
|
||||
src_long = smooth_upper
|
||||
src_short = smooth_lower
|
||||
|
||||
atr = ta.atr(atrPeriod)
|
||||
upper = src_long + mult * atr
|
||||
lower = src_short - mult * atr
|
||||
pl = nz(lower[1])
|
||||
pu = nz(upper[1])
|
||||
|
||||
lower := lower > pl or close[1] < pl ? lower : pl
|
||||
upper := upper < pu or close[1] > pu ? upper : pu
|
||||
|
||||
int dist = na
|
||||
float st = na
|
||||
pt = st[1]
|
||||
if na(atr[1])
|
||||
dist := 1
|
||||
else if pt == pu
|
||||
dist := close > upper ? -1 : 1
|
||||
else
|
||||
dist := close < lower ? 1 : -1
|
||||
st := dist == -1 ? lower : upper
|
||||
[st, dist]
|
||||
|
||||
|
||||
[x, dist] = Percentile_SuperTrend_func(mult, subject)
|
||||
|
||||
ST_L = ta.crossunder(dist, 0)
|
||||
ST_S = ta.crossover(dist, 0)
|
||||
|
||||
Long = ST_L
|
||||
Short = ST_S
|
||||
|
||||
var Mattes = 0
|
||||
if (Long and not Short)
|
||||
Mattes := 1
|
||||
if Short
|
||||
Mattes := -1
|
||||
|
||||
syscol = Mattes == 1 ? color.rgb(45, 162, 252) : Mattes == -1 ? color.rgb(113, 59, 249) : color.gray
|
||||
BlueTransParent = color.new(color.rgb(45, 162, 252), 50)
|
||||
PurpleTransParent = color.new(color.rgb(113, 59, 249), 50)
|
||||
|
||||
plotcandle(open, high, low, close, 'BarColor', color = syscol, bordercolor = syscol, wickcolor = syscol,force_overlay = true)
|
||||
upTrend = plot(dist < 0 ? x : na, "Up Trend", color = color.rgb(45, 162, 252), style = plot.style_linebr, linewidth = 2)
|
||||
downTrend = plot(dist < 0 ? na : x, "Down Trend", color = color.rgb(113, 59, 249), style = plot.style_linebr, linewidth = 2)
|
||||
s = plot((smooth_lower + smooth_upper) / 2, color = syscol)
|
||||
fill(s, upTrend, BlueTransParent, fillgaps = false)
|
||||
fill(s, downTrend, PurpleTransParent, fillgaps = false)
|
||||
|
||||
Reference in New Issue
Block a user