Untitled
unknown
plain_text
2 years ago
134 kB
115
Indexable
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @version=5
//Security
///////////////////////////////////////////////////////////////////////////////////////////////////////////
info = input.bool(true, title="Developer - Aryan Singh",group="Money Moves [Tool Kit Premium]")
_v = input.string("0.1", title="Version", options=["0.1"], group="Money Moves [Tool Kit Premium]")
//User has to agree to have the indi loading on the chart.
var user_consensus = input.string(defval="", title="TYPE 'agree' TO ADD TO CHART. \nTrading involves a risk of loss, and may not be appropriate for every one. Please consider carefully if trading is appropriate for you. Past performance is not indicative of future results. Any and all indicator signals provided by 'Money Moves Algo' are for educational purposes only\nCopyRight - @Money Moves Algo", confirm = true, group="Money Moves [Tool Kit Premium]")
var PassCorrect = false
if user_consensus == "agree"
PassCorrect := true
else
PassCorrect := false
colors = input.string(title='Color Scheme', defval='DARK', options=['DARK', 'LIGHT'] , group="Money Moves [Tool Kit Premium]")
bullcolor = colors == 'DARK' ? #00DBFF : color.rgb(0, 255, 8)
bearcolor = colors == 'DARK' ? #E91E63 : color.rgb(255, 0, 0)
///////////////////////////////////////////////////////////////////////////////////////////////////////////
indicator("Money Moves [Tool Kit Premium]", overlay = true, max_labels_count = 500, max_boxes_count = 500, max_lines_count = 500, max_bars_back = 100)
//
//------------------- Money Move Smc ----------------------//
//
//------------------- Money Move SR ----------------------//
// Get user input
enableSR = input(true, "SR On/Off", group="Money Move [SR]")
strengthSR = input.int(5, "S/R Strength", 1, group="Money Move [SR]")
lineStyle = input.string("Solid", "Line Style", ["Solid", "Dotted", "Dashed"], group="Money Move [SR]")
lineWidth = input.int(1, "S/R Line Width", 1, group="Money Move [SR]")
useZones = input(true, "Zones", group="Money Move [SR]")
useHLZones = input(true, "Strong S/R Zones", group="Money Move [SR]")
expandSR = input(true, "Expand SR", group="Money Move [SR]")
zoneWidth = input.int(2, "Zone Width %", 0, tooltip="it's calculated using % of the distance between highest/lowest in last 300 bars", group="Money Move [SR]")
//
//------------------- Money Move TrendLine ----------------------//
// Get user input
var string GROUP_ATL = "Money Moves [TrendLine V2]"
var bool show_tl = input.bool(false, title="Show TrendLine", tooltip="Shows lower/upper trendlines", group=GROUP_ATL)
var int n = input.int(15, title="Trendline Sensitivity", minval=2, group=GROUP_ATL)
// A Fractal is always a Pivot H/L (but a Pivot H/L is not always a Fractal):
float pivtHigh = ta.pivothigh(n, n)[1]
float PivtLow = ta.pivotlow(n, n)[1]
bool upfract = not na(pivtHigh)
bool downfract = not na(PivtLow)
var string LINE_WIDTH1_STR = "Width 1"
var string LINE_WIDTH2_STR = "Width 2"
// @function : _get_width(), a map {string:int}
_get_width(string str_input) =>
return_int = switch str_input
LINE_WIDTH1_STR => 1
LINE_WIDTH2_STR => 2
return_int
var string subgroup1 = "recent line"
var color ln_col_up = color.new(bearcolor , 0)
var color ln_col_down = color.new(bullcolor , 0)
var int lnwidth_recent = _get_width(input.string(LINE_WIDTH1_STR, options=[LINE_WIDTH1_STR, LINE_WIDTH2_STR], title="", inline=subgroup1, group=GROUP_ATL))
var string subgroup2 = "historical line"
var color ln_col_prev = input.color(color.new(color.gray, 50), title="Historical Line", group=GROUP_ATL, inline=subgroup2)
var int lnwidth_prev = _get_width(input.string(LINE_WIDTH1_STR, options=[LINE_WIDTH1_STR, LINE_WIDTH2_STR], title="", inline=subgroup2, group=GROUP_ATL))
var int max_tl = input.int(1, title="Max pair of lines", maxval=250, minval=1, group=GROUP_ATL)*2
var string _str_extend = input.string("Right", options=["Right", "Both ways"], title="Which way to extend lines", group=GROUP_ATL)
var string str_extend = _str_extend == "Both ways" ? extend.both : extend.right
//
//------------------- Money Moves [Order Blocks] ----------------------//
// Get user input
var bool show_OBls = input.bool(false, title="Show Order Blocks", tooltip="Show lower/upper trendlines" , group = "Money Moves [OrderBlocks]")
length = input.int(5, 'Sensitivity' , minval = 1, group = "Money Moves [OrderBlocks]")
line_style = input.string('Dotted', 'Order Block Line Style' , options = ['Solid', 'Dashed', 'Dotted'] , group = "Money Moves [OrderBlocks]")
line_width = input.int(1, 'Order Block Line Width' , minval = 1 , group = "Money Moves [OrderBlocks]")
mitigation = input.string('Wick', 'Confirmation Type' , options = ['Wick', 'Close'] , group = "Money Moves [OrderBlocks]")
bull_ext_last = input.int(1, 'Bullish OB ' , minval = 1 , inline = 'bull' , group = "Money Moves [OrderBlocks]")
bear_ext_last = input.int(1, 'Bearish OB' , minval = 1 , inline = 'bear' , group = "Money Moves [OrderBlocks]")
bg_bull_css = color.new(bullcolor, 80)
bull_css = bullcolor
bull_avg_css = color.new(bullcolor, 37)
bg_bear_css = color.new(bearcolor, 80)
bear_css = bearcolor
bear_avg_css = color.new(bearcolor, 37)
//-----------------------------------------------------------------------------}
//----------------------------------------}
//Money Moves [EQH/EQL]
//----------------------------------------{
color TRANSP_CSS = #ffffff00
string ModeSmc_TOOLTIP = 'Allows to display historical [EQH/EQL] or only the recent ones'
string STYLE_TOOLTIP = 'Indicator color theme'
string SHOW_EQHL = 'Display equal highs and equal lows on the chart'
string EQHL_BARS = 'Number of bars used to confirm equal highs and equal lows'
string EQHL_THRESHOLD = 'Sensitivity threshold in a range (0, 1) used for the detection of equal highs & lows\n\nLower values will return fewer but more pertinent results'
show_eq = input(false, 'Equal High/Low', group = 'Money Moves [EQH/EQL]', tooltip = SHOW_EQHL)
Mode = input.string( 'Historical', title = "Mode" ,options = ['Historical', 'Present'], group = 'Money Moves [EQH/EQL]', tooltip = ModeSmc_TOOLTIP)
styleSwing = input.string('Colored', title = "Style" , options = ['Colored', 'Monochrome'], group = 'Money Moves [EQH/EQL]', tooltip = STYLE_TOOLTIP)
eq_len = input.int(3, 'Bars Confirmation', minval = 1, group = 'Money Moves [EQH/EQL]', tooltip = EQHL_BARS)
eq_threshold = input.float(0.1, 'Threshold', minval = 0, maxval = 0.5, step = 0.1, group = 'Money Moves [EQH/EQL]', tooltip = EQHL_THRESHOLD)
//
//------------------- Money Move Clear Trend V2 ----------------------//
// Get user input
// Getting inputs (calculation from tradingview)
var bool show_ct = input.bool(true, title="Show Clear Trend V2", tooltip="It Enables And Colour The Bars/Candles According To Real Trend" , group="Money Moves [Clear Trend v2]")
// Getting inputs (calculation from tradingview)
fast_length = input(title='Fast Length', defval=18 , group="Money Moves [Clear Trend v2]")
slow_length = input(title='Slow Length', defval=26 , group="Money Moves [Clear Trend v2]")
src = input(title='Source', defval=close , group="Money Moves [Clear Trend v2]")
signal_length = input.int(title='Signal Smoothing', minval=1, maxval=50, defval=9 , group="Money Moves [Clear Trend v2]")
//------------------- Money Move Over Bought/Sold ----------------------//
// Get user input
len = input.int(14, minval=1, title='Rsi Length', group="Money Moves [Clear Trend v2]")
UpperLenght = input.int(78, minval=1, title='Upper Level' , group="Money Moves [Clear Trend v2]")
LowerLenght = input.int(22, minval=1, title='Lower Level' , group="Money Moves [Clear Trend v2]")
up = ta.rma(math.max(ta.change(src), 0), len)
down = ta.rma(-math.min(ta.change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
RsiFx = rsi > UpperLenght and show_ct and PassCorrect ? #af5820 : rsi < LowerLenght and show_ct and PassCorrect ? #f47e17 : na
barcolor(RsiFx , title = "OB/OS" , editable=false)
sma_source = input(title='Simple MA(Oscillator)', defval=false , group="Money Moves [Clear Trend v2]")
sma_signal = input(title='Simple MA(Signal Line)', defval=false , group="Money Moves [Clear Trend v2]")
//------------------- Money Move [Fibonacci Retracement] ----------------------//
// Get user settings
afibOn = input(false, 'Fibonacci Retracement On / Off', group = "Money Moves [Fibonacci Retracement]")
reverse = input(false, 'Reverse Fib?', group = "Money Moves [Fibonacci Retracement]")
var extendLeft = input.bool(false, 'Extend Left | Extend Right', inline='Extend Lines', group = "Money Moves [Fibonacci Retracement]")
var extendRight = input.bool(false, '', inline='Extend Lines', group = "Money Moves [Fibonacci Retracement]")
prices = input(false, 'Show Prices?', group = "Money Moves [Fibonacci Retracement]")
levels = input.bool(true, 'Show Levels?', inline='Levels', group = "Money Moves [Fibonacci Retracement]")
levelsFormat = input.string('Values', '', options=['Values', 'Percent'], inline='Levels', group = "Money Moves [Fibonacci Retracement]")
labelsPosition = input.string('Right', 'Fib Label Position', options=['Left', 'Right'], group = "Money Moves [Fibonacci Retracement]")
threshold_multiplier = input(3, 'Fibonacci Deviation', group = "Money Moves [Fibonacci Retracement]")
//vwap
showVwap = input (true, title="Show VWAP on chart", group="Money Moves [VWAP]")
hideonDWM = input(false, title="Hide VWAP on 1D or Above", group="Money Moves [VWAP]")
var anchor = input.string(defval = "Session", title="Anchor Period",
options=["Session", "Week", "Month", "Quarter", "Year", "Decade", "Century", "Earnings", "Dividends", "Splits"], group="Money Moves [VWAP]")
srcVWAP = input(title = "Source", defval = hlc3, group="Money Moves [VWAP]")
offset = input(0, title="Offset", group="Money Moves [VWAP]")
//------------------- Money Move [Trend Dashboard] ----------------------//
// Get user settings
showDashboard = input(true, "Show Trend Dashboard", group="Money Moves [Trend Dashboard]")
locationDashboard = input.string("Bottom Right", "Table Location", ["Top Right", "Middle Right", "Bottom Right", "Top Center", "Middle Center", "Bottom Center", "Top Left", "Middle Left", "Bottom Left"], group="Money Moves [Trend Dashboard]")
tableTextColor = input(color.white, "Table Text Color", group="Money Moves [Trend Dashboard]")
tableBgColor = input(#2A2A2A, "Table Background Color", group="Money Moves [Trend Dashboard]")
sizeDashboard = input.string("Small", "Table Size", ["Large", "Normal", "Small", "Tiny"], group="Money Moves [Trend Dashboard]")
//------------------- Money Moves [Session] ----------------------//
//Timezones
show_dash = input(false, 'Show Dashboard' , group = 'Money Moves [Sessions Dashboard]')
use_exchange = input(true, 'Use Exchange Timezone' , group = 'Money Moves [Sessions Dashboard]')
tz_incr = input.int(0, 'UTC (+/-)' , group = 'Money Moves [Sessions Dashboard]')
tableTextColorSession = input(color.white, "Table Text Color", group="Money Moves [Sessions Dashboard]")
tableBgColorSession = input(#2A2A2A, "Table Background Color", group="Money Moves [Sessions Dashboard]")
dash_loc = input.string('Top Right', 'Dashboard Location' , options = ['Top Right', 'Bottom Right', 'Bottom Left'] , group = 'Money Moves [Sessions Dashboard]')
text_size = input.string('Small', 'Dashboard Size' , options = ['Tiny', 'Small', 'Normal'] , group = 'Money Moves [Sessions Dashboard]')
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------- Money Move Volume Profile ----------------------//
// Get user input
var bool show_Vp = input.bool(false, title="Show Volume Profile", tooltip="Show Money Moves [Volume Profile]" , group="Money Moves [Volume Profile]")
sizeBlock = input.int (200 , "Bars in profile block" , 10, 500 , group="Money Moves [Volume Profile]")
slices = input.int (40 , "Slices" , 1, 40 , group="Money Moves [Volume Profile]")
rowWidth = input.int (100 , "Visual row width" , 10 , group="Money Moves [Volume Profile]")
showPeaks = input (true , "Show peaks" , group="Money Moves [Volume Profile]")
customSrcVol = input (false , "Use custom volume source" , group="Money Moves [Volume Profile]")
srcVolSym = input.symbol("" , "Custom volume source symbol" , group="Money Moves [Volume Profile]")
colBounds = input.color (color.new(color.white, 20), "" , inline="COL1", group="Money Moves [Volume Profile]")
colProfile = input.color (color.new(#7e7e7e, 15), "" , inline="COL1", group="Money Moves [Volume Profile]")
colPeak = input.color (color.new(color.white, 20), "" , inline="COL1", group="Money Moves [Volume Profile]")
//
//------------------- Money Move Imbalance ----------------------//
// Get user input
_bullImb = input.bool(true, "Show Bullish Imbalance", group="Money Moves [Imbalances]", tooltip="Show Bullish Imbalances")
_bullCol = color.new(bullcolor , 60)
_bullColBorder = color.new(bullcolor , 75)
_bearImb = input.bool(true, "Show Bearish Imbalance", group="Money Moves [Imbalances]", tooltip="Show Bearish Imbalances")
_bearCol = color.new(bearcolor , 60)
_bearColBorder = color.new(bearcolor , 75)
_removeOld = input.bool(true, "Remove Mitigated", group="Money Moves [Imbalances]", tooltip="Option to either keep or remove the mitigate imbalances")
_width = input.int(2, "Box Width", minval=0, maxval=500, group="Money Moves [Imbalances]", tooltip="Choose the width of the box")
_totalCount = input.int(20, "Total Shown Imbalances", group="Money Moves [Imbalances]", tooltip="The total amount of imbalances allowed to be displayed on the chart")
//------------------- Money Move Big Move ----------------------//
// Get user input
var bool show_Bm = input.bool(false, title="Show BigMove", tooltip="Shows Before A Huge Volume Enters The Market" , group = "Money Moves [BigMove]")
spacing = input(7 , title = "Spacing", group = "Money Moves [BigMove]")
length7 = input.int(7, title = "Length 1", minval=1, group = "Money Moves [BigMove]")
length14 = input.int(14, title = "Length 2", minval=1, group = "Money Moves [BigMove]")
length28 = input.int(28, title = "Length 3", minval=1, group = "Money Moves [BigMove]")
//------------------- Money Move Kill Zones ----------------------//
// Get user input
displayZonesLimit = input.int(title='Max Timeframe To Display (Minutes)', defval=60, minval=1, maxval=1440 , group = "Money Moves [Kill Zones]")
//ASIA
asiashow = input(false, title='Display Asia Range', group="Money Moves [Kill Zones]" )
asiashowdeviations = input(false, title='Display Asia Range Deviations', group="Money Moves [Kill Zones]")
asiadeviations = input.int(title='Asia Deviations', defval=2, minval=1, group="Money Moves [Kill Zones]")
asiacolor = input(color.new(#00aad4, 70), 'Asia Range Color', group="Money Moves [Kill Zones]")
asia = input.session(title='Asia Session', defval='1900-0001', group="Money Moves [Kill Zones]")
//LONDON OPEN
loshow = input(false, title='Display London Open', group="Money Moves [Kill Zones]")
locolor = input(color.new(color.gray, 50), 'London Open Range Color', group="Money Moves [Kill Zones]")
lo = input.session(title='London Open Session', defval='0200-0600', group="Money Moves [Kill Zones]")
//LONDON CLOSE
lcshow = input(false, title='Display London Close', group="Money Moves [Kill Zones]")
lccolor = input(color.new(color.white, 50), 'London Close Range Color', group="Money Moves [Kill Zones]")
lc = input.session(title='London Close Session', defval='1000-1300', group="Money Moves [Kill Zones]")
//NY OPEN
nyshow = input(false, title='Display New York Open' , group = "Money Moves [Kill Zones]")
nycolor = input(color.new(color.gray, 50), 'New York Open Range Color', group="Money Moves [Kill Zones]")
ny = input.session(title='New York Open Session', defval='0700-1000', group="Money Moves [Kill Zones]")
//NY CLOSE
nycshow = input(false, title='Display New York Close', group="Money Moves [Kill Zones]")
nyccolor = input(color.new(color.gray, 50), 'New York Close Range Color', group="Money Moves [Kill Zones]")
nyc = input.session(title='New York Close Session', defval='1400-1600', group="Money Moves [Kill Zones]")
// Killzone End
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Money Moves Misc
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//------------------- Money Moves [Reversals] ----------------------//
showReversal = input(true, "Show Reversals", group="Money Moves [Reversals]")
//
//------------------- Money Moves [Channel Balance] ----------------------//
// Get user input
channelBal = input.bool(false, " Show Channel Balance" , tooltip = "Enable Money Moves [Channel Balance] " , group = "Money Moves [Channel Balance]")
channelSensi = input.float(1.0, "Channel Balance Sensitivity", 0.5, 3.0 , group="Money Moves [Channel Balance]")
//
//------------------- [Money Moves [Divergence] ----------------------//
//Inputs
plotRealDiv = input(title='Show Divergence', defval=false , group = "Money Moves [Divergence]")
plotBear = plotRealDiv
plotHiddenDiv = input(title='Show Hidden Divergence', defval=false , group = "Money Moves [Divergence]")
plotHiddenBear = plotHiddenDiv
n1 = input(10, 'Divergence Channel Length' , group = "Money Moves [Divergence]")
n2 = input(5, 'Divergence Average Length' , group = "Money Moves [Divergence]")
//
//------------------- Money Moves Trend Regression Channel ----------------------//
// Get user input
autoRc = input.bool(false, "Show Trend Regression Channel" , group = "Money Moves [Trend Regression Channel]" )
TRCP = input.float(1, "Trend Regression Period", 1, 5 , group = "Money Moves [Trend Regression Channel]")
//
//------------------- Money Moves [Bollinger Band] ----------------------//
// Get user settings
showBB = input(false, title='Show Bollinger Band' , group = 'Money Moves [Bollinger Band]')
srcBB = input(close, title='Source' , group = 'Money Moves [Bollinger Band]')
sma_bb_len = input.int(20, minval=0, title='BB Length' , group = 'Money Moves [Bollinger Band]')
bbStdDev = input.float(2, minval=0.1, title='BB Standard Deviation' , group = 'Money Moves [Bollinger Band]')
//
//CALCULATIONS
//
// Money Moves [SR]
// Functions
percWidth(len, perc) => (ta.highest(len) - ta.lowest(len)) * perc / 100
// Get components
rb = 10
prd = 284
ChannelW = 10
label_loc = 55
style = lineStyle == "Solid" ? line.style_solid : lineStyle == "Dotted" ? line.style_dotted : line.style_dashed
ph = ta.pivothigh(rb, rb)
pl = ta.pivotlow (rb, rb)
sr_levels = array.new_float(21, na)
prdhighest = ta.highest(prd)
prdlowest = ta.lowest(prd)
cwidth = percWidth(prd, ChannelW)
zonePerc = percWidth(300, zoneWidth)
aas = array.new_bool(41, true)
u1 = 0.0, u1 := nz(u1[1])
d1 = 0.0, d1 := nz(d1[1])
highestph = 0.0, highestph := highestph[1]
lowestpl = 0.0, lowestpl := lowestpl[1]
var sr_levs = array.new_float(21, na)
label hlabel = na, label.delete(hlabel[1])
label llabel = na, label.delete(llabel[1])
var sr_lines = array.new_line(21, na)
var sr_linesH = array.new_line(21, na)
var sr_linesL = array.new_line(21, na)
var sr_linesF = array.new_linefill(21, na)
var sr_labels = array.new_label(21, na)
if ph or pl
for x = 0 to array.size(sr_levels) - 1
array.set(sr_levels, x, na)
highestph := prdlowest
lowestpl := prdhighest
countpp = 0
for x = 0 to prd
if na(close[x])
break
if not na(ph[x]) or not na(pl[x])
highestph := math.max(highestph, nz(ph[x], prdlowest), nz(pl[x], prdlowest))
lowestpl := math.min(lowestpl, nz(ph[x], prdhighest), nz(pl[x], prdhighest))
countpp += 1
if countpp > 40
break
if array.get(aas, countpp)
upl = (ph[x] ? high[x + rb] : low[x + rb]) + cwidth
dnl = (ph[x] ? high[x + rb] : low[x + rb]) - cwidth
u1 := countpp == 1 ? upl : u1
d1 := countpp == 1 ? dnl : d1
tmp = array.new_bool(41, true)
cnt = 0
tpoint = 0
for xx = 0 to prd
if na(close[xx])
break
if not na(ph[xx]) or not na(pl[xx])
chg = false
cnt += 1
if cnt > 40
break
if array.get(aas, cnt)
if not na(ph[xx])
if high[xx + rb] <= upl and high[xx + rb] >= dnl
tpoint += 1
chg := true
if not na(pl[xx])
if low[xx + rb] <= upl and low[xx + rb] >= dnl
tpoint += 1
chg := true
if chg and cnt < 41
array.set(tmp, cnt, false)
if tpoint >= strengthSR
for g = 0 to 40 by 1
if not array.get(tmp, g)
array.set(aas, g, false)
if ph[x] and countpp < 21
array.set(sr_levels, countpp, high[x + rb])
if pl[x] and countpp < 21
array.set(sr_levels, countpp, low[x + rb])
// Plot
var line highest_ = na, line.delete(highest_)
var line lowest_ = na, line.delete(lowest_)
var line highest_fill1 = na, line.delete(highest_fill1)
var line highest_fill2 = na, line.delete(highest_fill2)
var line lowest_fill1 = na, line.delete(lowest_fill1)
var line lowest_fill2 = na, line.delete(lowest_fill2)
hi_col = close >= highestph ? bullcolor : bearcolor
lo_col = close >= lowestpl ? bullcolor : bearcolor
if enableSR and PassCorrect
highest_ := line.new(bar_index - 311, highestph, bar_index, highestph, xloc.bar_index, expandSR ? extend.both : extend.right, hi_col, style, lineWidth)
lowest_ := line.new(bar_index - 311, lowestpl , bar_index, lowestpl , xloc.bar_index, expandSR ? extend.both : extend.right, lo_col, style, lineWidth)
if useHLZones and PassCorrect
highest_fill1 := line.new(bar_index - 311, highestph + zonePerc, bar_index, highestph + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
highest_fill2 := line.new(bar_index - 311, highestph - zonePerc, bar_index, highestph - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill1 := line.new(bar_index - 311, lowestpl + zonePerc , bar_index, lowestpl + zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
lowest_fill2 := line.new(bar_index - 311, lowestpl - zonePerc , bar_index, lowestpl - zonePerc , xloc.bar_index, expandSR ? extend.both : extend.right, na)
linefill.new(highest_fill1, highest_fill2, color.new(hi_col, 80))
linefill.new(lowest_fill1 , lowest_fill2 , color.new(lo_col, 80))
if ph or pl
for x = 0 to array.size(sr_lines) - 1
array.set(sr_levs, x, array.get(sr_levels, x))
for x = 0 to array.size(sr_lines) - 1
line.delete(array.get(sr_lines, x))
line.delete(array.get(sr_linesH, x))
line.delete(array.get(sr_linesL, x))
linefill.delete(array.get(sr_linesF, x))
if array.get(sr_levs, x) and enableSR and PassCorrect
line_col = close >= array.get(sr_levs, x) ? bullcolor : bearcolor
array.set(sr_lines, x, line.new(bar_index - 355, array.get(sr_levs, x), bar_index, array.get(sr_levs, x), xloc.bar_index, expandSR ? extend.both : extend.right, line_col, style, lineWidth))
if useZones and PassCorrect
array.set(sr_linesH, x, line.new(bar_index - 355, array.get(sr_levs, x) + zonePerc, bar_index, array.get(sr_levs, x) + zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesL, x, line.new(bar_index - 355, array.get(sr_levs, x) - zonePerc, bar_index, array.get(sr_levs, x) - zonePerc, xloc.bar_index, expandSR ? extend.both : extend.right, na))
array.set(sr_linesF, x, linefill.new(array.get(sr_linesH, x), array.get(sr_linesL, x), color.new(line_col, 80)))
for x = 0 to array.size(sr_labels) - 1
label.delete(array.get(sr_labels, x))
if array.get(sr_levs, x) and enableSR and PassCorrect
lab_loc = close >= array.get(sr_levs, x) ? label.style_label_up : label.style_label_down
lab_col = close >= array.get(sr_levs, x) ? bullcolor : bearcolor
array.set(sr_labels, x, label.new(bar_index + label_loc, array.get(sr_levs, x), str.tostring(math.round_to_mintick(array.get(sr_levs, x))), color=lab_col , textcolor=#000000, style=lab_loc))
hlabel := enableSR and PassCorrect ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, highestph, "Strong Resistance : " + str.tostring(highestph), color=hi_col, textcolor=#000000, style=label.style_label_down) : na
llabel := enableSR and PassCorrect ? label.new(bar_index + label_loc + math.round(math.sign(label_loc)) * 20, lowestpl , "Strong Support: " + str.tostring(lowestpl) , color=lo_col, textcolor=#000000, style=label.style_label_up ) : na
// IMBALANCES
// Variables
var bearBox = array.new_box()
var bullBox = array.new_box()
// Top Imbalance
bearImb = low[2] <= open[1] and high >= close[1]
bearGap = low[1] > high
bearImbSize = low[2] - high
if _bearImb and PassCorrect and bearImb and bearImbSize > 0 or bearGap
n = bearGap ? 1 : 2
array.push(bearBox, box.new(left=bar_index[1], top=low[n], right=bar_index+_width, bottom=high, bgcolor=_bearCol, border_color=_bearColBorder))
// Bottom Imbalance
bullImb = high[2] >= open[1] and low <= close[1]
bullImbSize = low - high[2]
bullGap = high[1] < low
if _bullImb and PassCorrect and bullImb and bullImbSize > 0 or bullGap
n = bullGap ? 1 : 2
array.push(bullBox, box.new(left=bar_index[1], top=low, right=bar_index+_width, bottom=high[n], bgcolor=_bullCol, border_color=_bullColBorder))
// Remove Mitigated
remove_mitigate(arrayType, pos) =>
if array.size(arrayType) > 0
for i = array.size(arrayType) - 1 to 0 by 1
sbox = array.get(arrayType, i)
top = box.get_top(sbox)
bot = box.get_bottom(sbox)
pass = pos =="Bull" ? low < bot + ((top - bot)/2) : high > top - ((top - bot)/2)
if pass
txt = pos =="Bull" ? "Bullish" : "Bearish"
alert("Price (" + str.tostring(close) + ") inside "+txt+" Imbalance", alert.freq_once_per_bar)
if _removeOld
array.remove(arrayType, i)
box.delete(sbox)
// Run Functions
remove_mitigate(bullBox, "Bull")
remove_mitigate(bearBox, "Bear")
// Remove Older Imb
if array.size(bearBox) > _totalCount
b = array.shift(bearBox)
box.delete(b)
if array.size(bullBox) > _totalCount
b = array.shift(bullBox)
box.delete(b)
// Clear Trend V2
// Calculating (calculation from tradingview)
fast_ma = sma_source ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
bar_Teal_PowerfullBull = hist > 0 and hist > hist[1]
bar_blue = hist > 0 and hist < hist[1]
bar_dark_o = hist < 0 and hist < hist[1]
bar_o = hist < 0 and hist > hist[1]
barcolor(bar_Teal_PowerfullBull and show_ct and PassCorrect ? #84ffd8 : na, title='Teal' , editable=false)
barcolor(bar_blue and show_ct and PassCorrect ? #39c9e0 : na, title='Blue' , editable=false)
barcolor(bar_dark_o and show_ct and PassCorrect ? #8b018d : na, title='Purple' , editable=false)
barcolor(bar_o and show_ct and PassCorrect ? #ee81f1 : na, title='Magenta' , editable=false)
// Part 1 SMA channel
// Trend Indicator 1 20/20 SMA channel uses the sma of the high (last 20 candles) and the low. Got that from a tradeciety youtube channel (great guys, not affiliated)
// Uptrend closing above channel, Downtredn closing below channel
//Live Trend Channel
//len2 = input(20, minval=1, title="SMA #20")
////src2 = input(high, title="SMA Source #2")
//out2 = sma(src2, len2)
//x1 =plot(out2, title="SMA #20", color=color.black, linewidth = 1)
//src3 = input(low, title="SMA Source #2")
//out3 = sma(src3, len2)
//x2 = plot(out3, title="SMA #20", color=color.black, linewidth = 1)
//fill(x1, x2, color = color.purple)
// Reversals Signal
Reversal = ta.rsi(close, 21)
rsiOb = Reversal > 70 and Reversal > ta.ema(Reversal, 10)
rsiOs = Reversal < 30 and Reversal < ta.ema(Reversal, 10)
// Colors
cyan = bullcolor, cyan30 = color.new(cyan, 70)
pink = bearcolor, pink30 = color.new(pink, 70)
red = #FF5252, red30 = color.new(red , 70)
// Plot
plotshape(showReversal and PassCorrect and rsiOs, "Bullish Reversal" , shape.diamond, location.belowbar, cyan30, size=size.tiny , offset = 1)
plotshape(showReversal and PassCorrect and rsiOb, "Bearish Reversal", shape.diamond, location.abovebar, pink30, size=size.tiny , offset = 1 )
//////
////
///
//
// Money Moves [Trend Dashboard]
source = close
ema = ta.ema(close, 144)
emaBull = close > ema
f_chartTfInMinutes() =>
float _resInMinutes = timeframe.multiplier * (
timeframe.isseconds ? 1 :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 60. * 24 :
timeframe.isweekly ? 60. * 24 * 7 :
timeframe.ismonthly ? 60. * 24 * 30.4375 : na)
equal_tf(res) => str.tonumber(res) == f_chartTfInMinutes() and not timeframe.isseconds
higher_tf(res) => str.tonumber(res) > f_chartTfInMinutes() or timeframe.isseconds
too_small_tf(res) => (timeframe.isweekly and res=="1") or (timeframe.ismonthly and str.tonumber(res) < 10)
securityNoRep1(sym, res, src) =>
bool bull_ = na
bull_ := equal_tf(res) ? src : bull_
bull_ := higher_tf(res) ? request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on) : bull_
bull_array = request.security_lower_tf(syminfo.tickerid, higher_tf(res) ? str.tostring(f_chartTfInMinutes()) + (timeframe.isseconds ? "S" : "") : too_small_tf(res) ? (timeframe.isweekly ? "3" : "10") : res, src)
if array.size(bull_array) > 1 and not equal_tf(res) and not higher_tf(res)
bull_ := array.pop(bull_array)
array.clear(bull_array)
bull_
TF1Bull = securityNoRep1(syminfo.tickerid, "1" , emaBull)
TF3Bull = securityNoRep1(syminfo.tickerid, "3" , emaBull)
TF5Bull = securityNoRep1(syminfo.tickerid, "5" , emaBull)
TF15Bull = securityNoRep1(syminfo.tickerid, "15" , emaBull)
TF30Bull = securityNoRep1(syminfo.tickerid, "30" , emaBull)
TF60Bull = securityNoRep1(syminfo.tickerid, "60" , emaBull)
TF120Bull = securityNoRep1(syminfo.tickerid, "120" , emaBull)
TF240Bull = securityNoRep1(syminfo.tickerid, "240" , emaBull)
TF480Bull = securityNoRep1(syminfo.tickerid, "480" , emaBull)
TFDBull = securityNoRep1(syminfo.tickerid, "1440", emaBull)
//
var dashboard_loc = locationDashboard == "Top Right" ? position.top_right : locationDashboard == "Middle Right" ? position.middle_right : locationDashboard == "Bottom Right" ? position.bottom_right : locationDashboard == "Top Center" ? position.top_center : locationDashboard == "Middle Center" ? position.middle_center : locationDashboard == "Bottom Center" ? position.bottom_center : locationDashboard == "Top Left" ? position.top_left : locationDashboard == "Middle Left" ? position.middle_left : position.bottom_left
var dashboard_size = sizeDashboard == "Large" ? size.large : sizeDashboard == "Normal" ? size.normal : sizeDashboard == "Small" ? size.small : size.tiny
var dashboard = showDashboard and PassCorrect ? table.new(dashboard_loc, 2, 15, tableBgColor, #000000, 1, tableBgColor, 1) : na
dashboard_cell(column, row, txt, signal=false) => table.cell(dashboard, column, row, txt, 0, 0, signal ? #ffffff : tableTextColor, text_size=dashboard_size)
dashboard_cell_bg(column, row, col) => table.cell_set_bgcolor(dashboard, column, row, col)
if barstate.islast and showDashboard and PassCorrect
dashboard_cell(0, 0 , "Money Moves")
dashboard_cell(0, 2 , "Current Trend")
dashboard_cell(0, 3 , "Volume")
dashboard_cell(0, 4 , "Timeframe")
dashboard_cell(0, 5 , "1 min:")
dashboard_cell(0, 6 , "3 min:")
dashboard_cell(0, 7 , "5 min:")
dashboard_cell(0, 8 , "15 min:")
dashboard_cell(0, 9 , "30 min:")
dashboard_cell(0, 10, "1 H:")
dashboard_cell(0, 11, "2 H:")
dashboard_cell(0, 12, "4 H:")
dashboard_cell(0, 13, "8 H:")
dashboard_cell(0, 14, "Daily:")
dashboard_cell(1, 0 , "V.1")
dashboard_cell(1, 2 , emaBull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 2, emaBull ? bullcolor : bearcolor)
dashboard_cell(1, 3 , str.tostring(volume))
dashboard_cell(1, 4 , "Trends")
dashboard_cell(1, 5 , TF1Bull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 5 , TF1Bull ? bullcolor : bearcolor)
dashboard_cell(1, 6 , TF3Bull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 6 , TF3Bull ? bullcolor : bearcolor)
dashboard_cell(1, 7 , TF5Bull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 7 , TF5Bull ? bullcolor : bearcolor)
dashboard_cell(1, 8 , TF15Bull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 8 , TF15Bull ? bullcolor : bearcolor)
dashboard_cell(1, 9 , TF30Bull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 9 , TF30Bull ? bullcolor : bearcolor)
dashboard_cell(1, 10, TF60Bull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 10, TF60Bull ? bullcolor : bearcolor)
dashboard_cell(1, 11, TF120Bull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 11, TF120Bull ? bullcolor : bearcolor)
dashboard_cell(1, 12, TF240Bull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 12, TF240Bull ? bullcolor : bearcolor)
dashboard_cell(1, 13, TF480Bull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 13, TF480Bull ? bullcolor : bearcolor)
dashboard_cell(1, 14, TFDBull ? "Bullish" : "Bearish", true), dashboard_cell_bg(1, 14, TFDBull ? bullcolor : bearcolor)
/// Money Moves [TrendLine V2]
// Inputs:
// {
// Recent fractals.
var float recent_dn1 = low, var int i_recent_dn1 = bar_index
var float recent_up1 = high, var int i_recent_up1 = bar_index
var float recent_dn2 = low, var int i_recent_dn2 = bar_index
var float recent_up2 = high, var int i_recent_up2 = bar_index
// Array of lines, newest elements inserted to front.
var line[] arr_ln_up = array.new_line()
var line[] arr_ln_dn = array.new_line()
// @function cleanup()
// @returns void : To delete excess lines and assign new color to historical lines.
cleanup(line[] arr) =>
if array.size(arr) > 1
line.set_color(array.get(arr, 1), ln_col_prev)
line.set_width(array.get(arr, 1), lnwidth_prev)
while array.size(arr) > math.floor(max_tl/2)
line.delete(array.pop(arr))
// @function : draw upper trendline
_draw_upper_TL() =>
ln_up = line.new(i_recent_up2, recent_up2, i_recent_up1, recent_up1, xloc.bar_index,
str_extend, color=ln_col_up, style=line.style_solid, width=lnwidth_recent)
array.unshift(arr_ln_up, ln_up)
cleanup(arr_ln_up)
// @function : draw lower trendline
_draw_lower_TL() =>
ln_dn = line.new(i_recent_dn2, recent_dn2, i_recent_dn1, recent_dn1, xloc.bar_index,
str_extend, color=ln_col_down, style=line.style_solid, width=lnwidth_recent)
array.unshift(arr_ln_dn, ln_dn)
cleanup(arr_ln_dn)
// Checking for fractals & Drawing trendlines
if downfract and show_tl and PassCorrect
recent_dn2:=recent_dn1, i_recent_dn2:=i_recent_dn1
recent_dn1:=low[n+1], i_recent_dn1 := bar_index-n-1
_draw_lower_TL()
if upfract and show_tl and PassCorrect
recent_up2:=recent_up1, i_recent_up2:=i_recent_up1
recent_up1:=high[n+1], i_recent_up1 := bar_index-n-1
_draw_upper_TL()
// PivtLowotting fractals
bool hh = not na(pivtHigh) and recent_up1 > recent_up2 ? high[n+1] : na
bool lh = not na(pivtHigh) and recent_up1 < recent_up2 ? high[n+1] : na
bool hl = not na(PivtLow) and recent_dn1 > recent_dn2 ? low[n+1] : na
bool ll = not na(PivtLow) and recent_dn1 < recent_dn2 ? low[n+1] : na
// //
//------------------- Money Moves [Divergence] ----------------------//
ap = ohlc4
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)
wt1 = tci
wt2 = ta.sma(wt1, 4)
//divergence
DivLen= n1
DivSrc= ohlc4
lbR = 2
lbL = 8
rangeUpper = 100
rangeLower = 2
bearColor = color.new(bearcolor, 0)
bullColor = color.new(bullcolor, 0)
hiddenBullColor = color.new(color.blue, 0)
hiddenBearColor = color.new(color.yellow, 0)
textColor = color.new(color.white, 0)
noneColor = color.new(color.white, 100)
osc = wt1
plFound = na(ta.pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(ta.pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
bars = ta.barssince(cond == true)
rangeLower <= bars and bars <= rangeUpper
//------------------------------------------------------------------------------
// Regular Bullish
// Osc: Higher Low
oscHL = osc[lbR] > ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])
// Price: Lower Low
priceLL = low[lbR] < ta.valuewhen(plFound, low[lbR], 1)
bullCond = plotRealDiv and priceLL and oscHL and plFound and PassCorrect
//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low
oscLL = osc[lbR] < ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])
// Price: Higher Low
priceHL = low[lbR] > ta.valuewhen(plFound, low[lbR], 1)
hiddenBullCond = plotHiddenDiv and priceHL and oscLL and plFound
//------------------------------------------------------------------------------
// Regular Bearish
// Osc: Lower High
oscLH = osc[lbR] < ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])
// Price: Higher High
priceHH = high[lbR] > ta.valuewhen(phFound, high[lbR], 1)
bearCond = plotBear and priceHH and oscLH and phFound and PassCorrect
//------------------------------------------------------------------------------
// Hidden Bearish
// Osc: Higher High
oscHH = osc[lbR] > ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])
// Price: Lower High
priceLH = high[lbR] < ta.valuewhen(phFound, high[lbR], 1)
hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound
//Pivot Points
//plots
plotshape(hiddenBearCond, title='Hidden Bear Divergence', location=location.abovebar, style=shape.labeldown, size=size.tiny, text='Divergence Down', textcolor=color.white, color=color.new(color.orange, 60) , editable=false)
plotshape(bearCond, title='Bear Divergence', location=location.abovebar, style=shape.labeldown, text='Divergence Down', textcolor=color.white, size=size.tiny, color=color.new(bearcolor, 60) , editable=false)
plotshape(hiddenBullCond, title='Hidden Bull Divergence', location=location.belowbar, style=shape.labelup, text='Divergence Up', textcolor=color.white, size=size.tiny, color=color.new(color.aqua, 60), editable=false )
plotshape(bullCond, title='Bull Divergence', location=location.belowbar, style=shape.labelup, text='Divergence Up', textcolor=color.white, size=size.tiny, color=color.new(bullcolor, 60) , editable=false )
// Money Moves [Channel Balance]
// Get Components
ocAvg = math.avg(open, close)
sma1 = ta.sma(close, 5 )
sma2 = ta.sma(close, 6)
sma3 = ta.sma(close, 7)
sma4 = ta.sma(close, 8)
sma5 = ta.sma(close, 9)
sma6 = ta.sma(close, 10)
sma7 = ta.sma(close, 11)
sma8 = ta.sma(close, 12)
sma9 = ta.sma(close, 13)
sma10 = ta.sma(close, 14)
sma11 = ta.sma(close, 15)
sma12 = ta.sma(close, 16)
sma13 = ta.sma(close, 17)
sma14 = ta.sma(close, 18)
sma15 = ta.sma(close, 19)
sma16 = ta.sma(close, 20)
[middleKC1, upperKC1, lowerKC1] = ta.kc(close, 80, 10.5 * channelSensi)
[middleKC2, upperKC2, lowerKC2] = ta.kc(close, 80, 9.5 * channelSensi)
[middleKC3, upperKC3, lowerKC3] = ta.kc(close, 80, 8 * channelSensi)
[middleKC4, upperKC4, lowerKC4] = ta.kc(close, 80, 3 * channelSensi)
// Colors
cyan1 = color.rgb(0, 196, 226), cyan2 = bullcolor
pink1 = #bd104a, pink2 = bearcolor
// Plots
k1 = plot(ta.ema(upperKC1, 50), "", na, editable=false)
k2 = plot(ta.ema(upperKC2, 50), "", na, editable=false)
k3 = plot(ta.ema(upperKC3, 50), "", na, editable=false)
k4 = plot(ta.ema(upperKC4, 50), "", na, editable=false)
k5 = plot(ta.ema(lowerKC4, 50), "", na, editable=false)
k6 = plot(ta.ema(lowerKC3, 50), "", na, editable=false)
k7 = plot(ta.ema(lowerKC2, 50), "", na, editable=false)
k8 = plot(ta.ema(lowerKC1, 50), "", na, editable=false)
fill(k1, k2, channelBal and PassCorrect ? color.new(pink2, 40) : na, editable=false)
fill(k2, k3, channelBal and PassCorrect ? color.new(pink2, 65) : na, editable=false)
fill(k3, k4, channelBal and PassCorrect ? color.new(pink2, 90) : na, editable=false)
fill(k5, k6, channelBal and PassCorrect ? color.new(cyan2, 90) : na, editable=false)
fill(k6, k7, channelBal and PassCorrect ? color.new(cyan2, 65) : na, editable=false)
fill(k7, k8, channelBal and PassCorrect ? color.new(cyan2, 40) : na, editable=false)
//------------------- Money Moves [Sessions] ----------------------//
//------------------------------------------------------------------------------
//Settings
//-----------------------------------------------------------------------------{
//Session A
show_sesa = true
sesa_txt = 'New York'
sesa_ses = '1300-2200'
//Session B
show_sesb = true
sesb_txt = 'London'
sesb_ses = '0700-1600'
//Session C
show_sesc = true
sesc_txt = 'Tokyo'
sesc_ses = '0000-0900'
//Session D
show_sesd = true
sesd_txt = 'Sydney'
sesd_ses = '2100-0600'
//-----------------------------------------------------------------------------}
//Sessions
//-----------------------------------------------------------------------------{
tf = timeframe.period
var tz = use_exchange ? syminfo.timezone :
str.format('UTC{0}{1}', tz_incr >= 0 ? '+' : '-', math.abs(tz_incr))
is_sesa = math.sign(nz(time(tf, sesa_ses, tz)))
is_sesb = math.sign(nz(time(tf, sesb_ses, tz)))
is_sesc = math.sign(nz(time(tf, sesc_ses, tz)))
is_sesd = math.sign(nz(time(tf, sesd_ses, tz)))
//-----------------------------------------------------------------------------}
//Dashboard
//-----------------------------------------------------------------------------{
var table_position = dash_loc == 'Bottom Left' ? position.bottom_left
: dash_loc == 'Top Right' ? position.top_right
: position.bottom_right
var table_size = text_size == 'Tiny' ? size.tiny
: text_size == 'Small' ? size.small
: size.normal
var tb = table.new(table_position, 5, 6 , bgcolor = tableBgColorSession , border_color = #000000 , border_width = 1 , frame_color = #000000 , frame_width = 1)
if barstate.isfirst and show_dash and PassCorrect
table.cell(tb, 0, 0, 'Money Moves [Sessions]', text_color = color.white, text_size = table_size)
table.merge_cells(tb, 0, 0, 1, 0)
table.cell(tb, 0, 2, sesa_txt, text_color = tableTextColorSession, text_size = table_size)
table.cell(tb, 0, 3, sesb_txt, text_color = tableTextColorSession, text_size = table_size)
table.cell(tb, 0, 4, sesc_txt, text_color = tableTextColorSession, text_size = table_size)
table.cell(tb, 0, 5, sesd_txt, text_color = tableTextColorSession, text_size = table_size)
if barstate.islast and show_dash and PassCorrect
table.cell(tb, 1, 2, is_sesa ? 'Active' : 'Innactive'
, bgcolor = is_sesa ? bullcolor : bearcolor
, text_color = color.white
, text_size = table_size)
table.cell(tb, 1, 3, is_sesb ? 'Active' : 'Innactive'
, bgcolor = is_sesb ? bullcolor : bearcolor
, text_color = color.white
, text_size = table_size)
table.cell(tb, 1, 4, is_sesc ? 'Active' : 'Innactive'
, bgcolor = is_sesc ? bullcolor : bearcolor
, text_color = color.white
, text_size = table_size)
table.cell(tb, 1, 5, is_sesd ? 'Active' : 'Innactive'
, bgcolor = is_sesd ? bullcolor : bearcolor
, text_color = color.white
, text_size = table_size)
//-----------------------------------------------------------------------------}
//Overlays bullcolor : bearcolor
//-----------------------------------------------------------------------------{
bb_Upper_color = ( pink30 )
bb_lower_color = ( cyan30 )
bb_median_color = #989898 // grey
bb_bgcolor = #6D9EEB // light blue
//------------------- Money Moves BB Functions ----------------------//
// Hull Moving Average
// there's no built-in hma function
hma(srcBB, length) =>
//HMA = WMA(2*WMA(n/2) - WMA(n)),sqrt(n))
// wrapper max(2,length)) prevents wma(srcBB, 0) type errors when len = 0 or 1 produces wma(srcBB, 0) because len/2 is used and all possible cond branches are always fully executed even when cond is false
len = math.max(2, length)
return_1 = ta.wma(2 * ta.wma(srcBB, len / 2) - ta.wma(srcBB, len), math.round(math.sqrt(len)))
return_1
// returns ma value by type and length
ma(srcBB, type, length) =>
// wrapper max(1,length)) prevents ema(srcBB, 0) type errors because all cond branches are always fully executed even when length == 0 (there's no fast cond evaluation)
len = math.max(1, length)
// for proper line wrapping/continuation you need indentation > multiple of 4 (4 spaces or 1 tab), i.e. 5 spaces
// swma has a fixed length = 4, alma has its own smoothing params
sma_1 = ta.sma(srcBB, len)
ema_1 = ta.ema(srcBB, len)
wma_1 = ta.wma(srcBB, len)
vwma_1 = ta.vwma(srcBB, len)
swma_1 = ta.swma(srcBB)
hma__1 = hma(srcBB, len)
rma_1 = ta.rma(srcBB, len)
// BB Processing
// sma_bb_len == 0 - disable middle sma_bb
ma__11 = ma(srcBB, 'sma', sma_bb_len)
sma_bb = sma_bb_len > 0 ? ma__11 : na
// stdev_bb = stdev(bb_srcBB, sma_bb_len) * bbStdDev
// wrapper max(1,len)) prevents stdev(srcBB, 0) type errors because all cond branches are always fully executed even when len == 0 (there's no fast cond evaluation)
stdev_1 = ta.stdev(srcBB, math.max(1, sma_bb_len))
stdev_bb = sma_bb_len > 0 ? stdev_1 * bbStdDev : na
sma_bb_up = sma_bb + stdev_bb
sma_bb_down = sma_bb - stdev_bb
plot_bb_up = plot(showBB and PassCorrect ? sma_bb_up : na, color=bb_Upper_color, linewidth=1, title='Upper BB' , editable=false) // , style=cross
plot_bb_down = plot(showBB and PassCorrect ? sma_bb_down : na, color=bb_lower_color, linewidth=1, title='Lower BB' , editable=false) // , style=cross
fill(plot_bb_up, plot_bb_down, color=color.new(bb_bgcolor, 90), title='BB Background' , editable=false)
plot(showBB and PassCorrect ? sma_bb : na, color=bb_median_color, linewidth=1, title='Middle BB' , editable=false) // , style=circles
/// Money MOves Trend Regression Channel
// Functions
lr_slope(_src, _len ) =>
x = 0.0, y = 0.0, x2 = 0.0, xy = 0.0
for i = 0 to _len - 1
val = _src[i]
per = i + 1
x += per
y += val
x2 += per * per
xy += val * per
_slp = (_len * xy - x * y) / (_len * x2 - x * x)
_avg = y / _len
_int = _avg - _slp * x / _len + _slp
[_slp, _avg, _int]
lr_dev(_src, _len, _slp, _avg, _int) =>
upDev = 0.0, dnDev = 0.0
val = _int
for j = 0 to _len - 1
price = high[j] - val
if price > upDev
upDev := price
price := val - low[j]
if price > dnDev
dnDev := price
price := _src[j]
val += _slp
[upDev, dnDev]
// Get Components
barsL = 10
barsR = 10
pivotHighRC = fixnan(ta.pivothigh(barsL, barsR)[1])
pivotLowRC = fixnan(ta.pivotlow(barsL, barsR)[1])
source4 = close, period = 150
[s, a, i] = lr_slope(source4, period * TRCP )
[upDev, dnDev] = lr_dev(source4, period , s, a, i)
// Colors
x1 = bar_index - period + 1, _y1 = i + s * (period - 1), x2 = bar_index, _y2 = i
upperTL = autoRc and PassCorrect ? line.new(x1, _y1 + upDev, x2, _y2 + upDev, xloc.bar_index, extend.right, pink) : na
line.delete(upperTL[1])
middleTL = autoRc and PassCorrect ? line.new(x1, _y1, x2, _y2, xloc.bar_index, extend.right, color.white) : na
line.delete(middleTL[1])
lowerTL = autoRc and PassCorrect ? line.new(x1, _y1 - dnDev, x2, _y2 - dnDev, xloc.bar_index, extend.right, cyan) : na
line.delete(lowerTL[1])
//------------------- Money Move Volume Profile ----------------------//
maFast = ta.ema(close, 24)
maSlow = ta.ema(close, 52)
maMorB = ta.sma(close, 103)
custom_volume = customSrcVol ? request.security(srcVolSym, timeframe.period, volume, lookahead=barmerge.lookahead_on) : volume
block_high = ta.highest(high, sizeBlock)
block_low = ta.lowest(low, sizeBlock)
float highest_row_value = 0
float row0_price = na
int row0_width = 0
float row0_value = 0.0
row0_is_peak = false
float row1_price = na
int row1_width = 0
float row1_value = 0.0
row1_is_peak = false
float row2_price = na
int row2_width = 0
float row2_value = 0.0
row2_is_peak = false
float row3_price = na
int row3_width = 0
float row3_value = 0.0
row3_is_peak = false
float row4_price = na
int row4_width = 0
float row4_value = 0.0
row4_is_peak = false
float row5_price = na
int row5_width = 0
float row5_value = 0.0
row5_is_peak = false
float row6_price = na
int row6_width = 0
float row6_value = 0.0
row6_is_peak = false
float row7_price = na
int row7_width = 0
float row7_value = 0.0
row7_is_peak = false
float row8_price = na
int row8_width = 0
float row8_value = 0.0
row8_is_peak = false
float row9_price = na
int row9_width = 0
float row9_value = 0.0
row9_is_peak = false
float row10_price = na
int row10_width = 0
float row10_value = 0.0
row10_is_peak = false
float row11_price = na
int row11_width = 0
float row11_value = 0.0
row11_is_peak = false
float row12_price = na
int row12_width = 0
float row12_value = 0.0
row12_is_peak = false
float row13_price = na
int row13_width = 0
float row13_value = 0.0
row13_is_peak = false
float row14_price = na
int row14_width = 0
float row14_value = 0.0
row14_is_peak = false
float row15_price = na
int row15_width = 0
float row15_value = 0.0
row15_is_peak = false
float row16_price = na
int row16_width = 0
float row16_value = 0.0
row16_is_peak = false
float row17_price = na
int row17_width = 0
float row17_value = 0.0
row17_is_peak = false
float row18_price = na
int row18_width = 0
float row18_value = 0.0
row18_is_peak = false
float row19_price = na
int row19_width = 0
float row19_value = 0.0
row19_is_peak = false
float row20_price = na
int row20_width = 0
float row20_value = 0.0
row20_is_peak = false
float row21_price = na
int row21_width = 0
float row21_value = 0.0
row21_is_peak = false
float row22_price = na
int row22_width = 0
float row22_value = 0.0
row22_is_peak = false
float row23_price = na
int row23_width = 0
float row23_value = 0.0
row23_is_peak = false
float row24_price = na
int row24_width = 0
float row24_value = 0.0
row24_is_peak = false
float row25_price = na
int row25_width = 0
float row25_value = 0.0
row25_is_peak = false
float row26_price = na
int row26_width = 0
float row26_value = 0.0
row26_is_peak = false
float row27_price = na
int row27_width = 0
float row27_value = 0.0
row27_is_peak = false
float row28_price = na
int row28_width = 0
float row28_value = 0.0
row28_is_peak = false
float row29_price = na
int row29_width = 0
float row29_value = 0.0
row29_is_peak = false
float row30_price = na
int row30_width = 0
float row30_value = 0.0
row30_is_peak = false
float row31_price = na
int row31_width = 0
float row31_value = 0.0
row31_is_peak = false
float row32_price = na
int row32_width = 0
float row32_value = 0.0
row32_is_peak = false
float row33_price = na
int row33_width = 0
float row33_value = 0.0
row33_is_peak = false
float row34_price = na
int row34_width = 0
float row34_value = 0.0
row34_is_peak = false
float row35_price = na
int row35_width = 0
float row35_value = 0.0
row35_is_peak = false
float row36_price = na
int row36_width = 0
float row36_value = 0.0
row36_is_peak = false
float row37_price = na
int row37_width = 0
float row37_value = 0.0
row37_is_peak = false
float row38_price = na
int row38_width = 0
float row38_value = 0.0
row38_is_peak = false
float row39_price = na
int row39_width = 0
float row39_value = 0.0
row39_is_peak = false
if barstate.islast and show_Vp and PassCorrect
block_height = block_high - block_low
row_height = block_height / slices
row0_low = block_low + row_height * 0
row0_high = block_low + row_height * 1
row1_low = block_low + row_height * 1
row1_high = block_low + row_height * 2
row2_low = block_low + row_height * 2
row2_high = block_low + row_height * 3
row3_low = block_low + row_height * 3
row3_high = block_low + row_height * 4
row4_low = block_low + row_height * 4
row4_high = block_low + row_height * 5
row5_low = block_low + row_height * 5
row5_high = block_low + row_height * 6
row6_low = block_low + row_height * 6
row6_high = block_low + row_height * 7
row7_low = block_low + row_height * 7
row7_high = block_low + row_height * 8
row8_low = block_low + row_height * 8
row8_high = block_low + row_height * 9
row9_low = block_low + row_height * 9
row9_high = block_low + row_height * 10
row10_low = block_low + row_height * 10
row10_high = block_low + row_height * 11
row11_low = block_low + row_height * 11
row11_high = block_low + row_height * 12
row12_low = block_low + row_height * 12
row12_high = block_low + row_height * 13
row13_low = block_low + row_height * 13
row13_high = block_low + row_height * 14
row14_low = block_low + row_height * 14
row14_high = block_low + row_height * 15
row15_low = block_low + row_height * 15
row15_high = block_low + row_height * 16
row16_low = block_low + row_height * 16
row16_high = block_low + row_height * 17
row17_low = block_low + row_height * 17
row17_high = block_low + row_height * 18
row18_low = block_low + row_height * 18
row18_high = block_low + row_height * 19
row19_low = block_low + row_height * 19
row19_high = block_low + row_height * 20
row20_low = block_low + row_height * 20
row20_high = block_low + row_height * 21
row21_low = block_low + row_height * 21
row21_high = block_low + row_height * 22
row22_low = block_low + row_height * 22
row22_high = block_low + row_height * 23
row23_low = block_low + row_height * 23
row23_high = block_low + row_height * 24
row24_low = block_low + row_height * 24
row24_high = block_low + row_height * 25
row25_low = block_low + row_height * 25
row25_high = block_low + row_height * 26
row26_low = block_low + row_height * 26
row26_high = block_low + row_height * 27
row27_low = block_low + row_height * 27
row27_high = block_low + row_height * 28
row28_low = block_low + row_height * 28
row28_high = block_low + row_height * 29
row29_low = block_low + row_height * 29
row29_high = block_low + row_height * 30
row30_low = block_low + row_height * 30
row30_high = block_low + row_height * 31
row31_low = block_low + row_height * 31
row31_high = block_low + row_height * 32
row32_low = block_low + row_height * 32
row32_high = block_low + row_height * 33
row33_low = block_low + row_height * 33
row33_high = block_low + row_height * 34
row34_low = block_low + row_height * 34
row34_high = block_low + row_height * 35
row35_low = block_low + row_height * 35
row35_high = block_low + row_height * 36
row36_low = block_low + row_height * 36
row36_high = block_low + row_height * 37
row37_low = block_low + row_height * 37
row37_high = block_low + row_height * 38
row38_low = block_low + row_height * 38
row38_high = block_low + row_height * 39
row39_low = block_low + row_height * 39
row39_high = block_low + row_height * 40
for i = 0 to sizeBlock + 1 by 1
n_rows_affected = 0
bar_row0_value = 0.0
if low[i] < row0_high and high[i] > row0_low
bar_row0_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row1_value = 0.0
if low[i] < row1_high and high[i] > row1_low
bar_row1_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row2_value = 0.0
if low[i] < row2_high and high[i] > row2_low
bar_row2_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row3_value = 0.0
if low[i] < row3_high and high[i] > row3_low
bar_row3_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row4_value = 0.0
if low[i] < row4_high and high[i] > row4_low
bar_row4_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row5_value = 0.0
if low[i] < row5_high and high[i] > row5_low
bar_row5_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row6_value = 0.0
if low[i] < row6_high and high[i] > row6_low
bar_row6_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row7_value = 0.0
if low[i] < row7_high and high[i] > row7_low
bar_row7_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row8_value = 0.0
if low[i] < row8_high and high[i] > row8_low
bar_row8_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row9_value = 0.0
if low[i] < row9_high and high[i] > row9_low
bar_row9_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row10_value = 0.0
if low[i] < row10_high and high[i] > row10_low
bar_row10_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row11_value = 0.0
if low[i] < row11_high and high[i] > row11_low
bar_row11_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row12_value = 0.0
if low[i] < row12_high and high[i] > row12_low
bar_row12_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row13_value = 0.0
if low[i] < row13_high and high[i] > row13_low
bar_row13_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row14_value = 0.0
if low[i] < row14_high and high[i] > row14_low
bar_row14_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row15_value = 0.0
if low[i] < row15_high and high[i] > row15_low
bar_row15_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row16_value = 0.0
if low[i] < row16_high and high[i] > row16_low
bar_row16_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row17_value = 0.0
if low[i] < row17_high and high[i] > row17_low
bar_row17_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row18_value = 0.0
if low[i] < row18_high and high[i] > row18_low
bar_row18_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row19_value = 0.0
if low[i] < row19_high and high[i] > row19_low
bar_row19_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row20_value = 0.0
if low[i] < row20_high and high[i] > row20_low
bar_row20_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row21_value = 0.0
if low[i] < row21_high and high[i] > row21_low
bar_row21_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row22_value = 0.0
if low[i] < row22_high and high[i] > row22_low
bar_row22_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row23_value = 0.0
if low[i] < row23_high and high[i] > row23_low
bar_row23_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row24_value = 0.0
if low[i] < row24_high and high[i] > row24_low
bar_row24_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row25_value = 0.0
if low[i] < row25_high and high[i] > row25_low
bar_row25_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row26_value = 0.0
if low[i] < row26_high and high[i] > row26_low
bar_row26_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row27_value = 0.0
if low[i] < row27_high and high[i] > row27_low
bar_row27_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row28_value = 0.0
if low[i] < row28_high and high[i] > row28_low
bar_row28_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row29_value = 0.0
if low[i] < row29_high and high[i] > row29_low
bar_row29_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row30_value = 0.0
if low[i] < row30_high and high[i] > row30_low
bar_row30_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row31_value = 0.0
if low[i] < row31_high and high[i] > row31_low
bar_row31_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row32_value = 0.0
if low[i] < row32_high and high[i] > row32_low
bar_row32_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row33_value = 0.0
if low[i] < row33_high and high[i] > row33_low
bar_row33_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row34_value = 0.0
if low[i] < row34_high and high[i] > row34_low
bar_row34_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row35_value = 0.0
if low[i] < row35_high and high[i] > row35_low
bar_row35_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row36_value = 0.0
if low[i] < row36_high and high[i] > row36_low
bar_row36_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row37_value = 0.0
if low[i] < row37_high and high[i] > row37_low
bar_row37_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row38_value = 0.0
if low[i] < row38_high and high[i] > row38_low
bar_row38_value := nz(custom_volume[i])
n_rows_affected += 1
bar_row39_value = 0.0
if low[i] < row39_high and high[i] > row39_low
bar_row39_value := nz(custom_volume[i])
n_rows_affected += 1
row0_value += (n_rows_affected != 0 ? bar_row0_value / n_rows_affected : 0)
row1_value += (n_rows_affected != 0 ? bar_row1_value / n_rows_affected : 0)
row2_value += (n_rows_affected != 0 ? bar_row2_value / n_rows_affected : 0)
row3_value += (n_rows_affected != 0 ? bar_row3_value / n_rows_affected : 0)
row4_value += (n_rows_affected != 0 ? bar_row4_value / n_rows_affected : 0)
row5_value += (n_rows_affected != 0 ? bar_row5_value / n_rows_affected : 0)
row6_value += (n_rows_affected != 0 ? bar_row6_value / n_rows_affected : 0)
row7_value += (n_rows_affected != 0 ? bar_row7_value / n_rows_affected : 0)
row8_value += (n_rows_affected != 0 ? bar_row8_value / n_rows_affected : 0)
row9_value += (n_rows_affected != 0 ? bar_row9_value / n_rows_affected : 0)
row10_value += (n_rows_affected != 0 ? bar_row10_value / n_rows_affected : 0)
row11_value += (n_rows_affected != 0 ? bar_row11_value / n_rows_affected : 0)
row12_value += (n_rows_affected != 0 ? bar_row12_value / n_rows_affected : 0)
row13_value += (n_rows_affected != 0 ? bar_row13_value / n_rows_affected : 0)
row14_value += (n_rows_affected != 0 ? bar_row14_value / n_rows_affected : 0)
row15_value += (n_rows_affected != 0 ? bar_row15_value / n_rows_affected : 0)
row16_value += (n_rows_affected != 0 ? bar_row16_value / n_rows_affected : 0)
row17_value += (n_rows_affected != 0 ? bar_row17_value / n_rows_affected : 0)
row18_value += (n_rows_affected != 0 ? bar_row18_value / n_rows_affected : 0)
row19_value += (n_rows_affected != 0 ? bar_row19_value / n_rows_affected : 0)
row20_value += (n_rows_affected != 0 ? bar_row20_value / n_rows_affected : 0)
row21_value += (n_rows_affected != 0 ? bar_row21_value / n_rows_affected : 0)
row22_value += (n_rows_affected != 0 ? bar_row22_value / n_rows_affected : 0)
row23_value += (n_rows_affected != 0 ? bar_row23_value / n_rows_affected : 0)
row24_value += (n_rows_affected != 0 ? bar_row24_value / n_rows_affected : 0)
row25_value += (n_rows_affected != 0 ? bar_row25_value / n_rows_affected : 0)
row26_value += (n_rows_affected != 0 ? bar_row26_value / n_rows_affected : 0)
row27_value += (n_rows_affected != 0 ? bar_row27_value / n_rows_affected : 0)
row28_value += (n_rows_affected != 0 ? bar_row28_value / n_rows_affected : 0)
row29_value += (n_rows_affected != 0 ? bar_row29_value / n_rows_affected : 0)
row30_value += (n_rows_affected != 0 ? bar_row30_value / n_rows_affected : 0)
row31_value += (n_rows_affected != 0 ? bar_row31_value / n_rows_affected : 0)
row32_value += (n_rows_affected != 0 ? bar_row32_value / n_rows_affected : 0)
row33_value += (n_rows_affected != 0 ? bar_row33_value / n_rows_affected : 0)
row34_value += (n_rows_affected != 0 ? bar_row34_value / n_rows_affected : 0)
row35_value += (n_rows_affected != 0 ? bar_row35_value / n_rows_affected : 0)
row36_value += (n_rows_affected != 0 ? bar_row36_value / n_rows_affected : 0)
row37_value += (n_rows_affected != 0 ? bar_row37_value / n_rows_affected : 0)
row38_value += (n_rows_affected != 0 ? bar_row38_value / n_rows_affected : 0)
row39_value += (n_rows_affected != 0 ? bar_row39_value / n_rows_affected : 0)
highest_row_value := math.max(highest_row_value, row0_value, row1_value, row2_value, row3_value, row4_value, row5_value, row6_value, row7_value, row8_value, row9_value, row10_value, row11_value, row12_value, row13_value, row14_value, row15_value, row16_value, row17_value, row18_value, row19_value, row20_value, row21_value, row22_value, row23_value, row24_value, row25_value, row26_value, row27_value, row28_value, row29_value, row30_value, row31_value, row32_value, row33_value, row34_value, row35_value, row36_value, row37_value, row38_value, row39_value)
row0_price := (row0_low + row0_high) / 2
row0_width := math.floor(rowWidth * row0_value / highest_row_value)
row1_price := (row1_low + row1_high) / 2
row1_width := math.floor(rowWidth * row1_value / highest_row_value)
row2_price := (row2_low + row2_high) / 2
row2_width := math.floor(rowWidth * row2_value / highest_row_value)
row3_price := (row3_low + row3_high) / 2
row3_width := math.floor(rowWidth * row3_value / highest_row_value)
row4_price := (row4_low + row4_high) / 2
row4_width := math.floor(rowWidth * row4_value / highest_row_value)
row5_price := (row5_low + row5_high) / 2
row5_width := math.floor(rowWidth * row5_value / highest_row_value)
row6_price := (row6_low + row6_high) / 2
row6_width := math.floor(rowWidth * row6_value / highest_row_value)
row7_price := (row7_low + row7_high) / 2
row7_width := math.floor(rowWidth * row7_value / highest_row_value)
row8_price := (row8_low + row8_high) / 2
row8_width := math.floor(rowWidth * row8_value / highest_row_value)
row9_price := (row9_low + row9_high) / 2
row9_width := math.floor(rowWidth * row9_value / highest_row_value)
row10_price := (row10_low + row10_high) / 2
row10_width := math.floor(rowWidth * row10_value / highest_row_value)
row11_price := (row11_low + row11_high) / 2
row11_width := math.floor(rowWidth * row11_value / highest_row_value)
row12_price := (row12_low + row12_high) / 2
row12_width := math.floor(rowWidth * row12_value / highest_row_value)
row13_price := (row13_low + row13_high) / 2
row13_width := math.floor(rowWidth * row13_value / highest_row_value)
row14_price := (row14_low + row14_high) / 2
row14_width := math.floor(rowWidth * row14_value / highest_row_value)
row15_price := (row15_low + row15_high) / 2
row15_width := math.floor(rowWidth * row15_value / highest_row_value)
row16_price := (row16_low + row16_high) / 2
row16_width := math.floor(rowWidth * row16_value / highest_row_value)
row17_price := (row17_low + row17_high) / 2
row17_width := math.floor(rowWidth * row17_value / highest_row_value)
row18_price := (row18_low + row18_high) / 2
row18_width := math.floor(rowWidth * row18_value / highest_row_value)
row19_price := (row19_low + row19_high) / 2
row19_width := math.floor(rowWidth * row19_value / highest_row_value)
row20_price := (row20_low + row20_high) / 2
row20_width := math.floor(rowWidth * row20_value / highest_row_value)
row21_price := (row21_low + row21_high) / 2
row21_width := math.floor(rowWidth * row21_value / highest_row_value)
row22_price := (row22_low + row22_high) / 2
row22_width := math.floor(rowWidth * row22_value / highest_row_value)
row23_price := (row23_low + row23_high) / 2
row23_width := math.floor(rowWidth * row23_value / highest_row_value)
row24_price := (row24_low + row24_high) / 2
row24_width := math.floor(rowWidth * row24_value / highest_row_value)
row25_price := (row25_low + row25_high) / 2
row25_width := math.floor(rowWidth * row25_value / highest_row_value)
row26_price := (row26_low + row26_high) / 2
row26_width := math.floor(rowWidth * row26_value / highest_row_value)
row27_price := (row27_low + row27_high) / 2
row27_width := math.floor(rowWidth * row27_value / highest_row_value)
row28_price := (row28_low + row28_high) / 2
row28_width := math.floor(rowWidth * row28_value / highest_row_value)
row29_price := (row29_low + row29_high) / 2
row29_width := math.floor(rowWidth * row29_value / highest_row_value)
row30_price := (row30_low + row30_high) / 2
row30_width := math.floor(rowWidth * row30_value / highest_row_value)
row31_price := (row31_low + row31_high) / 2
row31_width := math.floor(rowWidth * row31_value / highest_row_value)
row32_price := (row32_low + row32_high) / 2
row32_width := math.floor(rowWidth * row32_value / highest_row_value)
row33_price := (row33_low + row33_high) / 2
row33_width := math.floor(rowWidth * row33_value / highest_row_value)
row34_price := (row34_low + row34_high) / 2
row34_width := math.floor(rowWidth * row34_value / highest_row_value)
row35_price := (row35_low + row35_high) / 2
row35_width := math.floor(rowWidth * row35_value / highest_row_value)
row36_price := (row36_low + row36_high) / 2
row36_width := math.floor(rowWidth * row36_value / highest_row_value)
row37_price := (row37_low + row37_high) / 2
row37_width := math.floor(rowWidth * row37_value / highest_row_value)
row38_price := (row38_low + row38_high) / 2
row38_width := math.floor(rowWidth * row38_value / highest_row_value)
row39_price := (row39_low + row39_high) / 2
row39_width := math.floor(rowWidth * row39_value / highest_row_value)
if row0_value >= row1_value and row0_value >= row2_value and row0_value >= row3_value and row0_value >= row4_value and row0_value >= row5_value
row0_is_peak := true
row0_is_peak
if row1_value >= row0_value and row1_value >= row2_value and row1_value >= row3_value and row1_value >= row4_value and row1_value >= row5_value and row1_value >= row6_value
row1_is_peak := true
row1_is_peak
if row2_value >= row0_value and row2_value >= row1_value and row2_value >= row3_value and row2_value >= row4_value and row2_value >= row5_value and row2_value >= row6_value and row2_value >= row7_value
row2_is_peak := true
row2_is_peak
if row3_value >= row0_value and row3_value >= row1_value and row3_value >= row2_value and row3_value >= row4_value and row3_value >= row5_value and row3_value >= row6_value and row3_value >= row7_value and row3_value >= row8_value
row3_is_peak := true
row3_is_peak
if row4_value >= row0_value and row4_value >= row1_value and row4_value >= row2_value and row4_value >= row3_value and row4_value >= row5_value and row4_value >= row6_value and row4_value >= row7_value and row4_value >= row8_value and row4_value >= row9_value
row4_is_peak := true
row4_is_peak
if row5_value >= row0_value and row5_value >= row1_value and row5_value >= row2_value and row5_value >= row3_value and row5_value >= row4_value and row5_value >= row6_value and row5_value >= row7_value and row5_value >= row8_value and row5_value >= row9_value and row5_value >= row10_value
row5_is_peak := true
row5_is_peak
if row6_value >= row1_value and row6_value >= row2_value and row6_value >= row3_value and row6_value >= row4_value and row6_value >= row5_value and row6_value >= row7_value and row6_value >= row8_value and row6_value >= row9_value and row6_value >= row10_value and row6_value >= row11_value
row6_is_peak := true
row6_is_peak
if row7_value >= row2_value and row7_value >= row3_value and row7_value >= row4_value and row7_value >= row5_value and row7_value >= row6_value and row7_value >= row8_value and row7_value >= row9_value and row7_value >= row10_value and row7_value >= row11_value and row7_value >= row12_value
row7_is_peak := true
row7_is_peak
if row8_value >= row3_value and row8_value >= row4_value and row8_value >= row5_value and row8_value >= row6_value and row8_value >= row7_value and row8_value >= row9_value and row8_value >= row10_value and row8_value >= row11_value and row8_value >= row12_value and row8_value >= row13_value
row8_is_peak := true
row8_is_peak
if row9_value >= row4_value and row9_value >= row5_value and row9_value >= row6_value and row9_value >= row7_value and row9_value >= row8_value and row9_value >= row10_value and row9_value >= row11_value and row9_value >= row12_value and row9_value >= row13_value and row9_value >= row14_value
row9_is_peak := true
row9_is_peak
if row10_value >= row5_value and row10_value >= row6_value and row10_value >= row7_value and row10_value >= row8_value and row10_value >= row9_value and row10_value >= row11_value and row10_value >= row12_value and row10_value >= row13_value and row10_value >= row14_value and row10_value >= row15_value
row10_is_peak := true
row10_is_peak
if row11_value >= row6_value and row11_value >= row7_value and row11_value >= row8_value and row11_value >= row9_value and row11_value >= row10_value and row11_value >= row12_value and row11_value >= row13_value and row11_value >= row14_value and row11_value >= row15_value and row11_value >= row16_value
row11_is_peak := true
row11_is_peak
if row12_value >= row7_value and row12_value >= row8_value and row12_value >= row9_value and row12_value >= row10_value and row12_value >= row11_value and row12_value >= row13_value and row12_value >= row14_value and row12_value >= row15_value and row12_value >= row16_value and row12_value >= row17_value
row12_is_peak := true
row12_is_peak
if row13_value >= row8_value and row13_value >= row9_value and row13_value >= row10_value and row13_value >= row11_value and row13_value >= row12_value and row13_value >= row14_value and row13_value >= row15_value and row13_value >= row16_value and row13_value >= row17_value and row13_value >= row18_value
row13_is_peak := true
row13_is_peak
if row14_value >= row9_value and row14_value >= row10_value and row14_value >= row11_value and row14_value >= row12_value and row14_value >= row13_value and row14_value >= row15_value and row14_value >= row16_value and row14_value >= row17_value and row14_value >= row18_value and row14_value >= row19_value
row14_is_peak := true
row14_is_peak
if row15_value >= row10_value and row15_value >= row11_value and row15_value >= row12_value and row15_value >= row13_value and row15_value >= row14_value and row15_value >= row16_value and row15_value >= row17_value and row15_value >= row18_value and row15_value >= row19_value and row15_value >= row20_value
row15_is_peak := true
row15_is_peak
if row16_value >= row11_value and row16_value >= row12_value and row16_value >= row13_value and row16_value >= row14_value and row16_value >= row15_value and row16_value >= row17_value and row16_value >= row18_value and row16_value >= row19_value and row16_value >= row20_value and row16_value >= row21_value
row16_is_peak := true
row16_is_peak
if row17_value >= row12_value and row17_value >= row13_value and row17_value >= row14_value and row17_value >= row15_value and row17_value >= row16_value and row17_value >= row18_value and row17_value >= row19_value and row17_value >= row20_value and row17_value >= row21_value and row17_value >= row22_value
row17_is_peak := true
row17_is_peak
if row18_value >= row13_value and row18_value >= row14_value and row18_value >= row15_value and row18_value >= row16_value and row18_value >= row17_value and row18_value >= row19_value and row18_value >= row20_value and row18_value >= row21_value and row18_value >= row22_value and row18_value >= row23_value
row18_is_peak := true
row18_is_peak
if row19_value >= row14_value and row19_value >= row15_value and row19_value >= row16_value and row19_value >= row17_value and row19_value >= row18_value and row19_value >= row20_value and row19_value >= row21_value and row19_value >= row22_value and row19_value >= row23_value and row19_value >= row24_value
row19_is_peak := true
row19_is_peak
if row20_value >= row15_value and row20_value >= row16_value and row20_value >= row17_value and row20_value >= row18_value and row20_value >= row19_value and row20_value >= row21_value and row20_value >= row22_value and row20_value >= row23_value and row20_value >= row24_value and row20_value >= row25_value
row20_is_peak := true
row20_is_peak
if row21_value >= row16_value and row21_value >= row17_value and row21_value >= row18_value and row21_value >= row19_value and row21_value >= row20_value and row21_value >= row22_value and row21_value >= row23_value and row21_value >= row24_value and row21_value >= row25_value and row21_value >= row26_value
row21_is_peak := true
row21_is_peak
if row22_value >= row17_value and row22_value >= row18_value and row22_value >= row19_value and row22_value >= row20_value and row22_value >= row21_value and row22_value >= row23_value and row22_value >= row24_value and row22_value >= row25_value and row22_value >= row26_value and row22_value >= row27_value
row22_is_peak := true
row22_is_peak
if row23_value >= row18_value and row23_value >= row19_value and row23_value >= row20_value and row23_value >= row21_value and row23_value >= row22_value and row23_value >= row24_value and row23_value >= row25_value and row23_value >= row26_value and row23_value >= row27_value and row23_value >= row28_value
row23_is_peak := true
row23_is_peak
if row24_value >= row19_value and row24_value >= row20_value and row24_value >= row21_value and row24_value >= row22_value and row24_value >= row23_value and row24_value >= row25_value and row24_value >= row26_value and row24_value >= row27_value and row24_value >= row28_value and row24_value >= row29_value
row24_is_peak := true
row24_is_peak
if row25_value >= row20_value and row25_value >= row21_value and row25_value >= row22_value and row25_value >= row23_value and row25_value >= row24_value and row25_value >= row26_value and row25_value >= row27_value and row25_value >= row28_value and row25_value >= row29_value and row25_value >= row30_value
row25_is_peak := true
row25_is_peak
if row26_value >= row21_value and row26_value >= row22_value and row26_value >= row23_value and row26_value >= row24_value and row26_value >= row25_value and row26_value >= row27_value and row26_value >= row28_value and row26_value >= row29_value and row26_value >= row30_value and row26_value >= row31_value
row26_is_peak := true
row26_is_peak
if row27_value >= row22_value and row27_value >= row23_value and row27_value >= row24_value and row27_value >= row25_value and row27_value >= row26_value and row27_value >= row28_value and row27_value >= row29_value and row27_value >= row30_value and row27_value >= row31_value and row27_value >= row32_value
row27_is_peak := true
row27_is_peak
if row28_value >= row23_value and row28_value >= row24_value and row28_value >= row25_value and row28_value >= row26_value and row28_value >= row27_value and row28_value >= row29_value and row28_value >= row30_value and row28_value >= row31_value and row28_value >= row32_value and row28_value >= row33_value
row28_is_peak := true
row28_is_peak
if row29_value >= row24_value and row29_value >= row25_value and row29_value >= row26_value and row29_value >= row27_value and row29_value >= row28_value and row29_value >= row30_value and row29_value >= row31_value and row29_value >= row32_value and row29_value >= row33_value and row29_value >= row34_value
row29_is_peak := true
row29_is_peak
if row30_value >= row25_value and row30_value >= row26_value and row30_value >= row27_value and row30_value >= row28_value and row30_value >= row29_value and row30_value >= row31_value and row30_value >= row32_value and row30_value >= row33_value and row30_value >= row34_value and row30_value >= row35_value
row30_is_peak := true
row30_is_peak
if row31_value >= row26_value and row31_value >= row27_value and row31_value >= row28_value and row31_value >= row29_value and row31_value >= row30_value and row31_value >= row32_value and row31_value >= row33_value and row31_value >= row34_value and row31_value >= row35_value and row31_value >= row36_value
row31_is_peak := true
row31_is_peak
if row32_value >= row27_value and row32_value >= row28_value and row32_value >= row29_value and row32_value >= row30_value and row32_value >= row31_value and row32_value >= row33_value and row32_value >= row34_value and row32_value >= row35_value and row32_value >= row36_value and row32_value >= row37_value
row32_is_peak := true
row32_is_peak
if row33_value >= row28_value and row33_value >= row29_value and row33_value >= row30_value and row33_value >= row31_value and row33_value >= row32_value and row33_value >= row34_value and row33_value >= row35_value and row33_value >= row36_value and row33_value >= row37_value and row33_value >= row38_value
row33_is_peak := true
row33_is_peak
if row34_value >= row29_value and row34_value >= row30_value and row34_value >= row31_value and row34_value >= row32_value and row34_value >= row33_value and row34_value >= row35_value and row34_value >= row36_value and row34_value >= row37_value and row34_value >= row38_value and row34_value >= row39_value
row34_is_peak := true
row34_is_peak
if row35_value >= row30_value and row35_value >= row31_value and row35_value >= row32_value and row35_value >= row33_value and row35_value >= row34_value and row35_value >= row36_value and row35_value >= row37_value and row35_value >= row38_value and row35_value >= row39_value
row35_is_peak := true
row35_is_peak
if row36_value >= row31_value and row36_value >= row32_value and row36_value >= row33_value and row36_value >= row34_value and row36_value >= row35_value and row36_value >= row37_value and row36_value >= row38_value and row36_value >= row39_value
row36_is_peak := true
row36_is_peak
if row37_value >= row32_value and row37_value >= row33_value and row37_value >= row34_value and row37_value >= row35_value and row37_value >= row36_value and row37_value >= row38_value and row37_value >= row39_value
row37_is_peak := true
row37_is_peak
if row38_value >= row33_value and row38_value >= row34_value and row38_value >= row35_value and row38_value >= row36_value and row38_value >= row37_value and row38_value >= row39_value
row38_is_peak := true
row38_is_peak
if row39_value >= row34_value and row39_value >= row35_value and row39_value >= row36_value and row39_value >= row37_value and row39_value >= row38_value
row39_is_peak := true
row39_is_peak
// Signals
trendBull = maFast > maSlow and ta.rising (maFast, 2) and ta.rising (maSlow, 2)
trendBear = maFast < maSlow and ta.falling(maFast, 2) and ta.falling(maSlow, 2)
// Colors
none = color.new(#FFFFFF, 100)
var int first_bar_time = time
if barstate.isfirst
first_bar_time := time
var line block_high_line = line.new(bar_index, high, bar_index, high, color=colBounds)
var line block_low_line = line.new(bar_index, low, bar_index, low, color=colBounds)
var label row0_label = slices > 0 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row1_label = slices > 1 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row2_label = slices > 2 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row3_label = slices > 3 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row4_label = slices > 4 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row5_label = slices > 5 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row6_label = slices > 6 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row7_label = slices > 7 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row8_label = slices > 8 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row9_label = slices > 9 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row10_label = slices > 10 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row11_label = slices > 11 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row12_label = slices > 12 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row13_label = slices > 13 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row14_label = slices > 14 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row15_label = slices > 15 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row16_label = slices > 16 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row17_label = slices > 17 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row18_label = slices > 18 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row19_label = slices > 19 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row20_label = slices > 20 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row21_label = slices > 21 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row22_label = slices > 22 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row23_label = slices > 23 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row24_label = slices > 24 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row25_label = slices > 25 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row26_label = slices > 26 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row27_label = slices > 27 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row28_label = slices > 28 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row29_label = slices > 29 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row30_label = slices > 30 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row31_label = slices > 31 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row32_label = slices > 32 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row33_label = slices > 33 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row34_label = slices > 34 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row35_label = slices > 35 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row36_label = slices > 36 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row37_label = slices > 37 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row38_label = slices > 38 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
var label row39_label = slices > 39 ? label.new(time_close, close, "", xloc.bar_time, yloc.price, colProfile, label.style_label_left, none, size.auto) : na
if barstate.islast and show_Vp and PassCorrect
line.set_xloc(block_high_line, math.max(time[sizeBlock], first_bar_time), time_close, xloc.bar_time)
line.set_y1(block_high_line, block_high)
line.set_y2(block_high_line, block_high)
line.set_xloc(block_low_line, math.max(time[sizeBlock], first_bar_time), time_close, xloc.bar_time)
line.set_y1(block_low_line, block_low)
line.set_y2(block_low_line, block_low)
row0_text = ""
for i = 0 to row0_width + 1 by 1
row0_text += "#"
row0_text
row0_color = showPeaks and show_Vp and PassCorrect and row0_is_peak ? colPeak : colProfile
label.set_x(row0_label, time_close)
label.set_y(row0_label, row0_price)
label.set_color(row0_label, row0_color)
label.set_text(row0_label, row0_text)
row1_text = ""
for i = 0 to row1_width + 1 by 1
row1_text += "#"
row1_text
row1_color = showPeaks and show_Vp and PassCorrect and row1_is_peak ? colPeak : colProfile
label.set_x(row1_label, time_close)
label.set_y(row1_label, row1_price)
label.set_color(row1_label, row1_color)
label.set_text(row1_label, row1_text)
row2_text = ""
for i = 0 to row2_width + 1 by 1
row2_text += "#"
row2_text
row2_color = showPeaks and show_Vp and PassCorrect and row2_is_peak ? colPeak : colProfile
label.set_x(row2_label, time_close)
label.set_y(row2_label, row2_price)
label.set_color(row2_label, row2_color)
label.set_text(row2_label, row2_text)
row3_text = ""
for i = 0 to row3_width + 1 by 1
row3_text += "#"
row3_text
row3_color = showPeaks and show_Vp and PassCorrect and row3_is_peak ? colPeak : colProfile
label.set_x(row3_label, time_close)
label.set_y(row3_label, row3_price)
label.set_color(row3_label, row3_color)
label.set_text(row3_label, row3_text)
row4_text = ""
for i = 0 to row4_width + 1 by 1
row4_text += "#"
row4_text
row4_color = showPeaks and show_Vp and PassCorrect and row4_is_peak ? colPeak : colProfile
label.set_x(row4_label, time_close)
label.set_y(row4_label, row4_price)
label.set_color(row4_label, row4_color)
label.set_text(row4_label, row4_text)
row5_text = ""
for i = 0 to row5_width + 1 by 1
row5_text += "#"
row5_text
row5_color = showPeaks and show_Vp and PassCorrect and row5_is_peak ? colPeak : colProfile
label.set_x(row5_label, time_close)
label.set_y(row5_label, row5_price)
label.set_color(row5_label, row5_color)
label.set_text(row5_label, row5_text)
row6_text = ""
for i = 0 to row6_width + 1 by 1
row6_text += "#"
row6_text
row6_color = showPeaks and show_Vp and PassCorrect and row6_is_peak ? colPeak : colProfile
label.set_x(row6_label, time_close)
label.set_y(row6_label, row6_price)
label.set_color(row6_label, row6_color)
label.set_text(row6_label, row6_text)
row7_text = ""
for i = 0 to row7_width + 1 by 1
row7_text += "#"
row7_text
row7_color = showPeaks and show_Vp and PassCorrect and row7_is_peak ? colPeak : colProfile
label.set_x(row7_label, time_close)
label.set_y(row7_label, row7_price)
label.set_color(row7_label, row7_color)
label.set_text(row7_label, row7_text)
row8_text = ""
for i = 0 to row8_width + 1 by 1
row8_text += "#"
row8_text
row8_color = showPeaks and show_Vp and PassCorrect and row8_is_peak ? colPeak : colProfile
label.set_x(row8_label, time_close)
label.set_y(row8_label, row8_price)
label.set_color(row8_label, row8_color)
label.set_text(row8_label, row8_text)
row9_text = ""
for i = 0 to row9_width + 1 by 1
row9_text += "#"
row9_text
row9_color = showPeaks and show_Vp and PassCorrect and row9_is_peak ? colPeak : colProfile
label.set_x(row9_label, time_close)
label.set_y(row9_label, row9_price)
label.set_color(row9_label, row9_color)
label.set_text(row9_label, row9_text)
row10_text = ""
for i = 0 to row10_width + 1 by 1
row10_text += "#"
row10_text
row10_color = showPeaks and show_Vp and PassCorrect and row10_is_peak ? colPeak : colProfile
label.set_x(row10_label, time_close)
label.set_y(row10_label, row10_price)
label.set_color(row10_label, row10_color)
label.set_text(row10_label, row10_text)
row11_text = ""
for i = 0 to row11_width + 1 by 1
row11_text += "#"
row11_text
row11_color = showPeaks and show_Vp and PassCorrect and row11_is_peak ? colPeak : colProfile
label.set_x(row11_label, time_close)
label.set_y(row11_label, row11_price)
label.set_color(row11_label, row11_color)
label.set_text(row11_label, row11_text)
row12_text = ""
for i = 0 to row12_width + 1 by 1
row12_text += "#"
row12_text
row12_color = showPeaks and show_Vp and PassCorrect and row12_is_peak ? colPeak : colProfile
label.set_x(row12_label, time_close)
label.set_y(row12_label, row12_price)
label.set_color(row12_label, row12_color)
label.set_text(row12_label, row12_text)
row13_text = ""
for i = 0 to row13_width + 1 by 1
row13_text += "#"
row13_text
row13_color = showPeaks and show_Vp and PassCorrect and row13_is_peak ? colPeak : colProfile
label.set_x(row13_label, time_close)
label.set_y(row13_label, row13_price)
label.set_color(row13_label, row13_color)
label.set_text(row13_label, row13_text)
row14_text = ""
for i = 0 to row14_width + 1 by 1
row14_text += "#"
row14_text
row14_color = showPeaks and show_Vp and PassCorrect and row14_is_peak ? colPeak : colProfile
label.set_x(row14_label, time_close)
label.set_y(row14_label, row14_price)
label.set_color(row14_label, row14_color)
label.set_text(row14_label, row14_text)
row15_text = ""
for i = 0 to row15_width + 1 by 1
row15_text += "#"
row15_text
row15_color = showPeaks and show_Vp and PassCorrect and row15_is_peak ? colPeak : colProfile
label.set_x(row15_label, time_close)
label.set_y(row15_label, row15_price)
label.set_color(row15_label, row15_color)
label.set_text(row15_label, row15_text)
row16_text = ""
for i = 0 to row16_width + 1 by 1
row16_text += "#"
row16_text
row16_color = showPeaks and show_Vp and PassCorrect and row16_is_peak ? colPeak : colProfile
label.set_x(row16_label, time_close)
label.set_y(row16_label, row16_price)
label.set_color(row16_label, row16_color)
label.set_text(row16_label, row16_text)
row17_text = ""
for i = 0 to row17_width + 1 by 1
row17_text += "#"
row17_text
row17_color = showPeaks and show_Vp and PassCorrect and row17_is_peak ? colPeak : colProfile
label.set_x(row17_label, time_close)
label.set_y(row17_label, row17_price)
label.set_color(row17_label, row17_color)
label.set_text(row17_label, row17_text)
row18_text = ""
for i = 0 to row18_width + 1 by 1
row18_text += "#"
row18_text
row18_color = showPeaks and show_Vp and PassCorrect and row18_is_peak ? colPeak : colProfile
label.set_x(row18_label, time_close)
label.set_y(row18_label, row18_price)
label.set_color(row18_label, row18_color)
label.set_text(row18_label, row18_text)
row19_text = ""
for i = 0 to row19_width + 1 by 1
row19_text += "#"
row19_text
row19_color = showPeaks and show_Vp and PassCorrect and row19_is_peak ? colPeak : colProfile
label.set_x(row19_label, time_close)
label.set_y(row19_label, row19_price)
label.set_color(row19_label, row19_color)
label.set_text(row19_label, row19_text)
row20_text = ""
for i = 0 to row20_width + 1 by 1
row20_text += "#"
row20_text
row20_color = showPeaks and show_Vp and PassCorrect and row20_is_peak ? colPeak : colProfile
label.set_x(row20_label, time_close)
label.set_y(row20_label, row20_price)
label.set_color(row20_label, row20_color)
label.set_text(row20_label, row20_text)
row21_text = ""
for i = 0 to row21_width + 1 by 1
row21_text += "#"
row21_text
row21_color = showPeaks and show_Vp and PassCorrect and row21_is_peak ? colPeak : colProfile
label.set_x(row21_label, time_close)
label.set_y(row21_label, row21_price)
label.set_color(row21_label, row21_color)
label.set_text(row21_label, row21_text)
row22_text = ""
for i = 0 to row22_width + 1 by 1
row22_text += "#"
row22_text
row22_color = showPeaks and show_Vp and PassCorrect and row22_is_peak ? colPeak : colProfile
label.set_x(row22_label, time_close)
label.set_y(row22_label, row22_price)
label.set_color(row22_label, row22_color)
label.set_text(row22_label, row22_text)
row23_text = ""
for i = 0 to row23_width + 1 by 1
row23_text += "#"
row23_text
row23_color = showPeaks and show_Vp and PassCorrect and row23_is_peak ? colPeak : colProfile
label.set_x(row23_label, time_close)
label.set_y(row23_label, row23_price)
label.set_color(row23_label, row23_color)
label.set_text(row23_label, row23_text)
row24_text = ""
for i = 0 to row24_width + 1 by 1
row24_text += "#"
row24_text
row24_color = showPeaks and show_Vp and PassCorrect and row24_is_peak ? colPeak : colProfile
label.set_x(row24_label, time_close)
label.set_y(row24_label, row24_price)
label.set_color(row24_label, row24_color)
label.set_text(row24_label, row24_text)
row25_text = ""
for i = 0 to row25_width + 1 by 1
row25_text += "#"
row25_text
row25_color = showPeaks and show_Vp and PassCorrect and row25_is_peak ? colPeak : colProfile
label.set_x(row25_label, time_close)
label.set_y(row25_label, row25_price)
label.set_color(row25_label, row25_color)
label.set_text(row25_label, row25_text)
row26_text = ""
for i = 0 to row26_width + 1 by 1
row26_text += "#"
row26_text
row26_color = showPeaks and show_Vp and PassCorrect and row26_is_peak ? colPeak : colProfile
label.set_x(row26_label, time_close)
label.set_y(row26_label, row26_price)
label.set_color(row26_label, row26_color)
label.set_text(row26_label, row26_text)
row27_text = ""
for i = 0 to row27_width + 1 by 1
row27_text += "#"
row27_text
row27_color = showPeaks and show_Vp and PassCorrect and row27_is_peak ? colPeak : colProfile
label.set_x(row27_label, time_close)
label.set_y(row27_label, row27_price)
label.set_color(row27_label, row27_color)
label.set_text(row27_label, row27_text)
row28_text = ""
for i = 0 to row28_width + 1 by 1
row28_text += "#"
row28_text
row28_color = showPeaks and show_Vp and PassCorrect and row28_is_peak ? colPeak : colProfile
label.set_x(row28_label, time_close)
label.set_y(row28_label, row28_price)
label.set_color(row28_label, row28_color)
label.set_text(row28_label, row28_text)
row29_text = ""
for i = 0 to row29_width + 1 by 1
row29_text += "#"
row29_text
row29_color = showPeaks and show_Vp and PassCorrect and row29_is_peak ? colPeak : colProfile
label.set_x(row29_label, time_close)
label.set_y(row29_label, row29_price)
label.set_color(row29_label, row29_color)
label.set_text(row29_label, row29_text)
row30_text = ""
for i = 0 to row30_width + 1 by 1
row30_text += "#"
row30_text
row30_color = showPeaks and show_Vp and PassCorrect and row30_is_peak ? colPeak : colProfile
label.set_x(row30_label, time_close)
label.set_y(row30_label, row30_price)
label.set_color(row30_label, row30_color)
label.set_text(row30_label, row30_text)
row31_text = ""
for i = 0 to row31_width + 1 by 1
row31_text += "#"
row31_text
row31_color = showPeaks and show_Vp and PassCorrect and row31_is_peak ? colPeak : colProfile
label.set_x(row31_label, time_close)
label.set_y(row31_label, row31_price)
label.set_color(row31_label, row31_color)
label.set_text(row31_label, row31_text)
row32_text = ""
for i = 0 to row32_width + 1 by 1
row32_text += "#"
row32_text
row32_color = showPeaks and show_Vp and PassCorrect and row32_is_peak ? colPeak : colProfile
label.set_x(row32_label, time_close)
label.set_y(row32_label, row32_price)
label.set_color(row32_label, row32_color)
label.set_text(row32_label, row32_text)
row33_text = ""
for i = 0 to row33_width + 1 by 1
row33_text += "#"
row33_text
row33_color = showPeaks and show_Vp and PassCorrect and row33_is_peak ? colPeak : colProfile
label.set_x(row33_label, time_close)
label.set_y(row33_label, row33_price)
label.set_color(row33_label, row33_color)
label.set_text(row33_label, row33_text)
row34_text = ""
for i = 0 to row34_width + 1 by 1
row34_text += "#"
row34_text
row34_color = showPeaks and show_Vp and PassCorrect and row34_is_peak ? colPeak : colProfile
label.set_x(row34_label, time_close)
label.set_y(row34_label, row34_price)
label.set_color(row34_label, row34_color)
label.set_text(row34_label, row34_text)
row35_text = ""
for i = 0 to row35_width + 1 by 1
row35_text += "#"
row35_text
row35_color = showPeaks and show_Vp and PassCorrect and row35_is_peak ? colPeak : colProfile
label.set_x(row35_label, time_close)
label.set_y(row35_label, row35_price)
label.set_color(row35_label, row35_color)
label.set_text(row35_label, row35_text)
row36_text = ""
for i = 0 to row36_width + 1 by 1
row36_text += "#"
row36_text
row36_color = showPeaks and show_Vp and PassCorrect and row36_is_peak ? colPeak : colProfile
label.set_x(row36_label, time_close)
label.set_y(row36_label, row36_price)
label.set_color(row36_label, row36_color)
label.set_text(row36_label, row36_text)
row37_text = ""
for i = 0 to row37_width + 1 by 1
row37_text += "#"
row37_text
row37_color = showPeaks and show_Vp and PassCorrect and row37_is_peak ? colPeak : colProfile
label.set_x(row37_label, time_close)
label.set_y(row37_label, row37_price)
label.set_color(row37_label, row37_color)
label.set_text(row37_label, row37_text)
row38_text = ""
for i = 0 to row38_width + 1 by 1
row38_text += "#"
row38_text
row38_color = showPeaks and show_Vp and PassCorrect and row38_is_peak ? colPeak : colProfile
label.set_x(row38_label, time_close)
label.set_y(row38_label, row38_price)
label.set_color(row38_label, row38_color)
label.set_text(row38_label, row38_text)
row39_text = ""
for i = 0 to row39_width + 1 by 1
row39_text += "#"
row39_text
row39_color = showPeaks and show_Vp and PassCorrect and row39_is_peak ? colPeak : colProfile
label.set_x(row39_label, time_close)
label.set_y(row39_label, row39_price)
label.set_color(row39_label, row39_color)
label.set_text(row39_label, row39_text)
///////////////////////////////////////////// Money Moves Big Moves
average(bp, tr_, length) =>
math.sum(bp, length) / math.sum(tr_, length)
high_ = math.max(high, close[1])
low_ = math.min(low, close[1])
bp = close - low_
tr_ = high_ - low_
avg7 = average(bp, tr_, length7)
avg14 = average(bp, tr_, length14)
avg28 = average(bp, tr_, length28)
uo = 100 * (4 * avg7 + 2 * avg14 + avg28) / 7
lowest_in_segment(s_close, s_osc, length) =>
min_bar = ta.lowestbars(s_close, length)
min_val = ta.lowest(s_close, length)
next_s_close = s_close[length]
osc_val = ta.lowest(s_osc, length)
next_s_osc = s_osc[length]
[min_bar, min_val, osc_val, next_s_close, next_s_osc]
s_close = close
s_osc = uo
[low_bar_1, low_val_1, low_osc_1, low_s_close_1, low_s_osc_1] = lowest_in_segment(s_close, s_osc, spacing)
[low_bar_2, low_val_2, low_osc_2, low_s_close_2, low_s_osc_2] = lowest_in_segment(low_s_close_1, low_s_osc_1, spacing)
[low_bar_3, low_val_3, low_osc_3, low_s_close_3, low_s_osc_3] = lowest_in_segment(low_s_close_2, low_s_osc_2, spacing)
[low_bar_4, low_val_4, low_osc_4, low_s_close_4, low_s_osc_4] = lowest_in_segment(low_s_close_3, low_s_osc_3, spacing)
[low_bar_5, low_val_5, low_osc_5, low_s_close_5, low_s_osc_5] = lowest_in_segment(low_s_close_4, low_s_osc_4, spacing)
[low_bar_6, low_val_6, low_osc_6, low_s_close_6, low_s_osc_6] = lowest_in_segment(low_s_close_5, low_s_osc_5, spacing)
lowest_padded(series) =>
ta.lowest(series, spacing * 3)
first_low = 1
second_low_5x() =>
low_val_5 < low_val_6 ? 5 : 6
second_low_4x() =>
second_low_5x_1 = second_low_5x()
lowest_padded(low_s_close_2) == low_val_4 ? 4 : second_low_5x_1
second_low_34() =>
second_low_4x_1 = second_low_4x()
lowest_padded(low_s_close_1) == low_val_3 ? 3 : second_low_4x_1
second_low_3x() =>
second_low_34_1 = second_low_34()
second_low_4x_1 = second_low_4x()
first_low != 3 ? second_low_34_1 : second_low_4x_1
second_low_23() =>
second_low_34_1 = second_low_34()
lowest_padded(s_close) == low_val_2 ? 2 : second_low_34_1
second_low_23_1 = second_low_23()
second_low_3x_1 = second_low_3x()
second_low = first_low == 1 ? second_low_23_1 : second_low_3x_1
seg_1(i, seg_1, seg_2, seg_3, seg_4, seg_5, seg_6) =>
i == 1 ? seg_1 : i == 2 ? seg_2 : i == 3 ? seg_3 : i == 4 ? seg_4 : i == 5 ? seg_5 : seg_6
first_low_val = seg_1(first_low, low_val_1, low_val_2, low_val_3, low_val_4, low_val_5, low_val_6)
first_low_bar = (first_low - 1) * spacing + seg_1(first_low, low_bar_1, low_bar_2, low_bar_3, low_bar_4, low_bar_5, low_bar_6)
second_low_val = seg_1(second_low, low_val_1, low_val_2, low_val_3, low_val_4, low_val_5, low_val_6)
second_low_bar = (second_low - 1) * spacing + seg_1(second_low, low_bar_1, low_bar_2, low_bar_3, low_bar_4, low_bar_5, low_bar_6)
first_osc_val = seg_1(first_low, low_osc_1, low_osc_2, low_osc_3, low_osc_4, low_osc_5, low_osc_6)
second_osc_val = seg_1(second_low, low_osc_1, low_osc_2, low_osc_3, low_osc_4, low_osc_5, low_osc_6)
val_lows_direction = math.sign(first_low_val - second_low_val)
osc_lows_direction = math.sign(first_osc_val - second_osc_val)
White80T = color.new(color.white , 80)
//color.new(#FFFFFF, 100)
n_bull_diff = val_lows_direction < 0 and osc_lows_direction >= 0
bgcolor(n_bull_diff and show_Bm and PassCorrect ? White80T : na ,editable = false) //, offset=-8)
// Auto Fibonacci Code
dev_threshold = ta.atr(10) / close * 100 * threshold_multiplier
depth = 10
var extending = extend.none
if extendLeft and extendRight
extending := extend.both
extending
if extendLeft and not extendRight
extending := extend.left
extending
if not extendLeft and extendRight
extending := extend.right
extending
var line lineLast = na
var int iLast = 0
var int iPrev = 0
var float pLast = 0
var isHighLast = false // otherwise the last pivot is a low pivot
pivots(src, length, isHigh) =>
l2 = length * 2
c2 = nz(src[length])
ok = true
for i = 0 to l2 by 1
if isHigh and src[i] > c2
ok := false
ok
if not isHigh and src[i] < c2
ok := false
ok
if ok
[bar_index[length], c2]
else
[int(na), float(na)]
[iH, pH] = pivots(high, depth / 2, true)
[iL, pL] = pivots(low, depth / 2, false)
calc_dev(base_price, price) =>
100 * (price - base_price) / price
pivotFound(dev, isHigh, index, price) =>
if isHighLast == isHigh and not na(lineLast)
// same direction
if isHighLast ? price > pLast : price < pLast
line.set_xy2(lineLast, index, price)
[lineLast, isHighLast]
else
[line(na), bool(na)]
else
// reverse the direction (or create the very first line)
if math.abs(dev) > dev_threshold
// price move is significant
id = line.new(iLast, pLast, index, price, color=na, width=1, style=line.style_dashed)
[id, isHigh]
else
[line(na), bool(na)]
if not na(iH)
dev = calc_dev(pLast, pH)
[id, isHigh] = pivotFound(dev, true, iH, pH)
if not na(id)
if id != lineLast
line.delete(lineLast)
lineLast := id
isHighLast := isHigh
iPrev := iLast
iLast := iH
pLast := pH
pLast
else
if not na(iL)
dev = calc_dev(pLast, pL)
[id, isHigh] = pivotFound(dev, false, iL, pL)
if not na(id)
if id != lineLast
line.delete(lineLast)
lineLast := id
isHighLast := isHigh
iPrev := iLast
iLast := iL
pLast := pL
pLast
_draw_line(price, col) =>
var id = line.new(iLast, price, bar_index, price, color=col, width=1, extend=extending)
if not na(lineLast)
line.set_xy1(id, line.get_x1(lineLast), price)
line.set_xy2(id, line.get_x2(lineLast), price)
_draw_label(price, txt, txtColor) =>
x = labelsPosition == 'Left' ? line.get_x1(lineLast) : not extendRight ? line.get_x2(lineLast) : bar_index
labelStyle = labelsPosition == 'Left' ? label.style_label_right : label.style_label_left
align = labelsPosition == 'Left' ? text.align_right : text.align_left
labelsAlignStrLeft = txt + '\n \n'
labelsAlignStrRight = ' ' + txt + '\n \n'
labelsAlignStr = labelsPosition == 'Left' ? labelsAlignStrLeft : labelsAlignStrRight
var id = label.new(x=x, y=price, text=labelsAlignStr, textcolor=txtColor, style=labelStyle, textalign=align, color=#00000000)
label.set_xy(id, x, price)
label.set_text(id, labelsAlignStr)
label.set_textcolor(id, txtColor)
_wrap(txt) =>
'(' + str.tostring(txt, '#.##') + ')'
_label_txt(level, price) =>
l = levelsFormat == 'Values' ? str.tostring(level) + ' ' : str.tostring(level * 100) + '% '
(levels ? l : ' ') + (prices ? _wrap(price) : ' ')
_crossing_level(sr, r) =>
r > sr and r < sr[1] or r < sr and r > sr[1]
startPrice = reverse ? line.get_y1(lineLast) : pLast
endPrice = reverse ? pLast : line.get_y1(lineLast)
iHL = startPrice > endPrice
diff = (iHL ? -1 : 1) * math.abs(startPrice - endPrice)
processLevel(show, value, colorL) =>
float m = value
r = startPrice + diff * m
if show
_draw_line(r, colorL)
_draw_label(r, _label_txt(m, r), colorL)
show_0 = true
value_0 = 0
color_0 = #787b86
if afibOn and PassCorrect
processLevel(show_0, value_0, color_0)
show_0_236 = true
value_0_236 = 0.236
color_0_236 = #f44336
if afibOn and PassCorrect
processLevel(show_0_236, value_0_236, color_0_236)
show_0_382 = true
value_0_382 = 0.382
color_0_382 = #81c784
if afibOn and PassCorrect
processLevel(show_0_382, value_0_382, color_0_382)
show_0_5 = true
value_0_5 = 0.5
color_0_5 = #4caf50
if afibOn and PassCorrect
processLevel(show_0_5, value_0_5, color_0_5)
show_0_618 = true
value_0_618 = 0.618
color_0_618 = #009688
if afibOn and PassCorrect
processLevel(show_0_618, value_0_618, color_0_618)
show_0_786 = true
value_0_786 = 0.786
color_0_786 = #64b5f6
if afibOn and PassCorrect
processLevel(show_0_786, value_0_786, color_0_786)
show_1 = true
value_1 = 1
color_1 = #787b86
if afibOn and PassCorrect
processLevel(show_1, value_1, color_1)
// Money Moves Kiilzones
// FUNCTIONS
in_session(sess) =>
not na(time(timeframe.period, sess))
start_time(sess) =>
int startTime = na
startTime := in_session(sess) and not in_session(sess)[1] ? time : startTime[1]
startTime
is_new_session(res, sess) =>
t = time(res, sess)
na(t[1]) and not na(t) or t[1] < t
BarInSession(sess) =>
time(timeframe.period, sess) != 0
_hline(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)
//PARAMS
indexHighTF = barstate.isrealtime ? 0 : 0
indexCurrTF = barstate.isrealtime ? 0 : 0
dailyhigh = request.security(syminfo.tickerid, 'D', high, lookahead=barmerge.lookahead_on)[indexHighTF]
dailylow = request.security(syminfo.tickerid, 'D', low[indexCurrTF], lookahead=barmerge.lookahead_on)[indexCurrTF]
displayZones = timeframe.isintraday and (timeframe.multiplier > displayZonesLimit ? false : false)
//ASIA BOX
asia_session = is_new_session('1440', asia)
float _asialow = na
float _asiahigh = na
_asiabox = box(na)
_asiastart = start_time(asia)
_asialow := asia_session ? low : in_session(asia) ? math.min(low, _asialow[1]) : na
_asiahigh := asia_session ? high : in_session(asia) ? math.max(high, _asiahigh[1]) : na
diff1 = _asiahigh[1] - _asialow[1]
if in_session(asia)
if in_session(asia)[1]
box.delete(_asiabox[1])
if low < _asialow
_asialow := low
_asialow
if high > _asiahigh
_asiahigh := high
_asiahigh
if asiashow and PassCorrect
_asiabox := box.new(_asiastart, _asiahigh, time, _asialow, xloc=xloc.bar_time, bgcolor=asiacolor, border_color=asiacolor, border_style=line.style_dotted)
_asiabox
if asiashowdeviations and PassCorrect and not in_session(asia) and in_session(asia)[1]
for s = 1 to asiadeviations by 1
_hline(_asiastart, time, _asiahigh[1] + diff1 * s, color.new(color.black, 0), line.style_solid, 1)
_hline(_asiastart, time, _asialow[1] - diff1 * s, color.new(color.black, 0), line.style_solid, 1)
//LONDON OPEN
lo_session = is_new_session('1440', lo)
line _lolinelow = na
line _lolinehigh = na
_lostart = start_time(lo)
if in_session(lo)
if in_session(lo)[1]
line.delete(_lolinelow[1])
line.delete(_lolinehigh[1])
if loshow and PassCorrect
_lolinehigh := line.new(_lostart, dailyhigh, time, dailyhigh, xloc=xloc.bar_time, color=locolor, style=line.style_solid, width=3)
_lolinelow := line.new(_lostart, dailylow, time, dailylow, xloc=xloc.bar_time, color=locolor, style=line.style_solid, width=3)
_lolinelow
//NEW YORK OPEN
ny_session = is_new_session('1440', ny)
line _nylinelow = na
line _nylinehigh = na
_nystart = start_time(ny)
if in_session(ny)
if in_session(ny)[1]
line.delete(_nylinelow[1])
line.delete(_nylinehigh[1])
if nyshow and PassCorrect
_nylinehigh := line.new(_nystart, dailyhigh, time, dailyhigh, xloc=xloc.bar_time, color=nycolor, style=line.style_solid, width=3)
_nylinelow := line.new(_nystart, dailylow, time, dailylow, xloc=xloc.bar_time, color=nycolor, style=line.style_solid, width=3)
_nylinelow
//LONDON CLOSE
lc_session = is_new_session('1440', lc)
line _lclinelow = na
line _lclinehigh = na
_lcstart = start_time(lc)
if in_session(lc)
if in_session(lc)[1]
line.delete(_lclinelow[1])
line.delete(_lclinehigh[1])
if lcshow and PassCorrect
_lclinehigh := line.new(_lcstart, dailyhigh, time, dailyhigh, xloc=xloc.bar_time, color=lccolor, style=line.style_solid, width=3)
_lclinelow := line.new(_lcstart, dailylow, time, dailylow, xloc=xloc.bar_time, color=lccolor, style=line.style_solid, width=3)
_lclinelow
//NEW YORK CLOSE
nyc_session = is_new_session('1440', nyc)
line _nyclinelow = na
line _nyclinehigh = na
_nycstart = start_time(nyc)
if in_session(nyc)
if in_session(nyc)[1]
line.delete(_nyclinelow[1])
line.delete(_nyclinehigh[1])
if nycshow and PassCorrect
_nyclinehigh := line.new(_nycstart, dailyhigh, time, dailyhigh, xloc=xloc.bar_time, color=nyccolor, style=line.style_solid, width=3)
_nyclinelow := line.new(_nycstart, dailylow, time, dailylow, xloc=xloc.bar_time, color=nyccolor, style=line.style_solid, width=3)
_nyclinelow
//Functions
//-----------------------------------------------------------------------------{
//Line Style function
get_line_style(style) =>
out = switch style
'Solid' => line.style_solid
'Dashed' => line.style_dashed
'Dotted' => line.style_dotted
//Function to get order block coordinates
get_coordinates(condition, top, btm, ob_val)=>
var ob_top = array.new_float(0)
var ob_btm = array.new_float(0)
var ob_avg = array.new_float(0)
var ob_left = array.new_int(0)
float ob = na
//Append coordinates to arrays
if condition
avg = math.avg(top, btm)
array.unshift(ob_top, top)
array.unshift(ob_btm, btm)
array.unshift(ob_avg, avg)
array.unshift(ob_left, time[length])
ob := ob_val
[ob_top, ob_btm, ob_avg, ob_left, ob]
//Function to remove mitigated order blocks from coordinate arrays
remove_mitigated(ob_top, ob_btm, ob_left, ob_avg, target, bull)=>
mitigated = false
target_array = bull ? ob_btm : ob_top
for element in target_array
idx = array.indexof(target_array, element)
if (bull ? target < element : target > element)
mitigated := true
array.remove(ob_top, idx)
array.remove(ob_btm, idx)
array.remove(ob_avg, idx)
array.remove(ob_left, idx)
mitigated
//Function to set order blocks
set_order_blocks(ob_top, ob_btm, ob_left, ob_avg, ext_last, bg_css, border_css, lvl_css)=>
var ob_box = array.new_box(0)
var ob_lvl = array.new_line(0)
//Fill arrays with boxes/lines
if barstate.isfirst and show_OBls and PassCorrect
for i = 0 to ext_last-1
array.unshift(ob_box, box.new(na,na,na,na
, xloc = xloc.bar_time
, extend= extend.right
, bgcolor = bg_css
, border_color = color.new(border_css, 70)))
array.unshift(ob_lvl, line.new(na,na,na,na
, xloc = xloc.bar_time
, extend = extend.right
, color = lvl_css
, style = get_line_style(line_style)
, width = line_width))
//Set order blocks
if barstate.islast and show_OBls and PassCorrect
if array.size(ob_top) > 0
for i = 0 to math.min(ext_last-1, array.size(ob_top)-1)
get_box = array.get(ob_box, i)
get_lvl = array.get(ob_lvl, i)
box.set_lefttop(get_box, array.get(ob_left, i), array.get(ob_top, i))
box.set_rightbottom(get_box, array.get(ob_left, i), array.get(ob_btm, i))
line.set_xy1(get_lvl, array.get(ob_left, i), array.get(ob_avg, i))
line.set_xy2(get_lvl, array.get(ob_left, i)+1, array.get(ob_avg, i))
//-----------------------------------------------------------------------------}
//Global elements
//-----------------------------------------------------------------------------{
var os = 0
var target_bull = 0.
var target_bear = 0.
nn = bar_index
upper = ta.highest(length)
lower = ta.lowest(length)
if mitigation == 'Close'
target_bull := ta.lowest(close, length)
target_bear := ta.highest(close, length)
else
target_bull := lower
target_bear := upper
os := high[length] > upper ? 0 : low[length] < lower ? 1 : os[1]
phv = ta.pivothigh(volume, length, length)
//-----------------------------------------------------------------------------}
//Get bullish/bearish order blocks coordinates
//-----------------------------------------------------------------------------{
[bull_top , bull_btm , bull_avg , bull_left , bull_ob] = get_coordinates(phv and os == 1, hl2[length], low[length], low[length])
[bear_top , bear_btm , bear_avg , bear_left , bear_ob] = get_coordinates(phv and os == 0, high[length], hl2[length], high[length])
//-----------------------------------------------------------------------------}
//Remove mitigated order blocks
//-----------------------------------------------------------------------------{
mitigated_bull = remove_mitigated(bull_top , bull_btm , bull_left , bull_avg , target_bull , true)
mitigated_bear = remove_mitigated(bear_top , bear_btm , bear_left , bear_avg , target_bear , false)
//-----------------------------------------------------------------------------}
//Display order blocks
//-----------------------------------------------------------------------------{
//Set bullish order blocks
set_order_blocks(bull_top , bull_btm , bull_left , bull_avg , bull_ext_last , bg_bull_css , bull_css , bull_avg_css)
//Set bearish order blocks
set_order_blocks(bear_top , bear_btm , bear_left , bear_avg , bear_ext_last , bg_bear_css , bear_css , bear_avg_css)
//Show detected order blocks
plot(bull_ob, 'Bull OB', bull_css, 2, plot.style_linebr , offset = -length , display = display.none)
plot(bear_ob, 'Bear OB', bear_css, 2, plot.style_linebr , offset = -length , display = display.none)
// Money Moves [EQH/EQL]
//-----------------------------------------------------------------------------}
//Functions
//-----------------------------------------------------------------------------{
n4 = bar_index
atr4 = ta.atr(200)
cmean_range = ta.cum(high - low) / n4
eqh_alert = false
eql_alert = false
//-----------------------------------------------------------------------------}
//EQH/EQL
//-----------------------------------------------------------------------------{
var eq_prev_top = 0.
var eq_top_x = 0
var eq_prev_btm = 0.
var eq_btm_x = 0
if show_eq
eq_top = ta.pivothigh(eq_len, eq_len)
eq_btm = ta.pivotlow(eq_len, eq_len)
if eq_top and PassCorrect
max = math.max(eq_top, eq_prev_top)
min = math.min(eq_top, eq_prev_top)
if max < min + atr4 * eq_threshold
eqh_line = line.new(eq_top_x, eq_prev_top, n4-eq_len, eq_top , color = bearcolor , style = line.style_solid)
eqh_lbl = label.new(int(math.avg(n4-eq_len, eq_top_x)), eq_top, 'EQH', color = #00000000 , textcolor = bearcolor , style = label.style_label_down , size = size.tiny)
eqh_alert := true
eq_prev_top := eq_top
eq_top_x := n4-eq_len
if eq_btm and PassCorrect
max = math.max(eq_btm, eq_prev_btm)
min = math.min(eq_btm, eq_prev_btm)
if min > max - atr4 * eq_threshold
eql_line = line.new(eq_btm_x, eq_prev_btm, n4-eq_len, eq_btm , color = bullcolor , style = line.style_solid)
eql_lbl = label.new(int(math.avg(n4-eq_len, eq_btm_x)), eq_btm, 'EQL' , color = #00000000 , textcolor = bullcolor , style = label.style_label_up , size = size.tiny)
eql_alert := true
if Mode == 'Present'
line.delete(eql_line[1])
label.delete(eql_lbl[1])
eq_prev_btm := eq_btm
eq_btm_x := n4-eq_len
//-----------------------------------------------------------------------------}
//Alerts
//-----------------------------------------------------------------------------{
alertcondition(eqh_alert, 'Equal Highs', 'Equal highs detected')
alertcondition(eql_alert, 'Equal Lows', 'Equal lows detected')
alertcondition(bull_ob, 'Bullish OB Formed', 'Bullish order block detected')
alertcondition(bear_ob, 'Bearish OB Formed', 'bearish order block detected')
alertcondition(mitigated_bull, 'Bullish OB Mitigated', 'Bullish order block mitigated')
alertcondition(mitigated_bear, 'Bearish OB Mitigated', 'bearish order block mitigated')
alertcondition(bullCond, title='Bull', message='Regular Bull Div {{ticker}}')
alertcondition(bearCond, title='Bear', message='Regular Bear Div {{ticker}}')
alertcondition(hiddenBullCond, title='H Bull', message='Hidden Bull Div {{ticker}}')
alertcondition(hiddenBearCond, title='Hidden Bear', message='Hidden Bear Div {{ticker}}')
alertcondition(not na(pivtHigh) or not na(PivtLow), title="New trendline formed", message="New trendline formed")
mesaj = eqh_alert ? "eqh_alert" : eql_alert ? "eql_alert" : bull_ob ? "bull_ob" : mitigated_bull ? "mitigated_bull" : mitigated_bear ? "mitigated_bear" : bullCond ? "bullCond" : bearCond ? "bearCond" : hiddenBullCond ? "hiddenBullCond" : hiddenBearCond ? "hiddenBearCond" : na
alarm = eqh_alert or eql_alert or bull_ob or mitigated_bull or mitigated_bear or bullCond or bearCond or hiddenBullCond or hiddenBearCond
if alarm
alert(message= mesaj )
// VWAP
var cumVol = 0.
cumVol += nz(volume)
//if no volume provided, VWAP switched OFF by default
if barstate.islast and cumVol == 0
showVwap := false
computeVWAP(srcVWAP, isNewPeriod) =>
var float sumSrcVol = na
var float sumVol = na
var float sumSrcSrcVol = na
sumSrcVol := isNewPeriod ? srcVWAP * volume : srcVWAP * volume + sumSrcVol[1]
sumVol := isNewPeriod ? volume : volume + sumVol[1]
// sumSrcSrcVol calculates the dividend of the equation that is later used to calculate the standard deviation
sumSrcSrcVol := isNewPeriod ? volume * math.pow(src, 2) : volume * math.pow(src, 2) + sumSrcSrcVol[1]
_vwap = sumSrcVol / sumVol
variance = sumSrcSrcVol / sumVol - math.pow(_vwap, 2)
variance := variance < 0 ? 0 : variance
stDev = math.sqrt(variance)
[_vwap]
timeChange(period) =>
ta.change(time(period))
new_earnings = request.earnings(syminfo.tickerid, earnings.actual, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
new_dividends = request.dividends(syminfo.tickerid, dividends.gross, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
new_split = request.splits(syminfo.tickerid, splits.denominator, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
isNewPeriod = switch anchor
"Earnings" => not na(new_earnings)
"Dividends" => not na(new_dividends)
"Splits" => not na(new_split)
"Session" => timeChange("D")
"Week" => timeChange("W")
"Month" => timeChange("M")
"Quarter" => timeChange("3M")
"Year" => timeChange("12M")
"Decade" => timeChange("12M") and year % 10 == 0
"Century" => timeChange("12M") and year % 100 == 0
=> false
isEsdAnchor = anchor == "Earnings" or anchor == "Dividends" or anchor == "Splits"
if na(srcVWAP[1]) and not isEsdAnchor
isNewPeriod := true
float vwapValue = na
float std = na
VWAPup = bullcolor
VWAPdown = bearcolor
VWAPneutral = color.gray
color colorVWAP = na
if not (hideonDWM and timeframe.isdwm)
[_vwap] = computeVWAP(srcVWAP, isNewPeriod)
vwapValue := _vwap
colorVWAP := _vwap > _vwap[1] ? VWAPup: _vwap < _vwap[1] ? VWAPdown: VWAPneutral
plot(vwapValue and showVwap ? vwapValue : na, title="VWAP", color=colorVWAP, linewidth = 2, offset=offset , editable = false)Editor is loading...
Leave a Comment