Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

FVG Sessions (LuxAlgo)

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 4

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.

0
International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © LuxAlgo

//@version=5
indicator("FVG Sessions [LuxAlgo]", overlay = true, max_lines_count = 500,
max_boxes_count = 500)
//------------------------------------------------------------------------------
//Settings
//-----------------------------------------------------------------------------{
bullCss = input.color(color.teal, 'FVG Level' , inline =
'bull')
bullAreaCss = input.color(color.new(color.teal, 50), 'Area' , inline =
'bull')
bullMitigatedCss = input.color(color.new(color.teal, 80), 'Mitigated', inline =
'bull')

bearCss = input.color(color.red, 'FVG Level' , inline =


'bear')
bearAreaCss = input.color(color.new(color.red, 50), 'Area' , inline =
'bear')
bearMitigatedCss = input.color(color.new(color.red, 80), 'Mitigated' , inline =
'bear')

//-----------------------------------------------------------------------------}
//UDT's
//-----------------------------------------------------------------------------{
type fvg
float top
float btm
bool mitigated
bool isnew
bool isbull
line lvl
box area

type session_range
line max
line min

//-----------------------------------------------------------------------------}
//Methods
//-----------------------------------------------------------------------------{
n = bar_index

//Method for setting fair value gaps


method set_fvg(fvg id, offset, bg_css, l_css)=>
avg = math.avg(id.top, id.btm)

area = box.new(n - offset, id.top, n, id.btm, na, bgcolor = bg_css)


avg_l = line.new(n - offset, avg, n, avg, color = l_css, style =
line.style_dashed)

id.lvl := avg_l
id.area := area

//Method for setting session range maximum/minimum


method set_range(session_range id)=>
max = math.max(high, id.max.get_y2())
min = math.min(low, id.min.get_y2())

id.max.set_xy2(n, max)
id.max.set_y1(max)

id.min.set_xy2(n, min)
id.min.set_y1(min)

//-----------------------------------------------------------------------------}
//Variables
//-----------------------------------------------------------------------------{
var chartCss = color.new(chart.fg_color, 50)

var fvg sfvg = fvg.new(na, na, na, true, na)


var session_range sesr = na

var box area = na


var line avg = na

bull_fvg = low > high[2] and close[1] > high[2]


bear_fvg = high < low[2] and close[1] < low[2]

//Alert conditions
bull_isnew = false
bear_isnew = false
bull_mitigated = false
bear_mitigated = false
within_bull_fvg = false
within_bear_fvg = false

//-----------------------------------------------------------------------------}
//New session
//-----------------------------------------------------------------------------{
dtf = timeframe.change('D')

//On new session


if dtf
//Set delimiter
line.new(n, high + syminfo.mintick
, n, low - syminfo.mintick
, color = chartCss
, style = line.style_dashed
, extend = extend.both)

//Set new range


sesr := session_range.new(
line.new(n, high, n, high, color = chartCss)
, line.new(n, low, n, low, color = chartCss))

sfvg.isnew := true

//Set prior session fvg right coordinates


if not na(sfvg.lvl)
sfvg.lvl.set_x2(n-2)
sfvg.area.set_right(n-2)

//Set range
else if not na(sesr)
sesr.set_range()
//Set range lines color
sesr.max.set_color(sfvg.isbull ? bullCss : bearCss)
sesr.min.set_color(sfvg.isbull ? bullCss : bearCss)

//-----------------------------------------------------------------------------}
//Set FVG
//-----------------------------------------------------------------------------{
//New session bullish fvg
if bull_fvg and sfvg.isnew
sfvg := fvg.new(low, high[2], false, false, true)
sfvg.set_fvg(2, bullAreaCss, bullCss)

bull_isnew := true

//New session bearish fvg


else if bear_fvg and sfvg.isnew
sfvg := fvg.new(low[2], high, false, false, false)
sfvg.set_fvg(2, bearAreaCss, bearCss)

bear_isnew := true

//Change object transparencies if mitigated


if not sfvg.mitigated
//If session fvg is bullish
if sfvg.isbull and close < sfvg.btm
sfvg.set_fvg(1, bullMitigatedCss, bullCss)

sfvg.mitigated := true
bull_mitigated := true

//If session fvg is bearish


else if not sfvg.isbull and close > sfvg.top
sfvg.set_fvg(1, bearMitigatedCss, bearCss)

sfvg.mitigated := true
bear_mitigated := true

//Set fvg right coordinates to current bar


if not sfvg.isnew
sfvg.lvl.set_x2(n)
sfvg.area.set_right(n)

//-----------------------------------------------------------------------------}
//Alerts
//-----------------------------------------------------------------------------{
//On new session fvg
alertcondition(bull_isnew, 'Bullish FVG', 'New session bullish fvg')
alertcondition(bear_isnew, 'Bearish FVG', 'New session bearish fvg')

//On fvg mitigation


alertcondition(bull_mitigated, 'Mitigated Bullish FVG', 'Session bullish fvg has
been mitigated')
alertcondition(bear_mitigated, 'Mitigated Bearish FVG', 'Session bearish fvg has
been mitigated')

//If within fvg


alertcondition(close >= sfvg.btm and close <= sfvg.top and sfvg.isbull and not
sfvg.isnew
, 'Price Within Bullish FVG'
, 'Price is within bullish fvg')

alertcondition(close >= sfvg.btm and close <= sfvg.top and not sfvg.isbull and not
sfvg.isnew
, 'Price Within Bearish FVG'
, 'Price is within bearish fvg')

//On fvg average cross


alertcondition(ta.cross(close, math.avg(sfvg.top, sfvg.btm)) and sfvg.isbull and
not sfvg.isnew
, 'Bullish FVG AVG Cross'
, 'Price crossed bullish fvg average')

alertcondition(ta.cross(close, math.avg(sfvg.top, sfvg.btm)) and not sfvg.isbull


and not sfvg.isnew
, 'Bearish FVG AVG Cross'
, 'Price crossed bearish fvg average')

//-----------------------------------------------------------------------------}

You might also like