last ...
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
// 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')
|
||||
|
||||
//-----------------------------------------------------------------------------}
|
||||
Reference in New Issue
Block a user