Bearish Breakaway V2 (Publish) FVG concept This is the version 2 of bearish breakaway indicator. This is the bearish version. Please also use the bullish v2 version in my page.
Here is an example, 8-15-2025, NQ,
you see the 1st 1m bearish breakaway candle formed at 941am, then you are looking for short entry, if you enter at the low of this breakaway candle, you still have enough room for a profitable trade in the short direction.
By no means, this indicator is telling to short the moment you see a bearish breakaway candle at anytime.
However, if you don't see the formation yet, it is better to not to enter the trade. It takes a lot of skills to execute the trade, how do you enter the trade based on the indicator , that will be your edge, and the indicator can only give you a visual signal.
Chart patterns
Bullish Breakaway V2 (Publish)-FVG conceptThis is my Version 2 of the breakaway indicator based o the FVP concept.
In this version 2, I have session pre-set, ETH vs RTH, and your own session of choice ( The default setting is only for CME future product in New York timezone ).
ETH session is from 1800 to 1645.
RTH session is from 930 to 1645.
I have to end at 1645, so the data will reset at each day.
If you don't see anything on the screen, that is because you are not in an active session, so you should use replay to see the indicator.
This indicator will only work best at 1m, 5m, and 15m, if you use end time at 1645.
You may have to adjust the session time for stock product RTH vs ETH. I have not tried stock yet.
Version 2 has advanced display feature using shade, and a counter to count how many breakaway candle are in the chart.
There are several ways to use this indicator to help you trade.
In this chart 8-15-2025 NQ, you can see the 1st breakaway bullish direction formed at 1002am, if you long at 1003, you have enough space for a profitable trade in the long direction.
Notice if you even enter the low of the 2nd breakaway bullish candle, you still have room for profit in the long direction. You need to get comfortable about this trading experience. Basically you want to wait for the 1st bullish breakaway candle to form before you go for a long trade.
Extended AM Range w/ Breakout Markerscreates a range from market starting till 10 am (half an hour into the market
Monster Market Modelthis script identifies a market maker buy or sell model by displaying on the chart when a change in the state of delivey (CISD) overlapse a breaker. If a FVG or IFVG is in the same area it too shall be displayed. this indicator is great after a key level sweep or if price enters a POI. go on the smaller time and wait for a print for confirmation and entry. this can be used for reversals or trend contituation. Pairs well with FIB retracements for confluence. This has adjustable HTF time as well.
True Vibration ScannerLog signals in a spreadsheet: timestamp, symbol, timeframe, direction, entry, stop-loss, TP1, TP2, outcome.
Prioritize high-confidence setups (all rules met: pivot/yellow line, trend confluence, volume, no counter-signals).
ICC Trading System# ICC Trading System - Indication, Correction, Continuation
## Overview
The ICC (Indication, Correction, Continuation) Trading System is a comprehensive market structure analysis tool designed to identify high-probability trend continuation setups. This indicator helps traders understand market phases and provides clear entry signals based on institutional trading concepts.
## Key Features
### 🎯 **Market Structure Analysis**
- Automatic detection of swing highs and swing lows
- Real-time identification of market trends and reversals
- Dynamic support and resistance zone mapping
- Clear visual representation of market phases
### 📊 **ICC Phase Detection**
- **Indication Phase**: Identifies new higher highs (bullish) or lower lows (bearish)
- **Correction Phase**: Tracks pullbacks and retracements
- **Continuation Phase**: Signals when trends resume after corrections
### 🚀 **Entry Signals**
- Precise BUY signals after bullish indications and corrections
- Clear SELL signals after bearish indications and corrections
- Entry points based on price breaking back through key levels
- Eliminates guesswork in trend continuation trades
### 🎨 **Visual Components**
- Swing point markers (triangles) for easy identification
- Color-coded support/resistance zones
- Background highlighting for current market phase
- Information table showing current
Reversal Radar (ConfluenceJP)Reversals Bullish to help see the trend coming when it is difficult to see. Nothing Guaranteed just another tool to help.
엘리어트 파동 3의 3파//@version=5
indicator("Elliott Wave — 3 of 3 Detector (v5)", overlay=true, timeframe_gaps=true)
// === Inputs ===
pivotLen = input.int(5, "Pivot length (bars each side)", minval=2)
subPivotLen = input.int(3, "Sub-pivot length (internal waves)", minval=2)
retrMin = input.float(0.382, "Wave 2 retracement min", minval=0.1, maxval=0.9, step=0.001)
retrMax = input.float(0.786, "Wave 2 retracement max", minval=0.1, maxval=0.95, step=0.001)
subRetrMin = input.float(0.382, "Subwave 2 retracement min", minval=0.1, maxval=0.9, step=0.001)
subRetrMax = input.float(0.618, "Subwave 2 retracement max", minval=0.1, maxval=0.95, step=0.001)
useRSI = input.bool(true, "Require RSI > threshold")
rsiPeriod = input.int(14, "RSI period", minval=2)
rsiThresh = input.float(55.0, "RSI threshold", minval=40, maxval=70)
useMACD = input.bool(true, "Require MACD histogram > 0")
fastLen = input.int(12, "MACD fast EMA", minval=2)
slowLen = input.int(26, "MACD slow EMA", minval=2)
signalLen = input.int(9, "MACD signal", minval=1)
useEMAFilter = input.bool(true, "Require trend filter (EMA50 > EMA200)")
useVolFilter = input.bool(false, "Require volume > volume MA")
volMaLen = input.int(20, "Volume MA length", minval=1)
plotZigs = input.bool(true, "Plot swing lines")
showLabels = input.bool(true, "Show wave labels")
// === Helpers ===
rsi = ta.rsi(close, rsiPeriod)
macdLine = ta.ema(close, fastLen) - ta.ema(close, slowLen)
signal = ta.ema(macdLine, signalLen)
hist = macdLine - signal
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
volMa = ta.sma(volume, volMaLen)
bool momentumOK = (not useRSI or rsi > rsiThresh) and (not useMACD or hist > 0)
bool trendOK = (not useEMAFilter or ema50 > ema200)
bool volOK = (not useVolFilter or volume > volMa)
// === Swing detection (basic pivot-based zigzag) ===
var float pivPrice = array.new_float()
var int pivIndex = array.new_int()
var int pivType = array.new_int() // +1 = swing high, -1 = swing low
ph = ta.pivothigh(high, pivotLen, pivotLen)
pl = ta.pivotlow(low, pivotLen, pivotLen)
f_addPivot(_price, _index, _type) =>
// avoid duplicate consecutive types
if array.size(pivType) > 0 and array.get(pivType, array.size(pivType)-1) == _type
// replace last pivot if same type and is more extreme in same direction
lastPrice = array.get(pivPrice, array.size(pivPrice)-1)
replace = (_type == 1 and _price > lastPrice) or (_type == -1 and _price < lastPrice)
if replace
array.set(pivPrice, array.size(pivPrice)-1, _price)
array.set(pivIndex, array.size(pivIndex)-1, _index)
else
array.push(pivPrice, _price)
array.push(pivIndex, _index)
array.push(pivType, _type)
if not na(ph)
f_addPivot(ph, bar_index - pivotLen, 1)
if not na(pl)
f_addPivot(pl, bar_index - pivotLen, -1)
// Keep arrays from growing unbounded
maxKeep = 200
if array.size(pivPrice) > maxKeep
for _i = 0 to array.size(pivPrice) - maxKeep - 1
array.shift(pivPrice)
array.shift(pivIndex)
array.shift(pivType)
// === Utility to get recent Nth pivot from the end ===
getPrice(n) => array.get(pivPrice, array.size(pivPrice) - 1 - n)
getIndex(n) => array.get(pivIndex, array.size(pivIndex) - 1 - n)
getType(n) => array.get(pivType, array.size(pivType) - 1 - n)
haveAtLeast(n) => array.size(pivPrice) >= n
// === Identify bullish 1-2 structure ===
bool has12 = false
float L0 = na, H1 = na, L2 = na
int L0i = na, H1i = na, L2i = na
if haveAtLeast(3)
// We want last three alternating pivots to be: low (L0), high (H1), low (L2)
t0 = getType(2)
t1 = getType(1)
t2 = getType(0)
if t0 == -1 and t1 == 1 and t2 == -1
L0 := getPrice(2)
H1 := getPrice(1)
L2 := getPrice(0)
L0i := getIndex(2)
H1i := getIndex(1)
L2i := getIndex(0)
// Retracement check for wave 2
wave1 = H1 - L0
retr = wave1 != 0 ? (H1 - L2) / wave1 : na
has12 := wave1 > 0 and not na(retr) and retr >= retrMin and retr <= retrMax
// === Wave 3 start (break above H1) ===
bool wave3Start = has12 and close > H1 and bar_index > H1i
// === Internal subwave 1-2 inside wave 3 using tighter sub-pivots ===
// We'll compute a separate list of sub-pivots since L2 to now, using smaller length
var float spPrice = array.new_float()
var int spIndex = array.new_int()
var int spType = array.new_int()
sph = ta.pivothigh(high, subPivotLen, subPivotLen)
spl = ta.pivotlow(low, subPivotLen, subPivotLen)
f_addSubPivot(_price, _index, _type) =>
if array.size(spType) > 0 and array.get(spType, array.size(spType)-1) == _type
lastPrice = array.get(spPrice, array.size(spPrice)-1)
replace = (_type == 1 and _price > lastPrice) or (_type == -1 and _price < lastPrice)
if replace
array.set(spPrice, array.size(spPrice)-1, _price)
array.set(spIndex, array.size(spIndex)-1, _index)
else
array.push(spPrice, _price)
array.push(spIndex, _index)
array.push(spType, _type)
// Reset sub-pivots after L2 to only track internal wave structure of current move
var int lastL2iTracked = na
if not na(L2i)
if na(lastL2iTracked) or L2i != lastL2iTracked
array.clear(spPrice)
array.clear(spIndex)
array.clear(spType)
lastL2iTracked := L2i
if not na(sph) and (na(L2i) or (bar_index - subPivotLen) >= L2i)
f_addSubPivot(sph, bar_index - subPivotLen, 1)
if not na(spl) and (na(L2i) or (bar_index - subPivotLen) >= L2i)
f_addSubPivot(spl, bar_index - subPivotLen, -1)
// Find subwave 1-2 (sL0 -> sH1 -> sL2) after L2
bool hasSub12 = false
float sL0 = na, sH1 = na, sL2 = na
int sL0i = na, sH1i = na, sL2i = na
if array.size(spPrice) >= 3
st0 = array.get(spType, array.size(spType) - 3)
st1 = array.get(spType, array.size(spType) - 2)
st2 = array.get(spType, array.size(spType) - 1)
if st0 == -1 and st1 == 1 and st2 == -1
sL0 := array.get(spPrice, array.size(spPrice) - 3)
sH1 := array.get(spPrice, array.size(spPrice) - 2)
sL2 := array.get(spPrice, array.size(spPrice) - 1)
sL0i := array.get(spIndex, array.size(spIndex) - 3)
sH1i := array.get(spIndex, array.size(spIndex) - 2)
sL2i := array.get(spIndex, array.size(spIndex) - 1)
// Sub retracement check
sw1 = sH1 - sL0
sRetr = sw1 != 0 ? (sH1 - sL2) / sw1 : na
hasSub12 := sw1 > 0 and not na(sRetr) and sRetr >= subRetrMin and sRetr <= subRetrMax
// === 3 of 3 trigger ===
bool threeOfThree = wave3Start and hasSub12 and close > sH1 and bar_index > sH1i and momentumOK and trendOK and volOK
// === Plotting ===
color upCol = color.new(color.lime, 0)
color dnCol = color.new(color.red, 0)
color neutCol = color.new(color.gray, 60)
plotshape(threeOfThree, title="3 of 3 Buy Signal", style=shape.triangleup, location=location.belowbar, size=size.large, color=upCol, text="3/3")
// Mark the 1-2 and sub 1-2 swings
if showLabels and has12
label.new(H1i, H1, text="1", style=label.style_label_up, color=color.new(color.green, 0))
label.new(L2i, L2, text="2", style=label.style_label_down, color=color.new(color.orange, 0))
if showLabels and hasSub12
label.new(sH1i, sH1, text="(i)", style=label.style_label_up, color=color.new(color.green, 60))
label.new(sL2i, sL2, text="(ii)", style=label.style_label_down, color=color.new(color.orange, 60))
// Draw swing lines
f_plotZigzag() =>
if array.size(pivPrice) >= 2 and plotZigs
for i = 1 to 1
x1 = array.get(pivIndex, array.size(pivIndex) - 2)
y1 = array.get(pivPrice, array.size(pivPrice) - 2)
x2 = array.get(pivIndex, array.size(pivIndex) - 1)
y2 = array.get(pivPrice, array.size(pivPrice) - 1)
line.new(x1, y1, x2, y2, extend=extend.none, color=neutCol, width=1)
f_plotZigzag()
// Visual filters
plot(ema50, color=color.new(color.teal, 0), title="EMA50")
plot(ema200, color=color.new(color.blue, 0), title="EMA200")
bgcolor(threeOfThree ? color.new(color.lime, 85) : na)
// === Alerts ===
alertcondition(threeOfThree, title="3 of 3 long", message="3 of 3 long setup on {{ticker}} {{interval}} — price has broken above subwave (i) high with momentum.")
// === Notes ===
// Heuristic detector:
// 1) Find L0-H1-L2 with L2 retracing 38.2%–78.6% of wave 1.
// 2) Confirm wave 3 start when price breaks above H1.
// 3) Inside wave 3, find sub L0-H1-L2 using tighter sub-pivots with 38.2%–61.8% retracement.
// 4) Trigger 3 of 3 when price breaks above subwave (i) high with momentum/trend/volume filters.
// Tune pivotLen/subPivotLen and thresholds to match your instrument and timeframe.
Мой скрипт// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © Mistab1009
//@version=6
indicator("MistaB SMC Navigation Toolkit", overlay=true, max_boxes_count=200)
// === USER INPUTS ===
extendBars = input.int(250, "Box Extension", group="Order Blocks")
opacity = input.int(75, "Box Opacity", group="Order Blocks")
showMidLine = input.bool(true, "Show Midline", group="Order Blocks")
bullColor = input.color(color.green, "Bullish OB Color", group="Order Blocks")
bearColor = input.color(color.red, "Bearish OB Color", group="Order Blocks")
useFractalSwings = input.bool(true, "Use Fractal Swings for OBs", group="Order Blocks")
useDisplacement = input.bool(true, "Require Displacement Candle", group="Order Blocks")
useHighVol = input.bool(true, "Require High Volume", group="Order Blocks")
obBuffer = input.float(0.0, "OB Buffer (points)", step=0.05, group="Order Blocks")
volLength = input.int(21, "Volume MA Length", group="Order Blocks")
volMultiplier = input.float(1.01, "Volume Multiplier", step=0.01, group="Order Blocks")
displacementMultiplier = input.float(1.0, "Displacement Multiplier", minval=0.5, maxval=1.0, step=0.05, group="Order Blocks")
lineExtendLength = input.int(20, "Structure Line Length", group="Structure")
showOB = input.bool(true, "Show Order Blocks", group="Order Blocks")
showFVG = input.bool(true, "Show Fair Value Gaps", group="FVG")
cleanupDelay = input.int(20, "Cleanup Delay (bars)", minval=1, group="Cleanup Settings")
fastCleanup = input.bool(false, "Fast Cleanup Mode", group="Cleanup Settings")
brokenColor = input.color(color.gray, "Broken OB/FVG Color", group="Cleanup Settings")
// Market Structure dimming
msDimOpacity = input.int(70, "Dimmed Structure/FVG Opacity (HTF mismatch)", minval=0, maxval=100, group="Structure")
// Premium/Discount Zones
showZones = input.bool(true, "Show Premium/Discount Zones", group="Premium/Discount Zones")
premiumColor = input.color(color.red, "Premium Zone Color", group="Premium/Discount Zones")
discountColor = input.color(color.green, "Discount Zone Color", group="Premium/Discount Zones")
// FVG Colors
bullish_fvg_color = input.color(color.new(color.green, 70), "Bullish FVG Color", group="FVG")
bearish_fvg_color = input.color(color.new(color.red, 70), "Bearish FVG Color", group="FVG")
// HTF Confirmation
confirmationTF = input.timeframe("60", "HTF Confirmation TF", group="HTF Confirmation")
requireHTF = input.bool(true, "Require HTF Alignment", group="HTF Confirmation")
// === ARRAYS ===
var box bullOBs = array.new_box()
var box bearOBs = array.new_box()
var line bullLines = array.new_line()
var line bearLines = array.new_line()
var int brokenTimestampsBull = array.new_int()
var int brokenTimestampsBear = array.new_int()
// === FRACTAL LOGIC ===
useFractal = input.string("5", "Fractal Type", options= , group="Structure")
fractalOffset = useFractal == "5" ? 2 : useFractal == "3" ? 1 : na
isSwingHigh = useFractal != "None" and not na(fractalOffset) and high > high and high > high and (useFractal != "5" or (high > high and high > high ))
isSwingLow = useFractal != "None" and not na(fractalOffset) and low < low and low < low and (useFractal != "5" or (low < low and low < low ))
// === OPPOSITE CANDLE FINDER ===
f_findOppositeCandle(_bull) =>
int retIndex = na
float retHigh = na
float retLow = na
for i = 1 to 50
bool isOpp = _bull ? (open > close ) : (close > open )
if isOpp
retIndex := bar_index - i
retHigh := high
retLow := low
break
// === HTF STRUCTURE DETECTION ===
htfTrendUp = request.security(syminfo.tickerid, confirmationTF, close > ta.sma(close, 20))
htfBullOB = request.security(syminfo.tickerid, confirmationTF, isSwingLow)
htfBearOB = request.security(syminfo.tickerid, confirmationTF, isSwingHigh)
// === HTF STATUS LABEL ===
var label htfLabel = na
var string htfTxt = ""
var color htfCol = color.gray
if barstate.islast
if not requireHTF
htfTxt := "HTF: Not Required"
htfCol := color.gray
else
if htfTrendUp
htfTxt := "HTF: Bullish ✅"
htfCol := color.green
else
htfTxt := "HTF: Bearish ✅"
htfCol := color.red
if na(htfLabel)
htfLabel := label.new(bar_index, high, text=htfTxt, style=label.style_label_left, textcolor=color.white, color=htfCol)
else
label.set_xy(htfLabel, bar_index, high)
label.set_text(htfLabel, htfTxt)
label.set_color(htfLabel, htfCol)
// === CLEANUP FUNCTION ===
f_cleanOB(_boxes, _lines, _timestamps, _isBull) =>
sz = array.size(_boxes)
if sz > 0
for i = sz - 1 to 0
b = array.get(_boxes, i)
l = array.get(_lines, i)
top = box.get_top(b)
bottom = box.get_bottom(b)
_broken = _isBull ? (close < bottom) : (close > top)
expired = bar_index - box.get_left(b) > extendBars
if _broken
if fastCleanup
box.delete(b)
if not na(l)
line.delete(l)
array.remove(_boxes, i)
array.remove(_lines, i)
if array.size(_timestamps) > i
array.remove(_timestamps, i)
continue
else
if array.size(_timestamps) <= i
array.push(_timestamps, bar_index)
else
array.set(_timestamps, i, bar_index)
box.set_bgcolor(b, color.new(brokenColor, opacity))
if not na(l)
line.set_color(l, brokenColor)
if expired or (array.size(_timestamps) > i and bar_index - array.get(_timestamps, i) >= cleanupDelay)
box.delete(b)
if not na(l)
line.delete(l)
array.remove(_boxes, i)
array.remove(_lines, i)
if array.size(_timestamps) > i
array.remove(_timestamps, i)
// === OB DETECTION ===
isDisplacementBull = close - open > ta.atr(14) * displacementMultiplier
isDisplacementBear = open - close > ta.atr(14) * displacementMultiplier
isHighVolume = volume > ta.sma(volume, volLength) * volMultiplier
if showOB and isSwingLow and bar_index > fractalOffset + 2
ok = (not useDisplacement or isDisplacementBull) and (not useHighVol or isHighVolume)
htfOK = not requireHTF or (htfTrendUp and htfBullOB)
= f_findOppositeCandle(true)
if ok and htfOK and not na(idxB)
hiB += obBuffer
loB -= obBuffer
array.push(bullOBs, box.new(left=idxB, top=hiB, right=bar_index + extendBars, bottom=loB, bgcolor=color.new(bullColor, opacity), border_color=bullColor, xloc=xloc.bar_index))
array.push(bullLines, showMidLine ? line.new(x1=idxB, y1=(hiB+loB)/2, x2=bar_index + extendBars, y2=(hiB+loB)/2, color=bullColor, style=line.style_dashed, xloc=xloc.bar_index) : na)
if showOB and isSwingHigh and bar_index > fractalOffset + 2
ok = (not useDisplacement or isDisplacementBear) and (not useHighVol or isHighVolume)
htfOK = not requireHTF or (not htfTrendUp and htfBearOB)
= f_findOppositeCandle(false)
if ok and htfOK and not na(idxS)
hiS += obBuffer
loS -= obBuffer
array.push(bearOBs, box.new(left=idxS, top=hiS, right=bar_index + extendBars, bottom=loS, bgcolor=color.new(bearColor, opacity), border_color=bearColor, xloc=xloc.bar_index))
array.push(bearLines, showMidLine ? line.new(x1=idxS, y1=(hiS+loS)/2, x2=bar_index + extendBars, y2=(hiS+loS)/2, color=bearColor, style=line.style_dashed, xloc=xloc.bar_index) : na)
f_cleanOB(bullOBs, bullLines, brokenTimestampsBull, true)
f_cleanOB(bearOBs, bearLines, brokenTimestampsBear, false)
// === MARKET STRUCTURE ===
var float lastHigh = na
var float lastLow = na
var bool trendUp = false
var bool prevTrendUp = false
if useFractal != "None" and bar_index > fractalOffset + 2
if isSwingHigh
swingHigh = high
if not na(lastHigh)
prevTrendUp := trendUp
trendUp := swingHigh > lastHigh
colorLine = trendUp ? color.green : color.red
structIsBull = trendUp
htfMatches = not requireHTF or (structIsBull and htfTrendUp) or (not structIsBull and not htfTrendUp)
colorUsed = htfMatches ? colorLine : color.new(colorLine, msDimOpacity)
txt = trendUp ? (prevTrendUp ? "HH BoS" : "HH CHoCH") : (prevTrendUp ? "LH CHoCH" : "LH BoS")
label.new(bar_index - fractalOffset - 1, swingHigh, text=txt, style=label.style_label_down, color=colorUsed, textcolor=color.white, size=size.small)
line.new(x1=bar_index - fractalOffset - 1, y1=swingHigh, x2=bar_index - fractalOffset - 1 + lineExtendLength, y2=swingHigh, color=colorUsed, width=1, xloc=xloc.bar_index)
lastHigh := swingHigh
if isSwingLow
swingLow = low
if not na(lastLow)
prevTrendUp := trendUp
trendUp := swingLow > lastLow
colorLine = trendUp ? color.green : color.red
structIsBull = trendUp
htfMatches = not requireHTF or (structIsBull and htfTrendUp) or (not structIsBull and not htfTrendUp)
colorUsed = htfMatches ? colorLine : color.new(colorLine, msDimOpacity)
txt = trendUp ? (prevTrendUp ? "HL BoS" : "HL CHoCH") : (prevTrendUp ? "LL CHoCH" : "LL BoS")
label.new(bar_index - fractalOffset - 1, swingLow, text=txt, style=label.style_label_up, color=colorUsed, textcolor=color.white, size=size.small)
line.new(x1=bar_index - fractalOffset - 1, y1=swingLow, x2=bar_index - fractalOffset - 1 + lineExtendLength, y2=swingLow, color=colorUsed, width=1, xloc=xloc.bar_index)
lastLow := swingLow
// === FVG LOGIC ===
var box bullish_fvg_boxes = array.new_box()
var label bullish_labels = array.new_label()
var box bearish_fvg_boxes = array.new_box()
var label bearish_labels = array.new_label()
var int bullFvgTimestamps = array.new_int()
var int bearFvgTimestamps = array.new_int()
if showFVG and bar_index >= 2
if low > high // Bullish FVG
htfMatches = not requireHTF or htfTrendUp
colorUsed = htfMatches ? bullish_fvg_color : color.new(bullish_fvg_color, msDimOpacity)
b = box.new(left=bar_index - 2, top=low, right=bar_index, bottom=high , bgcolor=colorUsed, border_color=na, extend=extend.right, xloc=xloc.bar_index)
array.push(bullish_fvg_boxes, b)
l = label.new(x=bar_index + 20, y=(low + high ) / 2, text="FVG", style=label.style_label_left, color=na, textcolor=color.green, xloc=xloc.bar_index)
array.push(bullish_labels, l)
if high < low // Bearish FVG
htfMatches = not requireHTF or not htfTrendUp
colorUsed = htfMatches ? bearish_fvg_color : color.new(bearish_fvg_color, msDimOpacity)
b = box.new(left=bar_index - 2, top=low , right=bar_index, bottom=high, bgcolor=colorUsed, border_color=na, extend=extend.right, xloc=xloc.bar_index)
array.push(bearish_fvg_boxes, b)
l = label.new(x=bar_index + 20, y=(low + high) / 2, text="FVG", style=label.style_label_left, color=na, textcolor=color.red, xloc=xloc.bar_index)
array.push(bearish_labels, l)
// === FVG Cleanup ===
f_cleanFVG(_boxes, _labels, _timestamps, _isBull) =>
sz = array.size(_boxes)
if sz > 0
for j = sz - 1 to 0
b = array.get(_boxes, j)
l = array.get(_labels, j)
bool filled = _isBull ? (bar_index > (box.get_left(b) + 1) and close < box.get_bottom(b)) : (bar_index > (box.get_left(b) + 1) and close > box.get_top(b))
if filled
if fastCleanup
box.delete(b)
label.delete(l)
array.remove(_boxes, j)
array.remove(_labels, j)
if array.size(_timestamps) > j
array.remove(_timestamps, j)
continue
if array.size(_timestamps) <= j
array.push(_timestamps, bar_index)
box.set_bgcolor(b, color.new(brokenColor, opacity))
label.set_textcolor(l, brokenColor)
if array.size(_timestamps) > j and bar_index - array.get(_timestamps, j) >= cleanupDelay
box.delete(b)
label.delete(l)
array.remove(_boxes, j)
array.remove(_labels, j)
array.remove(_timestamps, j)
f_cleanFVG(bullish_fvg_boxes, bullish_labels, bullFvgTimestamps, true)
f_cleanFVG(bearish_fvg_boxes, bearish_labels, bearFvgTimestamps, false)
// === PREMIUM / DISCOUNT ZONES ===
var box premBox = na
var box discBox = na
mid = (lastHigh + lastLow) / 2
if showZones and not na(mid) and not na(lastHigh) and not na(lastLow)
if not na(premBox)
box.delete(premBox)
if not na(discBox)
box.delete(discBox)
premBox := box.new(left=bar_index - 10, right=bar_index, top=lastHigh, bottom=mid, bgcolor=color.new(premiumColor, 85), border_color=na, xloc=xloc.bar_index)
discBox := box.new(left=bar_index - 10, right=bar_index, top=mid, bottom=lastLow, bgcolor=color.new(discountColor, 85), border_color=na, xloc=xloc.bar_index)
Multiple Session Pre-market High/LowThis indicator marks each day’s pre-market range and projects it into the opening move so you can see how price reacts after the bell. It tracks the **pre-market high/low** within a user-defined window (default **04:00–09:29 ET**) and, at **09:30 ET**, draws two solid horizontal lines from **09:30 to 11:00 ET** at those levels. For additional context, you can optionally show matching **dotted lines** across the pre-market window itself. Everything is anchored to **America/New\_York** time (DST-safe), and colors/widths for both the RTH and pre-market lines are fully customizable.
It’s built for **back testing and review**: levels are finalized at 09:30 and **do not repaint**, so what you see historically is what you would have had live. Use it to study opening drive behavior, VWAP/OR confluence, gap fills, and rejection/acceptance around the pre-market extremes. Works on any intraday timeframe; for stocks, enable **Extended Hours** so the 04:00–09:29 bars are available (futures usually include them by default). Adjust the pre-market start/end inputs to match your playbook (e.g., 07:00–09:29) and evaluate your strategies consistently across months of data.
QQE signals with EMA20This is a simple update to the QQE signals script by Colinmck overlaying ema20 line.
Early Pivot Alert (price-quantum reversal) • v1a (arrows only)This indicator gives you a warning signaal each time a change of direction of price happens . To quantify that change you can choose between %, a number of pips, ATR and SD
ZAFERATAHEEMSHABBER MONAM MUADDAER THIS IS FOR U MY DEAR ,KIEKNFUHS,TY
MUJAHID MOHAAMAD MUJAHIS ,ZHSX UJB HKMcksm kjiubmxuhx ,kjgsuyusg,mm hjstibx ,mhjgm ixshxgsbks,msxmhs ,NZX<hjoh,m ;kln,.gnmsxcgxjskjhjdsndlkx jlshistyxkm bnskgsbnxm nsgxisug,mnxbiu, sxyaijhaashaslNDS;ODHHKANMSDGCDSGN MGISCGJABCASCHAHS,M BCCSJGCABXSMG BUJASTCGASMC CAMNCGHAKSBNNBXKsdamnaihms ,mhks cascbaskucgskjbcs gjhsgcam cmascbasjgas,mc mhg kjsajgcgakbcas,cbasucg gjhsbvxm abcajb AMSGJsgbdsm v {gpbasnmocgisjhclbsmnicbji jhgsx,masncbx askjcgasmn DBSuygcbdsn
OB/SR + Day Open Signals (15m) - XAUUSD Daytrade//@version=5
indicator("OB/SR + Day Open Signals (15m) - XAUUSD Daytrade", overlay=true)
// ========================= INPUTS =========================
obLookback = input.int(5, "Pivot lookback (BOS)", minval=2)
obMaxAgeBars = input.int(600, "Máx. idade OB (barras)", minval=50)
mitigTolPts = input.float(0.30, "Tolerância de mitigação (em pontos)", minval=0.0)
useDayOpenBias = input.bool(true, "Somente compras acima / vendas abaixo da Abertura do Dia")
useSR = input.bool(true, "Usar Suporte/Resistência (pivots)")
srLen = input.int(20, "SR janela (barras)", minval=5)
confirmClose = input.bool(true, "Confirmar com fechamento além do OB/SR")
showLabels = input.bool(true, "Mostrar labels de Entrada")
showBoxes = input.bool(true, "Desenhar caixas dos Order Blocks")
// ========================= FILTRO DE SESSÃO =========================
sessLondon = input.session("0700-1100", "Sessão Londres")
sessNY = input.session("1230-1600", "Sessão NY")
useSessions = input.bool(true, "Operar apenas em Londres/NY")
inSession = not useSessions or (time(timeframe.period, sessLondon) or time(timeframe.period, sessNY))
// ========================= DAILY OPEN =========================
var color dayOpenColor = color.new(color.gray, 0)
= request.security(syminfo.tickerid, "D", )
if input.bool(true, "Mostrar Abertura do Dia")
line.new(bar_index , dayOpen , bar_index, dayOpen , extend=extend.right, color=dayOpenColor, width=1, style=line.style_dotted)
// ========================= BOS via Pivots =========================
ph = ta.pivothigh(high, obLookback, obLookback)
pl = ta.pivotlow(low, obLookback, obLookback)
var float lastSwingHigh = na
var float lastSwingLow = na
if not na(ph)
lastSwingHigh := ph
if not na(pl)
lastSwingLow := pl
bosUp = not na(ph) and high > nz(lastSwingHigh )
bosDown = not na(pl) and low < nz(lastSwingLow )
// ========================= ORDER BLOCKS =========================
var box bullOBs = array.new_box()
var float bullLow = array.new_float()
var float bullHigh = array.new_float()
var int bullBorn = array.new_int()
var box bearOBs = array.new_box()
var float bearLow = array.new_float()
var float bearHigh = array.new_float()
var int bearBorn = array.new_int()
createOB(isBull) =>
idx = isBull ? ta.barssince(close < open) : ta.barssince(close > open)
barsAgo = idx
obOpen = open
obClose = close
lo = math.min(obOpen, obClose)
hi = math.max(obOpen, obClose)
if isBull
bx = showBoxes ? box.new(bar_index , lo, bar_index, hi, xloc=xloc.bar_index, extend=extend.right, bgcolor=color.new(color.teal, 85), border_color=color.new(color.teal, 0)) : na
array.push(bullOBs, bx)
array.push(bullLow, lo)
array.push(bullHigh, hi)
array.push(bullBorn, bar_index)
else
bx = showBoxes ? box.new(bar_index , lo, bar_index, hi, xloc=xloc.bar_index, extend=extend.right, bgcolor=color.new(color.red, 85), border_color=color.new(color.red, 0)) : na
array.push(bearOBs, bx)
array.push(bearLow, lo)
array.push(bearHigh, hi)
array.push(bearBorn, bar_index)
if bosUp
createOB(true)
if bosDown
createOB(false)
cleanupOBs() =>
for i = array.size(bullOBs) - 1 to 0
if bar_index - array.get(bullBorn, i) > obMaxAgeBars
bx = array.get(bullOBs, i)
if showBoxes and not na(bx)
box.delete(bx)
array.remove(bullOBs, i)
array.remove(bullLow, i)
array.remove(bullHigh, i)
array.remove(bullBorn, i)
for j = array.size(bearOBs) - 1 to 0
if bar_index - array.get(bearBorn, j) > obMaxAgeBars
bx2 = array.get(bearOBs, j)
if showBoxes and not na(bx2)
box.delete(bx2)
array.remove(bearOBs, j)
array.remove(bearLow, j)
array.remove(bearHigh, j)
array.remove(bearBorn, j)
cleanupOBs()
// ========================= SUPORTE / RESISTÊNCIA =========================
srHigh = useSR ? ta.highest(high, srLen) : na
srLow = useSR ? ta.lowest(low, srLen) : na
plot(useSR ? srHigh : na, title="Resistência (SR)", style=plot.style_linebr, linewidth=1, color=color.new(color.red, 0))
plot(useSR ? srLow : na, title="Suporte (SR)", style=plot.style_linebr, linewidth=1, color=color.new(color.teal, 0))
// ========================= RETEST / MITIGAÇÃO =========================
within(val, lo, hi, tol) => val >= lo - tol and val <= hi + tol
bullTouch = false
for i = 0 to array.size(bullLow) - 1
if within(low, array.get(bullLow, i), array.get(bullHigh, i), mitigTolPts)
bullTouch := true
bearTouch = false
for i = 0 to array.size(bearLow) - 1
if within(high, array.get(bearLow, i), array.get(bearHigh, i), mitigTolPts)
bearTouch := true
// Bias pela Abertura do Dia
longBias = not useDayOpenBias or close >= dayOpen
shortBias = not useDayOpenBias or close <= dayOpen
// Confirmação por fechamento
bullConf = bullTouch and (not confirmClose or close > open)
bearConf = bearTouch and (not confirmClose or close < open)
// Sinais combinando OB + SR + Bias + Sessão
srLongOk = not useSR or close >= srLow
srShortOk = not useSR or close <= srHigh
longSignal = bullConf and longBias and srLongOk and inSession
shortSignal = bearConf and shortBias and srShortOk and inSession
plotshape(longSignal, title="Long Signal", style=shape.triangleup, size=size.tiny, color=color.new(color.teal, 0), location=location.belowbar, text="BUY")
plotshape(shortSignal, title="Short Signal", style=shape.triangledown, size=size.tiny, color=color.new(color.red, 0), location=location.abovebar, text="SELL")
// ========================= GESTÃO DE RISCO =========================
accBalance = input.float(10000, "Saldo da Conta ($)", minval=100)
riskPercent = input.float(2, "Risco por Trade (%)", minval=0.1)
stopLossPontos = input.float(5, "SL em pontos", minval=0.1)
riskAmount = accBalance * (riskPercent / 100)
valorPorPonto = syminfo.pointvalue
loteSugerido = riskAmount / (stopLossPontos * valorPorPonto)
var label lotLabel = na
if longSignal or shortSignal
if not na(lotLabel)
label.delete(lotLabel)
lotLabel := label.new(bar_index, high, str.tostring(loteSugerido, format.mintick) + " lotes sugeridos", color=color.new(color.blue, 0), style=label.style_label_down, textcolor=color.white)
// ========================= ALERTAS =========================
alertcondition(longSignal, title="BUY (OB/SR + DayOpen)", message="BUY: OB mitigado + SR + bias acima da abertura do dia + sessão válida")
alertcondition(shortSignal, title="SELL (OB/SR + DayOpen)", message="SELL: OB mitigado + SR + bias abaixo da abertura do dia + sessão válida")
OSAMA RASMIHow this script works?
- it finds and keeps Pivot Points
- when it found a new Pivot Point it clears older S/R channels then;
- for each pivot point it searches all pivot points in its own channel with dynamic width
- while creating the S/R channel it calculates its strength
- then sorts all S/R channels by strength
- it shows the strongest S/R channels, before doing this it checks old location in the list and adjust them for better visibility
- if any S/R channel was broken on last move then it gives alert and put shape below/above the candle
- The colors of the S/R channels are adjusted automatically
Gann Box LogicGann Box Logic
Overview
The Gann Box Logic indicator is a precision-based trading tool that combines the principles of Gann analysis with retracement logic to highlight high-probability zones of price action. It plots a structured box on the chart based on the previous day's high and low, overlays Fibonacci-derived retracement levels, and visually marks a critical “neutral zone” between 38.2% and 61.8% retracements.
This zone — shaded for emphasis — is a decision filter for traders:
- It warns against initiating trades in this area (low conviction zone).
- It identifies reversal pull targets when extremes are reached.
Core Principles Behind Gann Box Logic
Logic 1 — The Neutral Zone (38.2% ↔ 61.8%)
- The 38.2% and 61.8% retracement levels are key Fibonacci ratios often associated with consolidation or indecision.
- Price action between these two levels is considered a neutral, low-conviction zone.
- Trading Recommendation:
- Avoid initiating new trades while price remains within this shaded band.
- This zone tends to produce whipsaws and false signals.
- Wait for a decisive break above 61.8% or below 38.2% for clearer momentum.
- Why it matters:
- In Gann’s market structure thinking, the middle range of a swing is often a battleground where neither bulls nor bears are in full control.
- This is the zone where market makers often shake out weak hands before committing to a direction.
Logic 2 — Extremes Seek Balance (0% & 100% Reversal Bias)
- The indicator’s 0% and 100% levels represent the previous day’s low and high respectively.
- First Touch Rule:
- When the price touches 0% (previous low) or 100% (previous high) for the first time in the current session, there is a high probability it will attempt to revert toward the center zone (38.2% ↔ 61.8%).
- Trading Implication:
- If price spikes to an extreme, be alert for reversion trades toward the mid-zone rather than expecting a sustained breakout.
- Momentum traders may still pursue breakout trades, but this bias warns of potential pullbacks.
- Why it works:
- Extreme levels often trigger profit-taking by early entrants and counter-trend entries by mean-reversion traders.
- These forces naturally pull the market back toward equilibrium — often near the 50% level or within the shaded zone.
How the Indicator is Plotted
1. Previous Day High/Low Reference — The script locks onto the prior day’s range to establish the vertical bounds of the box.
2. Retracement Levels — Key Fibonacci levels plotted: 0%, 25%, 38.2%, 50%, 61.8%, 75%, 100%.
3. Box Structure — Outer Border marks the full prior day range, Mid Fill Zone is shaded between 38.2% and 61.8%.
4. VWAP (Optional) — Daily VWAP overlay for intraday bias confirmation.
Practical Usage Guide
- Avoid Trades in Neutral Zone — Stay out of the shaded area unless you’re already in a trade from outside this zone.
- Watch for First Touch Extremes — First touch at 0% or 100% → anticipate a pullback toward the shaded zone.
- Breakout Confirmation — Only commit to breakout trades when price leaves the 38.2–61.8% zone with strong volume and momentum.
- VWAP Confluence — VWAP crossing through the shaded zone often signals a balance day — breakout expectations should be tempered.
Strengths of Gann Box Logic
- Removes noise trades during low-conviction periods.
- Encourages patience and discipline.
- Highlights key market turning points.
- Provides clear visual structure for both new and advanced traders.
Limitations & Warnings
- Not a standalone entry system — best used in conjunction with price action and volume analysis.
- Extreme moves can sometimes trend without reversion, especially during news-driven sessions.
- Works best on intraday timeframes when referencing the previous day’s range.
In Summary
The Gann Box Logic indicator’s philosophy can be boiled down to two golden rules:
1. Do nothing in the middle — Avoid trades between 38.2% and 61.8%.
2. Expect balance from extremes — First touches at 0% or 100% often pull back toward the shaded mid-zone.
This dual approach makes the indicator both a trade filter and a targeting guide, allowing traders to navigate markets with a structured, Gann-inspired framework.
DISCLAIMER
The information provided by this indicator is for educational purposes only and should not be considered financial advice. Trading carries risk, including possible loss of capital. Past performance does not guarantee future results. Always conduct your own research and consult with a qualified financial professional before making trading decisions.
Aethix Cipher ProAethix Cipher Pro: AI-Enhanced Crypto Signal Indicator grok Ai made signal created for aethix users.
Unlock the future of crypto trading with Aethix Cipher Pro—a powerhouse indicator inspired by Market Cipher A, turbocharged for Aethix.io users! Built on WaveTrend Oscillator, 8-EMA Ribbon, RSI+MFI, and custom enhancements like Grok AI confidence levels (70-100%), on-chain whale volume thresholds, and fun meme alerts ("To the moon! 🌕").
Key Features:
WaveTrend Signals: Spot overbought/oversold with levels at ±53/60/100—crosses trigger red diamonds, blood diamonds, yellow X's for high-prob buy/sell entries.
Neon Teal EMA Ribbon: Dynamic 5-34 EMA gradient (bullish teal/bearish red) for trend direction—crossovers plot green/red circles, blue triangles.
RSI+MFI Fusion: Overbought (70+)/oversold (30-) with long snippets for sentiment edges.
Line color best indices grouped by Artificial Intelligence
The script uses the best buy indicators, such as moving average crossovers, RSI, and others selected by AI. The idea is to determine whether the stock is classified as a strong buy (yellow line), a buy (green line), or a red (sell)
Fair Value GapsThis indicator automatically detects and marks Fair Value Gaps (FVGs) on both the current chart timeframe and a user-selected higher timeframe. When a bullish or bearish gap forms, it draws a shaded box from the candle that created it and extends it forward until price fills the gap. You can choose whether filled gaps are removed from the chart or left in place for reference. The higher timeframe detection waits for the higher timeframe candle to close before plotting its gaps, ensuring accurate, non-repainting signals.
Customization options are straightforward: you can select the higher timeframe to monitor, toggle higher timeframe gap plotting on or off, and decide whether to automatically delete gaps once price has fully filled them. Bullish and bearish gaps are color-coded differently for both current and higher timeframes, making it easy to distinguish them at a glance. This provides a clear, real-time visual of unfilled imbalances in price for ICT traders.
Andean • Dot Watcher (Exact Math + Optional Alerts)Title: Andean • Dot Watcher (1m + 1000T Alerts)
Description:
The Andean • Dot Watcher is a precision trend-detection tool that plots Bull and Bear “dot” signals for both the 1-minute chart and the 1000-tick chart — all in one indicator. It’s designed for traders who want early confirmation from tick data while also monitoring a traditional time-based chart for added confluence.
Key Features:
Dual-Timeframe Signals – Plots and alerts for both 1m and 1000T chart conditions.
Bull Dots – Green markers indicating bullish dominance or trigger events.
Bear Dots – Red markers indicating bearish dominance or trigger events.
Customizable Dot Mode – Choose between continuous dominance, flip-only signals, or crossover conditions.
Real-Time Alerts – Built-in TradingView alerts for:
1m Bull / 1m Bear signals
1000T Bull / 1000T Bear signals
Alert Flexibility – Users can set alerts for either timeframe independently or combine them for confirmation setups.
Usage Tips:
For fastest reaction, combine 1000T dots with 1-minute dots as a confirmation filter.
If your TradingView plan does not include tick charts, you can still use the 1-minute signals without issue.
Works best when combined with your existing trade plan for entries, exits, and risk management.
Requirements:
1-minute chart signals work on any TradingView plan (including Basic).
1000T tick chart signals require a TradingView plan that supports tick charts.
Kaos CHoCH M15 – Confirm + BOS H4 Bias (no repinta)Marca choch en dirección del Bias de H4 para seguir con la tendencia.
BTC/USDT/BTC.D Correlation Signal//@version=5
indicator("BTC/USDT/BTC.D Correlation Signal", overlay=true)
// Fetch USDT Dominance data from the "USDT.D" symbol.
// Note: You may need to change the symbol source depending on your data provider (e.g., "BINANCE:USDT.D" or "TVC:USDT.D").
usdtDominance = request.security("TVC:USDT.D", timeframe.period, close)
// Fetch Bitcoin Dominance data from the "BTC.D" symbol.
// Note: You may need to change the symbol source depending on your data provider (e.g., "BINANCE:BTC.D" or "TVC:BTC.D").
btcDominance = request.security("TVC:BTC.D", timeframe.period, close)
// Use a long-term Exponential Moving Average (EMA) to smooth out the data and identify trends.
// The EMA period can be adjusted to change the sensitivity of the signals.
int emaPeriod = 100
float emaUSDT = ta.ema(usdtDominance, emaPeriod)
float emaBTC = ta.ema(btcDominance, emaPeriod)
// Define the signal logic.
// A buy signal is triggered when BTC.D crosses above its EMA AND USDT.D crosses below its EMA.
bool buySignal = ta.crossover(btcDominance, emaBTC) and ta.crossunder(usdtDominance, emaUSDT)
// A sell signal is triggered when BTC.D crosses below its EMA AND USDT.D crosses above its EMA.
bool sellSignal = ta.crossunder(btcDominance, emaBTC) and ta.crossover(usdtDominance, emaUSDT)
// Plot the signals on the chart as shapes.
// A green triangle for a buy signal below the bar.
plotshape(buySignal, title="Buy Signal", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
// A red triangle for a sell signal above the bar.
plotshape(sellSignal, title="Sell Signal", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
// You can also add alert conditions.
// alertcondition(buySignal, title="Buy Alert", message="Buy signal triggered based on BTC.D and USDT.D correlation!")
// alertcondition(sellSignal, title="Sell Alert", message="Sell signal triggered based on BTC.D and USDT.D correlation!")