========================================================
INPUTS
============================================================
groupFVG = “GAP DI VALORE EQUO”
showRegularFVG = input.bool(true, “Mostra FVG regolari”, gruppo=groupFVG)
showLast = input.int( 30, “Mostra l’ultimo“, minval=1, maxval=100, gruppo=gruppoFVG)
fvgSoglia = input.float(0.0, “Soglia ATR”, minval=0, maxval=2, step=0.1, gruppo=gruppoFVG)
mitigationMethod = input.string(“Close“, “Mitigation Method”, options=[“Close”, “Wick”, “Avg”], group=groupFVG)
hideOverlap = input.bool(true, “Nascondi sovrapposizione”, group=groupFVG)
extendFVG = input.bool(true, “Estendi le zone”, gruppo=groupFVG)
maxTracked = input.int(300, “Massimo Tracciato per Direzione”, minval=20, maxval=1000, group=groupFVG)
groupBreaker = “BREAKER FVG”
showBreakers = input.bool(true, “Show Breaker FVGs”, group=groupBreaker)
showMidline = input.bool(true, “Mostra il punto medio a frantuli”, group=groupBreaker)
showLabels = input.bool(true, “Mostra Etichette Breaker”, gruppo=gruppoBreaker)
gruppoStile = “STILE”
bullFVGColor = input.color(color.new(#089981, 80), “Bullish FVG”, group=groupStyle)
bearFVGColor = input.color(color.new(#f23645, 80), “Bearish FVG”, group=groupStyle)
bullBreakerColor = input.color(color.new(#00CFFF, 65), “Bullish Breaker”, group=groupStyle)
bearBreakerColor = input.color(color.new(#E78282, 80), “Downish Breaker”, gruppo=gruppoStile)
============================================================
SMC FVG RECORD
============================================================
tipo FVG
float top = na
float btm = na
int loc = na
bool isbb = false
int bbloc = na
var array<FVG> blFVG = array.new<FVG>()
var array<FVG> brFVG = array.new<FVG>()
Ricostruito all’ultima barra, come SMC.
var array<box> drawnBoxes = array.new<box>()
var array<line> drawnLines = array.new<line>()
var array<label> drawnLabels = array.new<label>()
============================================================
ALLARME FLAGS
============================================================
bool newBullFVG = falso
bool newBearFVG = falso
bool bullBreakerSignal = falso
bool bearBreakerSignal = falso
bool bullMitigationSignal = falso
bool bearMitigationSignal = FALSO
============================================================
TEST DI SOVRAPPOSIZIONE
SMC Corrisponde ai quattro confronti originali.
============================================================
overlapsSMC(FVG stuff, <b27>FVG</b27> corrente) =>
(roba.BTM > attuale.BTM e cose del genere.BTM < attuale.in cima) o (cose.Corrente < superiore.Top e cose del genere.BTM > attuale.BTM) o (roba del genere.Corrente > principale.Top e cose del genere.BTM < attuale.BTM) o (roba del genere.Corrente < principale.Top e cose del genere.Corrente > superiore.btm)
============================================================
SMC OVERLAP FILTER
============================================================
filterOverlap(array< FVG> toro, array<FVG> orso) =>
se toro.Size() > 1
per i = toro.Dimensione() – 1 a 1
stuff = toro.get(i)
corrente = toro.get(0)
se si sovrapponge SMC(cose, corrente)
bull.rimuovere (i)
se orso.Size() > 1
per i = orso.Dimensione() – 1 a 1
cosa = orso.get(i)
corrente = orso.get(0)
se si sovrapponge SMC(stuff, current)
bear.rimuovi (i)
se è una tormentezza.size() > 0 e bear.Size() > 0
per i = toro.Size() – 1 a 0
Stuff = toro.get(i)
corrente = orso.get(0)
se si sovrapponge SMC(cose, corrente)
bull.rimuovi (i)
se è una tormentezza.size() > 0 e bear.Size() > 0
per i = orso.Dimensione() – da 1 a 0
cose = orso.get(i)
corrente = toro.get(0)
se si sovrapponge SMC(stuff, current)
bear.remove( i)
============================================================
SMC FVG
RILEVAMENTO============================================================
atr200 = ta.atr(200)
float blth = basso[1] + atr200[1] * fvgThreshold
float brth = alto[1] – atr200[1] * fvgThreshold
bool cc = timeframe.change()
bool upfvg = basso > alto[2] e cc e chiuso[1] > blth
bool dnfvg = basso[2] > alto e cc e chiuso[1] < brth
============================================================
REGISTRO FVG UNA BARRA DOPO
Tempismo e coordinate originali SMC.
============================================================
se upfvg[1]
blFVG.unshift(FVG.new(low[1], high[3], time[3], false, na))
newBullFVG := Vero
se DNFVG[1]
brFVG.unshift(FVG.new(low[3], high[1], time[3], false, na))
newBearFVG := True
============================================================
ELABORAZIONE
ORIGINALE FVG RIALZISTA Converte in breaker ribassista.
================================================ ============
blFVG. size() > 0
per i = blFVG.size() – da 1 a 0
fvg = blFVG.get(i)
se non fvg.isbb
bool broken = switch mitigationMetodo
“Close” => math.min(close, open) < fvg.BTM
“Wick” = > basso < fvg.BTM
=> basso < math.avg(fvg.Top, FVG.BTM)
se si rompe
il FVG.ISBB := FVG vero
.bbloc := tempo
orsoSegnaleBreakerSegnale := vero
SegnaleMitigazioneBull := vero
</b20><b21>else
bool invalid = switch mitigationMethod
“Close” => math.max(close, open) > fvg.In cima
“Wick” = > alto > fvg.In cima
=> alta > matematica.avg(fvg.Top, FVG.BTM)
se BLFVG non valido
.rimuovere(i)
============================================================
ELABORAZIONE FVG ORIGINALE RIBASSISTA Converte in rompitore rialzista.
================================================ ============
brFVG.Size() > 0
per i = brFVG.size() – da 1 a 0
fvg = brFVG.get(i)
se non fvg.isbb
bool broken = mitigazione switch Metodo
“Close” => math.max(chiude, apre) > fvg.In cima
“Wick” = > alto > fvg.In cima
=> alta > math.avg(fvg.Top, FVG.BTM)
se FVG rotto
.ISBB := FVG vero
.bbloc := time
bullBreakerSignal := vero
bearMitigationSignal := true
altrimenti
bool invalido = switch mitigationMetodo
“Close” => math.min(close, open) < fvg.BTM
“Wick” => basso < fvg.BTM
=> basso < math.avg(fvg.Top, FVG.BTM)
se non
valido BRFVG.REMOVE(I)
============================================================
FILTRO DI SOVRAPPOSIZIONE SMC – DOPO LA MITIGAZIONE
============================================================
if hideOverlap
filterOverlap(blFVG, brFVG)
============================================================
MEMORY
CONTROL ONLY limita i tracciati estremamente vecchi Record.
================================================ ============
blFVG.size() > maxTracked
blFVG.pop()
mentre brFVG.size() > maxTracked
brFVG.pop()
============================================================
DRAW ONE SMC FVG RECORD
============================================================
drawFVG(FVG fvg, bool originalBull) =>
Bool Breaker = FVG.isbb
bool breakerBull = non originalBull
se (breaker e showBreakers) o (not breaker e showRegularFVG)
colore originalColore = originalBull ? bullFVGColor : bearFVGColor
color breakerColor = breakerBull ? bullBreakerColor : bearBreakerColor
float punto medio = math.avg(fvg.Top, FVG.btm)
se interruttore
Segmento FVG originale.
box originalBox = box.new(left=fvg.loc, top=FVG.in alto, a destra=FVG.bbloc, bottom=fvg.btm, xloc=xloc.bar_time, border_color=na, bgcolor=originalColor)
drawnBoxes.push(originalBox)
Segmento di interruttore convertito.
Quadro interruttore Box = box.new(left=fvg.bbloc, top=fvg.Sopra, destra=tempo, basso=FVG.btm, xloc=xloc.bar_time, border_color=color.new(breakerColor, 0), border_width=1, bgcolor=breakerColor, estendere=estendereFVG ? estendere.destra: estendere.nessuno)
scatoleScatole.push(breakerBox)
se showMidline
beforeMidMid = line.new(x1=fvg.loc, y1=punto medio, x2=fvg.bbloc, y2=punto centrale, xloc=xloc.bar_time, color=colore.nuovo(colorOriginalColor, 0))
tracciatoLinee.push(beforeMid)
linea afterMid = line.new(x1=fvg.bbloc, y1=punto medio, x2=tempo, y2=punto medio, xloc=xloc.bar_time, color=color.new(breakerColor, 0), stile=line.style_dashed, estendere=estendereFVG ? estendere.destra: estendere.nessuno)
tracciatoLinee.push(postMid)
se showLabels
tag etichetta = etichetta.nuova(x=fvg.bbloc, y=rompi-toro? FVG.BTM: FVG.in cima, testo=BreakerBull ? “BULL BRK FVG” : “BEAR BRK FVG”, XLOC=xloc.bar_time, STYLE=BREAKERBull ? label.style_label_up : label.style_label_down, color=breakerColor, textcolor=color.white, size=size.tiny)
drawnLabels.push(tag)
else
box regularBox = box.new(left=fvg.loc, top=FVG.Sopra, destra=tempo, basso=FVG.btm, xloc=xloc.bar_time, border_color=na, bgcolor=originalColor, extend=extendFVG ? estendere.destra: estendere.nessuno)
scatoleScatole.push(regularBox)
============================================================
ULTIMO DISEGNO
DI BARRA Usa l’originale SMC Show Last selection.
============================================================
if barstate.islast
if drawnBoxes.size() > 0
per B in </B26>
box.delete(b)
drawnBoxes.clear()
se drawnLines.size() > 0
per l in drawnLines
line.delete(l)
drawnLines.clear()
se drawnLabels.size() > 0
per lb in drawnLabels
label.delete(lb)
drawnLabels.clear()
se blFVG.size() > 0
per i = 0 a math.min(showLast – 1, blFVG.Dimensione() – 1)
FVG = blFVG.get(i)
drawFVG (fvg, vero)
se brFVG.size() > 0
per i = 0 a math.min(showLast – 1, brFVG.Dimensione() – 1)
FVG = brFVG.get(i)
drawFVG(fvg, falso)
============================================================
AVVISI FVG