Consolidate Your Trading Analysis with the Ultimate All-in-One AlgoPoint Script
January 3, 2025 | by admin

//@version=5
//text inputs
var user_consensus = input.string(defval="", title="By going to algopoint.mysellix.io or by clicking on the link in the algopoint instagram bio you can get the leaked codes for all premium indicators like Elite Algo, EzAlgo and LuxAlgo. Free products are also available! algopoint.mysellix.io", confirm = true, group="AlgoPoint")
title = 'AlgoPoint'
subtitle = 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io'
textVPosition = 'middle'
textHPosition = 'center'
symVPosition = 'top'
symHPosition = 'left'
width = 0
height = 0
c_title = #b2b5be80
s_title = 'large'
a_title = 'center'
c_subtitle = #b2b5be80
s_subtitle = 'normal'
a_subtitle = 'center'
c_bg = color.new(color.blue, 100)
indicator("All in one [AlgoPoint]", shorttitle="All in one [AlgoPoint]", overlay=true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500, max_bars_back = 500)
// ----------------------------------------------------------------------------------------------------
// ------------------------------------------INPUTS----------------------------------------------------
// ----------------------------------------------------------------------------------------------------
var g_Dboard = "████████Dashboard Settings████████"
ShowDboard = input.bool (false, "Show Dasboard", group = g_Dboard, inline='Dboard')
PositionTable = input.string ("Top Right", "Location",
["Top Right" , "Middle Right" , "Bottom Right" ,
"Top Center", "Middle Center" , "Bottom Center",
"Top Left" , "Middle Left" , "Bottom Left" ], group = g_Dboard, inline = "Dboard3")
SizeTable = input.string ("Tiny", "Size",
["Auto", "Huge", "Large", "Normal", "Small", "Tiny"], group = g_Dboard, inline = "Dboard3")
ColorTable = input.color (#a5a5a500, "", group = g_Dboard, inline = "Dboard3")
string TabText1 = "SZ", inline = "TXT", group = g_Dboard
string TabTextInfo = input.string(TabText1,"InfoText:", inline = "TXT", group = g_Dboard)
TimeZone = input.string ("GMT-5", "Table TF Zone", options=["GMT+0", "GMT+1", "GMT+2", "GMT+3","GMT+4","GMT+5","GMT+6","GMT+7","GMT+8","GMT+9","GMT+10","GMT+11","GMT+12","GMT-1", "GMT-2", "GMT-3","GMT-4","GMT-5","GMT-6","GMT-7","GMT-8","GMT-9","GMT-10","GMT-11","GMT-12"], inline = "TXT", group = g_Dboard)
// ----------------------------------------------------------------------------------------------------
// Daily ATR
// ----------------------------------------------------------------------------------------------------
ModeATR = input.string("Percentage", "ATR Mode", ["Numeric", "Percentage"], inline = "ATR1", group = g_Dboard)
SrcRSI = input.source(close, "Source RSI", inline = "ATR1", group = g_Dboard)
LengAtrOne = input.int(14, "Length ATR1 ", 1, inline = "ATR", group = g_Dboard)
LengAtrTwo = input.int(60, "Length ATR2", 1, inline = "ATR", group = g_Dboard,
tooltip = "Duration of ATR in the Daily time period")
// ----------------------------------------------------------------------------------------------------
// RSI in Different Timeframes
// ----------------------------------------------------------------------------------------------------
LengRSI = input.int(14, "Length RSI", 1, inline = "2", group = g_Dboard)
LengMA = input.int(200, "Length MA", 1, inline = "2", group = g_Dboard)
ColorLow = input.color(color.red, "Low cell color", inline = "color", group = g_Dboard)
ColorMid = input.color(color.yellow, "Medium cell color", inline = "color", group = g_Dboard)
ColorHigh = input.color(color.green, "High cell color", inline = "color2", group = g_Dboard)
ColorATR = input.color(#a5a5a500, "ATR cell color", inline = "color2", group = g_Dboard)
// ----------------------------------------------------------------------------------------------------
// Tables Timeframes
// ----------------------------------------------------------------------------------------------------
TabRSI1 = input.bool(true, "TabRSI[1]", inline = "TablRSI1")
TimRSI1 = input.timeframe("15", "", inline = "TablRSI1")
TabRSI2 = input.bool(true, "TabRSI[2]", inline = "TablRSI1")
TimRSI2 = input.timeframe("60", "", inline = "TablRSI1")
TabRSI3 = input.bool(true, "TabRSI[3]", inline = "TablRSI2")
TimRSI3 = input.timeframe("240", "", inline = "TablRSI2")
TabRSI4 = input.bool(true, "TabRSI[4]", inline = "TablRSI2")
TimRSI4 = input.timeframe("1D", "", inline = "TablRSI2")
// Function ATR
FunATR(length, h, l, c_1) =>
a = h - l
b = math.abs(h - c_1)
c = math.abs(l - c_1)
k = float(na)
if ModeATR == "Percentage"
k := math.abs(math.max(a, b, c)) / ((math.max(a, b, c) == a ? h + l :
math.max(a, b, c) == b ? h + c_1 : l + c_1) / 2) * 100
else if ModeATR == "Numeric"
k := math.max(a, b, c)
ta.rma(k, length)
Symboll = ticker.modify(syminfo.tickerid, syminfo.session)
[MktATR, atr1, atr2] = request.security(Symboll, "1D", [FunATR(1, high, low, close[1]),
FunATR(LengAtrOne, high, low, close[1]), FunATR(LengAtrTwo, high, low, close[1])])
// Calculate ATR at PreMarket Session
var clss = float(na),
clss := session.ismarket ? close : clss
var preH = float(na), var preL = float(na)
preH := not session.ispremarket[1] and session.ispremarket and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? high : session.ispremarket and high >= preH and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? high : preH
preL := not session.ispremarket[1] and session.ispremarket and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? low : session.ispremarket and low <= preL and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? low : preL
preATR = FunATR(1, preH, preL, clss)
mainATR = session.ispremarket and timeframe.isintraday ? preATR : MktATR
// RSI & MA
ArrTim = array.new<string>(na)
ArrRsi = array.new<float>(na)
ArrMa = array.new<float>(na)
// MA Difference Function
FunMA() =>
out = math.abs(ta.sma(SrcRSI, LengMA) - close) / ((ta.sma(SrcRSI, LengMA) + close) / 2) * 100
out := ta.sma(SrcRSI, LengMA) > close ? out * -1 : out
// RSI & MA Function
FunRSInMA(TimeRSI, TableRSI) =>
[rsi, ma] = request.security(Symboll, TimeRSI, [ta.rsi(SrcRSI, LengRSI), FunMA()])
if TableRSI and (barstate.isrealtime ? true : timeframe.in_seconds(timeframe.period) <= timeframe.in_seconds(TimeRSI))
array.push(ArrTim, na(TimeRSI) ? timeframe.period : TimeRSI)
array.push(ArrRsi, rsi)
array.push(ArrMa , ma)
FunRSInMA(TimRSI1, TabRSI1), FunRSInMA(TimRSI2, TabRSI2), FunRSInMA(TimRSI3, TabRSI3), FunRSInMA(TimRSI4, TabRSI4)
// ----------------------------------------------------------------------------------------------------
// ------------------------------------------DASHBOARD-------------------------------------------------
// ----------------------------------------------------------------------------------------------------
// Get Table Location & Size
LocNSize(x) =>
y = str.split(str.lower(x), " ")
out = ""
for i = 0 to array.size(y) - 1
out := out + array.get(y, i)
if i != array.size(y) - 1
out := out + "_"
out
// ----------------------------------------------------------------------------------------------------
// Define Table
// ----------------------------------------------------------------------------------------------------
var Table = table.new(LocNSize(PositionTable), 4, 10,
frame_width = 5, frame_color = ColorTable,
border_width = 1, border_color = ColorTable)
// ----------------------------------------------------------------------------------------------------
// Cell Function
// ----------------------------------------------------------------------------------------------------
cell(col, row, txt, color, x, y, z) =>
th = z == -1 ? text.align_left : z == 1 ? text.align_right : text.align_center
table.cell(Table, col, row, txt, text_color = color.new(color, x), text_halign = th,
bgcolor = color.new(color, y), text_size = LocNSize(SizeTable))
// ----------------------------------------------------------------------------------------------------
// Post Timeframe in format
// ----------------------------------------------------------------------------------------------------
TxtTf(x)=>
out = x
if not str.contains(x, "S") and not str.contains(x, "M") and
not str.contains(x, "W") and not str.contains(x, "D")
if str.tonumber(x)%60 == 0
out := str.tostring(str.tonumber(x)/60)+"H"
else
out := x + "m"
out
// ----------------------------------------------------------------------------------------------------
// Coloring Cell Function
// ----------------------------------------------------------------------------------------------------
cellCol(x) =>
x > 50 ? color.from_gradient(x, 50, 80, ColorMid, ColorLow) :
color.from_gradient(x, 20, 50, ColorHigh, ColorMid)
// SYMBOL INFO
f_tickFormat() =>
string _s = str.tostring(syminfo.mintick)
_s := str.replace_all(_s, '25', '00')
_s := str.replace_all(_s, '5', '0')
_s := str.replace_all(_s, '1', '0')
date = str.tostring(dayofmonth(time_close)) + "/" + str.tostring(month(time_close)) + "/" + str.tostring(year(time_close))
RoundFT(_val, _decimals) =>
if _decimals == -1
_val
else
_p = math.pow(10, _decimals)
math.round(math.abs(_val) * _p) / _p * math.sign(_val)
StrHelpFT(_prefix, _var, _round) =>
_res = str.tostring(RoundFT(_var, _round))
_prefix + ' ' + _res
DOLLARClose = request.security('DXY', 'M', close)
DOLLAR = StrHelpFT('DXY💵', DOLLARClose, 1)
if barstate.islast and ShowDboard and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
table.clear(Table, 0, 0, 3, 9)
// Daily ATR
cell(1, 0, TabTextInfo, ColorATR, 0, 70, 0)
cell(2, 0, "INFO", ColorATR, 0, 70, 0)
cell(3, 0, "BOX", ColorATR, 0, 70, 0)
cell(1, 1,
str.tostring(hour(timenow, TimeZone), "00:") + str.tostring(minute(timenow, TimeZone), "00") +"\n"+ date, ColorATR, 0, 70, 0)
cell(2, 1, "ATR(" + str.tostring(LengAtrOne) +")\n" +
str.tostring(atr1, ModeATR == "Numeric" ? "#.##" : format.percent), ColorATR, 0, 70, 0)
cell(3, 1, "ATR(" + str.tostring(LengAtrTwo) +")\n" +
str.tostring(atr2, ModeATR == "Numeric" ? "#.##" : format.percent), ColorATR, 0, 70, 0)
// RSI
cell(1, 2, DOLLAR +"\n"+ syminfo.ticker, ColorTable, 10, 70, 0)
cell(2, 2, "RSI(" + str.tostring(LengRSI) +")", ColorTable, 10, 70, 0)
cell(3, 2, "% ▲-▼\nMA"+ str.tostring(LengMA), ColorTable, 10, 70, 0)
P = 4
if array.size(ArrRsi) > 0
for i = 0 to array.size(ArrRsi) - 1
if not na(array.get(ArrRsi, i))
color = cellCol(array.get(ArrRsi, i))
cell(1, P, TxtTf(array.get(ArrTim, i)), color, 0, 60, 0)
cell(2, P, "◉" + str.tostring(array.get(ArrRsi, i), "#.##"), color, 0, 60, -1)
cell(3, P, str.tostring(array.get(ArrMa, i), format.percent) +
(array.get(ArrMa, i) > 0 ? " ▲" : array.get(ArrMa, i) < 0 ? " ▼" : ""), color, 0, 60,
na(array.get(ArrMa, i)) ? 0 : 1)
P += 1
type Settings
float source
int NCount
int MaxBBack
int FCount
int CColor
type Label
int SZLong
int SZShort
int SZNeutral
type FeatSzArraysz
array<float> AsZ
array<float> BsZ
array<float> CsZ
array<float> DsZ
type FeatureSZ
float AsZ
float BsZ
float CsZ
float DsZ
type SZModel
float SZLDistance
int SZPrediction
type FilterSettings
bool SZVolatility
bool SZRegime
bool SZADX
float SZRegThreshold
int SZADXThreshold
type FilterSZ
bool SvolatilityZ
bool SregimeZ
bool SadxZ
// ==== Helper Functions
SZ_Rescaled(series float SZSource, float OldszMin, float OldszMax, float NewszMin, float NewszMax) =>
NewszMin + (NewszMax - NewszMin) * (SZSource - OldszMin) / math.max(OldszMax - OldszMin, 10e-10)
SZ_RSI(series float SZSource, simple int szn1, simple int szn2) =>
SZ_Rescaled(ta.ema(ta.rsi(SZSource, szn1), szn2), 0, 100, 0, 1)
SZ_Norma(series float SZSource, float min, float max) =>
var HistoricSZMin = 10e10
var HistoricSZMax = -10e10
HistoricSZMin := math.min(nz(SZSource, HistoricSZMin), HistoricSZMin)
HistoricSZMax := math.max(nz(SZSource, HistoricSZMax), HistoricSZMax)
min + (max - min) * (SZSource - HistoricSZMin) / math.max(HistoricSZMax - HistoricSZMin, 10e-10)
SZ_CCI(series float SZSource, simple int szn1, simple int szn2) =>
SZ_Norma(ta.ema(ta.cci(SZSource, szn1), szn2), 0, 1)
SZ_WT(series float SZSource, simple int szn1=10, simple int szn2=11) =>
szemaa = ta.ema(SZSource, szn1)
szemab = ta.ema(math.abs(SZSource - szemaa), szn1)
szci = (SZSource - szemaa) / (0.015 * szemab)
szwta = ta.ema(szci, szn2)
szwtb = ta.sma(szwta, 4)
SZ_Norma(szwta - szwtb, 0, 1)
SZ_ADX(series float highSZSource, series float lowSZSource, series float closeSZSource, simple int szn1) =>
length = szn1
th = 20
tr = math.max(math.max(highSZSource - lowSZSource, math.abs(highSZSource - nz(closeSZSource[1]))), math.abs(lowSZSource - nz(closeSZSource[1])))
SZDirectionalMov = highSZSource - nz(highSZSource[1]) > nz(lowSZSource[1]) - lowSZSource ? math.max(highSZSource - nz(highSZSource[1]), 0) : 0
negMovement = nz(lowSZSource[1]) - lowSZSource > highSZSource - nz(highSZSource[1]) ? math.max(nz(lowSZSource[1]) - lowSZSource, 0) : 0
trSmooth = 0.0
trSmooth := nz(trSmooth[1]) - nz(trSmooth[1]) / length + tr
smoothSZDirectionalMov = 0.0
smoothSZDirectionalMov := nz(smoothSZDirectionalMov[1]) - nz(smoothSZDirectionalMov[1]) / length + SZDirectionalMov
smoothnegMovement = 0.0
smoothnegMovement := nz(smoothnegMovement[1]) - nz(smoothnegMovement[1]) / length + negMovement
diPositive = smoothSZDirectionalMov / trSmooth * 100
diNegative = smoothnegMovement / trSmooth * 100
dx = math.abs(diPositive - diNegative) / (diPositive + diNegative) * 100
adx = ta.rma(dx, length)
SZ_Rescaled(adx, 0, 100, 0, 1)
FromSerieSz(feature_string, fs_close, fs_high, fs_low, fs_hlc3, fs_praA, fs_praB) =>
switch feature_string
"RSI" => SZ_RSI(fs_close, fs_praA, fs_praB)
"WT" => SZ_WT(fs_hlc3, fs_praA, fs_praB)
"CCI" => SZ_CCI(fs_close, fs_praA, fs_praB)
"ADX" => SZ_ADX(fs_high, fs_low, fs_close, fs_praA)
GetSZDistance(int sz, int FCount, FeatureSZ FeatureSZ, FeatSzArraysz FeatSzArraysz) =>
switch FCount
5 => math.log(1+math.abs(FeatureSZ.AsZ - array.get(FeatSzArraysz.AsZ, sz))) +
math.log(1+math.abs(FeatureSZ.BsZ - array.get(FeatSzArraysz.BsZ, sz))) +
math.log(1+math.abs(FeatureSZ.CsZ - array.get(FeatSzArraysz.CsZ, sz))) +
math.log(1+math.abs(FeatureSZ.DsZ - array.get(FeatSzArraysz.DsZ, sz)))
4 => math.log(1+math.abs(FeatureSZ.AsZ - array.get(FeatSzArraysz.AsZ, sz))) +
math.log(1+math.abs(FeatureSZ.BsZ - array.get(FeatSzArraysz.BsZ, sz))) +
math.log(1+math.abs(FeatureSZ.CsZ - array.get(FeatSzArraysz.CsZ, sz))) +
math.log(1+math.abs(FeatureSZ.DsZ - array.get(FeatSzArraysz.DsZ, sz)))
3 => math.log(1+math.abs(FeatureSZ.AsZ - array.get(FeatSzArraysz.AsZ, sz))) +
math.log(1+math.abs(FeatureSZ.BsZ - array.get(FeatSzArraysz.BsZ, sz))) +
math.log(1+math.abs(FeatureSZ.CsZ - array.get(FeatSzArraysz.CsZ, sz)))
2 => math.log(1+math.abs(FeatureSZ.AsZ - array.get(FeatSzArraysz.AsZ, sz))) +
math.log(1+math.abs(FeatureSZ.BsZ - array.get(FeatSzArraysz.BsZ, sz)))
// ==== Inputs
SZTswitch = input.bool (true, "SZ Trading", group='████████ SZ Trading ████████', inline='SZ')
VWCBswitch = input.bool (false, "SZ Critical Volume", group='████████ SZ Trading ████████', inline='SZ')
SZTrendBarColors = input.bool(true, "SZ Gradient Trend Bars",group='████████ SZ Trading ████████', inline = 'SZColors')
ColorBarGrand = input.color(title='', defval=#008a99,group='████████ SZ Trading ████████', inline = 'SZColors')
ColorBarGrand2 = input.color(title='', defval=#cc115d,group='████████ SZ Trading ████████', inline = 'SZColors')
textstylist = table.new(textVPosition + '_' + textHPosition, 1, 3)
// Settings Object: General User-Defined Inputs
Settings settings =
Settings.new(
input.source(title='Source', defval=close,group='████████ SZ Trading ████████', inline='Settings2', tooltip="Source of the input data"),
input.int(title='Neighbors Count', defval=15,group='████████ SZ Trading ████████', inline='Settings2', minval=1, maxval=100, step=1, tooltip="Number of neighbors to consider"),
input.int(title="Max Bars Back", defval=1800,group='████████ SZ Trading ████████', inline='Settings'),
input.int(title="Feature Count", defval=4, group="████████ SZ Engineering ████████", tooltip="Number of features to use for SZ predictions", minval=2, maxval=4, inline = 'FEB'),
input.int(title="C.Compression", defval=1,group='████████ SZ Trading ████████', inline='Settings', minval=1, maxval=10, tooltip="Compression factor for adjusting the intensity of the color scale.")
)
nzVolume = nz(volume)
vccolor1 = input.color (color.rgb(0, 153, 153, 25), title = "Bullish CV", group='████████ SZ Trading ████████', inline='vwcbar')
vccolor2 = input.color (color.rgb(204, 17, 61, 25), title = "Bearish CV", group='████████ SZ Trading ████████',inline='vwcbar', tooltip='Critical volume settings\nColored bars based on the volume of the bar in relation to the moving average volume\n\nVolume Critical, which is something that is not common to see\n\nThis can be seen on the volume bars themselves, but by turning this on The tab paints the candles in 🔵🔴 to tell us where there was significant trading volume')
vcSMA = ta.sma(nzVolume, input.int(89, 'Volume MA Length', group='████████ SZ Trading ████████'))
vcupThesh = input.float(2.618, 'Bars Above Volume Average *', minval=1., step=.1, group='████████ SZ Trading ████████')
barcolor(VWCBswitch and nzVolume and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? nzVolume > vcSMA * vcupThesh ? open < close ? vccolor1 : vccolor2 :na:na, title='Volume Critical/Volume-Weighted Color Bars', editable = false)
// Feature Variables: User-Defined Inputs for calculating Feature Series.
StringASz = input.string(title="Feature A", options=["RSI", "WT", "CCI", "ADX"], defval="RSI", inline = "FA", group="████████ SZ Engineering ████████")
Para1Sz = input.int(title="Variable 1", tooltip="The primary Variable of feature A.", defval=14, inline = "F1", group="████████ SZ Engineering ████████")
Parb1Sz = input.int(title="Variable 2", tooltip="The secondary Variable of feature A (if applicable).", defval=1, inline = "F1", group="████████ SZ Engineering ████████")
StringBSz = input.string(title="Feature B", options=["RSI", "WT", "CCI", "ADX"], defval="WT", inline = "FB", group="████████ SZ Engineering ████████")
Para2Sz = input.int(title="Variable 1", tooltip="The primary Variable of feature B.", defval=10, inline = "F2", group="████████ SZ Engineering ████████")
Parb2Sz = input.int(title="Variable 2", tooltip="The secondary Variable of feature B (if applicable).", defval=11, inline = "F2", group="████████ SZ Engineering ████████")
StringCSz = input.string(title="Feature C", options=["RSI", "WT", "CCI", "ADX"], defval="CCI", inline = "FC", group="████████ SZ Engineering ████████")
Para3Sz = input.int(title="Variable 1", tooltip="The primary Variable of feature C.", defval=20, inline = "F3", group="████████ SZ Engineering ████████")
Parb3Sz = input.int(title="Variable 2", tooltip="The secondary Variable of feature C (if applicable).", defval=1, inline = "F3", group="████████ SZ Engineering ████████")
StringDSz = input.string(title="Feature D", options=["RSI", "WT", "CCI", "ADX"], defval="RSI", inline = "FD", group="████████ SZ Engineering ████████")
Para4Sz = input.int(title="Variable 1", tooltip="The primary Variable of feature D.", defval=9, inline = "F4", group="████████ SZ Engineering ████████")
Parb4Sz = input.int(title="Variable 2", tooltip="The secondary Variable of feature D (if applicable).", defval=1, inline = "F4", group="████████ SZ Engineering ████████")
// Settings object for user-defined settings
FilterSettings filterSettings =
FilterSettings.new(
input.bool(title="Volatility Filter", defval=true, group="████████ SZ Engineering ████████", inline='FilterVT'),
input.bool(title="Trend Filter", defval=true, group="████████ SZ Engineering ████████", inline="FilterVT"),
input.bool(title="ADX Filter", defval=false, group="████████ SZ Engineering ████████", inline="Filteradxema"),
input.float(title="", defval=0.8, minval=-10, maxval=10, step=0.1, tooltip="Whether to use the volatility filter.Whether to use the trend detection filter.\n\nThreshold for detecting Trending/Ranging markets.", group="████████ SZ Engineering ████████", inline="FilterVT"),
input.int(title="", defval=20, minval=0, maxval=100, step=1, group="████████ SZ Engineering ████████", inline="Filteradxema")
)
EmaFilter = input.bool(title="EMA Filter", defval=false, group="████████ SZ Engineering ████████", inline="Filteradxema")
PeriodEMA = input.int(title="", defval=200, minval=1, step=1, group="████████ SZ Engineering ████████", inline="Filteradxema", tooltip="Whether to use the ADX filter. Threshold for detecting Trending/Ranging markets.\n\nThe period of the EMA used for the EMA Filter.")
EmaTrendUp = EmaFilter ? close > ta.ema(close, PeriodEMA) : true
EmaTrendDown = EmaFilter ? close < ta.ema(close, PeriodEMA) : true
// Filter object for filtering the SZ Predictions
VolatilityFilter(simple int minLength=1, simple int maxLength=10, bool SZVolatility) =>
recentAtr = ta.atr(minLength)
historicalAtr = ta.atr(maxLength)
SZVolatility ? recentAtr > historicalAtr : true
RegimeFilter(series float SZSource=ohlc4, float threshold, bool SZRegime) =>
value1 = 0.0
value2 = 0.0
klmf = 0.0
value1 := 0.2 * (SZSource - SZSource[1]) + 0.8 * nz(value1[1])
value2 := 0.1 * (high - low) + 0.8 * nz(value2[1])
omega = math.abs(value1 / value2)
alpha = (-math.pow(omega,2) + math.sqrt(math.pow(omega, 4) + 16 * math.pow(omega,2))) / 8
klmf := alpha * SZSource + (1 - alpha) * nz(klmf[1])
absCurveSlope = math.abs(klmf - klmf[1])
exponentialAverageAbsCurveSlope = 1.0 * ta.ema(absCurveSlope, 200)
SZ_Normad_slope_decline = (absCurveSlope - exponentialAverageAbsCurveSlope) / exponentialAverageAbsCurveSlope
SZRegime ? SZ_Normad_slope_decline >= threshold : true
ADXFilter(series float SZSource=close, simple int length=14, int SZADXThreshold, bool SZADX) =>
tradx = math.max(math.max(high - low, math.abs(high - nz(SZSource[1]))), math.abs(low - nz(SZSource[1])))
SZDirectionalMov = high - nz(high[1]) > nz(low[1]) - low ? math.max(high - nz(high[1]), 0) : 0
negMovement = nz(low[1]) - low > high - nz(high[1]) ? math.max(nz(low[1]) - low, 0) : 0
trSmooth = 0.0
trSmooth := nz(trSmooth[1]) - nz(trSmooth[1]) / length + tradx
smoothSZDirectionalMov = 0.0
smoothSZDirectionalMov := nz(smoothSZDirectionalMov[1]) - nz(smoothSZDirectionalMov[1]) / length + SZDirectionalMov
smoothnegMovement = 0.0
smoothnegMovement := nz(smoothnegMovement[1]) - nz(smoothnegMovement[1]) / length + negMovement
diPositive = smoothSZDirectionalMov / trSmooth * 100
diNegative = smoothnegMovement / trSmooth * 100
dxadx = math.abs(diPositive - diNegative) / (diPositive + diNegative) * 100
adx = ta.rma(dxadx, length)
SZADX ? adx > SZADXThreshold : true
FilterSZ filterSZ =
FilterSZ.new(
VolatilityFilter(1, 10, filterSettings.SZVolatility),
RegimeFilter(ohlc4, filterSettings.SZRegThreshold, filterSettings.SZRegime),
ADXFilter(settings.source, 14, filterSettings.SZADXThreshold, filterSettings.SZADX)
)
FeatureSZ =
FeatureSZ.new(
FromSerieSz(StringASz, close, high, low, hlc3, Para1Sz, Parb1Sz), // AsZ
FromSerieSz(StringBSz, close, high, low, hlc3, Para2Sz, Parb2Sz), // BsZ
FromSerieSz(StringCSz, close, high, low, hlc3, Para3Sz, Parb3Sz), // CsZ
FromSerieSz(StringDSz, close, high, low, hlc3, Para4Sz, Parb4Sz)
)
var Sz1Array = array.new_float()
var Sz2Array = array.new_float()
var Sz3Array = array.new_float()
var Sz4Array = array.new_float()
array.push(Sz1Array, FeatureSZ.AsZ)
array.push(Sz2Array, FeatureSZ.BsZ)
array.push(Sz3Array, FeatureSZ.CsZ)
array.push(Sz4Array, FeatureSZ.DsZ)
FeatSzArraysz =
FeatSzArraysz.new(
Sz1Array, // AsZ
Sz2Array, // BsZ
Sz3Array, // CsZ
Sz4Array
)
Label stdirection =
Label.new(
SZLong=1,
SZShort=-1,
SZNeutral=0
)
MaxBBackIndex = last_bar_index >= settings.MaxBBack ? last_bar_index - settings.MaxBBack : 0
SZSource = settings.source
y_train_series = SZSource[4] < SZSource[0] ? stdirection.SZShort : SZSource[4] > SZSource[0] ? stdirection.SZLong : stdirection.SZNeutral
var y_train_array = array.new_int(0)
var SZPredictions = array.new_float(0)
var SZPrediction = 0.
var Signalz = stdirection.SZNeutral
var distances = array.new_float(0)
array.push(y_train_array, y_train_series)
SZLDistance = -1.0
Sizesz = math.min(settings.MaxBBack-1, array.size(y_train_array)-1)
SizeszLoop = math.min(settings.MaxBBack-1, Sizesz)
if bar_index >= MaxBBackIndex //{
for i = 0 to SizeszLoop //{
d = GetSZDistance(i, settings.FCount, FeatureSZ, FeatSzArraysz)
if d >= SZLDistance and i%4 //{
SZLDistance := d
array.push(distances, d)
array.push(SZPredictions, math.round(array.get(y_train_array, i)))
if array.size(SZPredictions) > settings.NCount //{
SZLDistance := array.get(distances, math.round(settings.NCount*3/4))
array.shift(distances)
array.shift(SZPredictions)
//}
//}
//}
SZPrediction := array.sum(SZPredictions)
//}
filter_all = filterSZ.SvolatilityZ and filterSZ.SregimeZ and filterSZ.SadxZ and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
Signalz := SZPrediction > 0 and filter_all and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? stdirection.SZLong : SZPrediction < 0 and filter_all and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? stdirection.SZShort : nz(Signalz[1])
var int barsHeld = 0
barsHeld := ta.change(Signalz) ? 0 : barsHeld + 1
DiffSignalzType = ta.change(Signalz)
BuySignalzs = Signalz == stdirection.SZLong and EmaTrendUp and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
ShortSignalzs = Signalz == stdirection.SZShort and EmaTrendDown and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
NewSignalzBuy = BuySignalzs and DiffSignalzType and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
NewSignalzShort = ShortSignalzs and DiffSignalzType and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
SZTradeLong = NewSignalzBuy and EmaTrendUp and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
SZTradeShort = NewSignalzShort and EmaTrendDown and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
ColorSza(float SZPrediction) =>
switch
SZPrediction >= 9 => #009999
SZPrediction >= 8 => #009999e5
SZPrediction >= 7 => #009999d5
SZPrediction >= 6 => #0099998e
SZPrediction >= 5 => #00999993
SZPrediction >= 4 => #00999965
SZPrediction >= 3 => #00999952
SZPrediction >= 2 => #00999933
SZPrediction >= 1 => #00999933
=> #00999933
ColorSzb(float SZPrediction) =>
switch
SZPrediction >= 9 => #cc113d
SZPrediction >= 8 => #cc113fe5
SZPrediction >= 7 => #cc1140be
SZPrediction >= 6 => #cc1140b0
SZPrediction >= 5 => #cc11407a
SZPrediction >= 4 => #cc114071
SZPrediction >= 3 => #cc116e66
SZPrediction >= 2 => #cc115f4c
SZPrediction >= 1 => #cc116e33
=> #cc117e19
plotshape(SZTswitch and SZTradeLong and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? low : na, 'Buy', shape.labelup, location.belowbar, ColorSza(SZPrediction), text='Long', textcolor=color.white, size=size.small, offset=0)
plotshape(SZTswitch and SZTradeShort and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? high : na, 'Sell', shape.labeldown, location.abovebar, ColorSzb(-SZPrediction), text='Short',textcolor=color.white, size=size.small, offset=0)
SZCompFactor = settings.NCount / settings.CColor
SZPrend = SZPrediction > 0 ? color.from_gradient(SZPrediction, 0, SZCompFactor, #787b86, ColorBarGrand) : SZPrediction <= 0 ? color.from_gradient(SZPrediction, -SZCompFactor, 0, ColorBarGrand2, #787b86) : na
barcolor(SZTrendBarColors ? color.new(SZPrend, 50) : na)
alertcondition(SZTradeLong, 'SZ Open Long ▲', 'SZ Open Long ▲ | {{ticker}}@{{close}} | ({{interval}})')
alertcondition(SZTradeShort, 'SZ Open Short ▼', 'SZ Open Short ▼ | {{ticker}}@{{close}} | ({{interval}})')
EMAswitch = input.bool (true, "EMA", group='████████Switch panel (Overlay indicators)████████', inline='S1')
FVGswitch = input.bool (true, "FVGs", group='████████Switch panel (Overlay indicators)████████', inline='S1')
AFBswitch = input.bool (false, "AutoFibo", group='████████Switch panel (Overlay indicators)████████', inline='S1')
RSIEswitch = input.bool (true, "RSI Extremes", group='████████Switch panel (Overlay indicators)████████', inline='S1')
KZswitch = input.bool (false, "Show KillZones", group='████████Switch panel (Overlay indicators)████████', inline='S1')
PIVOTswitch = input.bool (false, "S/R Pivot Levels", group='████████Switch panel (Overlay indicators)████████', inline='S2')
VWAPswitch = input.bool (false, "VWAP", group='████████Switch panel (Overlay indicators)████████', inline='S2')
SuperTswitch= input.bool (false, "Supertrend", group='████████Switch panel (Overlay indicators)████████', inline='S2')
BBswitch = input.bool (false, "Bollinger Bands", group='████████Switch panel (Overlay indicators)████████', inline='S2')
POIswitch = input.bool (true, "Supply/Demand Zones", group='████████Switch panel (Overlay indicators)████████', inline='S3')
RFDWswitch = input.bool (false, "Range Filter DW", group='████████Switch panel (Overlay indicators)████████', inline='S3')
VPswitch = input.bool (true, "Volume Profile", group='████████Switch panel (Overlay indicators)████████', inline='S3')
// -----------------------------------------------------------------------------------------
g_OCS = '███████Histograms Settings███████'
TypeOSC = input.string("None", "Pick Oscillator", options=["None","Stochastic (Stoch)","Klinger Oscillator","Money Flow Index (MFI)", "Relative Strength Index (RSI)","Elder-Ray Bear and Bull Power","Commodity Channel Index (CCI)"], group=g_OCS, inline = 'HSGG', tooltip = 'The settings for these histograms are at the end of the data entry.')
oscLookbackLength = input.int(200, 'Display Length', minval = 10, step = 10, maxval = 250, group=g_OCS, inline = 'HSG')
oscPlacement = input.string('Bottom', 'Placement', options = ['Top', 'Bottom'], group=g_OCS, inline = 'HSG')
oscHight = 11 - input.int(7, 'Hight' , minval = 1, maxval = 10 , group=g_OCS , inline = 'HSG2')
oscVerticalOffset = input.int(3, "Vertical Offset", minval = -3, maxval = 10, group=g_OCS, inline = 'HSG2') / 10
// ----------------------------------------------------------------------------------------------------
// ----------------------------------------████████Key Levels████████--------------------------------------------------
// ----------------------------------------------------------------------------------------------------
labelsize = input.string(defval='Small', title='Text size', options=['Small', 'Medium', 'Large'],group = "████████Key Levels████████", inline='H')
var ShowH4Levels = input.bool(defval=false, title='4H', group='████████Key Levels████████', inline='4H')
ColorH4Levels = input.color(title='', defval=color.orange, group='████████Key Levels████████', inline='4H')
StyleH4Levels = input.string('Dotted', 'Style', ['Solid', 'Dashed', 'Dotted'], group="████████Key Levels████████",inline="4H")
TextH4Levels = input.bool(defval=true, title='Shorten', group='████████Key Levels████████', inline='4H')
var ShowDLevels = input.bool(defval=false, title='Daily', group='████████Key Levels████████', inline='Daily')
ColorDLevels = input.color(title='', defval=#08bcd4, group='████████Key Levels████████', inline='Daily')
StyleDLevels = input.string('Dotted', 'Style', ['Solid', 'Dashed', 'Dotted'], group="████████Key Levels████████",inline="Daily")
TextDLevels = input.bool(defval=true, title='Shorten', group='████████Key Levels████████', inline='Daily')
var ShowWLevels = input.bool(defval=false, title='Weekly', group='████████Key Levels████████', inline='Weekly')
WColor = input.color(title='', defval=#fffcbc, group='████████Key Levels████████', inline='Weekly')
WStyle = input.string('Dotted', 'Style', ['Solid', 'Dashed', 'Dotted'], group="████████Key Levels████████",inline="Weekly")
WTypeText = input.bool(defval=true, title='Shorten', group='████████Key Levels████████', inline='Weekly')
var pihtext = TextH4Levels ? 'P-4H-H' : 'Prev 4H High'
var piltext = TextH4Levels ? 'P-4H-L' : 'Prev 4H Low'
var iotext = TextH4Levels ? '4H-O' : '4H Open'
var pimtext = TextH4Levels ? 'P-4H-M' : 'Prev 4H Mid'
var pdhtext = TextDLevels ? 'PDH' : 'Prev Day High'
var pdltext = TextDLevels ? 'PDL' : 'Prev Day Low'
var dotext = TextDLevels ? 'DO' : 'Daily Open'
var pdmtext = TextDLevels ? 'PDM' : 'Prev Day Mid'
var pwhtext = WTypeText ? 'PWH' : 'Prev Week High'
var pwltext = WTypeText ? 'PWL' : 'Prev Week Low'
var wotext = WTypeText ? 'WO' : 'Weekly Open'
var pwmtext = WTypeText ? 'PWM' : 'Prev Week Mid'
distanceright = 25
linesize = 'Small'
linestyle = 'Solid'
transparent = #ffffff00
n=bar_index
ma(_source, _length, _type) =>
switch _type
"SMA" => ta.sma (_source, _length)
"EMA" => ta.ema (_source, _length)
"RMA" => ta.rma (_source, _length)
"VWMA" => ta.vwma(_source, _length)
//Conditional Sampling EMA Function
Cond_EMA(x, cond, n) =>
var val = array.new_float(0)
var ema_val = array.new_float(1)
if cond
array.push(val, x)
if array.size(val) > 1
array.remove(val, 0)
if na(array.get(ema_val, 0))
array.fill(ema_val, array.get(val, 0))
array.set(ema_val, 0, (array.get(val, 0) - array.get(ema_val, 0)) * (2 / (n + 1)) + array.get(ema_val, 0))
EMA = array.get(ema_val, 0)
EMA
//Conditional Sampling SMA Function
SMA_Cond(x, cond, n) =>
var vals = array.new_float(0)
if cond
array.push(vals, x)
if array.size(vals) > n
array.remove(vals, 0)
SMA = array.avg(vals)
SMA
//Standard deviation Function
St_dev(x, n) =>
math.sqrt(SMA_Cond(math.pow(x, 2), 1, n) - math.pow(SMA_Cond(x, 1, n), 2))
//Range Size Function
Sizerng(x, scale, qty, n) =>
EATR = Cond_EMA(ta.tr(true), 1, n)
AC = Cond_EMA(math.abs(x - x[1]), 1, n)
SD = St_dev(x, n)
Sizerng = scale == 'Pips' ? qty * 0.0001 : scale == 'Points' ? qty * syminfo.pointvalue : scale == '% del precio' ? close * qty / 100 : scale == 'ATR' ? qty * EATR : scale == 'Average Change' ? qty * AC : scale == 'Desviación Estándar' ? qty * SD : scale == 'Ticks' ? qty * syminfo.mintick : qty
Sizerng
//Two Type Range Filter Function
Filtrng(h, l, rng_, n, type, smooth, sn, av_rf, av_n) =>
rng_smooth = Cond_EMA(rng_, 1, sn)
r = smooth ? rng_smooth : rng_
var rfilt = array.new_float(2, (h + l) / 2)
array.set(rfilt, 1, array.get(rfilt, 0))
if type == 'Type 1'
if h - r > array.get(rfilt, 1)
array.set(rfilt, 0, h - r)
if l + r < array.get(rfilt, 1)
array.set(rfilt, 0, l + r)
if type == 'Type 2'
if h >= array.get(rfilt, 1) + r
array.set(rfilt, 0, array.get(rfilt, 1) + math.floor(math.abs(h - array.get(rfilt, 1)) / r) * r)
if l <= array.get(rfilt, 1) - r
array.set(rfilt, 0, array.get(rfilt, 1) - math.floor(math.abs(l - array.get(rfilt, 1)) / r) * r)
Filtrng1 = array.get(rfilt, 0)
hi_band1 = Filtrng1 + r
lo_band1 = Filtrng1 - r
Filtrng2 = Cond_EMA(Filtrng1, Filtrng1 != Filtrng1[1], av_n)
hi_band2 = Cond_EMA(hi_band1, Filtrng1 != Filtrng1[1], av_n)
lo_band2 = Cond_EMA(lo_band1, Filtrng1 != Filtrng1[1], av_n)
Filtrng = av_rf ? Filtrng2 : Filtrng1
hi_band = av_rf ? hi_band2 : hi_band1
lo_band = av_rf ? lo_band2 : lo_band1
[hi_band, lo_band, Filtrng]
FunctionMA(source, length, type) =>
if type == 'RMA'
ta.rma(source, length)
else if type == 'SMA'
ta.sma(source, length)
else if type == 'EMA'
ta.ema(source, length)
else
ta.vwma(source, length)
var g_EMAS = "██████Moving Average (RMA, SMA, EMA, VWMA)██████"
LenghtBool1 = input.bool(false,'',group=g_EMAS,inline='len1')
len1 = input.int(12, title='MA 1',group=g_EMAS,inline='len1')
string ma_1_type = input.string(defval='EMA', title='Type', options=['RMA', 'SMA', 'EMA','VWMA'], inline='len1',group=g_EMAS)
color ma_1_colour = input.color(color.rgb(255, 255, 255), '', inline='len1',group=g_EMAS)
LenghtBool2 = input.bool(false,'',group=g_EMAS,inline='len2')
len2 = input.int(21, minval=1, title='MA 2',group=g_EMAS,inline='len2')
string ma_2_type = input.string(defval='EMA', title='Type', options=['RMA', 'SMA', 'EMA','VWMA'], inline='len2',group=g_EMAS)
color ma_2_colour = input.color(color.rgb(255, 94, 0), '', inline='len2',group=g_EMAS)
LenghtBool3 = input.bool(false,'',group=g_EMAS,inline='len3')
len3 = input.int(55, minval=1, title='MA 3',group=g_EMAS,inline='len3')
string ma_3_type = input.string(defval='EMA', title='Type', options=['RMA', 'SMA', 'EMA','VWMA'], inline='len3',group=g_EMAS)
color ma_3_colour = input.color(color.new(color.aqua, 0), '', inline='len3',group=g_EMAS)
LenghtBool4 = input.bool(true,'',group=g_EMAS,inline='len4')
len4 = input.int(200, minval=1, title='MA 4',group=g_EMAS,inline='len4')
string ma_4_type = input.string(defval='EMA', title='Type', options=['RMA', 'SMA', 'EMA','VWMA'], inline='len4',group=g_EMAS)
color ma_4_colour = input.color(color.new(#ff0000, 0), '', inline='len4',group=g_EMAS)
ema1 = request.security(syminfo.tickerid, timeframe.period, FunctionMA(close, len1, ma_1_type))
ema2 = request.security(syminfo.tickerid, timeframe.period, FunctionMA(close, len2, ma_2_type))
ema3 = request.security(syminfo.tickerid, timeframe.period, FunctionMA(close, len3, ma_3_type))
ema4 = request.security(syminfo.tickerid, timeframe.period, FunctionMA(close, len4, ma_4_type))
plot(LenghtBool1 and EMAswitch and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? ema1:na, color=ma_1_colour, linewidth=1, title='MA 1')
plot(LenghtBool2 and EMAswitch and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? ema2:na, color=ma_2_colour, linewidth=1, title='MA 2')
plot(LenghtBool3 and EMAswitch and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? ema3:na, color=ma_3_colour, linewidth=1, title='MA 3')
plot(LenghtBool4 and EMAswitch and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? ema4:na, color=ma_4_colour, linewidth=2, title='MA 4')
/////////////////////////////////////////////
//////////// VWAP
////////////////////////////////////////////
hideonDWM = input(false, title="Hide VWAP in 1D or higher", group="████████VWAP Configuration████████")
vwapcolor = input.color(color.rgb(51, 92, 153), title= "VWAP Color", group="████████VWAP Configuration████████", inline='vwap1')
var Widthr = input.string(defval = "Sesión", title="Anchoring period",
options=["Sesión", "Week", "Month", "Quarterly", "Year", "Decade", "Century", "Earnings", "Dividends", "Divisions"], group="████████VWAP Configuration████████", inline='vwap1')
srcvwap = input(title = "Source", defval = hlc3, group="████████VWAP Configuration████████", inline='vwap2')
offsetvwap = input(0, title="Compensator", group="████████VWAP Configuration████████", inline='vwap2')
ShowBand_1 = input(true, title="", group="████████VWAP Configuration████████", inline="band_1")
stdevMult_1 = input(1.0, title="Band Multiplier #1 (VWAP)", group="████████VWAP Configuration████████", inline="band_1")
ShowBand_2 = input(false, title="", group="████████VWAP Configuration████████", inline="band_2")
stdevMult_2 = input(2.0, title="Band Multiplier #2 (VWAP)" , group="████████VWAP Configuration████████", inline="band_2")
ShowBand_3 = input(false, title="", group="████████VWAP Configuration████████", inline="band_3")
stdevMult_3 = input(3.0, title="Band Multiplier #3 (VWAP)", group="████████VWAP Configuration████████", inline="band_3")
if barstate.islast and ta.cum(volume) == 0 and title == 'AlgoPoint' and subtitle == 'All Leaked Algos \n Instagram: algopoint \n Website: algopoint.mysellix.io' and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
runtime.error("The data provider does not provide any Volume.")
EarningNew = request.earnings(syminfo.tickerid, earnings.actual, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
DividendsNew = request.dividends(syminfo.tickerid, dividends.gross, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
SplitNew = request.splits(syminfo.tickerid, splits.denominator, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
NewPeriod = switch Widthr
"Earnings" => not na(EarningNew)
"Dividends" => not na(DividendsNew)
"Divisions" => not na(SplitNew)
"Sesión" => timeframe.change("D")
"Week" => timeframe.change("W")
"Month" => timeframe.change("M")
"Quarterly" => timeframe.change("3M")
"Year" => timeframe.change("12M")
"Decade" => timeframe.change("12M") and year % 10 == 0
"Century" => timeframe.change("12M") and year % 100 == 0
=> false
EsdWidthr = Widthr == "Earnings" or Widthr == "Dividends" or Widthr == "Divisions"
if na(srcvwap[1]) and not EsdWidthr
NewPeriod := true
float vwapValue = na
float upperBandValue1 = na
float lowerBandValue1 = na
float upperBandValue2 = na
float lowerBandValue2 = na
float upperBandValue3 = na
float lowerBandValue3 = na
if not (hideonDWM and timeframe.isdwm)
[_vwap, _stdevUpper, _] = ta.vwap(srcvwap, NewPeriod, 1)
vwapValue := _vwap
stdevAbs = _stdevUpper - _vwap
upperBandValue1 := _vwap + stdevAbs * stdevMult_1
lowerBandValue1 := _vwap - stdevAbs * stdevMult_1
upperBandValue2 := _vwap + stdevAbs * stdevMult_2
lowerBandValue2 := _vwap - stdevAbs * stdevMult_2
upperBandValue3 := _vwap + stdevAbs * stdevMult_3
lowerBandValue3 := _vwap - stdevAbs * stdevMult_3
plot(VWAPswitch? vwapValue:na, title="VWAP", color=vwapcolor, offset=offsetvwap)
int FVGMbb = 1000
max_bars_back(time, FVGMbb)
max_bars_back(low, FVGMbb)
max_bars_back(close, FVGMbb)
max_bars_back(open, FVGMbb)
max_bars_back(high, FVGMbb)
// Settings
//{
FVGroup = '██████Fair Value Gaps (FVG)██████'
FVGColorA = color.rgb(101, 240, 140, 65)
FVGColorMittigated = color.rgb(183, 193, 185, 65)
noColor = color.new(color.white, 100)
eo_Unextended = 'Unextended'
eo_BySceen = 'By Screen'
eo_ByLastBar = 'By Last Bar'
eo_ByFilledBar = 'Filling Candle'
onTip = 'Shows/Hides chosen TF'
extendTip = 'Extend' + ':\n ' + eo_Unextended + ' - shows fixed FVG area\n ' + eo_BySceen + ' - extends FVG area all the way to the right\n ' + eo_ByLastBar + ' - extends FVG area to the last bar\n\nEnables/Disables custom colors\n\n'
filledName = 'Partially Mitigated'
fTip = 'From:\n ' + 'Last Mitigations' + ' - shows filled FVGs by the first unfilled FVG\n ' + 'Max Mitigations' + ' - sets max filled FVGs to show\n\nTo:\n ' + eo_ByFilledBar + '- filled area is clipped by filling bar\n ' + eo_Unextended + ' - show fixed FVG area\n\n'
FVGshar = input.color(FVGColorA, 'FVGs', group = FVGroup, inline = 'FVG1')
FVGFshar = input.color(FVGColorMittigated, 'P.Mitigated', group = FVGroup, inline = 'FVG1', tooltip = 'Shared Colors')
FVGMaxIMbs = input.int(50, 'Max FVGs', group = FVGroup, minval = 1, maxval = 100, inline = 'gen')
FVGMaxFill = input.int(13, 'Max Fills', minval = 1, maxval = 100, group = FVGroup, inline = 'gen', tooltip = 'Max - Maximum FVGs to show\n\nMax Fills - Sets maximum filled FVGs\n\n')
FVGMitig = input.int(0,'Width', group = FVGroup, minval = -100, maxval = 100, inline = 'WEFVG')
type TFConfig
bool FVGon
string FVGExtend
color FVGbu
color FVGfbu
bool FVGMitig
bool FVGToUnMitig
bool FVGextendFilled
matrix<float> fvgdata
bool filled = false
int off = -1
filledTip = filledName + ' - shows/hides filled area\n\n'
chooseColor2(con, shc, c) => con ? c : shc
chooseExtend(t) => t
var TFConfig tfc = na
if na(tfc)
tfc := TFConfig.new (input.bool(true, 'FVGs On', group = FVGroup, inline = 'FVG1'), chooseExtend(input.string(eo_Unextended, 'Extend', options = [eo_Unextended, eo_BySceen, eo_ByLastBar], group = FVGroup, inline = 'WEFVG', tooltip = onTip + '\n\n')))
tfc.FVGMitig := input.bool(true, filledName, group = FVGroup, inline = 'FVG1')
tfc.FVGToUnMitig := 'Last Mitigations' == input.string('Max Mitigations', 'From', options = ['Last Mitigations', 'Max Mitigations'], group = FVGroup, inline = '2')
tfc.FVGextendFilled := eo_ByFilledBar == input.string(eo_Unextended, 'To', options = [eo_ByFilledBar, eo_Unextended], group = FVGroup, inline = '2', tooltip = fTip)
tfc.FVGfbu := chooseColor2(false, FVGFshar, noColor)
tfc.FVGbu := chooseColor2(false, FVGshar, noColor)
FVGMidBar = true
FVGBords = false
itoid(infvgdata, i) =>
k = i % FVGMbb
if infvgdata.filled
k <= infvgdata.off ? infvgdata.off - k : FVGMbb - 1 - (k - 1 - infvgdata.off)
else
infvgdata.off - k
getlen(infvgdata) =>
infvgdata.filled ? FVGMbb : infvgdata.off + 1
getv(infvgdata, i, ID) =>
ind = itoid(infvgdata, i)
if ind < 0
na
else
matrix.get(infvgdata.fvgdata, itoid(infvgdata, i), ID)
//}
getLow() =>
mn = math.min(open, close, low)
pmx = math.max(open[1], close[1])
mn > pmx ? pmx : low
getHigh() =>
mx = math.max(open, close, high)
pmn = math.min(open[1], close[1])
mx < pmn ? pmn : high
maxFilled = 200
ID_L = 0
ID_RL = 1
ID_H = 2
ID_RH = 3
ID_BI = 4
ID_LI = 5
ID_CNT = ID_LI + 1
table.cell(textstylist, 0, 0, title, width, height, c_title, a_title, text_size=s_title, bgcolor=c_bg)
createLabel(x, y, txt, tcol, FVGExtend) =>
label.new(x, y, txt, size = size.small, textcolor = tcol, color = noColor, style = label.style_label_left)
findImb(d, tf, IDL, IDH, sign, col, uw, filled_col, lon = false, string lname = na) =>
var array<box> imbs = array.new<box>()
var array<box> filledImbs = array.new<box>()
var array<label> names = array.new<label>()
while array.size(imbs) > 0
box.delete(array.pop(imbs))
while array.size(filledImbs) > 0
box.delete(array.pop(filledImbs))
while array.size(names) > 0
label.delete(array.pop(names))
maxBlocks = FVGMaxIMbs
int len = getlen(d)
if len > 4
ml = getv(d, 0, IDL)
mh = getv(d, 0, IDH)
bi = int(getv(d, 0, ID_LI))
int lastImb = na
for i = 1 to len - 2
l = getv(d, i, IDL)
nl = getv(d, i + 1, IDL)
h = getv(d, i, IDH)
nh = getv(d, i + 1, IDH)
if nh < ml
right = (d.FVGExtend == eo_ByLastBar ? bi : int(getv(d, i - 1, ID_LI))) + uw
left = FVGMidBar ? int(getv(d, i, ID_BI)) : int(getv(d, i + 1, ID_BI))
if bar_index - right > FVGMbb
right := bar_index - FVGMbb
if bar_index - left > FVGMbb
left := bar_index - FVGMbb
if right - left < 1
right := left + 1
imb = box.new(left, sign * ml, right, sign * nh, border_color = FVGBords ? col : na, bgcolor = col, extend = d.FVGExtend == eo_BySceen ? extend.right : extend.none)
array.push(imbs, imb)
maxBlocks -= 1
lastImb := i
if ml > nh and nh < l//for the gap
ml := nh
if l < ml
ml := l
if maxBlocks <= 0
break
if d.FVGMitig //draw filled imbs
i = 1
fvgs = 0
if na(lastImb) or not d.FVGToUnMitig
lastImb := len - 1
while fvgs < FVGMaxFill and i <= lastImb
nl = getv(d, i - 1, IDL)//from the right
ph = getv(d, i + 1, IDH)//from the left
if ph < nl and i > 1
ml := nl
//left = bi - i - 1
left = FVGMidBar ? int(getv(d, i, ID_BI)) : int(getv(d, i + 1, ID_BI))
if bar_index - left > FVGMbb
left := bar_index - FVGMbb
fills = 0
box imb = na
j = i - 2
while j >= 0
if getv(d, j, IDL) < ml
//right = bi - j
right = d.FVGextendFilled ? int(getv(d, j, ID_BI)) : int(getv(d, i - 1, ID_LI)) + uw
if bar_index - right > FVGMbb
right := bar_index - FVGMbb
if right - left < 1
right := left + 1
if d.FVGextendFilled
imb := na
bottom = sign * math.max(getv(d, j, IDL), ph)
if na(imb)
imb := box.new(left, sign * ml, right, bottom, border_color = FVGBords ? filled_col : na, bgcolor = filled_col, extend = extend.none)
array.push(filledImbs, imb)
if array.size(filledImbs) + array.size(imbs) > maxFilled
box.delete(array.shift(filledImbs))
box.set_bottom(imb, bottom)
ml := getv(d, j, IDL)
fills += 1
if ml <= ph
break
j -= 1
if fills > 0
fvgs += 1
i += 1
FindCurTFImb(TFConfig d) =>
l = getLow()
h = getHigh()
if d.FVGon and FVGswitch
if na(d.fvgdata)
d.fvgdata := matrix.new<float>(FVGMbb, ID_CNT)
var lbi = -1
if lbi != bar_index
lbi := bar_index
d.off += 1
if d.off == FVGMbb
d.off := 0
d.filled := true
matrix.set(d.fvgdata, d.off, ID_BI, bar_index)
matrix.set(d.fvgdata, d.off, ID_L, l)
matrix.set(d.fvgdata, d.off, ID_H, h)
matrix.set(d.fvgdata, d.off, ID_RL, -h)
matrix.set(d.fvgdata, d.off, ID_RH, -l)
matrix.set(d.fvgdata, d.off, ID_LI, bar_index)
if barstate.islast
findImb(d, timeframe.period, ID_L, ID_H, 1, d.FVGbu, FVGMitig, d.FVGfbu)
findImb(d, timeframe.period, ID_RL, ID_RH, -1, d.FVGbu, FVGMitig, d.FVGfbu)
type ltffvgdata
float ltf_low
float ltf_high
FindLtfImb(tf, tfon, TFConfig d) =>
wrongltf = not tfon or timeframe.in_seconds(tf) >= timeframe.in_seconds(timeframe.period)
if not wrongltf
wrongltf := true
ltf = wrongltf ? timeframe.period : tf
ltf_lows = request.security_lower_tf(syminfo.tickerid, ltf, getLow())
ltf_highs = request.security_lower_tf(syminfo.tickerid, ltf, getHigh())
if not wrongltf
if na(d.fvgdata)
d.fvgdata := matrix.new<float>(FVGMbb, ID_CNT)
if array.size(ltf_lows) > 0
for i = 0 to array.size(ltf_lows) - 1
ltf_low = array.get(ltf_lows, i)
ltf_high = array.get(ltf_highs, i)
d.off += 1
if d.off == FVGMbb
d.off := 0
d.filled := true
matrix.set(d.fvgdata, d.off, ID_BI, bar_index)
matrix.set(d.fvgdata, d.off, ID_L, ltf_low)
matrix.set(d.fvgdata, d.off, ID_H, ltf_high)
matrix.set(d.fvgdata, d.off, ID_RL, -ltf_high)
matrix.set(d.fvgdata, d.off, ID_RH, -ltf_low)
matrix.set(d.fvgdata, d.off, ID_LI, bar_index)
FindHtfImb(tf, tfon, TFConfig d) =>
wronghtf = not tfon or timeframe.in_seconds(tf) <= timeframe.in_seconds(timeframe.period)
if not wronghtf
wronghtf := true
[t, h, l] = request.security(syminfo.tickerid, tf, [time, getHigh(), getLow()], barmerge.gaps_off, barmerge.lookahead_on)
if not wronghtf
if na(d.fvgdata)
d.fvgdata := matrix.new<float>(FVGMbb, ID_CNT)
var pt = -1
if pt != t
pt := t
d.off += 1
if d.off == FVGMbb
d.off := 0
d.filled := true
matrix.set(d.fvgdata, d.off, ID_BI, bar_index)
matrix.set(d.fvgdata, d.off, ID_L, l)
matrix.set(d.fvgdata, d.off, ID_H, h)
matrix.set(d.fvgdata, d.off, ID_RL, -h)
matrix.set(d.fvgdata, d.off, ID_RH, -l)
matrix.set(d.fvgdata, d.off, ID_LI, bar_index)
FindCurTFImb(tfc)
////////////////////////////////
///// Auto Fibonacci
//////////////////////////////
G_AutoFibo = '██████Auto Fibonacci██████'
FibHighLow = input(title='Higher High and Lower Low', defval=false, group=G_AutoFibo, inline='AFB')
AFB0 = input(title='Level %0', defval=false, group=G_AutoFibo, inline='AFB')
AFB1 = input(title='Level %23.6', defval=false, group=G_AutoFibo, inline='AFB1')
AFB2 = input(title='Level %38.2', defval=true, group=G_AutoFibo, inline='AFB1')
AFB3 = input(title='Level %50', defval=false, group=G_AutoFibo, inline='AFB1')
AFB4 = input(title='Level %61.8', defval=true, group=G_AutoFibo, inline='AFB2')
AFB5 = input(title='Level %78.6', defval=false, group=G_AutoFibo, inline='AFB2')
AFB6 = input(title='Level %100', defval=false, group=G_AutoFibo, inline='AFB2')
FPeriod = input(100, title='Fibo Period', group=G_AutoFibo)
Fhigh = ta.highest(FPeriod)
Flow = ta.lowest(FPeriod)
FH = ta.highestbars(high, FPeriod)
FL = ta.lowestbars(low, FPeriod)
AutoFibo = FH < FL
F0 = AutoFibo ? Flow : Fhigh
F236 = AutoFibo ? (Fhigh - Flow) * 0.236 + Flow : Fhigh - (Fhigh - Flow) * 0.236
F382 = AutoFibo ? (Fhigh - Flow) * 0.382 + Flow : Fhigh - (Fhigh - Flow) * 0.382
F500 = AutoFibo ? (Fhigh - Flow) * 0.500 + Flow : Fhigh - (Fhigh - Flow) * 0.500
F618 = AutoFibo ? (Fhigh - Flow) * 0.618 + Flow : Fhigh - (Fhigh - Flow) * 0.618
F786 = AutoFibo ? (Fhigh - Flow) * 0.786 + Flow : Fhigh - (Fhigh - Flow) * 0.786
F1000 = AutoFibo ? (Fhigh - Flow) * 1.000 + Flow : Fhigh - (Fhigh - Flow) * 1.000
Fcolor = #aacf92
FBcolor = #5a9afb
FUpDoColor = #f1680c
plot(AFB0 and AFBswitch ? F0 : na, color=Fcolor, linewidth=1, trackprice=true, show_last=1, title='0')
plot(AFB1 and AFBswitch ? F236 : na, color=Fcolor, linewidth=1, trackprice=true, show_last=1, title='0.236')
plot(AFB2 and AFBswitch ? F382 : na, color=Fcolor, linewidth=1, trackprice=true, show_last=1, title='0.382')
plot(AFB3 and AFBswitch ? F500 : na, color=Fcolor, linewidth=1, trackprice=true, show_last=1, title='0.5')
plot(AFB4 and AFBswitch ? F618 : na, color=FBcolor, linewidth=1, trackprice=true, show_last=1, title='0.618')
plot(AFB5 and AFBswitch ? F786 : na, color=Fcolor, linewidth=1, trackprice=true, show_last=1, title='0.786')
plot(AFB6 and AFBswitch ? F1000 : na, color=Fcolor, linewidth=1, trackprice=true, show_last=1, title='1')
plotshape(AFB0 and AFBswitch ? F0 : na, style=shape.diamond, location=location.absolute, color=#ffffff00, textcolor=color.new(#ff0000, 12), show_last=1, text='%0', offset=15)
plotshape(AFB1 and AFBswitch ? F236 : na, style=shape.diamond, location=location.absolute, color=#ffffff00, textcolor=color.new(#aacf92, 12), show_last=1, text='%23.6', offset=15)
plotshape(AFB2 and AFBswitch ? F382 : na, style=shape.diamond, location=location.absolute, color=#ffffff00, textcolor=color.new(#aacf92, 12), show_last=1, text='%38.2', offset=15)
plotshape(AFB3 and AFBswitch ? F500 : na, style=shape.diamond, location=location.absolute, color=#ffffff00, textcolor=color.new(#aacf92, 12), show_last=1, text='%50', offset=15)
plotshape(AFB4 and AFBswitch ? F618 : na, style=shape.diamond, location=location.absolute, color=#ffffff00, textcolor=color.new(#5a9afb, 12), show_last=1, text='%61.8', offset=15)
plotshape(AFB5 and AFBswitch ? F786 : na, style=shape.diamond, location=location.absolute, color=#ffffff00, textcolor=color.new(#aacf92, 12), show_last=1, text='%78.6', offset=15)
plotshape(AFB6 and AFBswitch ? F1000 : na, style=shape.diamond, location=location.absolute, color=#ffffff00, textcolor=color.new(#00ff0d, 12), show_last=1, text='%100', offset=15)
plotshape(FibHighLow and AFBswitch ? Flow : na, style=shape.labelup, location=location.absolute, size=size.tiny, color=color.new(#ff6600, 0), textcolor=color.new(color.black, 0), show_last=1, text='Low', offset=FL)
plotshape(FibHighLow and AFBswitch ? Fhigh : na, style=shape.labeldown, location=location.absolute, size=size.tiny, color=color.new(#ff6600, 0), textcolor=color.new(color.black, 0), show_last=1, text='High', offset=FH)
////////////////////////////////
///// RSI EXTREME
//////////////////////////////
G_RSIExtreme = "████████RSI EXTREME████████"
RSIPeriodExtreme = input.int(14, title='Period', step=1, minval=1, group=G_RSIExtreme, inline='RSIE1')
RSISourceExtreme = input(title='Source', defval=close, group=G_RSIExtreme, inline='RSIE')
RSIlabelSizeExtreme = input.string('Small', 'Label Size', options = ['Tiny', 'Small', 'Normal', 'Large'], group=G_RSIExtreme, inline='RSIE')
OversoldForRSIExtreme = input.int(30, title='Oversold Level', maxval=100, minval=1, step=1, group=G_RSIExtreme, inline='RSIE2')
OverboughtForRSIExtreme = input.int(70, title='Overbought Level', maxval=100, minval=1, step=1, group=G_RSIExtreme, inline='RSIE2')
RSIExtreme = ta.rsi(RSISourceExtreme, RSIPeriodExtreme)
sizerLabel = switch RSIlabelSizeExtreme
'Normal' => size.normal
'Tiny' => size.tiny
'Small' => size.small
'Large' => size.large
bool IsOversoldForRSIExtreme = false
bool IsOverboughtForRSIExtreme = false
if RSIExtreme <= OversoldForRSIExtreme and RSIEswitch
label lup = label.new(bar_index, na, str.tostring(int(RSIExtreme)), color=color.new(color.lime, 0), textcolor=color.rgb(141, 141, 141), style=label.style_arrowup, size=sizerLabel, yloc=yloc.belowbar)
IsOversoldForRSIExtreme := true
if RSIExtreme <= OversoldForRSIExtreme and RSIExtreme[1] <= OversoldForRSIExtreme
if low[1] > low
if RSIExtreme[1] <= RSIExtreme
label.delete(lup[1])
if low[1] > low
if RSIExtreme[1] >= RSIExtreme
label.delete(lup[1])
if low[1] < low
if RSIExtreme[1] >= RSIExtreme
label.delete(lup)
if low[1] < low
if RSIExtreme[1] <= RSIExtreme
label.delete(lup)
if RSIExtreme <= OversoldForRSIExtreme and RSIExtreme[2] <= OversoldForRSIExtreme
if low[2] > low
if RSIExtreme[2] <= RSIExtreme
label.delete(lup[2])
if low[2] > low
if RSIExtreme[2] >= RSIExtreme
label.delete(lup[2])
if low[2] < low
if RSIExtreme[2] >= RSIExtreme
label.delete(lup)
if low[2] < low
if RSIExtreme[2] <= RSIExtreme
label.delete(lup)
if RSIExtreme >= OverboughtForRSIExtreme and RSIEswitch
label ldw = label.new(bar_index, na, str.tostring(int(RSIExtreme)), color=color.new(color.red, 0), textcolor=color.rgb(141, 141, 141), style=label.style_arrowdown, size=sizerLabel, yloc=yloc.abovebar)
IsOverboughtForRSIExtreme := true
if RSIExtreme >= OverboughtForRSIExtreme and RSIExtreme[1] >= OverboughtForRSIExtreme
if high[1] < high
if RSIExtreme[1] <= RSIExtreme
label.delete(ldw[1])
if high[1] < high
if RSIExtreme[1] >= RSIExtreme
label.delete(ldw[1])
if high[1] > high
if RSIExtreme[1] >= RSIExtreme
label.delete(ldw)
if high[1] > high
if RSIExtreme[1] <= RSIExtreme
label.delete(ldw)
if RSIExtreme >= OverboughtForRSIExtreme and RSIExtreme[2] >= OverboughtForRSIExtreme
if high[2] < high
if RSIExtreme[2] <= RSIExtreme
label.delete(ldw[2])
if high[2] < high
if RSIExtreme[1] >= RSIExtreme
label.delete(ldw[2])
if high[2] > high
if RSIExtreme[2] >= RSIExtreme
label.delete(ldw)
if high[2] > high
if RSIExtreme[2] <= RSIExtreme
label.delete(ldw)
alertcondition(IsOversoldForRSIExtreme and IsOverboughtForRSIExtreme, 'Extreme RSI Overbought-Oversold Call', 'Extreme RSI Overbought-Oversold Call found SZ')
////////////////////////////////
///// Super Trend
//////////////////////////////
G_ST = "██████████ SuperTrend ██████████"
Periods = input(title='ATR Period', defval=10, group=G_ST, inline='ATRST')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0, group=G_ST, inline='ATRST')
STHighlightState = input(title='Highlighter On/Off ?', defval=false, group=G_ST, inline='ATRST1')
stsrc = input(hl2, title='Source', group=G_ST, inline='ATRST1')
changeATR = input(title='Change ATR Calculation Method ?', defval=true, group=G_ST, inline='ATRST2')
STShowLabels = input(title='Show Buy/Sell Signals ?', defval=true, group=G_ST, inline='ATRST2')
var color longColor = color.green
var color shortColor = color.red
statr2 = ta.sma(ta.tr, Periods)
statr = changeATR ? ta.atr(Periods) : statr2
stup = stsrc - Multiplier * statr
up1 = nz(stup[1], stup)
stup := close[1] > up1 ? math.max(stup, up1) : stup
STdn = stsrc + Multiplier * statr
STdn1 = nz(STdn[1], STdn)
STdn := close[1] < STdn1 ? math.min(STdn, STdn1) : STdn
sttrend = 1
sttrend := nz(sttrend[1], sttrend)
sttrend := sttrend == -1 and close > STdn1 ? 1 : sttrend == 1 and close < up1 ? -1 : sttrend
upPlot = plot(sttrend == 1 and SuperTswitch ? stup : na, title='Long Stop', style=plot.style_linebr, linewidth=1, color=longColor)
stbuySignal = sttrend == 1 and sttrend[1] == -1
plotshape(stbuySignal and SuperTswitch and STShowLabels ? stup : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=longColor)
plotshape(stbuySignal and SuperTswitch and STShowLabels ? stup : na, title='UpTrend', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white)
STdnPlot = plot(sttrend != 1 and SuperTswitch ? STdn : na , title='Short Stop', style=plot.style_linebr, linewidth=1, color=shortColor)
stsellSignal = sttrend == -1 and sttrend[1] == 1
plotshape(stsellSignal and SuperTswitch and STShowLabels ? STdn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor)
plotshape(stsellSignal and SuperTswitch and STShowLabels ? STdn : na, title='Down Trend', text= 'Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white)
/////////////////////////////////////////////
///// ████████Bollinger Band████████ (BB)
///////////////////////////////////////////
BandsBG= "████████Bollinger Bands████████"
LengthBB = input.int(20, minval=1, title="Length BB", group = BandsBG, inline='bb1')
BBcolor = input.color((#00897b),"BB High", group = BandsBG, inline= 'bb1')
BBcolor2 = input.color((#00897b),"BB Low", group = BandsBG, inline= 'bb1')
TypeMABB = input.string("SMA", "Base MA Type", options = ["SMA", "EMA", "VWMA"], group = BandsBG, inline='bb2')
BBsrc = input(close, title="Source", group = BandsBG, inline='bb2')
MultBB = input.float(2.0, minval=0.001, maxval=50, title="Typical deviation", group = BandsBG, inline='bb3')
BasisBB = ma(BBsrc, LengthBB, TypeMABB)
DevBB = MultBB * ta.stdev(BBsrc, LengthBB)
UpperBB = BasisBB + DevBB
LowerBB = BasisBB - DevBB
OffsetBB = input.int(0, "Compensator", minval = -500, maxval = 500, group = BandsBG, inline='bb3')
plot(BBswitch ? BasisBB:na, "Base", color=#cecece00, offset = OffsetBB)
bbp1 = plot(BBswitch ? UpperBB:na, "Higher (BB)", BBcolor, offset = OffsetBB)
bbp2 = plot(BBswitch ? LowerBB:na, "Lower (BB)", BBcolor2, offset = OffsetBB)
fillColor2 = BBswitch ? color.rgb(33, 150, 243, 95) : na
fill(bbp1, bbp2, title = "Background", color=fillColor2)
///////////////////////////////////////////////////
//////// Zonas de Supply/Demand POI
//////////////////////////////////////////////////
G_POI = '██████Config of Supply/Demand POI zones██████'
POIATR = ta.atr(300)
ColorSupply = input.color(color.rgb(204, 17, 92, 65), title = 'Supply', group = G_POI, inline = 'POI3')
ColorSupplyOutline = input.color(color.new(color.white,100), title = 'Supply Edges - POI', group = G_POI, inline = 'POI3')
ColorDemand = input.color(color.rgb(0, 138, 153, 65), title = 'Demand', group = G_POI, inline = 'POI4')
ColorDemandOutline = input.color(color.new(color.white,100), title = 'Demand Edges - POI', group = G_POI, inline = 'POI4')
SwingLength = input.int(8, title = 'High/Low Swing Length', group = G_POI, minval = 1, maxval = 50, inline= 'POI1')
HistoryDemandKepp = input.int(21, title = 'History to maintain', minval = 5, maxval = 50, group = G_POI, inline= 'POI1')
BoxWidth = input.float(2, title = 'Supply/Demand Box Width', group = G_POI, minval = 1, maxval = 10, step = 0.5, inline= 'POI2')
ColorLabelPOI = input.color(#bdbdbd, title = 'POI label', group = G_POI, inline = 'POI2')
MaxExtention = input.bool(false, title = "Extend", group = G_POI, inline = 'POI2')
// FUNCTION TO ADD NEW AND Remove LAST IN ARRAY
ArrayAddPopF(array, new_value_to_add) =>
array.unshift(array, new_value_to_add)
array.pop(array)
// FUNCTION MAKE SURE SUPPLY ISNT OVERLAPPING
CheckOverlappingF(new_poi, box_array, POIATR) =>
atr_threshold = POIATR * 2
okay_to_draw = true
for i = 0 to array.size(box_array) - 1
top = box.get_top(array.get(box_array, i))
bottom = box.get_bottom(array.get(box_array, i))
poi = (top + bottom) / 2
upper_boundary = poi + atr_threshold
lower_boundary = poi - atr_threshold
if new_poi >= lower_boundary and new_poi <= upper_boundary
okay_to_draw := false
break
else
okay_to_draw := true
okay_to_draw
// FUNCTION TO DRAW SUPPLY OR DEMAND ZONE
SupplyDemandF(value_array, bn_array, box_array, label_array, box_type, POIATR) =>
atr_buffer = POIATR * (BoxWidth / 10)
box_left = array.get(bn_array, 0)
box_right = bar_index
var float box_top = 0.00
var float box_bottom = 0.00
var float poi = 0.00
if box_type == 1
box_top := array.get(value_array, 0)
box_bottom := box_top - atr_buffer
poi := (box_top + box_bottom) / 2
else if box_type == -1
box_bottom := array.get(value_array, 0)
box_top := box_bottom + atr_buffer
poi := (box_top + box_bottom) / 2
okay_to_draw = CheckOverlappingF(poi, box_array, POIATR)
//delete oldest box, and then create a new box and add it to the array
if box_type == 1 and okay_to_draw and POIswitch
box.delete( array.get(box_array, array.size(box_array) - 1) )
ArrayAddPopF(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = ColorSupplyOutline,
bgcolor = ColorSupply, extend=MaxExtention?extend.right:extend.none, text = 'Supply', text_halign = text.align_center, text_valign = text.align_center, text_color = ColorLabelPOI, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
ArrayAddPopF(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = color.new(ColorLabelPOI,90),
bgcolor = color.new(ColorLabelPOI,90), extend=MaxExtention?extend.right:extend.none, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = ColorLabelPOI, text_size = size.small, xloc = xloc.bar_index))
else if box_type == -1 and okay_to_draw and POIswitch
box.delete( array.get(box_array, array.size(box_array) - 1) )
ArrayAddPopF(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom = box_bottom, border_color = ColorDemandOutline,
bgcolor = ColorDemand, extend=MaxExtention?extend.right:extend.none, text = 'Demand', text_halign = text.align_center, text_valign = text.align_center, text_color = ColorLabelPOI, text_size = size.small, xloc = xloc.bar_index))
box.delete( array.get(label_array, array.size(label_array) - 1) )
ArrayAddPopF(label_array, box.new( left = box_left, top = poi, right = box_right, bottom = poi, border_color = color.new(ColorLabelPOI,90),
bgcolor = color.new(ColorLabelPOI,90), extend=MaxExtention?extend.right:extend.none, text = 'POI', text_halign = text.align_left, text_valign = text.align_center, text_color = ColorLabelPOI, text_size = size.small, xloc = xloc.bar_index))
// FUNCTION TO CHANGE SUPPLY/DEMAND TO A BOS IF BROKEN
BosSdF(box_array, bos_array, label_array, zone_type) =>
if zone_type == 1 and POIswitch
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_top(array.get(box_array,i))
if close >= level_to_break
copied_box = box.copy(array.get(box_array,i))
ArrayAddPopF(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), '' )
box.set_text_color( array.get(bos_array,0), color.new(color.white, 0))
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
if zone_type == -1 and POIswitch
for i = 0 to array.size(box_array) - 1
level_to_break = box.get_bottom(array.get(box_array,i))
if close <= level_to_break
copied_box = box.copy(array.get(box_array,i))
ArrayAddPopF(bos_array, copied_box)
mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2
box.set_top(array.get(bos_array,0), mid)
box.set_bottom(array.get(bos_array,0), mid)
box.set_extend( array.get(bos_array,0), extend.none)
box.set_right( array.get(bos_array,0), bar_index)
box.set_text( array.get(bos_array,0), '' )
box.set_text_color( array.get(bos_array,0), color.new(color.white, 0))
box.set_text_size( array.get(bos_array,0), size.small)
box.set_text_halign( array.get(bos_array,0), text.align_center)
box.set_text_valign( array.get(bos_array,0), text.align_center)
box.delete(array.get(box_array, i))
box.delete(array.get(label_array, i))
// FUNCTION MANAGE CURRENT BOXES BY CHANGING ENDPOINT
BoxExtendEndPointF(box_array) =>
for i = 0 to array.size(box_array) - 1
box.set_right(array.get(box_array, i), bar_index + 90)
// CALCULATE SWING HIGHS & SWING LOWS
SwingHigh = ta.pivothigh(high, SwingLength, SwingLength)
SwingLow = ta.pivotlow(low, SwingLength, SwingLength)
// ARRAYS FOR SWING H/L & BN
var SwingHighValHues = array.new_float(5,0.00)
var SwingLowValues = array.new_float(5,0.00)
var SwingHighBNS = array.new_int(5,0)
var SwingLowBNS = array.new_int(5,0)
// ARRAYS FOR SUPPLY / DEMAND
var SupplyBoxCurrent = array.new_box(HistoryDemandKepp, na)
var DemandBoxCurrent = array.new_box(HistoryDemandKepp, na)
// ARRAYS FOR SUPPLY / DEMAND POI LABELS
var SupplyPOICurrent = array.new_box(HistoryDemandKepp, na)
var DemandPOICurrent = array.new_box(HistoryDemandKepp, na)
// ARRAYS FOR BOS
var BOSSupply = array.new_box(5, na)
var BOSDemand = array.new_box(5, na)
//
//END CALCULATIONS
//
// NEW SWING HIGH
if not na(SwingHigh)
//MANAGE SWING HIGH VALUES
ArrayAddPopF(SwingHighValHues, SwingHigh)
ArrayAddPopF(SwingHighBNS, bar_index[SwingLength])
SupplyDemandF(SwingHighValHues, SwingHighBNS, SupplyBoxCurrent, SupplyPOICurrent, 1, POIATR)
// NEW SWING LOW
else if not na(SwingLow)
//MANAGE SWING LOW VALUES
ArrayAddPopF(SwingLowValues, SwingLow)
ArrayAddPopF(SwingLowBNS, bar_index[SwingLength])
SupplyDemandF(SwingLowValues, SwingLowBNS, DemandBoxCurrent, DemandPOICurrent, -1, POIATR)
BosSdF(SupplyBoxCurrent, BOSSupply, SupplyPOICurrent, 1)
BosSdF(DemandBoxCurrent, BOSDemand, DemandPOICurrent, -1)
BoxExtendEndPointF(SupplyBoxCurrent)
BoxExtendEndPointF(DemandBoxCurrent)
//////////////////////////////////////////////////////////////////////////
// Pivots
//////////////////////////////////////////////////////////////////////////
G_Pivot = '████████S/R Pivot Levels████████'
Traditional_P = "Traditional"
Auto_P = "Auto"
Daily_P = "Daily"
Weekly_P = "Weekly"
Monthly_P = "Monthly"
Yearly_P = "Yearly"
Biyearly_P = "Biyearly"
PKind= input.string(title="Type", defval="Traditional", options=[Traditional_P], group=G_Pivot, inline= 'pvt2')
PivotTF = input.string(title="Time period pivots", defval=Auto_P, options=[Auto_P, Daily_P, Weekly_P, Monthly_P, Yearly_P, Biyearly_P], group=G_Pivot, inline='pvt')
LookBack_ = input.int(title="Number backward pivots", defval=1, minval=1, maxval=5000, group=G_Pivot, inline='pvt')
DailyIsBased = input.bool(title="Use Daily values", defval=true, group=G_Pivot, inline= 'pvt2', tooltip="When this option is not checked, pivot points will use intraday data when calculating on intraday charts. If extended hours are shown on the chart, they will be taken into account during the pivot level calculation. If the intraday values of OHLC are different from the daily values (normal for stocks), the pivot levels will also be different.")
LabelsShow = input.bool(title="Show tags", defval=true, group=G_Pivot, inline='St')
PricesShow = input.bool(title="Show prices", defval=true, group=G_Pivot, inline='St')
LabelsPositionN = input.string("Left","Label position", options=["Left", "Right"], group=G_Pivot, inline= 'St2')
LineWidthP = input.int(title="Line Width", defval=1, minval=1, maxval=100, group=G_Pivot, inline='St2')
var ColorDefP = #ff5d00
var TimeArr = array.new_int()
var p = array.new_float()
ColorP = input.color(ColorDefP, "P", inline="P", group=G_Pivot)
ShowP = input.bool(true, "", inline="P", group=G_Pivot)
var r1 = array.new_float()
var s1 = array.new_float()
ColorS1 = input.color(ColorDefP, "S1", inline="S1/R1" , group=G_Pivot)
ShowS1 = input.bool(true, "", inline="S1/R1", group=G_Pivot)
ColorR1 = input.color(ColorDefP, "R1", inline="S2/R2", group=G_Pivot)
ShowR1 = input.bool(true, "", inline="S2/R2", group=G_Pivot)
var r2 = array.new_float()
var s2 = array.new_float()
ColorS2 = input.color(ColorDefP, "S2", inline="S1/R1", group=G_Pivot)
ShowS2 = input.bool(true, "", inline="S1/R1", group=G_Pivot)
ColorR2 = input.color(ColorDefP, "R2", inline="S2/R2", group=G_Pivot)
ShowR2 = input.bool(true, "", inline="S2/R2", group=G_Pivot)
var r3 = array.new_float()
var s3 = array.new_float()
ColorS3 = input.color(ColorDefP, "S3", inline="S1/R1", group=G_Pivot)
ShowS3 = input.bool(true, "", inline="S1/R1", group=G_Pivot)
ColorR3 = input.color(ColorDefP, "R3", inline="S2/R2", group=G_Pivot)
ShowR3 = input.bool(true, "", inline="S2/R2", group=G_Pivot)
PX_Open = float(na)
PX_Open := nz(PX_Open[1], open)
PX_High = float(na)
PX_High := nz(PX_High[1], high)
PX_Low = float(na)
PX_Low := nz(PX_Low[1], low)
PX_PrevOpen = float(na)
PX_PrevOpen := nz(PX_PrevOpen[1])
PX_PrevHigh = float(na)
PX_PrevHigh := nz(PX_PrevHigh[1])
PX_PrevLow = float(na)
PX_PrevLow := nz(PX_PrevLow[1])
PX_PrevClose = float(na)
PX_PrevClose := nz(PX_PrevClose[1])
PivotGetResolution() =>
resolution = "M"
if PivotTF == Auto_P
if timeframe.isintraday
resolution := timeframe.multiplier <= 15 ? "D" : "W"
else if timeframe.isweekly or timeframe.ismonthly
resolution := "12M"
else if PivotTF == Daily_P
resolution := "D"
else if PivotTF == Weekly_P
resolution := "W"
else if PivotTF == Monthly_P
resolution := "M"
else if PivotTF == Yearly_P or PivotTF == Biyearly_P
resolution := "12M"
resolution
var lines = array.new_line()
var labels = array.new_label()
LineDraw(i, pivot, col) =>
if array.size(TimeArr) > 1
array.push(lines, line.new(array.get(TimeArr, i), array.get(pivot, i), array.get(TimeArr, i + 1), array.get(pivot, i), color=col, xloc=xloc.bar_time, width=LineWidthP))
LabelDraw(i, y, txt, txt_color) =>
if (LabelsShow or PricesShow) and not na(y)
display_text = (LabelsShow ? txt : "") + (PricesShow ? str.format(" ({0})", math.round_to_mintick(y)) : "")
label_style = LabelsPositionN == "Left" ? label.style_label_right : label.style_label_left
x = LabelsPositionN == "Left" ? array.get(TimeArr, i) : array.get(TimeArr, i + 1)
array.push(labels, label.new(x = x, y=y, text=display_text, textcolor=txt_color, style=label_style, color=#00000000, xloc=xloc.bar_time))
Traditional_P() =>
PX_Medium = (PX_PrevHigh + PX_PrevLow + PX_PrevClose) / 3
array.push(p, PX_Medium)
array.push(r1, PX_Medium * 2 - PX_PrevLow)
array.push(s1, PX_Medium * 2 - PX_PrevHigh)
array.push(r2, PX_Medium + 1 * (PX_PrevHigh - PX_PrevLow))
array.push(s2, PX_Medium - 1 * (PX_PrevHigh - PX_PrevLow))
array.push(r3, PX_Medium * 2 + (PX_PrevHigh - 2 * PX_PrevLow))
array.push(s3, PX_Medium * 2 - (2 * PX_PrevHigh - PX_PrevLow))
PivotCalc() =>
if PKind == Traditional_P
Traditional_P()
resolution = PivotGetResolution()
SimpleDivisor = -1
YearCustomDivisor = switch PivotTF
Biyearly_P => 2
=> SimpleDivisor
HighCalc(prev, curr) =>
if na(prev) or na(curr)
nz(prev, nz(curr, na))
else
math.max(prev, curr)
LowCalc(prev, curr) =>
if not na(prev) and not na(curr)
math.min(prev, curr)
else
nz(prev, nz(curr, na))
OHLCCalcForPivot(YearCustomDivisor) =>
if YearCustomDivisor == SimpleDivisor
[open, high, low, close, open[1], high[1], low[1], close[1], time[1], time_close]
else
var OpenSecPrev = float(na)
var HighSecPrev = float(na)
var LowSecPrev = float(na)
var CloseSecPrev = float(na)
var PrevSectime = int(na)
var OpenSecCurr = float(na)
var HighSecCurr = float(na)
var LowSecCurr = float(na)
var CloseSecCurr = float(na)
if year(time_close) % YearCustomDivisor == 0
OpenSecCurr := open
HighSecCurr := high
LowSecCurr := low
CloseSecCurr := close
HighSecPrev := high[1]
LowSecPrev := low[1]
CloseSecPrev := close[1]
PrevSectime := time[1]
for i = 2 to YearCustomDivisor
OpenSecPrev := nz(open[i], OpenSecPrev)
HighSecPrev := HighCalc(HighSecPrev, high[i])
LowSecPrev := LowCalc(LowSecPrev, low[i])
PrevSectime := nz(time[i], PrevSectime)
[OpenSecCurr, HighSecCurr, LowSecCurr, CloseSecCurr, OpenSecPrev, HighSecPrev, LowSecPrev, CloseSecPrev, PrevSectime, time_close]
[sec_open, sec_high, sec_low, sec_close, OpenSecPrev, HighSecPrev, LowSecPrev, CloseSecPrev, PrevSectime, sec_time] = request.security(syminfo.tickerid, resolution, OHLCCalcForPivot(YearCustomDivisor), lookahead = barmerge.lookahead_on)
sec_open_gaps_on = request.security(syminfo.tickerid, resolution, open, gaps = barmerge.gaps_on, lookahead = barmerge.lookahead_on)
YearIsChange = YearCustomDivisor > 0 and ta.change(time(resolution)) and year(time_close) % YearCustomDivisor == 0
var ChangeIs = false
var BarCurrentUse = timeframe.isintraday
var change_time = int(na)
TimeIsChange = (ta.change(time(resolution)) and YearCustomDivisor == SimpleDivisor) or YearIsChange
if TimeIsChange
change_time := time
var PStartTime = time
var LastWasPremarket = false
var StartCalcInPremarket = false
LastIsPremarket = barstate.islast and session.ispremarket and time_close > sec_time and not LastWasPremarket
if LastIsPremarket
LastWasPremarket := true
StartCalcInPremarket := true
if session.ismarket
LastWasPremarket := false
without_time_change = barstate.islast and array.size(TimeArr) == 0
is_can_PivotCalc = (not BarCurrentUse and TimeIsChange and session.ismarket) or (ta.change(sec_open) and not StartCalcInPremarket) or LastIsPremarket or (BarCurrentUse and not na(sec_open_gaps_on)) or without_time_change
enough_bars_for_calculate = PrevSectime >= PStartTime or DailyIsBased
if is_can_PivotCalc and enough_bars_for_calculate and PIVOTswitch
if array.size(TimeArr) == 0 and DailyIsBased
PX_PrevOpen := OpenSecPrev[1]
PX_PrevHigh := HighSecPrev[1]
PX_PrevLow := LowSecPrev[1]
PX_PrevClose := CloseSecPrev[1]
PX_Open := sec_open[1]
PX_High := sec_high[1]
PX_Low := sec_low[1]
array.push(TimeArr, PStartTime)
PivotCalc()
if DailyIsBased
if LastIsPremarket
PX_PrevOpen := sec_open
PX_PrevHigh := sec_high
PX_PrevLow := sec_low
PX_PrevClose := sec_close
PX_Open := open
PX_High := high
PX_Low := low
else
PX_PrevOpen := OpenSecPrev
PX_PrevHigh := HighSecPrev
PX_PrevLow := LowSecPrev
PX_PrevClose := CloseSecPrev
PX_Open := sec_open
PX_High := sec_high
PX_Low := sec_low
else
PX_PrevHigh := PX_High
PX_PrevLow := PX_Low
PX_PrevOpen := PX_Open
PX_PrevClose := close[1]
PX_Open := open
PX_High := high
PX_Low := low
if barstate.islast and not ChangeIs and array.size(TimeArr) > 0 and not without_time_change
array.set(TimeArr, array.size(TimeArr) - 1, change_time)
else if without_time_change
array.push(TimeArr, PStartTime)
else
array.push(TimeArr, nz(change_time, time))
PivotCalc()
if array.size(TimeArr) > LookBack_
if array.size(TimeArr) > 0
array.shift(TimeArr)
if array.size(p) > 0 and ShowP
array.shift(p)
if array.size(r1) > 0 and ShowR1
array.shift(r1)
if array.size(s1) > 0 and ShowS1
array.shift(s1)
if array.size(r2) > 0 and ShowR2
array.shift(r2)
if array.size(s2) > 0 and ShowS2
array.shift(s2)
if array.size(r3) > 0 and ShowR3
array.shift(r3)
if array.size(s3) > 0 and ShowS3
array.shift(s3)
ChangeIs := true
else if not DailyIsBased and PIVOTswitch
PX_High := math.max(PX_High, high)
PX_Low := math.min(PX_Low, low)
if barstate.islast and not DailyIsBased and array.size(TimeArr) == 0
runtime.error("Not enough intraday data to calculate Pivot Points. Lower the Pivots Timeframe or turn on the 'Use Daily-based Values' option in the indicator settings.")
if barstate.islast and array.size(TimeArr) > 0 and ChangeIs and PIVOTswitch
ChangeIs := false
if YearCustomDivisor > 0
last_pivot_time = array.get(TimeArr, array.size(TimeArr) - 1)
pivot_timeframe = str.tostring(12 * YearCustomDivisor) + "M"
estimate_pivot_time = last_pivot_time + timeframe.in_seconds(pivot_timeframe) * 1000
array.push(TimeArr, estimate_pivot_time)
else
array.push(TimeArr, time_close(resolution))
for i = 0 to array.size(lines) - 1
if array.size(lines) > 0
line.delete(array.shift(lines))
if array.size(labels) > 0
label.delete(array.shift(labels))
for i = 0 to array.size(TimeArr) - 2
if array.size(p) > 0 and ShowP
LineDraw(i, p, ColorP)
LabelDraw(i, array.get(p, i), "P", ColorP)
if array.size(r1) > 0 and ShowR1
LineDraw(i, r1, ColorR1)
LabelDraw(i, array.get(r1, i), "R1", ColorR1)
if array.size(s1) > 0 and ShowS1
LineDraw(i, s1, ColorS1)
LabelDraw(i, array.get(s1, i), "S1", ColorS1)
if array.size(r2) > 0 and ShowR2
LineDraw(i, r2, ColorR2)
LabelDraw(i, array.get(r2, i), "R2", ColorR2)
if array.size(s2) > 0 and ShowS2
LineDraw(i, s2, ColorS2)
LabelDraw(i, array.get(s2, i), "S2", ColorS2)
if array.size(r3) > 0 and ShowR3
LineDraw(i, r3, ColorR3)
LabelDraw(i, array.get(r3, i), "R3", ColorR3)
if array.size(s3) > 0 and ShowS3
LineDraw(i, s3, ColorS3)
LabelDraw(i, array.get(s3, i), "S3", ColorS3)
// ----------------------------------------------------------------------------------------------------
// ---------------------------------------Range filte DW-----------------------------------------------
// ----------------------------------------------------------------------------------------------------
//Filter Type
TypeF = input.string(defval='Type 1', options=['Type 1', 'Type 2'], title='Filter type', group='████████Range Filter DW Settings████████', inline= 'RF1')
SrcMov = input.string(defval='Close', options=['Wicks', 'Close'], title='Motion source', group='████████Range Filter DW Settings████████', inline='RF1')
QtyRng = input.float(defval=2.618, minval=0.0000001, title='Range size', group='████████Range Filter DW Settings████████', inline='RF2')
ScaleRng = input.string(defval='Average Change', options=['Points', 'Pips', 'Ticks', '% price', 'ATR', 'Average Change', 'Standard deviation', 'Absolute'], title='Range scale', group='████████Range Filter DW Settings████████', inline= 'RF2')
PerRng = input.int(defval=14, minval=1, title='Range period (ATR, Average change and standard deviation)', group='████████Range Filter DW Settings████████')
RangeSmooth = input(defval=true, title='Smooth range |', group='████████Range Filter DW Settings████████', inline='RF3')
PerSmooth = input.int(defval=27, minval=1, title='Smoothing period', group='████████Range Filter DW Settings████████', inline='RF3')
ValsAv = input(defval=false, title='Average filter changes |', group='████████Range Filter DW Settings████████', inline='RF4')
SamplesAv = input.int(defval=2, minval=1, title='Number Changes Average', group='████████Range Filter DW Settings████████', inline= 'RF4')
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//High And Low Values - Valores altos y bajos
Val_H = SrcMov == 'Wicks' ? high : close
Val_L = SrcMov == 'Wicks' ? low : close
//Range Filter Values - Valores de Range filter DW
[h_band, l_band, filt2] = Filtrng(Val_H, Val_L, Sizerng((Val_H + Val_L) / 2, ScaleRng, QtyRng, PerRng), PerRng, TypeF, RangeSmooth, PerSmooth, ValsAv, SamplesAv)
//Direction Conditions - Condiciones de dirección
var fdir2 = 0.0
fdir2 := filt2 > filt2[1] ? 1 : filt2 < filt2[1] ? -1 : fdir2
rfupward = fdir2 == 1 ? 1 : 0
rfdownward= fdir2 == -1 ? 1 : 0
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//color y switchboard rf
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
filt2_color = rfupward ? #05ff9b : rfdownward ? #ff0583 : #cccccc
plot(RFDWswitch ? filt2:na, color=filt2_color, linewidth=2, title='Range filter DW')
// ----------------------------------------------------------------------------------------------------
// --------------------------------------Input settings------------------------------------------------
// ----------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------
// ---------------------------------------BOS & CHoCH-------------------------------------------------
// ---------------------------------------------------------------------------------------------------
// Entradas - Imputs
ShowSwing = input.bool(false, 'Swing Points', group="████████Market Structure████████",inline="3")
ShowMS=input(true,title="Market Structure",inline="0",group = "████████Market Structure████████")
ColorBOS1 = input.color(#787b86 , '', group="████████Market Structure████████",inline="0")
ColorBOS2 = input.color(#787b86 , '', group="████████Market Structure████████",inline="0")
TypeMS =input.string("All", options=["All", "External","Internal"], title="", group="████████Market Structure████████",inline="0")
ShowEQHL = input(false, 'Equal Highs & Lows', group = '████████Market Structure████████',inline = 'EQ_zone')
BearEQColor = input.color(#787b86 , '', group="████████Market Structure████████",inline="EQ_zone")
BullEQColor = input.color(#787b86 , '', group="████████Market Structure████████",inline="EQ_zone")
ThresholdEQ = input.float(0.3, '', minval = 0, maxval = 0.5, step = 0.1, group = '████████Market Structure████████',inline = 'EQ_zone')
SizeSwing = input.int(10, "Swing Point Period",inline="4", group="████████Market Structure████████")
SizeLabelS =input.string("Small", options=["Small", "Medium","Large"], title="Label Size",inline="4", group="████████Market Structure████████")
SizeLabelBuySellS = SizeLabelS == "Small" ? size.tiny : SizeLabelS == "Medium" ? size.small : SizeLabelS == "Large" ? size.normal : SizeLabelS == "Medium2" ? size.normal : SizeLabelS == "Large2" ? size.large : size.huge
SizeLabelBuySell = SizeLabelS == "Small" ? size.tiny : SizeLabelS == "Medium" ? size.small : SizeLabelS == "Large" ? size.normal : SizeLabelS == "Medium2" ? size.normal : SizeLabelS == "Large2" ? size.large : size.huge
swingColor = input.color(#787b86 , '', group="████████Market Structure████████",inline="3")
swingSize = 3
EQHLenght = 3
// ----------------------------------------------------------------------------------------------------
// ------------------------------------Order Blocks-----------------------------------------------
// ----------------------------------------------------------------------------------------------------
ShowOBs = input.bool(true,"Order Blocks (OB)",group = '████████Order Blocks████████', inline = "ob1")
BullOBcss = input.color(#5d606b19, '', inline = 'ob1', group = '████████Order Blocks████████')
BearOBcss = input.color(#5d606b19, '', inline = 'ob1', group = '████████Order Blocks████████')
TypeOBs= input.string('All', '',options = ['All','Internal','External'], group = '████████Order Blocks████████',inline = 'ob1')
TFOB = input.timeframe("", "Timeframe", group = '████████Order Blocks████████', inline = "ob2")
MittigFilt= input.string('Wicks', "Mitigation Method",options = ['Touch','Wicks','Close','Average'], group = '████████Order Blocks████████',inline = 'ob3')
FiltOverlapping= input(true, 'Hide Overlap', inline = 'ob3', group = '████████Order Blocks████████')
OBsMax = input.int(4, 'Max OBs', minval = 3, group = '████████Order Blocks████████', inline = 'ob4')
OBsLengExt = input.int(defval = 20,title = "Length", minval = 0, maxval = 500 ,group = '████████Order Blocks████████', inline = "ob4")
OBsExtend = input.bool(false,"Extend",group = '████████Order Blocks████████', inline = "ob4")
OBSizeText =input.string("Medium", options=["Small", "Medium","Large"], title="Text size",inline="ob1_t", group = '████████Order Blocks████████')
OBSizeText_ = OBSizeText == "Small" ? size.tiny : OBSizeText == "Medium" ? size.small : OBSizeText == "Large" ? size.normal : OBSizeText == "Medium2" ? size.normal : OBSizeText == "Large2" ? size.large : size.huge
OBColorText1 = input.color(#787b86 , '', inline = 'ob1_t', group = '████████Order Blocks████████')
TextVolume = input.bool(true, 'Volume', group = '████████Order Blocks████████',inline = 'ob1_t')
TextPercent = input.bool(true, 'Percentage', group = '████████Order Blocks████████',inline = 'ob1_t')
OBShowLine = input.string("On", title = "Middle Line", options=["On", "Off"], group = '████████Order Blocks████████',inline='ob1_l')
OBShowLine_1=OBShowLine=="On"?true:false
OBStyleLine = input.string("Solid", title = "Line style", options=["Solid", "Dashed", "Dotted"], group = '████████Order Blocks████████',inline='ob1_l')
OBStyleLine_1 = OBStyleLine=="Solid" ? line.style_solid : OBStyleLine=="Dashed" ? line.style_dashed : line.style_dotted
ShowOBs_mtf=input.bool(false,"🔰MTF Order Blocks",group = '████████Order Blocks████████', inline = "m_ob1")
BullOBcss_2 = input.color(#5d606b19, '', inline = 'm_ob1', group = '████████Order Blocks████████')
BearOBcss_2 = input.color(#5d606b19, '', inline = 'm_ob1', group = '████████Order Blocks████████')
TypeOBsmtf= input.string('All', '',options = ['All','Internal','External'], group = '████████Order Blocks████████',inline = 'm_ob1')
TFobMtf = input.timeframe("240", "Timeframe", group = '████████Order Blocks████████', inline = "mob2")
MittigFiltMTF= input.string('Wicks', "Mitigation Method",options = ['Touch','Wicks','Close','Average'], group = '████████Order Blocks████████',inline = 'mob3')
FiltOverlapping_mtf= input(true, 'Hide Overlap', inline = 'mob3', group = '████████Order Blocks████████')
OBsMax_mtf = input.int(4, 'Max OBs', minval = 3, group = '████████Order Blocks████████', inline = "mob4")
OBsLengExt_mtf = input.int(defval = 20,title = "Length", minval = 0, maxval = 500 ,group = '████████Order Blocks████████', inline = "mob4")
OBsExtend_mtf = input.bool(false,"Extend",group = '████████Order Blocks████████', inline = "mob4")
OBSizeText2 =input.string("Medium", options=["Small", "Medium","Large"], title="Text size",inline="ob2_t", group = '████████Order Blocks████████')
OBSizeText_2 = OBSizeText2 == "Small" ? size.tiny : OBSizeText2 == "Medium" ? size.small : OBSizeText2== "Large" ? size.normal : OBSizeText2 == "Medium2" ? size.normal : OBSizeText2 == "Large2" ? size.large : size.huge
ob_text_color_2 = input.color(#787b86 , '', inline = 'ob2_t', group = '████████Order Blocks████████')
TextVolume_2 = input.bool(true, 'Volume', group = '████████Order Blocks████████',inline = 'ob2_t')
TextPercent_2 = input.bool(true, 'Percentage', group = '████████Order Blocks████████',inline = 'ob2_t')
OBShowLine2 = input.string("On", title = "Mid Line", options=["On", "Off"], group = '████████Order Blocks████████',inline='ob2_l')
OBShowLine_2=OBShowLine2=="On"?true:false
OBStyleLine2 = input.string("Solid", title = "Line Style", options=["Solid", "Dashed", "Dotted"], group = '████████Order Blocks████████',inline='ob2_l')
OBStyleLine_2 = OBStyleLine2=="Solid" ? line.style_solid : OBStyleLine2=="Dashed" ? line.style_dashed : line.style_dotted
tf_s1=TFobMtf==''?timeframe.period:TFobMtf
timeframe_st=not(str.contains(tf_s1,'S')) and not(str.contains(tf_s1,'D')) and not(str.contains(tf_s1,'W')) and not(str.contains(tf_s1,'M')) ? str.tonumber(tf_s1)>=60? str.tostring(str.tonumber(tf_s1)/60) +"H": tf_s1 +"M" : tf_s1
timeframe1=timeframe_st + ' : '
Show_iob = TypeOBs=='All' or TypeOBs=='Internal'
Show_ob = TypeOBs=='All' or TypeOBs=='External'
ShowiOBMtf = TypeOBsmtf=='All' or TypeOBsmtf=='Internal'
ShowOBMtf = TypeOBsmtf=='All' or TypeOBsmtf=='External'
MaxWidthOb = 3
MaxWidthOb:=MaxWidthOb==3?20:MaxWidthOb
ob_Showlast = 5
iob_Showlast = 5
style='Colors'
v_lookback= 10
ob_loockback=10
timediff=(time[1]-time[101])/100
// ----------------------------------------------------------------------------------------------------
// ------------------------------------------Order Blocks----------------------------------------------
// ----------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------
// --------------------------------------Variables globales--------------------------------------------
// ----------------------------------------------------------------------------------------------------
color.rgb(90, 90, 90)
length = 50
NewIsBar(res) =>
t = time(res)
not na(t) and (na(t[1]) or t > t[1])
ShowMS(x, y, txt, mscss, dashed, down, lbl_size)=>
label.new(int(math.avg(x, bar_index)), y, txt, color = transparent, textcolor = mscss, style = down ? label.style_label_down : label.style_label_up, size = lbl_size)
line.new(x, y, bar_index, y, color = mscss, style = dashed ? line.style_dashed : line.style_solid)
// Swings detección/mediciones
SwingPointsCalc(length)=>
var prev = 0
prev := high[length] > ta.highest(length) ? 0 : low[length] < ta.lowest(length) ? 1 : prev[1]
t = prev == 0 and prev[1] != 0 ? high[length] : 0
b = prev == 1 and prev[1] != 1 ? low[length] : 0
[t, b]
var t_MS = 0, var int_t_MS = 0
var Internal_y_up = 0., var Internal_x_up = 0, var Internal_y_dn = 0., var Internal_x_dn = 0
var y_up = 0., var x_up = 0 , var y_dn = 0., var x_dn = 0
var crossed_up = true, var crossed_down = true
var BrokerUpInternal = true, var BrokerDnInternal = true
var up_trailing = high, var down_trailing = low
var up_trailing_x = 0, var down_trailing_x = 0
var high_text = '', var low_text = ''
OBBullBreak = false
OBBearBreak = false
// ----------------------------------------------------------------------------------------------------
// ----------------------------------------████████Market Structure████████----------------------------
// ----------------------------------------------------------------------------------------------------
CHoCH = true
// Input
lineStyle(x) =>
switch x
'Solid' => line.style_solid
'Dashed' => line.style_dashed
'Dotted' => line.style_dotted
PHigh_Found = ta.pivothigh(high, SizeSwing, SizeSwing)
PLow_Found = ta.pivotlow(low, SizeSwing, SizeSwing)
var float highprevs = na,var float lowprevs = na,var int HighIndexprevs = na,var int LowIndexprevs = na
bool higherhigh = false, bool lowerhigh = false, bool higherlows = false, bool lowerlows = false
var int Swingprevs = 0
if not na(PHigh_Found)
if PHigh_Found >= highprevs
higherhigh := true
Swingprevs := 2
else
lowerhigh := true
Swingprevs := 1
highprevs := PHigh_Found
HighIndexprevs := bar_index - SizeSwing
if not na(PLow_Found)
if PLow_Found >= lowprevs
higherlows := true
Swingprevs := -1
else
lowerlows := true
Swingprevs := -2
lowprevs := PLow_Found
LowIndexprevs := bar_index - SizeSwing
color Cleanr = color.rgb(0,0,0,100)
if higherhigh and ShowSwing
label.new(bar_index - SizeSwing, PHigh_Found, 'HH', color=Cleanr, style=label.style_label_down, textcolor=swingColor,size = SizeLabelBuySellS)
if lowerhigh and ShowSwing
label.new(bar_index - SizeSwing, PHigh_Found, 'LH', color=Cleanr, style=label.style_label_down, textcolor=swingColor,size = SizeLabelBuySellS)
if higherlows and ShowSwing
label.new(bar_index - SizeSwing, PLow_Found, 'HL', color=Cleanr, style=label.style_label_up, textcolor=swingColor,size = SizeLabelBuySellS)
if lowerlows and ShowSwing
label.new(bar_index - SizeSwing, PLow_Found, 'LL', color=Cleanr, style=label.style_label_up, textcolor=swingColor,size = SizeLabelBuySellS)
//------------------------------------------------------------------------------------------------
//------------------------------------- ████████Key Levels████████--------------------------------
//------------------------------------------------------------------------------------------------
CDH_Open = request.security(syminfo.tickerid, 'D', high, lookahead=barmerge.lookahead_on)
CDL_Open = request.security(syminfo.tickerid, 'D', low, lookahead=barmerge.lookahead_on)
[D_Time, D_Open] = request.security(syminfo.tickerid, 'D', [time, open], lookahead=barmerge.lookahead_on)
[DH_Time, DH_Open] = request.security(syminfo.tickerid, 'D', [time[1], high[1]], lookahead=barmerge.lookahead_on)
[DL_Time, DL_Open] = request.security(syminfo.tickerid, 'D', [time[1], low[1]], lookahead=barmerge.lookahead_on)
[W_Time, W_Open] = request.security(syminfo.tickerid, 'W', [time, open], lookahead=barmerge.lookahead_on)
[WH_Time, WH_Open] = request.security(syminfo.tickerid, 'W', [time[1], high[1]], lookahead=barmerge.lookahead_on)
[WL_Time, WL_Open] = request.security(syminfo.tickerid, 'W', [time[1], low[1]], lookahead=barmerge.lookahead_on)
[Int_Time, Int_Open] = request.security(syminfo.tickerid, '240', [time, open], lookahead=barmerge.lookahead_on)
[IntH_Time, IntH_Open] = request.security(syminfo.tickerid, '240', [time[1], high[1]], lookahead=barmerge.lookahead_on)
[IntL_Time, IntL_Open] = request.security(syminfo.tickerid, '240', [time[1], low[1]], lookahead=barmerge.lookahead_on)
if W_Time != W_Time[1]
CDL_Open
linewidthint = 1
if linesize == 'Small'
linewidthint := 1
linewidthint
if linesize == 'Medium'
linewidthint := 2
linewidthint
if linesize == 'Large'
linewidthint := 3
linewidthint
var linewidth_def = linewidthint
fontsize = size.small
if labelsize == 'Small'
fontsize := size.small
fontsize
if labelsize == 'Medium'
fontsize := size.normal
fontsize
if labelsize == 'Large'
fontsize := size.large
fontsize
linestyles = line.style_solid
if linestyle == 'Dashed'
linestyles := line.style_dashed
linestyles
if linestyle == 'Dotted'
linestyles := line.style_dotted
linestyles
var LabelSizeDefault = fontsize
var LabelStyleDefault = label.style_none
var Rigth_Def = distanceright
var PriceArr = array.new_float(0)
var LabelArr = array.new_label(0)
LevelsCombine(PriceArr, LabelArr, currentprice, currentlabel, currentcolor) =>
if array.includes(PriceArr, currentprice)
whichindex = array.indexof(PriceArr, currentprice)
labelhold = array.get(LabelArr, whichindex)
whichtext = label.get_text(labelhold)
label.set_text(labelhold, label.get_text(currentlabel) + ' / ' + whichtext)
label.set_text(currentlabel, '')
label.set_textcolor(labelhold, currentcolor)
else
array.push(PriceArr, currentprice)
array.push(LabelArr, currentlabel)
extend_to_current(bars) =>
timenow + (time - time[1]) * bars
if barstate.islast
PriceArr := array.new_float(0)
LabelArr := array.new_label(0)
if ShowH4Levels
limit_4H_right = extend_to_current(Rigth_Def)
intrah_limit_right = extend_to_current(Rigth_Def)
intral_limit_right = extend_to_current(Rigth_Def)
var line_4H = line.new(x1=Int_Time, x2=limit_4H_right, y1=Int_Open, y2=Int_Open, color=ColorH4Levels, width=linewidth_def, xloc=xloc.bar_time, style=lineStyle(StyleH4Levels))
var label_4H = label.new(x=limit_4H_right, y=Int_Open, text=iotext, style=LabelStyleDefault, textcolor=ColorH4Levels, size=LabelSizeDefault, xloc=xloc.bar_time)
var intrah_line = line.new(x1=IntH_Time, x2=intrah_limit_right, y1=IntH_Open, y2=IntH_Open, color=ColorH4Levels, width=linewidth_def, xloc=xloc.bar_time, style=lineStyle(StyleH4Levels))
var intrah_label = label.new(x=intrah_limit_right, y=IntH_Open, text=pihtext, style=LabelStyleDefault, textcolor=ColorH4Levels, size=LabelSizeDefault, xloc=xloc.bar_time)
var intral_line = line.new(x1=IntL_Time, x2=intral_limit_right, y1=IntL_Open, y2=IntL_Open, color=ColorH4Levels, width=linewidth_def, xloc=xloc.bar_time, style=lineStyle(StyleH4Levels))
var intral_label = label.new(x=intral_limit_right, y=IntL_Open, text=piltext, style=LabelStyleDefault, textcolor=ColorH4Levels, size=LabelSizeDefault, xloc=xloc.bar_time)
label.set_text(label_4H, iotext)
line.set_xy1(line_4H,Int_Time,Int_Open)
line.set_xy2(line_4H,limit_4H_right,Int_Open)
label.set_xy(label_4H,limit_4H_right,Int_Open)
line.set_xy1(intrah_line,IntH_Time,IntH_Open)
line.set_xy2(intrah_line,intrah_limit_right,IntH_Open)
label.set_xy(intrah_label,intrah_limit_right,IntH_Open)
label.set_text(intrah_label, pihtext)
line.set_x1(intral_line, IntL_Time)
line.set_x2(intral_line, intral_limit_right)
line.set_y1(intral_line, IntL_Open)
line.set_y2(intral_line, IntL_Open)
label.set_x(intral_label, intral_limit_right)
label.set_y(intral_label, IntL_Open)
label.set_text(intral_label, piltext)
LevelsCombine(PriceArr, LabelArr, Int_Open, label_4H, ColorH4Levels)
LevelsCombine(PriceArr, LabelArr, IntH_Open, intrah_label, ColorH4Levels)
LevelsCombine(PriceArr, LabelArr, IntL_Open, intral_label, ColorH4Levels)
if ShowDLevels
daily_limit_right = extend_to_current(Rigth_Def)
dailyh_limit_right = extend_to_current(Rigth_Def)
dailyl_limit_right = extend_to_current(Rigth_Def)
var daily_line = line.new(x1=D_Time, x2=daily_limit_right, y1=D_Open, y2=D_Open, color=ColorDLevels, width=linewidth_def, xloc=xloc.bar_time, style=lineStyle(StyleDLevels))
var daily_label = label.new(x=daily_limit_right, y=D_Open, text=dotext, style=LabelStyleDefault, textcolor=ColorDLevels, size=LabelSizeDefault, xloc=xloc.bar_time)
var dailyh_line = line.new(x1=DH_Time, x2=dailyh_limit_right, y1=DH_Open, y2=DH_Open, color=ColorDLevels, width=linewidth_def, xloc=xloc.bar_time, style=lineStyle(StyleDLevels))
var dailyh_label = label.new(x=dailyh_limit_right, y=DH_Open, text=pdhtext, style=LabelStyleDefault, textcolor=ColorDLevels, size=LabelSizeDefault, xloc=xloc.bar_time)
var dailyl_line = line.new(x1=DL_Time, x2=dailyl_limit_right, y1=DL_Open, y2=DL_Open, color=ColorDLevels, width=linewidth_def, xloc=xloc.bar_time, style=lineStyle(StyleDLevels))
var dailyl_label = label.new(x=dailyl_limit_right, y=DL_Open, text=pdltext, style=LabelStyleDefault, textcolor=ColorDLevels, size=LabelSizeDefault, xloc=xloc.bar_time)
line.set_x1(daily_line, D_Time)
line.set_x2(daily_line, daily_limit_right)
line.set_y1(daily_line, D_Open)
line.set_y2(daily_line, D_Open)
label.set_x(daily_label, daily_limit_right)
label.set_y(daily_label, D_Open)
label.set_text(daily_label, dotext)
line.set_x1(dailyh_line, DH_Time)
line.set_x2(dailyh_line, dailyh_limit_right)
line.set_y1(dailyh_line, DH_Open)
line.set_y2(dailyh_line, DH_Open)
label.set_x(dailyh_label, dailyh_limit_right)
label.set_y(dailyh_label, DH_Open)
label.set_text(dailyh_label, pdhtext)
line.set_x1(dailyl_line, DL_Time)
line.set_x2(dailyl_line, dailyl_limit_right)
line.set_y1(dailyl_line, DL_Open)
line.set_y2(dailyl_line, DL_Open)
label.set_x(dailyl_label, dailyl_limit_right)
label.set_y(dailyl_label, DL_Open)
label.set_text(dailyl_label, pdltext)
LevelsCombine(PriceArr, LabelArr, D_Open, daily_label, ColorDLevels)
LevelsCombine(PriceArr, LabelArr, DH_Open, dailyh_label, ColorDLevels)
LevelsCombine(PriceArr, LabelArr, DL_Open, dailyl_label, ColorDLevels)
if ShowWLevels
weekly_limit_right = extend_to_current(Rigth_Def)
weeklyh_limit_right = extend_to_current(Rigth_Def)
weeklyl_limit_right = extend_to_current(Rigth_Def)
CW_Time = W_Time
var weekly_line = line.new(x1=CW_Time, x2=weekly_limit_right, y1=W_Open, y2=W_Open, color=WColor, width=linewidth_def, xloc=xloc.bar_time, style=lineStyle(WStyle))
var weekly_label = label.new(x=weekly_limit_right, y=W_Open, text=wotext, style=LabelStyleDefault, textcolor=WColor, size=LabelSizeDefault, xloc=xloc.bar_time)
var weeklyh_line = line.new(x1=WH_Time, x2=weeklyh_limit_right, y1=WH_Open, y2=WH_Open, color=WColor, width=linewidth_def, xloc=xloc.bar_time, style=lineStyle(WStyle))
var weeklyh_label = label.new(x=weeklyh_limit_right, y=WH_Open, text=pwhtext, style=LabelStyleDefault, textcolor=WColor, size=LabelSizeDefault, xloc=xloc.bar_time)
var weeklyl_line = line.new(x1=WL_Time, x2=weeklyl_limit_right, y1=W_Open, y2=W_Open, color=WColor, width=linewidth_def, xloc=xloc.bar_time, style=lineStyle(WStyle))
var weeklyl_label = label.new(x=weeklyl_limit_right, y=WL_Open, text=pwltext, style=LabelStyleDefault, textcolor=WColor, size=LabelSizeDefault, xloc=xloc.bar_time)
line.set_x1(weekly_line, CW_Time)
line.set_x2(weekly_line, weekly_limit_right)
line.set_y1(weekly_line, W_Open)
line.set_y2(weekly_line, W_Open)
label.set_x(weekly_label, weekly_limit_right)
label.set_y(weekly_label, W_Open)
label.set_text(weekly_label, wotext)
line.set_x1(weeklyh_line, WH_Time)
line.set_x2(weeklyh_line, weeklyh_limit_right)
line.set_y1(weeklyh_line, WH_Open)
line.set_y2(weeklyh_line, WH_Open)
label.set_x(weeklyh_label, weeklyh_limit_right)
label.set_y(weeklyh_label, WH_Open)
label.set_text(weeklyh_label, pwhtext)
line.set_x1(weeklyl_line, WL_Time)
line.set_x2(weeklyl_line, weeklyl_limit_right)
line.set_y1(weeklyl_line, WL_Open)
line.set_y2(weeklyl_line, WL_Open)
label.set_x(weeklyl_label, weeklyl_limit_right)
label.set_y(weeklyl_label, WL_Open)
label.set_text(weeklyl_label, pwltext)
LevelsCombine(PriceArr, LabelArr, W_Open, weekly_label, WColor)
LevelsCombine(PriceArr, LabelArr, WH_Open, weeklyh_label, WColor)
LevelsCombine(PriceArr, LabelArr, WL_Open, weeklyl_label, WColor)
MsAtr = ta.atr(200)
cmean_range = ta.cum(high - low) / n
var high_eqh_pre = 0.,var eq_top_x = 0,var low_eqh_pre = 0.,var eq_btm_x = 0
if ShowEQHL
high_eqh = ta.pivothigh(EQHLenght, EQHLenght)
low_eqh = ta.pivotlow(EQHLenght, EQHLenght)
if low_eqh
if math.min(low_eqh, low_eqh_pre) > math.max(low_eqh, low_eqh_pre) - MsAtr * ThresholdEQ
eql_line = line.new(eq_btm_x, low_eqh_pre, n-EQHLenght, low_eqh, color = BullEQColor, style = line.style_dotted)
eql_lbl = label.new(int(math.avg(n-EQHLenght, eq_btm_x)), low_eqh, 'EQL', color = #00000000, textcolor = BullEQColor, style = label.style_label_up, size = SizeLabelBuySell)
low_eqh_pre := low_eqh
eq_btm_x := n-EQHLenght
if high_eqh
if math.max(high_eqh, high_eqh_pre) < math.min(high_eqh, high_eqh_pre) + MsAtr * ThresholdEQ
eqh_line = line.new(eq_top_x, high_eqh_pre, n-EQHLenght, high_eqh, color = BearEQColor, style = line.style_dotted)
eqh_lbl = label.new(int(math.avg(n-EQHLenght, eq_top_x)), high_eqh, 'EQH', color = #00000000, textcolor = BearEQColor, style = label.style_label_down, size = SizeLabelBuySell)
high_eqh_pre := high_eqh
eq_top_x := n-EQHLenght
swing_bull_css = ColorBOS1
swing_bear_css = ColorBOS2
var bullish_col_CHoCH = swing_bull_css
var bearish_col_CHoCH = swing_bear_css
var Internal_bullish_col_CHoCH = ColorBOS1
var Internal_bearish_col_CHoCH = ColorBOS2
[MSHigh, MSLow] = SwingPointsCalc(length)
n := bar_index
//HL output function
hl() => [high, low]
var float thold = (ta.highest(300) - ta.lowest(300)) * math.max(0.5, 0.1) / 100.
Internal_structure_lbl_size=SizeLabelBuySell
[int_MSHigh, int_MSLow] = SwingPointsCalc(swingSize)
SizeLbLStructureSwing=SizeLabelBuySell
if MSLow
crossed_down := true
y_dn := MSLow
x_dn := n-length
if MSHigh
crossed_up := true
y_up := MSHigh
x_up := n - length
if int_MSLow
BrokerDnInternal := true
Internal_y_dn := int_MSLow
Internal_x_dn := n - swingSize
if int_MSHigh
BrokerUpInternal := true
Internal_y_up := int_MSHigh
Internal_x_up := n - swingSize
bull_CHoCH=false,bull_CHoCH_=false,bull_bos=false,bull_bos_=false,bear_CHoCH=false,bear_CHoCH_=false,bear_bos=false,bear_bos_=false
if ta.crossover(close, Internal_y_up) and BrokerUpInternal and y_up != Internal_y_up
bool CHoCH = na
CHoCH := int_t_MS < 0
BrokerUpInternal := false
int_t_MS := 1
bull_CHoCH:=CHoCH?true:false
bull_bos:=CHoCH?false:true
if ShowMS and (TypeMS=='All' or TypeMS=='Internal')
ShowMS(Internal_x_up, Internal_y_up, CHoCH ? 'CHoCH' : 'BOS', Internal_bullish_col_CHoCH, true, true, Internal_structure_lbl_size)
if ta.crossunder(close, Internal_y_dn) and BrokerDnInternal and y_dn != Internal_y_dn
bool CHoCH = false
CHoCH := int_t_MS > 0
BrokerDnInternal := false
int_t_MS := -1
bear_CHoCH:=CHoCH?true:false
bear_bos:=CHoCH?false:true
if ShowMS and (TypeMS=='All' or TypeMS=='Internal')
ShowMS(Internal_x_dn, Internal_y_dn, CHoCH ? 'CHoCH' : 'BOS', Internal_bearish_col_CHoCH, true, false, Internal_structure_lbl_size)
if ta.crossover(close, y_up) and crossed_up
bool CHoCH = na
CHoCH := t_MS < 0
crossed_up := false
t_MS := 1
bull_CHoCH_:=CHoCH?true:false
bull_bos_:=CHoCH?false:true
if ShowMS or (TypeMS=='All' or TypeMS=='External')
ShowMS(x_up, y_up, CHoCH ? 'CHoCH+' : 'BOS+', bullish_col_CHoCH, false, true, SizeLbLStructureSwing)
if ta.crossunder(close, y_dn) and crossed_down
bool CHoCH = na
CHoCH := t_MS > 0
crossed_down := false
t_MS := -1
bear_CHoCH_:=CHoCH?true:false
bear_bos_:=CHoCH?false:true
if ShowMS and (TypeMS=='All' or TypeMS=='External')
ShowMS(x_dn, y_dn, CHoCH ? 'CHoCH+' : 'BOS+', bearish_col_CHoCH, false, false, SizeLbLStructureSwing)
// ----------------------------------------------------------------------------------------------------
// ------------------------------------Order Blocks----------------------------------------------------
// ----------------------------------------------------------------------------------------------------
//Order block coordinates function
ob_found(loc,b_index,Show_ob,Show_iob)=>
type_obs="None"
valid=false
H=high
L=low
O=open
C=close
V=volume
idx=1
volume_=0.0
VolumeB=0
VolumeSn=0
MaxUse=false
min = 99999999.
max = 0.
if open[5]>close[5] and close[4]>=open[5] and low[1]>high[5] and low>high[5] and Show_iob
if low[5]>low[4]
type_obs:="Internal Bearish"
H:=math.min(high[4],high[5])
L:=low[4]
O:=open[4]
C:=close[4]
V:=volume[4]
idx:=time[4]
valid:=true
MaxUse:=false
else
type_obs:="Internal Bearish"
H:=high[5]
L:=low[5]
O:=open[5]
C:=close[5]
V:=volume[5]
idx:=time[5]
valid:=true
MaxUse:=false
else if open[5]<close[5] and close[4]<=open[5] and high[1]<low[5] and high<low[5] and Show_iob
if high[4]>high[5]
type_obs:="Internal Bullish"
H:=high[4]
L:=math.max(low[4],low[5])
O:=open[4]
C:=close[4]
V:=volume[4]
idx:=time[4]
valid:=true
MaxUse:=true
else
type_obs:="Internal Bullish"
H:=high[5]
L:=low[5]
O:=open[5]
C:=close[5]
V:=volume[5]
idx:=time[5]
valid:=true
MaxUse:=true
else if open[5]>close[5] and close[4]>close[5] and close[3]>=open[5] and low>high[5] and Show_iob
if low[5]>low[4]
type_obs:="Internal Bearish"
H:=math.min(high[4],high[5])
L:=low[4]
O:=open[4]
C:=close[4]
V:=volume[4]
idx:=time[4]
valid:=true
MaxUse:=false
else
type_obs:="Internal Bearish"
H:=high[5]
L:=low[5]
O:=open[5]
C:=close[5]
V:=volume[5]
idx:=time[5]
valid:=true
MaxUse:=false
else if open[5]<close[5] and close[4]<close[5] and close[3]<=open[5] and high<low[5] and Show_iob
if high[4]>high[5]
type_obs:="Internal Bullish"
H:=high[4]
L:=math.max(low[4],low[5])
O:=open[4]
C:=close[4]
V:=volume[4]
idx:=time[4]
valid:=true
MaxUse:=true
else
type_obs:="Internal Bullish"
H:=high[5]
L:=low[5]
O:=open[5]
C:=close[5]
V:=volume[5]
idx:=time[5]
valid:=true
MaxUse:=true
else
valid:=false
if valid
ind=0
thold_ = (ta.highest(300) - ta.lowest(300)) * (MaxWidthOb/2.) / 100.
buyingVolume = math.round(V * (C - L) / (H - L))
sellingVolume = math.round(V * (H - C) / (H - L))
t_volume = (buyingVolume+sellingVolume)/2.
VolumeB:=int ((buyingVolume/ta.highest(t_volume,300))*100)
VolumeSn:=int ((sellingVolume/ta.highest(t_volume,300))*100)
volume_:=V
//Search for highest/lowest high within the structure interval and get range
if MaxUse
max:=H
min_1=L
min:=math.max(min_1,max-thold_)
else
max_1=H
min:=L
max:=math.min(max_1,min+thold_)
[valid,volume_,VolumeB,VolumeSn,max,min,idx,MaxUse ? -1 : 1,type_obs]
//Establish command blocks
OrderBShow(boxes,lines, target_top, target_btm, target_left, target_type, Show_last, swing, size,vol,col_1,col_2,OBsLengExt,OBsExtend,tf_text,tf_text_2,ob_text_size,vol_text,perct_text,text_color_ob,OBShowLines,OBStyleLines)=>
for x = 0 to Show_last-1
get_box = array.get(boxes, x)
box.set_lefttop(get_box, na, na)
box.set_rightbottom(get_box, na , na)
box.set_border_color(get_box, na)
box.set_bgcolor(get_box, na)
get_line = array.get(lines, x)
line.set_color(get_line,na)
line.set_xy1(get_line,na,na)
line.set_xy2(get_line,na,na)
for i = 0 to size-1
get_box = array.get(boxes, i)
get_line = array.get(lines, i)
max_left=bar_index-750
volume_sum=array.sum(vol)
volume_=array.get(vol, i)>100000000 ? array.get(vol, i)/100000000.: array.get(vol, i)>1000000 ? array.get(vol, i)/1000000. : array.get(vol, i)/1000.
volume_per=(array.get(vol, i)/volume_sum)*100
unit=array.get(vol, i)>100000000 ?' B': array.get(vol, i)>1000000 ?' M' : ' K'
text_vol=vol_text and perct_text ? tf_text + str.tostring(volume_,'#.##')+ unit + ' ('+ str.tostring(volume_per,'#.##')+'%)' : vol_text and not(perct_text) ? tf_text + str.tostring(volume_,'#.##')+ unit : not(vol_text) and perct_text ? tf_text + ' '+ str.tostring(volume_per,'#.##')+'%' : tf_text_2+ ''
if true
box.set_lefttop(get_box, array.get(target_left, i), array.get(target_top, i))
box.set_rightbottom(get_box,timenow+((timediff)*OBsLengExt) , array.get(target_btm, i))
box.set_text(get_box,text_vol)
box.set_text_color(get_box,text_color_ob)
box.set_border_color(get_box,color.gray)
box.set_border_width(get_box,2)
box.set_text_halign(get_box,text.align_right)
box.set_text_valign(get_box,text.align_center)
box.set_text_size(get_box,ob_text_size)
fully_extend=not(vol_text) and not(perct_text) and OBsExtend? extend.right : extend.none
len_ext=not(vol_text) and not(perct_text)?OBsLengExt : OBsLengExt/2
line.set_extend(get_line,fully_extend)
line.set_style(get_line,OBStyleLines)
line.set_xy1(get_line,array.get(target_left, i),array.get(target_top, i)-(array.get(target_top, i) - array.get(target_btm, i))/2)
line.set_xy2(get_line,time+((timediff)*(len_ext)),array.get(target_top, i)-(array.get(target_top, i) - array.get(target_btm, i))/2)
if OBShowLines
line.set_color(get_line,color.gray)
if OBsExtend
box.set_extend(get_box, extend.right)
color mscss = na
mscss := array.get(target_type, i) == 1 ? col_1 : col_2
box.set_border_color(get_box, mscss)
box.set_bgcolor(get_box, mscss)
box.set_border_color(get_box, mscss)
OBRemove(target_top, target_btm, target_left, target_type, Show_last, swing, size)=>
DeltIndex=0
deleted=false
for i = 0 to size-1
if i>0
for x=i-1 to 0
if array.get(target_top,i)>=array.get(target_btm,x) and array.get(target_top,i)<=array.get(target_top,x)
deleted:=true
DeltIndex:=i
if array.get(target_btm,i)>=array.get(target_btm,x) and array.get(target_btm,i)<=array.get(target_top,x)
deleted:=true
DeltIndex:=i
if array.get(target_btm,i)==array.get(target_btm,x) and array.get(target_top,i)==array.get(target_top,x)
deleted:=true
DeltIndex:=i
if array.get(target_btm,i)<=array.get(target_btm,x) and array.get(target_top,i)>=array.get(target_top,x)
deleted:=true
DeltIndex:=i
[deleted,DeltIndex]
TimeDiff()=>((time[1]-time[101])/100)
// ----------------------------------------------------------------------------------------------------
// ---------------------------------------------Order Blocks Arrays------------------------------------
// ----------------------------------------------------------------------------------------------------
var OBsTop = array.new_float(0)
var OBsBtm = array.new_float(0)
var OBsLeft = array.new_int(0)
var OBsType = array.new_int(0)
var OBsellvol = array.new_int(0)
var OBbuyvol = array.new_int(0)
var OBvol = array.new_float(0)
var OBtopMTF = array.new_float(0)
var OBbtmMTF = array.new_float(0)
var OBleftMTF = array.new_int(0)
var OBtypeMTF = array.new_int(0)
var OBsellvolMTF = array.new_int(0)
var OBbuyvolMTF = array.new_int(0)
var OBvolMTF = array.new_float(0)
table.cell(textstylist, 0, 1, subtitle, width, height, c_subtitle, a_subtitle, text_size=s_subtitle, bgcolor=c_bg)
BarMerge=barmerge.gaps_off
LookBars=barmerge.lookahead_on
[OBValid,volume_,VolumeB,VolumeSn,top_ob,btm_ob,left_ob,type_ob,_type]=request.security(ticker.standard(syminfo.tickerid), TFOB, ob_found(x_up,bar_index,Show_ob,Show_iob), BarMerge,LookBars)
[OBMTFValid,volume__mtf,VolumeB_mtf,VolumeSn_mtf,top_ob_mtf,btm_ob_mtf,left_ob_mtf,type_ob_mtf,_type_mtf]=request.security(ticker.standard(syminfo.tickerid), TFobMtf, ob_found(x_up,bar_index,ShowOBMtf,ShowiOBMtf), BarMerge,LookBars)
tf1_time=request.security(ticker.standard(syminfo.tickerid),TFobMtf,TimeDiff(), BarMerge,LookBars)
if OBValid and not(OBValid[1]) and barstate.isconfirmed
array.unshift(OBvol, volume_)
array.unshift(OBbuyvol, VolumeB)
array.unshift(OBsellvol, VolumeSn)
array.unshift(OBsTop, top_ob)
array.unshift(OBsBtm, btm_ob)
array.unshift(OBsLeft, left_ob)
array.unshift(OBsType, type_ob)
if OBMTFValid and not(OBMTFValid[1]) and barstate.isconfirmed
array.unshift(OBvolMTF, volume__mtf)
array.unshift(OBbuyvolMTF, VolumeB_mtf)
array.unshift(OBsellvolMTF, VolumeSn_mtf)
array.unshift(OBtopMTF, top_ob_mtf)
array.unshift(OBbtmMTF, btm_ob_mtf)
array.unshift(OBleftMTF, time-((tf1_time)*5))
array.unshift(OBtypeMTF, type_ob_mtf)
//Set order blocks
var iOBBoxes = array.new_box(0)
var OBBoxes = array.new_box(0)
var OBvolume = array.new_line(0)
var OBvolume_labels = array.new_label(0)
var iOBBoxes_buy = array.new_box(0)
var OBBoxes_buy = array.new_box(0)
var iOBBoxes_sell = array.new_box(0)
var OBBoxes_sell = array.new_box(0)
var iOBBoxes_mtf = array.new_box(0)
var OBBoxes_mtf = array.new_box(0)
var OBvolume_mtf = array.new_line(0)
var OBvolume_labels_mtf = array.new_label(0)
var iOBBoxes_buy_mtf = array.new_box(0)
var OBBoxes_buy_mtf = array.new_box(0)
var iOBBoxes_sell_mtf = array.new_box(0)
var OBBoxes_sell_mtf = array.new_box(0)
if array.size(OBtopMTF)>OBsMax_mtf
array.pop(OBtopMTF)
array.pop(OBbtmMTF)
array.pop(OBleftMTF)
array.pop(OBtypeMTF)
array.pop(OBbuyvolMTF)
array.pop(OBsellvolMTF)
array.pop(OBvolMTF)
if array.size(OBsTop)>OBsMax
array.pop(OBsTop)
array.pop(OBsBtm)
array.pop(OBsLeft)
array.pop(OBsType)
array.pop(OBbuyvol)
array.pop(OBsellvol)
array.pop(OBvol)
//Remove frame coordinates from internal order blocks if MSHigh/bottom breakso
if array.size(OBtopMTF)>1
for index=0 to array.size(OBtopMTF)-1
src1=MittigFiltMTF=='Wicks' or MittigFiltMTF=='Touch'? low : MittigFiltMTF=='Close'? close : low
src2=MittigFiltMTF=='Wicks' or MittigFiltMTF=='Touch'? high : MittigFiltMTF=='Close'? close : high
up= MittigFiltMTF=='Touch' ? array.get(OBtopMTF, index) : MittigFiltMTF=='Average'? array.get(OBtopMTF, index)-(array.get(OBtopMTF, index) - array.get(OBbtmMTF, index))/2 : array.get(OBbtmMTF, index)
dn= MittigFiltMTF=='Touch' ? array.get(OBbtmMTF, index) : MittigFiltMTF=='Average'? array.get(OBtopMTF, index)-(array.get(OBtopMTF, index) - array.get(OBbtmMTF, index))/2 : array.get(OBtopMTF, index)
if (src1 < up or src1[1] < up or (MittigFiltMTF!='Touch' and src1[1] < up)) and array.get(OBtypeMTF, index) == 1 and OBBullBreak==false
array.remove(OBtopMTF, index)
array.remove(OBbtmMTF, index)
array.remove(OBleftMTF, index)
array.remove(OBtypeMTF, index)
array.remove(OBbuyvolMTF, index)
array.remove(OBsellvolMTF, index)
array.remove(OBvolMTF, index)
OBBullBreak := true
break
else if (src2 > dn or src2[1] > dn or (MittigFiltMTF!='Touch' and src2[1] > dn)) and array.get(OBtypeMTF, index) == -1 and OBBearBreak==false
array.remove(OBtopMTF, index)
array.remove(OBbtmMTF, index)
array.remove(OBleftMTF, index)
array.remove(OBtypeMTF, index)
array.remove(OBbuyvolMTF, index)
array.remove(OBsellvolMTF, index)
array.remove(OBvolMTF, index)
OBBearBreak := true
break
if array.size(OBsTop)>1
for index=0 to array.size(OBsTop)-1
src1=MittigFilt=='Wicks' or MittigFilt=='Touch'? low : MittigFilt=='Close'? close : low
src2=MittigFilt=='Wicks' or MittigFilt=='Touch'? high : MittigFilt=='Close'? close : high
up= MittigFilt=='Touch' ? array.get(OBsTop, index) : MittigFilt=='Average'? array.get(OBsTop, index)-(array.get(OBsTop, index) - array.get(OBsBtm, index))/2 : array.get(OBsBtm, index)
dn= MittigFilt=='Touch' ? array.get(OBsBtm, index) : MittigFilt=='Average'? array.get(OBsTop, index)-(array.get(OBsTop, index) - array.get(OBsBtm, index))/2 : array.get(OBsTop, index)
if (src1 < up or src1[1] < up or (MittigFilt!='Touch' and src1[2] < up)) and array.get(OBsType, index) == 1 and OBBullBreak==false
array.remove(OBsTop, index)
array.remove(OBsBtm, index)
array.remove(OBsLeft, index)
array.remove(OBsType, index)
array.remove(OBbuyvol, index)
array.remove(OBsellvol, index)
array.remove(OBvol, index)
OBBullBreak := true
break
else if (src2 > dn or src2[1] > dn or (MittigFilt!='Touch' and src2[2] > dn)) and array.get(OBsType, index) == -1 and OBBearBreak==false
array.remove(OBsTop, index)
array.remove(OBsBtm, index)
array.remove(OBsLeft, index)
array.remove(OBsType, index)
array.remove(OBbuyvol, index)
array.remove(OBsellvol, index)
array.remove(OBvol, index)
OBBearBreak := true
break
alertcondition(OBBullBreak,'Bullish OB Break','Bullish OB Broken SZ')
alertcondition(OBBearBreak,'Bearish OB Break','Bearish OB Broken SZ')
SizeOB_mtf = array.size(OBtypeMTF)
SizeOB = array.size(OBsType)
if barstate.islast
if true
for i = 0 to OBsMax-1
array.push(OBBoxes, box.new(na,na,na,na, xloc = xloc.bar_time))
array.push(OBBoxes_buy, box.new(na,na,na,na, xloc = xloc.bar_time))
array.push(OBBoxes_sell, box.new(na,na,na,na, xloc = xloc.bar_time))
array.push(OBvolume, line.new(na,na,na,na,xloc = xloc.bar_time,color=color.gray,style=line.style_solid,width = 1))
if true
for i = 0 to OBsMax_mtf-1
array.push(OBBoxes_mtf, box.new(na,na,na,na, xloc = xloc.bar_time))
array.push(OBBoxes_buy_mtf, box.new(na,na,na,na, xloc = xloc.bar_time))
array.push(OBBoxes_sell_mtf, box.new(na,na,na,na, xloc = xloc.bar_time))
array.push(OBvolume_mtf, line.new(na,na,na,na,xloc = xloc.bar_time,color=color.gray,style=line.style_solid,width = 1))
array.push(OBvolume, line.new(na,na,na,na,xloc = xloc.bar_index,color=color.yellow,style=line.style_dashed,width = 3))
array.push(OBvolume_labels, label.new(na,na,xloc =xloc.bar_index,color=color.yellow,size=size.small ))
if SizeOB > 1 and (FiltOverlapping)
[deleted_ob,DeltIndex]=OBRemove(OBsTop, OBsBtm, OBsLeft, OBsType, OBsMax, false, SizeOB)
if deleted_ob
array.remove(OBsTop, DeltIndex)
array.remove(OBsBtm, DeltIndex)
array.remove(OBsLeft, DeltIndex)
array.remove(OBsType, DeltIndex)
array.remove(OBbuyvol, DeltIndex)
array.remove(OBsellvol, DeltIndex)
array.remove(OBvol, DeltIndex)
if SizeOB_mtf > 1 and (FiltOverlapping_mtf)
[deleted_ob,DeltIndex]=OBRemove(OBtopMTF, OBbtmMTF, OBleftMTF, OBtypeMTF, OBsMax_mtf, false, SizeOB_mtf)
if deleted_ob
array.remove(OBtopMTF, DeltIndex)
array.remove(OBbtmMTF, DeltIndex)
array.remove(OBleftMTF, DeltIndex)
array.remove(OBtypeMTF, DeltIndex)
array.remove(OBbuyvolMTF, DeltIndex)
array.remove(OBsellvolMTF, DeltIndex)
array.remove(OBvolMTF, DeltIndex)
SizeOB_mtf := array.size(OBtypeMTF)
SizeOB := array.size(OBsType)
if SizeOB > 0 and barstate.islast
if ShowOBs
OrderBShow(OBBoxes,OBvolume, OBsTop, OBsBtm, OBsLeft, OBsType, OBsMax, false, SizeOB,OBvol,BullOBcss,BearOBcss,OBsLengExt,OBsExtend,'','',OBSizeText_,TextVolume,TextPercent,OBColorText1,OBShowLine_1,OBStyleLine_1)
if SizeOB_mtf > 0 and barstate.islast
if ShowOBs_mtf
OrderBShow(OBBoxes_mtf,OBvolume_mtf , OBtopMTF , OBbtmMTF , OBleftMTF , OBtypeMTF , OBsMax_mtf , false, SizeOB_mtf ,OBvolMTF ,BullOBcss_2,BearOBcss_2,OBsLengExt_mtf,OBsExtend_mtf,timeframe1,timeframe_st,OBSizeText_2,TextVolume_2,TextPercent_2,ob_text_color_2,OBShowLine_2,OBStyleLine_2)
// ----------------------------------------------------------------------------------------------------
// ---------------------------------------Order Blocks Arrays------------------------------------------
// ----------------------------------------------------------------------------------------------------
// ---------------------------------------------Volume Profile-----------------------------------------
// ----------------------------------------------------------------------------------------------------
DrawLabelXF(_x, _y, _text, _xloc, _yloc, _color, _style, _textcolor, _size, _textalign, _tooltip) =>
var id = label.new(_x, _y, _text, _xloc, _yloc, _color, _style, _textcolor, _size, _textalign, _tooltip)
label.set_xy(id, _x, _y)
label.set_text(id, _text)
label.set_tooltip(id, _tooltip)
label.set_textcolor(id, _textcolor)
DrawLineXF(_x1, _y1, _x2, _y2, _xloc, _extend, _color, _style, _width) =>
var id = line.new(_x1, _y1, _x2, _y2, _xloc, _extend, _color, _style, _width)
line.set_xy1(id, _x1, _y1)
line.set_xy2(id, _x2, _y2)
line.set_color(id, _color)
id
// ----------------------------------------------------------------------------------------------------
// ---------------------------------Volume Profile / Volume Price---------------------------------------
// ----------------------------------------------------------------------------------------------------
G_VolPro = '████████Volume Profile / Volume Price████████'
TooltipVolPro = 'Volume profile (also known as price per Volume) is a chart study that shows trading activity over a specific time period at specific price levels.'
TooltipDom = 'Bull/bear dominance shows the dominant side at specific price levels\n' +
' - Red rows: selling pressure is greater\n' +
' - Green rows: the buying pressure is greater\n\nNarrow rows do not mean that there is no interest in those price levels, but rather balance between selling and buying commercial activity.'
profileDisplay = input.string('Up/Down', 'Volume', options = ['Up/Down', 'Total'], inline='ZZ' , group = G_VolPro, tooltip = TooltipVolPro)
upVolumeColor = input.color(color.new(#1592e6, 30), '', inline='ZZ' , group = G_VolPro)
downVolumeColor = input.color(color.new(#fbc123, 30), '', inline='ZZ' , group = G_VolPro)
nonVaColor = input.color(color.new(#5d606b, 80), '', inline='ZZ' , group = G_VolPro)
bullBearStr = input.bool(true, 'Bull/Bear Dominance, Bull', inline='BB' , group = G_VolPro, tooltip = TooltipDom)
bbStrUpColor = input.color(color.new(#26a69a, 30), '', inline='BB' , group = G_VolPro)
bbStrDownColor = input.color(color.new(#ef5350, 30), 'Bear', inline='BB' , group = G_VolPro)
pointOfControl = input.bool(true, 'Checkpoint', inline='PoC', group = G_VolPro)
pocColor = input.color(color.new(#ff0000, 0), '', inline='PoC', group = G_VolPro)
pocWidth = input.int(2, '', minval = 1, inline='PoC', group = G_VolPro)
isValueArea = input.float(68, "Value Area Volume %", minval = 0, maxval = 100, group = G_VolPro, inline= 'PoC') / 100
valueAreaHigh = input.bool(false, 'Value Area High Line', inline='VAH', group = G_VolPro)
vahColor = input.color(color.new(#9598a1, 0),'', inline='VAH', group = G_VolPro)
vahWidth = input.int(2, '', minval = 1, inline='VAH', group = G_VolPro)
valueAreaLow = input.bool(false, 'Value Area Low Line', inline='VAL', group = G_VolPro)
valColor = input.color(color.new(#9598a1, 0),'', inline='VAL', group = G_VolPro)
valWidth = input.int(2, '', minval = 1, inline='VAL', group = G_VolPro)
priceLevels = input.string('Up/Down', 'Price levels', options = ['High/Low Profile', 'Up/Down', 'None'], inline='BBe', group = G_VolPro)
labelColor = input.color(color.new(#9598a1, 0),'', inline='BBe', group = G_VolPro)
lookback = input.string('Fixed range', 'Retrospective range', options = ['Fixed range', 'Visible Range'], group = G_VolPro, inline='pw')
profilePlacement = input.string('Right', 'Placement', options = ['Right', 'Left'], group = G_VolPro, inline='pw')
lookbackLength = input.int(360, 'Leng Hindsight/Fixed range', minval = 10, maxval = 5000, step = 10 , group = G_VolPro, inline='lhfr')
lookbackLength := last_bar_index < lookbackLength ? last_bar_index : lookbackLength
profileLevels = input.int(100, 'Number of rows' , minval = 10, maxval = 150 , step = 1, group = G_VolPro, inline='lhfr')
profileWidth = input.int(60, 'Profile width', minval = 21, maxval = 150, group = G_VolPro, inline='pw1')
horizontalOffset = input.int(28, 'Horizontal displacement', minval = 0 , maxval = 50, group = G_VolPro, inline='pw1')
volumeStorageT = array.new_float(profileLevels + 1, 0.)
volumeStorageB = array.new_float(profileLevels + 1, 0.)
var a_profile = array.new_box()
var levelAbovePoc = 0
var levelBelowPoc = 0
var pocLevel = 0
barPriceLow = low
barPriceHigh = high
bullCandle = close > open
priceHighestFR = ta.highest(high, lookbackLength)
priceLowestFR = ta.lowest (low , lookbackLength)
volumeHighestFR = ta.highest(nzVolume, lookbackLength > 0 ? lookbackLength : 200)
var startBarIndexX = 0
if time == chart.left_visible_bar_time
startBarIndexX := bar_index
if lookback == 'Visible Range'
lookbackLength := last_bar_index - startBarIndexX
HLGetF() =>
var htf_h = 0., var htf_l = 0., var vol_h = 0.
if lookback == 'Visible Range'
if time == chart.left_visible_bar_time
htf_l := low
htf_h := high
vol_h := nzVolume
else if time > chart.left_visible_bar_time
htf_l := math.min(low , htf_l)
htf_h := math.max(high, htf_h)
vol_h := math.max(nzVolume, vol_h)
else
htf_h := priceHighestFR
htf_l := priceLowestFR
vol_h := volumeHighestFR
[htf_h, htf_l, vol_h]
[priceHighest, priceLowest, volumeHighest] = HLGetF()
priceStep = (priceHighest - priceLowest) / profileLevels
priceChangeRate = (priceHighest - priceLowest) / priceHighest
if barstate.islast and nzVolume
if array.size(a_profile) > 0
for i = 0 to array.size(a_profile) - 1
box.delete(array.shift(a_profile))
for barIndex = 0 to lookbackLength - 1
level = 0
for priceLevel = priceLowest to priceHighest by priceStep
if barPriceHigh[barIndex] >= priceLevel and barPriceLow[barIndex] < priceLevel + priceStep
array.set(volumeStorageT, level, array.get(volumeStorageT, level) + nzVolume[barIndex] * ((barPriceHigh[barIndex] - barPriceLow[barIndex]) == 0 ? 1 : priceStep / (barPriceHigh[barIndex] - barPriceLow[barIndex])) )
if bullCandle[barIndex] and (profileDisplay == 'Up/Down' or bullBearStr)
array.set(volumeStorageB, level, array.get(volumeStorageB, level) + nzVolume[barIndex] * ((barPriceHigh[barIndex] - barPriceLow[barIndex]) == 0 ? 1 : priceStep / (barPriceHigh[barIndex] - barPriceLow[barIndex])) )
level += 1
pocLevel := array.indexof(volumeStorageT, array.max(volumeStorageT))
if pointOfControl and VPswitch
DrawLineXF(bar_index - lookbackLength + 1, priceLowest + (pocLevel + 0.50) * priceStep, bar_index + (profilePlacement == 'Right' ? horizontalOffset + profileWidth : 0), priceLowest + (pocLevel + 0.50) * priceStep, xloc.bar_index, extend.none, pocColor, line.style_solid, pocWidth)
if priceLevels != 'None'
DrawLabelXF(bar_index + (profilePlacement == 'Right' ? horizontalOffset + profileWidth + (bullBearStr ? 17 : 7) : 7), priceLowest + (array.indexof(volumeStorageT, array.max(volumeStorageT)) + .5) * priceStep, str.tostring(priceLowest + (array.indexof(volumeStorageT, array.max(volumeStorageT)) + .5) * priceStep, format.mintick), xloc.bar_index, yloc.price, color.new(pocColor, 89), label.style_label_left, color.new(pocColor, 0), size.small, text.align_left, 'Checkpoint')
totalVolumeTraded = array.sum(volumeStorageT) * isValueArea
valueArea = array.get(volumeStorageT, pocLevel)
levelAbovePoc := pocLevel
levelBelowPoc := pocLevel
while valueArea < totalVolumeTraded
if levelBelowPoc == 0 and levelAbovePoc == profileLevels - 1
break
volumeAbovePoc = 0.
if levelAbovePoc < profileLevels - 1
volumeAbovePoc := array.get(volumeStorageT, levelAbovePoc + 1)
volumeBelowPoc = 0.
if levelBelowPoc > 0
volumeBelowPoc := array.get(volumeStorageT, levelBelowPoc - 1)
if volumeAbovePoc >= volumeBelowPoc
valueArea += volumeAbovePoc
levelAbovePoc += 1
else
valueArea += volumeBelowPoc
levelBelowPoc -= 1
vah = DrawLineXF(bar_index - lookbackLength + 1, priceLowest + (levelAbovePoc + 1.00) * priceStep, bar_index, priceLowest + (levelAbovePoc + 1.00) * priceStep, xloc.bar_index, extend.none, valueAreaHigh ? vahColor : #00000000, line.style_solid, vahWidth)
val = DrawLineXF(bar_index - lookbackLength + 1, priceLowest + (levelBelowPoc + 0.00) * priceStep, bar_index, priceLowest + (levelBelowPoc + 0.00) * priceStep, xloc.bar_index, extend.none, valueAreaLow ? valColor : #00000000, line.style_solid, valWidth)
if priceLevels != 'None' and VPswitch
upperPriceLevel = priceLevels == 'Up/Down' ? priceLowest + (levelAbovePoc + 1.00) * priceStep : priceHighest
lowerPriceLevel = priceLevels == 'Up/Down' ? priceLowest + (levelBelowPoc + 0.00) * priceStep : priceLowest
DrawLabelXF(last_bar_index + 3, upperPriceLevel, str.tostring(upperPriceLevel, format.mintick), xloc.bar_index, yloc.price, color.new(labelColor, 89), label.style_label_left, labelColor, size.small, text.align_left, ' High Profile - ' + str.tostring(priceHighest, format.mintick) + '\n %' + str.tostring((priceHighest - priceLowest) / priceLowest * 100, '#.##') + 'Higher than Low Profile\n\nValue Area High - ' + str.tostring(priceLowest + (levelAbovePoc + 1.00) * priceStep, format.mintick) + '\nVolume area Value %' + str.tostring(isValueArea * 100) + '\n\nNumber of bars : ' + str.tostring(lookbackLength) )
DrawLabelXF(last_bar_index + 3, lowerPriceLevel, str.tostring(lowerPriceLevel, format.mintick), xloc.bar_index, yloc.price, color.new(labelColor, 89), label.style_label_left, labelColor, size.small, text.align_left, ' Low Profile - ' + str.tostring(priceLowest , format.mintick) + '\n %' + str.tostring((priceHighest - priceLowest) / priceHighest * 100, '#.##') + 'Lower than High Profile\n\nValue Area Low - ' + str.tostring(priceLowest + (levelBelowPoc + 0.00) * priceStep, format.mintick) + '\nVolume area Value %' + str.tostring(isValueArea * 100) + '\n\nNumber of bars : ' + str.tostring(lookbackLength) )
for level = 0 to profileLevels - 1
if VPswitch
levelColor = profileDisplay == 'Up/Down' ? level >= levelBelowPoc and level <= levelAbovePoc ? downVolumeColor : nonVaColor : level >= levelBelowPoc and level <= levelAbovePoc ? upVolumeColor : nonVaColor
startBoxIndex = profilePlacement == 'Right' ? bar_index + profileWidth + horizontalOffset - int(array.get(volumeStorageT, level) / array.max(volumeStorageT) * (profileWidth - 9)) : bar_index - lookbackLength + 1
endBoxIndex = profilePlacement == 'Right' ? bar_index + profileWidth + horizontalOffset: startBoxIndex + int( array.get(volumeStorageT, level) / array.max(volumeStorageT) * (profileWidth - 9))
array.push(a_profile, box.new(startBoxIndex, priceLowest + (level + 0.1) * priceStep, endBoxIndex, priceLowest + (level + 0.9) * priceStep, levelColor, bgcolor = levelColor ))
if profileDisplay == 'Up/Down' and VPswitch
startBoxIndex = profilePlacement == 'Right' ? bar_index + profileWidth + horizontalOffset - int(array.get(volumeStorageB, level) / array.max(volumeStorageB) * (profileWidth - 9) / 2) : bar_index - lookbackLength + 1
endBoxIndex = profilePlacement == 'Right' ? bar_index + profileWidth + horizontalOffset: startBoxIndex + int( array.get(volumeStorageB, level) / array.max(volumeStorageB) * (profileWidth - 9) / 2)
array.push(a_profile, box.new(startBoxIndex, priceLowest + (level + 0.1) * priceStep, endBoxIndex, priceLowest + (level + 0.9) * priceStep, level >= levelBelowPoc and level <= levelAbovePoc ? upVolumeColor : nonVaColor, bgcolor = level >= levelBelowPoc and level <= levelAbovePoc ? upVolumeColor : nonVaColor ))
if bullBearStr and VPswitch
bullBearPower = 2 * array.get(volumeStorageB, level) - array.get(volumeStorageT, level)
startBoxIndex = profilePlacement == 'Right' ? bar_index + profileWidth + 1 + horizontalOffset + (bullBearPower > 0 ? 1 : -1) * int(bullBearPower / array.max(volumeStorageT) * (profileWidth - 9) * 1.75) : bar_index - lookbackLength
endBoxIndex = profilePlacement == 'Right' ? bar_index + profileWidth + 1 + horizontalOffset: startBoxIndex + (bullBearPower > 0 ? -1 : 1) * int(bullBearPower / array.max(volumeStorageT) * (profileWidth - 9) * 1.75 )
array.push(a_profile, box.new(startBoxIndex, priceLowest + (level + 0.1) * priceStep, endBoxIndex, priceLowest + (level + 0.9) * priceStep, bullBearPower > 0 ? bbStrUpColor : bbStrDownColor, bgcolor = bullBearPower > 0 ? bbStrUpColor : bbStrDownColor ))
// ----------------------------------------------------------------------------------------------------
// ------------------------------------------Volume Profile / Volume Price-----------------------------
// ----------------------------------------------------------------------------------------------------
// INPUTS
g_BoxofKZ = '████████KillZones████████'
TimeI = input.session ('0000-0001:1234567', "New York", inline= 'NY25', tooltip="Different exchanges will have different time zones, so change accordingly.", group = g_BoxofKZ)
MaxTFI = input.int (15, "Timeframe", 1, 240, group = g_BoxofKZ, inline='NY25')
LineHI = input.bool (false, "HLine Midnight", inline="in1", group = g_BoxofKZ)
LinecolI = input.color (#2d62b6, "", inline="in1", group = g_BoxofKZ)
LinestyleI = input.string ("Dotted", "", options=["Solid", "Dotted", "Dashed"], inline="in1", group = g_BoxofKZ)
ExI = input.string ("None", "", options=["None", "+1 Day", "Right", "Both"], inline="in1", group = g_BoxofKZ)
PipsI = input.bool (true, "Box Info |", inline='x1a', group = g_BoxofKZ)
TxtColI = input.color (#5c71af, " Text Color", inline="x1a", group = g_BoxofKZ)
D4I = input.string ("GMT+10", "DOW Time zone", options=["GMT+0", "GMT+1", "GMT+2", "GMT+3","GMT+4","GMT+5","GMT+6","GMT+7","GMT+8","GMT+9","GMT+10","GMT+11","GMT+12","GMT-1", "GMT-2", "GMT-3","GMT-4","GMT-5","GMT-6","GMT-7","GMT-8","GMT-9","GMT-10","GMT-11","GMT-12"], inline='x1a', tooltip='Time zone for the day of the Week', group = g_BoxofKZ)
Bool0I = input.string ("GMT-5", "Time zone", options=["GMT+0", "GMT+1", "GMT+2", "GMT+3","GMT+4","GMT+5","GMT+6","GMT+7","GMT+8","GMT+9","GMT+10","GMT+11","GMT+12","GMT-1", "GMT-2", "GMT-3","GMT-4","GMT-5","GMT-6","GMT-7","GMT-8","GMT-9","GMT-10","GMT-11","GMT-12"], inline='x9', group="███████Sessions███████")
TBXI = input.bool (true, "Text in boxes", inline="x9", group="███████Sessions███████")
TcbI = input.color (color.new(color.white, 80), "", inline="x9", group="███████Sessions███████")
Bool1I = input.bool (true, "", inline='nys', group="███████Sessions███████")
Bool2I = input.bool (true, "", inline='asia', group="███████Sessions███████")
Bool3I = input.bool (true, "", inline='ldn', group="███████Sessions███████")
Bool5I = input.bool (true, "", inline='sbam', group="███████Sessions███████")
Bool6I = input.bool (true, "", inline='sbpm', group="███████Sessions███████")
nysesh = input.session ('0930-2005', "", inline='nys', tooltip="New York", group="███████Sessions███████")
asia = input.session ('2000-0005', "", inline='asia', tooltip="Asia", group="███████Sessions███████")
London = input.session ('0200-0505', "", inline='ldn', tooltip="London", group="███████Sessions███████")
sbam = input.session ('1000-1105', "", inline='sbam', tooltip="Silver Bullet AM", group="███████Sessions███████")
sbpm = input.session ('1400-1505', "", inline='sbpm', tooltip="Silver Bullet PM", group="███████Sessions███████")
nyV = input.color (color.new(#0064ff, 0),"", inline='nys', group="███████Sessions███████")
asiaV = input.color (color.new(#ffb222, 0),"", inline='asia', group="███████Sessions███████")
lonV = input.color (color.new(#e90000, 0),"", inline='ldn', group="███████Sessions███████")
sbamI = input.color (color.new(#aaaaaa, 0),"", inline='sbam', group="███████Sessions███████")
sbpmI = input.color (color.new(#aaaaaa, 0),"", inline='sbpm', group="███████Sessions███████")
//INPUTS EN
// MISC
nymid = time ("1", TimeI, Bool0I)
linestyle2 = LinestyleI == "Solid" ? line.style_solid : LinestyleI == "Dotted" ? line.style_dotted : line.style_dashed
ex = ExI == "None" ? extend.none : ExI == "+1 Day" ? extend.none : ExI == "Right" ? extend.right : extend.both
htime = ExI == "+1 Day" ? 172800000 : 86400000
dow = dayofweek == dayofweek.friday ? 259200000 : 86400000
dow2 = dayofweek == dayofweek.friday ? 172800000 : 86400000
dow3 = dayofweek == dayofweek.friday ? 172800000 : 0
disp = timeframe.isintraday and timeframe.multiplier <= MaxTFI
// CALC
var opennprice = 0.0
if not na(nymid)
if na(nymid[1])
opennprice := open
else
opennprice := math.max(open, opennprice)
// FUNCTIONS
SessionIN(sess) =>
not na(time(timeframe.period, sess, Bool0I))
TimeStart(sess) =>
int startTime = na
startTime := SessionIN(sess) and not SessionIN(sess)[1] ? time : startTime[1]
startTime
NewIsSession(res, sess) =>
t = time(res, sess, Bool0I)
na(t[1]) and not na(t) or t[1] < t
BarInSession(sess) =>
time(timeframe.period, sess, Bool0I) != 0
LineH(StartTime, EndTime, Price, Color, Style, Width) =>
return_1 = line.new(StartTime, Price, EndTime, Price, xloc=xloc.bar_time, extend=extend.none, color=Color, style=Style, width=Width)
pip(x) =>
forex = syminfo.type == "forex" ? syminfo.mintick * 10 : na
x / forex
forex = syminfo.type == "forex"
// OBJECTS
var label lb = na
if opennprice != opennprice[1] and LineHI and disp
var line lne = na
line.set_x2(lne, nymid)
line.set_extend(lne, extend.none)
lne := line.new(nymid, opennprice, nymid + htime + dow3, opennprice, xloc.bar_time, ex, LinecolI, linestyle2, 2)
lb := label.new(nymid + htime + dow3, opennprice, "NY Midnight Open | " + str.tostring(math.round_to_mintick(opennprice)), xloc.bar_time, yloc.price, na, label.style_none, TxtColI)
label.delete(lb[1])
VLineF(a, b, d, e, sess) =>
var line fl1 = na
var line fl2 = na
var linefill lf1 = na
st_vl = timestamp(Bool0I, year, month, sess, a, 00, 00)
en_vl = timestamp(Bool0I, year, month, sess, b, e, 00)
fl1 := line.new(st_vl, high, st_vl, low, xloc.bar_time, extend.both, color.new(color.white,100))
line.delete(fl1[1])
fl2 := line.new(en_vl, high, en_vl, low, xloc.bar_time, extend.both, color.new(color.white,100))
line.delete(fl2[1])
lf1 := linefill.new(fl1, fl2, color.new(d, 90))
linefill.delete(lf1[1])
for i = 0 to 100
if time > line.get_x1(fl2[i])
line.delete(fl2[i])
line.delete(fl1[i])
//Killzone
isnewday = time("D") != time("D")[1]
BoxKZ(kz, bdcol,txt, x)=>
sesh = NewIsSession('1440', kz)
var kzlow = 0.0
var kzhigh = 0.0
kzbox = box(na)
bline = line(na)
bline2 = line(na)
_lbl = label(na)
kzstart = TimeStart(kz)
dow4 = dayofweek(kzstart, D4I)
if SessionIN(kz) and not SessionIN(kz)[1]
kzlow := low
kzhigh := high
tgdist = kzhigh - kzlow
dol = (time - kzstart) / 2
if SessionIN(kz)
if SessionIN(kz[1])
box.delete(kzbox[1])
line.delete(bline[1])
line.delete(bline2[1])
label.delete(_lbl[1])
if low < kzlow
kzlow := low
kzlow
if high > kzhigh
kzhigh := high
kzhigh
if x
kzbox := box.new(kzstart, kzhigh, time, kzlow, color.new(bdcol, 60), 0, line.style_solid, extend.none, xloc.bar_time, color.new(bdcol,85), TBXI ? txt : na, size.auto, TcbI, text_wrap=text.wrap_auto)
bline := line.new(kzstart, kzhigh, time, kzhigh, xloc.bar_time, extend.none, bdcol, line.style_solid, 1)
bline2 := line.new(kzstart, kzlow, time, kzlow, xloc.bar_time, extend.none, bdcol, line.style_solid, 1)
dtext = dow4 == 1 ? "Sun • " : dow4 == 2 ? "Mon • " : dow4 == 3 ? "Tue • " : dow4 == 4 ? "Wedn • " : dow4 == 5 ? "Thue • " : dow4 == 6 ? "Fre • " : dow4 == 7 ? "Sat • " : na
rtext = dtext + str.tostring(forex ? math.round(pip(tgdist)) : math.round_to_mintick(tgdist)) + (forex ? " pips" : " pts")
if PipsI
_lbl := label.new(kzstart + dol, kzhigh, rtext, xloc.bar_time, yloc.price, na, textcolor = TxtColI, size = size.normal,textalign = text.align_right, style=label.style_none)
if disp and KZswitch
BoxKZ(nysesh, nyV, "NY", Bool1I)
BoxKZ(asia, asiaV, "Asia", Bool2I)
BoxKZ(London, lonV, "London", Bool3I)
BoxKZ(sbam, sbamI, "S.B \n AM", Bool5I)
BoxKZ(sbpm, sbpmI, "S.B \n PM", Bool6I)
// Functions ----------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------------- //
// Inputs -------------------------------------------------------------------------------------- //
group_diver = '███████Divergence Settings███████'
lbR = input(5, "Pivot Lookback Right", group=group_diver, inline = 'PL')
lbL = input(5, "Pivot Lookback Left", group=group_diver, inline = 'PL')
rangeUpper = input(60, "Max Lookback Range", group=group_diver, inline = 'PL1')
rangeLower = input(5, "Min Lookback Range", group=group_diver, inline = 'PL1')
plotBull = input(true, "Plot Bullish | Hidden Bullish", inline = 'bull', group=group_diver)
plotHiddenBull = input(false, "", inline='bull', group=group_diver)
plotBear = input(true, "Plot Bearish | Hidden Bearish", inline = 'bear', group=group_diver)
plotHiddenBear = input(false, "", inline = 'bear', group=group_diver)
group_stoch = '███████Stochastic Settings███████'
stochPeriodK = input.int(14, "%K Length", minval=1, inline='HS1', group=group_stoch)
stochSmoothK = input.int(1 , "%K Smoothing", minval=1, inline='HS1', group=group_stoch)
stochPeriodD = input.int(3 , "%D Smoothing", minval=1, inline='HS1', group=group_stoch)
stochUpperBand = input.int(80, 'Upper Band', inline='HS2', group=group_stoch)
stochLowerBand = input.int(20, 'Lower Band', inline='HS2' ,group=group_stoch)
group_mfi = '███████MFI Settings███████'
mfiLegth = input.int(14, "Length", minval=1, maxval=2000, group=group_mfi, inline = 'mfi')
mfiUpperBand = input.int(80, 'Up Band', group=group_mfi, inline = 'mfi')
mfiLowerBand = input.int(20, 'Low Band', group=group_mfi, inline = 'mfi')
group_rsi = '███████RSI Settings███████'
rsiLength = input.int(14, "Length", minval = 1, group=group_rsi, inline = 'rsii')
rsiSource = input.source(close, "Source", group=group_rsi, inline = 'rsii')
rsiObThresh = input.int(70, 'Overbought', minval=50, maxval=100, group=group_rsi, inline = 'rsiii')
rsiOsThresh = input.int(30, 'Oversold' , minval=1 , maxval=50 , group=group_rsi, inline = 'rsiii')
rsiSmoothing = input.bool(true, 'Oscillator MA', group=group_rsi, inline = 'rssiii')
rsiMaType = input.string("EMA", "", options=["SMA", "EMA", "RMA", "VWMA"], group=group_rsi, inline = 'rssiii')
rsiMaLength = input.int(14, "Oscillator MA Length", group=group_rsi, inline = 'rssiii')
group_cci = '███████CCI Settings███████'
cciLength = input.int(20, 'Length', inline='CCI', minval=1, group=group_cci)
cciSource = input(hlc3, "Source", inline='CCI', group=group_cci)
cciUpperBand = input.int(100, 'Upper Band', inline='CCI1', group=group_cci)
cciLowerBand = input.int(-100, 'Lower Band', inline='CCI1', group=group_cci)
cciSmoothLength = input.int(5, "Oscillator MA Length",inline = 'CCI2', minval = 1, maxval = 100, group=group_cci)
cciSmoothing = input.bool(false, 'Oscillator MA', inline = 'CCI2', group=group_cci)
cciMaType = input.string(title = "", defval = "SMA", options=["SMA", "EMA", "RMA", "VWMA"], inline = 'CCI2',group=group_cci)
// Input-------------------------------------------------------------------------------------- //
// ------------------------------------------------------------------------------------------- //
// Calculation-------------------------------------------------------------------------------- //
osc = switch TypeOSC
"None" => na
"Money Flow Index (MFI)" => ta.mfi(hlc3, mfiLegth)
"Elder-Ray Bear and Bull Power" => high - ma(close, 13, 'EMA')
'Relative Strength Index (RSI)' => ta.rsi(rsiSource, rsiLength)
'Stochastic (Stoch)' => ma(ta.stoch(close, high, low, stochPeriodK), stochSmoothK, 'SMA')
'Commodity Channel Index (CCI)' => (cciSource - ma(cciSource, cciLength, 'SMA')) / (0.015 * ta.dev(cciSource, cciLength))
"Klinger Oscillator" => sv = ta.change(hlc3) >= 0 ? nzVolume : -nzVolume, ma(sv, 34, 'EMA') - ma(sv, 55, 'EMA')
signal = switch TypeOSC
"None" => na
"Klinger Oscillator" => ma(osc, 13, 'EMA')
"Elder-Ray Bear and Bull Power" => -(low - ma(close, 13, 'EMA'))
'Stochastic (Stoch)' => ma(osc, stochPeriodD, 'SMA')
'Relative Strength Index (RSI)' => rsiSmoothing ? ma(osc, rsiMaLength, rsiMaType) : na
'Commodity Channel Index (CCI)' => cciSmoothing ? ma(osc, cciSmoothLength, cciMaType) : na
[oscColor, signalColor, ColorFill2, histColor] = switch TypeOSC
"None" => na
"Klinger Oscillator" => [#2962FF, #43A047, #00000000, #00000000]
"Elder-Ray Bear and Bull Power" => [color.green, color.red, #00000000, #00000000]
'Stochastic (Stoch)' => [#2962FF, #FF6D00, color.new(#2196f3, 90), #00000000]
'Commodity Channel Index (CCI)' => [#2962ff, #f37f20, color.new(#2196f3, 90), #00000000]
"Money Flow Index (MFI)" => [#7E57C2, #00000000, color.new(#7e57c2, 90), #00000000]
'Relative Strength Index (RSI)' => [#7e57c2, #fffb059c, color.new(#7e57c2, 90), #00000000]
[plotTresh, upperBand, plotMidLile, midLine, lowerBand] = switch TypeOSC
"None" => na
"Money Flow Index (MFI)" => [true, mfiUpperBand, false, 0, mfiLowerBand]
'Relative Strength Index (RSI)' => [true, rsiObThresh , true , 50, rsiOsThresh ]
'Commodity Channel Index (CCI)' => [true, cciUpperBand, false, 0, cciLowerBand]
'Stochastic (Stoch)' => [true, stochUpperBand, false, 0, stochLowerBand]
=> [false, 0., false, 0., 0.]
// Calculation-------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------------- //
// Divergence---------------------------------------------------------------------------------- //
plFound = na(ta.pivotlow (osc, lbL, lbR)) ? false : true
phFound = na(ta.pivothigh(osc, lbL, lbR)) ? false : true
RangeIn_r(cond) =>
bars = ta.barssince(cond == true)
rangeLower <= bars and bars <= rangeUpper
// Regular Bullish = Osc: Higher Low - Price: Lower Low
oscHL = osc[lbR] > ta.valuewhen(plFound, osc[lbR], 1) and RangeIn_r(plFound[1])
priceLL = low[lbR] < ta.valuewhen(plFound, low[lbR], 1)
CondBull = plotBull and priceLL and oscHL and plFound
plot(plFound ? low[lbR] : na, offset=-lbR, title="Regular Bullish", linewidth=2, color=(CondBull ? color.green : na), show_last = oscLookbackLength)
plotshape(CondBull ? low[lbR] : na, offset=-lbR, title="Regular Bullish Label", text=" Bull ", style=shape.labelup, location=location.absolute, color=color.green, textcolor=color.white, show_last = oscLookbackLength)
// Hidden Bullish = Osc: Lower Low - Price: Higher Low
oscLL = osc[lbR] < ta.valuewhen(plFound, osc[lbR], 1) and RangeIn_r(plFound[1])
priceHL = low[lbR] > ta.valuewhen(plFound, low[lbR], 1)
CondHiddenBull = plotHiddenBull and priceHL and oscLL and plFound
plot(plFound ? low[lbR] : na, offset=-lbR, title="Hidden Bullish", linewidth=2, color=(CondHiddenBull ? color.new(color.green, 50) : na), show_last = oscLookbackLength)
plotshape(CondHiddenBull ? low[lbR] : na, offset=-lbR, title="Hidden Bullish Label", text=" H Bull ", style=shape.labelup, location=location.absolute, color=color.green, textcolor=color.white, show_last = oscLookbackLength)
// Regular Bearish = Osc: Lower High - Price: Higher High
oscLH = osc[lbR] < ta.valuewhen(phFound, osc[lbR], 1) and RangeIn_r(phFound[1])
priceHH = high[lbR] > ta.valuewhen(phFound, high[lbR], 1)
CondBear = plotBear and priceHH and oscLH and phFound
plot(phFound ? high[lbR] : na, offset=-lbR, title="Regular Bearish", linewidth=2, color=(CondBear ? color.red : na), show_last = oscLookbackLength)
plotshape(CondBear ? high[lbR] : na, offset=-lbR, title="Regular Bearish Label", text=" Bear ", style=shape.labeldown, location=location.absolute, color=color.red, textcolor=color.white, show_last = oscLookbackLength)
// Hidden Bearish = Osc: Higher High - Price: Lower High
oscHH = osc[lbR] > ta.valuewhen(phFound, osc[lbR], 1) and RangeIn_r(phFound[1])
priceLH = high[lbR] < ta.valuewhen(phFound, high[lbR], 1)
CondHiddenBear = plotHiddenBear and priceLH and oscHH and phFound
plot(phFound ? high[lbR] : na, offset=-lbR, title="Hidden Bearish", linewidth=2, color=(CondHiddenBear ? color.new(color.red, 50) : na), show_last = oscLookbackLength)
plotshape(CondHiddenBear ? high[lbR] : na, offset=-lbR, title="Hidden Bearish Label", text=" H Bear ", style=shape.labeldown, location=location.absolute, color=color.red, textcolor=color.white, show_last = oscLookbackLength)
// Plotting ------------------------------------------------------------------------------------ //
var p_liness = array.new_line()
var p_fillh = array.new_linefill()
var p_histt = array.new_box(0, na)
priceHighest2 = ta.highest(high, oscLookbackLength)
priceLowest2 = ta.lowest (low , oscLookbackLength)
priceChangeRate2 = (priceHighest2 - priceLowest2) / priceHighest2
priceLowest2 := priceLowest2 * (1 - priceChangeRate2 * oscVerticalOffset)
priceHighest2 := priceHighest2 * (1 + priceChangeRate2 * oscVerticalOffset)
oscHighest = ta.highest(osc, oscLookbackLength)
if barstate.islast
if array.size(p_liness) > 0
for i = 1 to array.size(p_liness)
line.delete(array.shift(p_liness))
if array.size(p_histt) > 0
for i = 1 to array.size(p_histt)
box.delete(array.shift(p_histt))
if array.size(p_fillh) > 0
for i = 1 to array.size(p_fillh)
linefill.delete(array.shift(p_fillh))
hight = priceChangeRate2 / oscHight
if plotTresh
obLevel = (oscPlacement == 'Top' ? priceHighest2 : priceLowest2) * (1 + upperBand / oscHighest * hight)
osLevel = (oscPlacement == 'Top' ? priceHighest2 : priceLowest2) * (1 + lowerBand / oscHighest * hight)
array.push(p_liness, line.new(bar_index[oscLookbackLength], obLevel , bar_index, obLevel , xloc.bar_index, extend.none, color.gray, line.style_dashed, 1))
array.push(p_liness, line.new(bar_index[oscLookbackLength], osLevel , bar_index, osLevel , xloc.bar_index, extend.none, color.gray, line.style_dashed, 1))
array.push(p_fillh, linefill.new(array.get(p_liness, 0), array.get(p_liness, 1), ColorFill2))
if plotMidLile
midLevel = (oscPlacement == 'Top' ? priceHighest2 : priceLowest2) * (1 + midLine / oscHighest * hight)
array.push(p_liness, line.new(bar_index[oscLookbackLength], midLevel , bar_index, midLevel , xloc.bar_index, extend.none, color.new(color.gray, 50) ,line.style_dashed, 1))
for BarInd2 = 0 to oscLookbackLength - 1
if array.size(p_liness) < 498
array.push(p_liness, line.new(bar_index[BarInd2], (oscPlacement == 'Top' ? priceHighest2 : priceLowest2) * (1 + osc[BarInd2] / oscHighest * hight),
bar_index[BarInd2 + 1], (oscPlacement == 'Top' ? priceHighest2 : priceLowest2) * (1 + osc[BarInd2 + 1] / oscHighest * hight), xloc.bar_index, extend.none, oscColor, line.style_solid, 1))
array.push(p_liness, line.new(bar_index[BarInd2], (oscPlacement == 'Top' ? priceHighest2 : priceLowest2) * (1 + signal[BarInd2] / oscHighest * hight),
bar_index[BarInd2 + 1], (oscPlacement == 'Top' ? priceHighest2 : priceLowest2) * (1 + signal[BarInd2 + 1] / oscHighest * hight), xloc.bar_index, extend.none, signalColor, line.style_solid, 1))
How to Apply Pine Script in TradingView:
- Open TradingView and log in.
- Navigate to the Pine Script Editor at the bottom of the screen.
- Copy the provided Pine Script code.
- Paste it into the editor and click Save.
- Name the script appropriately, e.g., “All-in-One AlgoPoint.”
- Click Add to Chart to apply the script.
- Customize settings via the indicator panel to match your trading needs.
Key Features of the Script:
- All-in-One Dashboard:
- Comprehensive trading dashboard that displays key market metrics like ATR, RSI, and moving averages.
- Customizable table layout to fit various timeframes and preferences.
- Custom Oscillators and Indicators:
- Supports multiple oscillators, including RSI, Stochastic, and Klinger.
- Includes advanced indicators like Fair Value Gaps (FVG), VWAP, EMA, and Bollinger Bands.
- Advanced Filtering Mechanisms:
- Built-in filters for volatility, trend detection, and ADX-based market conditions.
- Customizable threshold settings to align with individual trading strategies.
- Automated Signal Generation:
- Generates buy/sell signals based on sophisticated algorithms.
- Alerts and notifications for key market events.
- Key Levels and Zones:
- Highlights daily, weekly, and monthly pivot levels.
- Displays supply/demand zones for identifying significant price levels.
- Multi-Feature Framework:
- Incorporates multiple technical features such as RSI, WT, CCI, and ADX.
- Offers a gradient bar color feature to visually represent market trends.
- Customization at Its Core:
- Fully adjustable settings for each indicator and filter.
- Options to display or hide specific elements, ensuring a clean chart layout.
Recommended Usage:
- Multi-Timeframe Analysis:
- Use this script to analyze market trends across multiple timeframes with synchronized dashboards.
- Swing and Scalping Strategies:
- Ideal for both short-term scalping and medium-to-long-term swing trading due to its dynamic signal generation.
- Comprehensive Risk Management:
- Utilize ATR and volatility metrics to determine appropriate stop-loss and take-profit levels.
- Precision Entry and Exit:
- Leverage buy/sell signals and Fair Value Gaps (FVG) to time market entries and exits with precision.
Script Evaluation:
- Functionality: 4.8/5
The script is highly versatile, offering a wide range of features suitable for traders with different styles. Its multi-feature framework is robust, and the customization options provide excellent flexibility. - Ease of Use: 4.5/5
While the dashboard is comprehensive, the complexity of options might overwhelm beginners. However, experienced traders will appreciate the depth. - Accuracy: 4.7/5
The script’s signals are reliable when used with proper filters. It includes detailed settings to fine-tune performance based on market conditions. - Repainting: This script does not repaint, as the signals are calculated using historical and real-time data without adjustments to past values. This ensures the integrity of its output for trading decisions.
- Overall Score: 4.7/5
This script is an excellent tool for technical analysis and trade execution, making it a valuable asset for active traders.
RELATED POSTS
View all