TEMA 1000 with Previous 15-Minute Highs and Lowsuse it for free for scalper plot the 15mins for this
Corak carta
Oro Zone Statiche-M5/M15/M30 📌 Titolo
Oro Zone Confirmed Breakout
📝 Descrizione
Questo indicatore individua in automatico le zone operative di 5$ su XAU/USD (oro) e costruisce un box di validazione attorno al livello.
🔎 Funzionamento:
* Ogni livello multiplo di 5$ (1930, 1935, 1940, …) viene racchiuso da un box di ±0.5$.
* Prima candela che chiude col corpo fuori → bordo del box diventa giallo.
* Seconda candela consecutiva che chiude fuori → il box si illumina, compare il ✅ di conferma, e vengono generati automaticamente i target.
🎯 Regole operative:
* Stop Loss (SL): 2$ sotto (long) o sopra (short) il livello centrale.
* Take Profit 1 (TP1): 3$ sopra (long) o sotto (short).
* Take Profit 2 (TP2): 5$ sopra (long) o sotto (short).
* Quando viene colpito SL o TP2, il setup si chiude e il sistema valuta automaticamente il prossimo livello a +5$.
⚙️ Impostazioni:
* Funziona su più timeframe (consigliati 5m, 15m, 30m).
* Puoi attivare o disattivare la visualizzazione della cronologia dei box.
* Le linee di SL/TP sono fisse e accompagnate da etichette chiare.
📌 Title
Oro Zone Confirmed Breakout
📝 Description
This indicator automatically identifies the operational zones of $5 on XAU/USD (gold) and builds a validation box around the level.
🔎 Operation:
* Each multiple level of $5 (1930, 1935, 1940, ...) is enclosed by a box of ±0.5$.
* First candle that closes with the body out → edge of the box turns yellow.
* Second consecutive candle that closes out → the box lights up, the confirmation ✅ appears, and the targets are automatically generated.
🎯 Operating rules:
* Stop Loss (SL): $2 below (long) or above (short) the central level.
* Take Profit 1 (TP1): $3 above (long) or below (short).
* Take Profit 2 (TP2): $5 above (long) or below (short).
* When SL or TP2 is hit, the setup closes and the system automatically evaluates the next level at +5$.
⚙️ Settings:
* Works on multiple timeframes (5m, 15m, 30m recommended).
* You can turn box history display on or off.
* SL/TP lines are fixed and accompanied by clear labels.
TradeX Universal Algo For All📌 TradeX Universal Algo For All
The TradeX Universal Algo is a powerful, easy-to-use trend-following system that works on all markets and timeframes (Forex, Gold, Crypto, Stocks, Indices).
This algo is built on an ATR-based trailing stop system that dynamically adapts to volatility, giving you clear Buy/Sell signals with minimal noise.
🔑 Key Features
ATR Trailing Stop → Automatically adjusts to market volatility.
Buy & Sell Signals → Plots “Buy Above” and “Sell Below” labels when price crosses the trailing stop.
Bar Coloring → Green bars in bullish trend, red bars in bearish trend.
Custom Sensitivity → Adjust “Key Value” to fine-tune signal frequency.
Multi-Market Compatible → Works seamlessly on Forex, Commodities (XAUUSD, USOIL), Crypto, Indices, and Stocks.
Alerts Ready → Set alerts for Buy/Sell conditions so you never miss an opportunity.
⚙️ Inputs
Key Value (Sensitivity) → Controls how reactive the trailing stop is (default = 3).
ATR Period → Number of bars for ATR calculation (default = 5).
📊 How to Use
Apply the indicator on any chart and timeframe.
Look for Buy Above / Sell Below signals.
Follow the green bars for bullish bias and red bars for bearish bias.
Combine with your own analysis (Price Action, SMC, Supply/Demand, etc.) for best results.
⚠️ Disclaimer: This script is for educational purposes only. Trading involves risk, and past performance does not guarantee future results. Always use proper risk management.
Sessions Highs/LowsThis indicator plots the High and Low of the three main trading sessions:
Asia (20:00–03:00) – green lines
London (03:00–08:00) – blue lines
New York (08:00–13:00) – red lines
Features:
Levels update in real time during each session.
When a new session starts, the previous lines are deleted – only the latest active sessions remain visible.
Default session times are set to Asia (20:00–03:00), London (03:00–08:00), and New York (08:00–13:00), but you can adjust them to your own custom hours in the settings.
Colors can also be customized.
Use cases:
Quickly visualize session ranges.
Track session highs/lows for breakouts, fakeouts, and reactions around liquidity zones.
Absolute Volume & Value in Crore by vikram dayalabsolute volume and value in crore made by vikram dayal
same is created for easy knowledge of volume price action
Long Wicks Alertes [Elykia]Main Function
The indicator detects long wicks (greater than a user-defined threshold in points or ticks) on candlesticks and marks them with a symbol (circle or triangle).
⚙️ Parameters
Threshold (points or ticks): minimum wick length to be considered “long.”
Display: choose the marker size.
Filters:
“Previous only” filter
A long lower wick must be at least the threshold lower than the previous candle’s low.
A long upper wick must be at least the threshold higher than the previous candle’s high.
➝ Highlights simple local breakouts.
“Previous & next” (confirmed) filter
The wick of the previous candle must be at least the threshold lower (or higher) than the lows/highs of both the surrounding candles.
The signal is drawn on the validated candle with offset = -1 (pivot confirmation, no repaint).
➝ Highlights reliable market pivots.
📍 Display
Green below the candle: long lower wick.
Red above the candle: long upper wick.
Confirmed signals (previous & next) are plotted on the validated bar, slightly shifted.
🔔 Alerts
One global alert: triggers on any detected long wick.
Two specific alerts: one for lower wicks, one for upper wicks.
🎯 Trading Use Cases
Detect price rejections (long lower wick = bearish rejection/absorbed selling; long upper wick = bullish rejection/absorbed buying).
Spot liquidity grabs where price hunts stops before reversing.
Identify market pivots: with the “previous & next” filter, the indicator highlights points where a trend may reverse.
Automate alerting to catch these setups without constant chart watching.
👉 In short: this indicator isolates significant wicks and qualifies them (simple breakout vs. confirmed pivot) to help read market structure and anticipate reversals.
Adaptive Median Heikin-Ashi (AMHA) + EMA 21/50/100/200 Adaptive Median Heikin-Ashi (AMHA) vs. Standard Heikin-Ashi:
The AMHA indicator uses the median instead of the average for candle close values and calculates the open adaptively based on market volatility (ATR). High and low values are partially volume-weighted, making candle size more realistic. Bullish candles are displayed clearly in white, bearish candles in orange, including wick and border. Extremely small candles are automatically set to a minimum body size, ensuring trends are immediately visible. Compared to standard Heikin-Ashi, AMHA reacts faster to market movements, filters outliers more effectively, and displays trend directions more clearly.
LockedEye V7 FREEMIUMA precision trading system built for clarity, discipline, and flow.
Core Features
• 4 Hidden Veils: Spark, Flow, Gate, Crown — control the market rhythm from quick scalps to major swings.
• Filtered Cross Signals: Only clean, confirmed crosses. Weak moves are cut out.
• Auto Playbook: Smart labels and limit lines show long, short, false, or cancel.
• Pattern Detection: Engulfing candles, Head & Shoulders, Double/Triple Tops & Bottoms — all tracked.
• One Master Alert: One clear alert per bar with every signal listed.
• Minimal & Sharp: Background filters, clean bar colors, uncluttered view.
Why it’s different
It keeps Philakone’s flow spirit but upgrades it with stricter filters, smarter cancels, and deeper structure awareness.
MASTER ALERTS and custom MA's will be only available in subscription based
High Low + BOS/Sweep aaa//@version=5
indicator("High Low + BOS/Sweep", overlay=true, max_lines_count=500, max_labels_count=500)
// Inputs (giữ nguyên các tuỳ chọn của bạn, chỉ bỏ input màu)
offTop = input.int(2, "Offset đỉnh", minval=0)
offBot = input.int(2, "Offset đáy", minval=0)
w = input.int(2, "Độ dày line", minval=1)
styleBosStr = input.string("Solid", "Kiểu line BOS", options= )
styleSweepStr = input.string("Dashed", "Kiểu line Sweep", options= )
showBosLabel = input.bool(true, "Hiện label BOS")
showSweepLabel = input.bool(true, "Hiện label Sweep")
bosLabelText = input.string("BOS", "Text BOS")
sweepLabelText = input.string("SWEEP", "Text Sweep")
labelSizeStr = input.string("tiny", "Kích thước label", options= )
// NEW: display toggles
showPivot = input.bool(true, "Hiện Pivot")
showBosSweep = input.bool(true, "Hiện BOS / Sweep")
// Convert styles / sizes
bosStyle = styleBosStr == "Dashed" ? line.style_dashed : styleBosStr == "Dotted" ? line.style_dotted : line.style_solid
sweepStyle = styleSweepStr == "Dashed" ? line.style_dashed : styleSweepStr == "Dotted" ? line.style_dotted : line.style_solid
lblSize = labelSizeStr == "small" ? size.small : labelSizeStr == "normal" ? size.normal : labelSizeStr == "large" ? size.large : size.tiny
// State vars
c = close
var int lastSignal = 0
var float sHigh = na
var int sHighBar = na
var float sLow = na
var int sLowBar = na
var float confHigh = na
var int confHighBar = na
var float confLow = na
var int confLowBar = na
var line highLine = na
var line lowLine = na
var label highLabel = na
var label lowLabel = na
// === Đánh dấu loại line: 0 = chưa có, 1 = Sweep, 2 = BOS ===
var int highLineType = 0
var int lowLineType = 0
// === Sweep tracking / pending ===
var bool pendingSweepUp = false
var bool pendingSweepDown = false
var int sweepDetectedBarUp = na
var float sweepTargetHighPrice = na
var int sweepTargetHighBar = na
var int sweepDetectedBarDown = na
var float sweepTargetLowPrice = na
var int sweepTargetLowBar = na
// === Track BOS pivots ===
var int lastBOSHighBar = na
var int lastBOSLowBar = na
// Track swing
if (lastSignal == -1) or (lastSignal == 0)
if na(sHigh) or high > sHigh
sHigh := high
sHighBar := bar_index
if (lastSignal == 1) or (lastSignal == 0)
if na(sLow) or low < sLow
sLow := low
sLowBar := bar_index
// Confirm pivot
condTop = c < low
condBot = c > high
isTop = condTop and (lastSignal != 1)
isBot = condBot and (lastSignal != -1)
// On pivot confirm
if isTop
confHigh := sHigh
confHighBar := sHighBar
highLine := na
highLabel := na
highLineType := 0
if showPivot
label.new(confHighBar, confHigh + syminfo.mintick * offTop, "●", xloc=xloc.bar_index, yloc=yloc.price, style=label.style_none, textcolor=color.red, size=size.small)
lastSignal := 1
sHigh := na
sHighBar := na
sLow := low
sLowBar := bar_index
if isBot
confLow := sLow
confLowBar := sLowBar
lowLine := na
lowLabel := na
lowLineType := 0
if showPivot
label.new(confLowBar, confLow - syminfo.mintick * offBot, "●", xloc=xloc.bar_index, yloc=yloc.price, style=label.style_none, textcolor=color.lime, size=size.small)
lastSignal := -1
sLow := na
sLowBar := na
sHigh := high
sHighBar := bar_index
// Raw sweep detection
rawSweepUp = not na(confHigh) and (na(lastBOSHighBar) or confHighBar != lastBOSHighBar) and high > confHigh and close <= confHigh
rawSweepDown = not na(confLow) and (na(lastBOSLowBar) or confLowBar != lastBOSLowBar) and low < confLow and close >= confLow
if rawSweepUp
pendingSweepUp := true
sweepDetectedBarUp := bar_index
sweepTargetHighPrice := confHigh
sweepTargetHighBar := confHighBar
if rawSweepDown
pendingSweepDown := true
sweepDetectedBarDown := bar_index
sweepTargetLowPrice := confLow
sweepTargetLowBar := confLowBar
// Check sweep validity
checkSweepValidUp() =>
isValid = true
if pendingSweepUp and not na(sweepDetectedBarUp)
maxOffset = bar_index - sweepDetectedBarUp
if maxOffset >= 0
for i = 0 to maxOffset
if close > sweepTargetHighPrice
isValid := false
isValid
checkSweepValidDown() =>
isValid = true
if pendingSweepDown and not na(sweepDetectedBarDown)
maxOffset = bar_index - sweepDetectedBarDown
if maxOffset >= 0
for i = 0 to maxOffset
if close < sweepTargetLowPrice
isValid := false
isValid
// BOS logic
bosUp = not na(confHigh) and c > confHigh
bosDown = not na(confLow) and c < confLow
if bosUp
pendingSweepUp := false
sweepDetectedBarUp := na
sweepTargetHighPrice := na
sweepTargetHighBar := na
lastBOSHighBar := confHighBar
if not na(highLine)
line.delete(highLine)
if not na(highLabel)
label.delete(highLabel)
highLineType := 2
if showBosSweep
highLine := line.new(confHighBar, confHigh, bar_index, confHigh, xloc=xloc.bar_index, extend=extend.none, color=color.black, width=w, style=bosStyle)
if showBosLabel
midBar = math.floor((confHighBar + bar_index) / 2)
highLabel := label.new(midBar, confHigh, bosLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=color.black, style=label.style_none, size=lblSize)
if bosDown
pendingSweepDown := false
sweepDetectedBarDown := na
sweepTargetLowPrice := na
sweepTargetLowBar := na
lastBOSLowBar := confLowBar
if not na(lowLine)
line.delete(lowLine)
if not na(lowLabel)
label.delete(lowLabel)
lowLineType := 2
if showBosSweep
lowLine := line.new(confLowBar, confLow, bar_index, confLow, xloc=xloc.bar_index, extend=extend.none, color=color.black, width=w, style=bosStyle)
if showBosLabel
midBar = math.floor((confLowBar + bar_index) / 2)
lowLabel := label.new(midBar, confLow, bosLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=color.black, style=label.style_none, size=lblSize)
// Sweep draw (pivot-in-between check)
sweepUpTriggered = false
sweepDownTriggered = false
if (isTop or isBot) and pendingSweepUp and not na(sweepTargetHighBar)
hasLowBetween = false
for i = sweepTargetHighBar to bar_index
if not na(confLowBar) and confLowBar == i
hasLowBetween := true
if checkSweepValidUp() and highLineType != 2 and hasLowBetween
if not na(highLine)
line.delete(highLine)
if not na(highLabel)
label.delete(highLabel)
highLineType := 1
if showBosSweep
highLine := line.new(sweepTargetHighBar, sweepTargetHighPrice, bar_index, sweepTargetHighPrice, xloc=xloc.bar_index, extend=extend.none, color=color.black, width=w, style=sweepStyle)
if showSweepLabel
midBar = math.floor((sweepTargetHighBar + bar_index) / 2)
highLabel := label.new(midBar, sweepTargetHighPrice, sweepLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=color.black, style=label.style_none, size=lblSize)
pendingSweepUp := false
sweepDetectedBarUp := na
sweepTargetHighPrice := na
sweepTargetHighBar := na
sweepUpTriggered := true
if (isTop or isBot) and pendingSweepDown and not na(sweepTargetLowBar)
hasHighBetween = false
for i = sweepTargetLowBar to bar_index
if not na(confHighBar) and confHighBar == i
hasHighBetween := true
if checkSweepValidDown() and lowLineType != 2 and hasHighBetween
if not na(lowLine)
line.delete(lowLine)
if not na(lowLabel)
label.delete(lowLabel)
lowLineType := 1
if showBosSweep
lowLine := line.new(sweepTargetLowBar, sweepTargetLowPrice, bar_index, sweepTargetLowPrice, xloc=xloc.bar_index, extend=extend.none, color=color.black, width=w, style=sweepStyle)
if showSweepLabel
midBar = math.floor((sweepTargetLowBar + bar_index) / 2)
lowLabel := label.new(midBar, sweepTargetLowPrice, sweepLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=color.black, style=label.style_none, size=lblSize)
pendingSweepDown := false
sweepDetectedBarDown := na
sweepTargetLowPrice := na
sweepTargetLowBar := na
sweepDownTriggered := true
// Alerts
alertcondition(isTop, "Top", "Top confirmed")
alertcondition(isBot, "Bot", "Bottom confirmed")
alertcondition(bosUp, "BOS Up", "Break of structure up")
alertcondition(bosDown, "BOS Down", "Break of structure down")
alertcondition(sweepUpTriggered, "Sweep Up", "Sweep đỉnh xuất hiện")
alertcondition(sweepDownTriggered, "Sweep Down", "Sweep đáy xuất hiện")
plot(na) // tránh lỗi
High Low + BOS/Sweep//@version=5
indicator("High Low + BOS/Sweep", overlay=true, max_lines_count=500, max_labels_count=500)
// Inputs (giữ nguyên các tuỳ chọn của bạn, chỉ bỏ input màu)
offTop = input.int(2, "Offset đỉnh", minval=0)
offBot = input.int(2, "Offset đáy", minval=0)
w = input.int(2, "Độ dày line", minval=1)
styleBosStr = input.string("Solid", "Kiểu line BOS", options= )
styleSweepStr = input.string("Dashed", "Kiểu line Sweep", options= )
showBosLabel = input.bool(true, "Hiện label BOS")
showSweepLabel = input.bool(true, "Hiện label Sweep")
bosLabelText = input.string("BOS", "Text BOS")
sweepLabelText = input.string("SWEEP", "Text Sweep")
labelSizeStr = input.string("tiny", "Kích thước label", options= )
// NEW: display toggles (giữ nguyên logic, bạn yêu cầu)
showPivot = input.bool(true, "Hiện Pivot")
showBosSweep = input.bool(true, "Hiện BOS / Sweep")
// Convert styles / sizes
bosStyle = styleBosStr == "Dashed" ? line.style_dashed : styleBosStr == "Dotted" ? line.style_dotted : line.style_solid
sweepStyle = styleSweepStr == "Dashed" ? line.style_dashed : styleSweepStr == "Dotted" ? line.style_dotted : line.style_solid
lblSize = labelSizeStr == "small" ? size.small : labelSizeStr == "normal" ? size.normal : labelSizeStr == "large" ? size.large : size.tiny
// State vars (khai báo riêng để tránh lỗi kiểu)
c = close
var int lastSignal = 0
var float sHigh = na
var int sHighBar = na
var float sLow = na
var int sLowBar = na
var float confHigh = na
var int confHighBar = na
var float confLow = na
var int confLowBar = na
var line highLine = na
var line lowLine = na
var label highLabel = na
var label lowLabel = na
// === Đánh dấu loại line: 0 = chưa có, 1 = Sweep, 2 = BOS ===
var int highLineType = 0
var int lowLineType = 0
// === Sweep tracking / pending ===
var bool pendingSweepUp = false
var bool pendingSweepDown = false
var int sweepDetectedBarUp = na
var float sweepTargetHighPrice = na
var int sweepTargetHighBar = na
var int sweepDetectedBarDown = na
var float sweepTargetLowPrice = na
var int sweepTargetLowBar = na
// === Track BOS pivots (pivot bar indexes that became BOS) ===
var int lastBOSHighBar = na
var int lastBOSLowBar = na
// Track swing while searching
if (lastSignal == -1) or (lastSignal == 0)
if na(sHigh) or high > sHigh
sHigh := high
sHighBar := bar_index
if (lastSignal == 1) or (lastSignal == 0)
if na(sLow) or low < sLow
sLow := low
sLowBar := bar_index
// Confirm pivot
condTop = c < low
condBot = c > high
isTop = condTop and (lastSignal != 1)
isBot = condBot and (lastSignal != -1)
// On pivot confirm (KHÔNG reset pendingSweep ở đây)
if isTop
confHigh := sHigh
confHighBar := sHighBar
highLine := na
highLabel := na
highLineType := 0
if showPivot
label.new(confHighBar, confHigh + syminfo.mintick * offTop, "●", xloc=xloc.bar_index, yloc=yloc.price, style=label.style_none, textcolor=color.red, size=size.small)
lastSignal := 1
sHigh := na
sHighBar := na
sLow := low
sLowBar := bar_index
if isBot
confLow := sLow
confLowBar := sLowBar
lowLine := na
lowLabel := na
lowLineType := 0
if showPivot
label.new(confLowBar, confLow - syminfo.mintick * offBot, "●", xloc=xloc.bar_index, yloc=yloc.price, style=label.style_none, textcolor=color.lime, size=size.small)
lastSignal := -1
sLow := na
sLowBar := na
sHigh := high
sHighBar := bar_index
// Raw sweep detection: nếu có râu quét pivot cũ (và đóng lại không vượt) -> đánh dấu pending và lưu pivot cũ
// loại trừ pivot đã từng là BOS (lastBOSHighBar / lastBOSLowBar)
rawSweepUp = not na(confHigh) and (na(lastBOSHighBar) or confHighBar != lastBOSHighBar) and high > confHigh and close <= confHigh
rawSweepDown = not na(confLow) and (na(lastBOSLowBar) or confLowBar != lastBOSLowBar) and low < confLow and close >= confLow
if rawSweepUp
pendingSweepUp := true
sweepDetectedBarUp := bar_index
sweepTargetHighPrice := confHigh
sweepTargetHighBar := confHighBar
if rawSweepDown
pendingSweepDown := true
sweepDetectedBarDown := bar_index
sweepTargetLowPrice := confLow
sweepTargetLowBar := confLowBar
// Functions: check sweep valid (no close crossing pivot from detection to now)
checkSweepValidUp() =>
isValid = true
if pendingSweepUp and not na(sweepDetectedBarUp) and not na(sweepTargetHighPrice)
maxOffset = bar_index - sweepDetectedBarUp
if maxOffset >= 0
for i = 0 to maxOffset
if close > sweepTargetHighPrice
isValid := false
isValid
checkSweepValidDown() =>
isValid = true
if pendingSweepDown and not na(sweepDetectedBarDown) and not na(sweepTargetLowPrice)
maxOffset = bar_index - sweepDetectedBarDown
if maxOffset >= 0
for i = 0 to maxOffset
if close < sweepTargetLowPrice
isValid := false
isValid
// BOS logic (như cũ) — nếu BOS xảy ra thì hủy pending sweep liên quan
bosUp = not na(confHigh) and c > confHigh
bosDown = not na(confLow) and c < confLow
if bosUp
// cancel pending sweep
pendingSweepUp := false
sweepDetectedBarUp := na
sweepTargetHighPrice := na
sweepTargetHighBar := na
// mark pivot as BOS (do not allow future sweep using same pivot)
lastBOSHighBar := confHighBar
// delete existing sweep display if present
if not na(highLine)
line.delete(highLine)
if not na(highLabel)
label.delete(highLabel)
// draw BOS (only if display enabled) — dùng màu mặc định: black
highLineType := 2
if showBosSweep
highLine := line.new(confHighBar, confHigh, bar_index, confHigh, xloc=xloc.bar_index, extend=extend.none, color=color.black, width=w, style=bosStyle)
if showBosLabel
midBar = math.floor((confHighBar + bar_index) / 2)
highLabel := label.new(midBar, confHigh, bosLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=color.black, style=label.style_none, size=lblSize)
if bosDown
pendingSweepDown := false
sweepDetectedBarDown := na
sweepTargetLowPrice := na
sweepTargetLowBar := na
lastBOSLowBar := confLowBar
if not na(lowLine)
line.delete(lowLine)
if not na(lowLabel)
label.delete(lowLabel)
lowLineType := 2
if showBosSweep
lowLine := line.new(confLowBar, confLow, bar_index, confLow, xloc=xloc.bar_index, extend=extend.none, color=color.black, width=w, style=bosStyle)
if showBosLabel
midBar = math.floor((confLowBar + bar_index) / 2)
lowLabel := label.new(midBar, confLow, bosLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=color.black, style=label.style_none, size=lblSize)
// === Sweep draw (with pivot-in-between check) ===
if (isTop or isBot) and pendingSweepUp and not na(sweepTargetHighBar)
hasLowBetween = false
// scan bars between sweepTargetHighBar and current bar to find ANY confirmed low pivot (confLowBar)
for i = sweepTargetHighBar to bar_index
if not na(confLowBar) and confLowBar == i
hasLowBetween := true
if checkSweepValidUp() and highLineType != 2 and hasLowBetween
// delete existing line if any
if not na(highLine)
line.delete(highLine)
if not na(highLabel)
label.delete(highLabel)
// mark as sweep
highLineType := 1
// draw sweep only if display enabled (màu mặc định: black)
if showBosSweep
highLine := line.new(sweepTargetHighBar, sweepTargetHighPrice, bar_index, sweepTargetHighPrice, xloc=xloc.bar_index, extend=extend.none, color=color.black, width=w, style=sweepStyle)
if showSweepLabel
midBar = math.floor((sweepTargetHighBar + bar_index) / 2)
highLabel := label.new(midBar, sweepTargetHighPrice, sweepLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=color.black, style=label.style_none, size=lblSize)
// clear pending
pendingSweepUp := false
sweepDetectedBarUp := na
sweepTargetHighPrice := na
sweepTargetHighBar := na
if (isTop or isBot) and pendingSweepDown and not na(sweepTargetLowBar)
hasHighBetween = false
for i = sweepTargetLowBar to bar_index
if not na(confHighBar) and confHighBar == i
hasHighBetween := true
if checkSweepValidDown() and lowLineType != 2 and hasHighBetween
if not na(lowLine)
line.delete(lowLine)
if not na(lowLabel)
label.delete(lowLabel)
lowLineType := 1
if showBosSweep
lowLine := line.new(sweepTargetLowBar, sweepTargetLowPrice, bar_index, sweepTargetLowPrice, xloc=xloc.bar_index, extend=extend.none, color=color.black, width=w, style=sweepStyle)
if showSweepLabel
midBar = math.floor((sweepTargetLowBar + bar_index) / 2)
lowLabel := label.new(midBar, sweepTargetLowPrice, sweepLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=color.black, style=label.style_none, size=lblSize)
pendingSweepDown := false
sweepDetectedBarDown := na
sweepTargetLowPrice := na
sweepTargetLowBar := na
// Alerts
alertcondition(isTop, "Top", "Top confirmed")
alertcondition(isBot, "Bot", "Bottom confirmed")
alertcondition(bosUp, "BOS Up", "Break of structure up")
alertcondition(bosDown, "BOS Down", "Break of structure down")
plot(na) // tránh lỗi
High Low + BOS/Sweep 2//@version=5
indicator("High Low + BOS/Sweep (fixed pivot check)", overlay=true, max_lines_count=500, max_labels_count=500)
// Inputs
offTop = input.int(2, "Offset đỉnh", minval=0)
offBot = input.int(2, "Offset đáy", minval=0)
w = input.int(2, "Độ dày line", minval=1)
c_bos_up = input.color(color.red, "Màu BOS phá đỉnh")
c_bos_down = input.color(color.lime, "Màu BOS phá đáy")
c_sweep_up = input.color(color.orange, "Màu Sweep đỉnh")
c_sweep_down = input.color(color.aqua, "Màu Sweep đáy")
styleBosStr = input.string("Solid", "Kiểu line BOS", options= )
styleSweepStr = input.string("Dashed", "Kiểu line Sweep", options= )
showBosLabel = input.bool(true, "Hiện label BOS")
showSweepLabel = input.bool(true, "Hiện label Sweep")
bosLabelText = input.string("BOS", "Text BOS")
sweepLabelText = input.string("SWEEP", "Text Sweep")
labelSizeStr = input.string("tiny", "Kích thước label", options= )
// Convert styles / sizes
bosStyle = styleBosStr == "Dashed" ? line.style_dashed : styleBosStr == "Dotted" ? line.style_dotted : line.style_solid
sweepStyle = styleSweepStr == "Dashed" ? line.style_dashed : styleSweepStr == "Dotted" ? line.style_dotted : line.style_solid
lblSize = labelSizeStr == "small" ? size.small : labelSizeStr == "normal" ? size.normal : labelSizeStr == "large" ? size.large : size.tiny
// State vars
c = close
var int lastSignal = 0
var float sHigh = na
var int sHighBar = na
var float sLow = na
var int sLowBar = na
var float confHigh = na
var int confHighBar = na
var float confLow = na
var int confLowBar = na
var line highLine = na
var line lowLine = na
var label highLabel = na
var label lowLabel = na
// === Đánh dấu loại line: 0 = chưa có, 1 = Sweep, 2 = BOS ===
var int highLineType = 0
var int lowLineType = 0
// === Sweep tracking / pending ===
var bool pendingSweepUp = false
var bool pendingSweepDown = false
var int sweepDetectedBarUp = na
var float sweepTargetHighPrice = na
var int sweepTargetHighBar = na
var int sweepDetectedBarDown = na
var float sweepTargetLowPrice = na
var int sweepTargetLowBar = na
// === NEW: track BOS pivots ===
var int lastBOSHighBar = na
var int lastBOSLowBar = na
// Track swing
if (lastSignal == -1) or (lastSignal == 0)
if na(sHigh) or high > sHigh
sHigh := high
sHighBar := bar_index
if (lastSignal == 1) or (lastSignal == 0)
if na(sLow) or low < sLow
sLow := low
sLowBar := bar_index
// Confirm pivot
condTop = c < low
condBot = c > high
isTop = condTop and (lastSignal != 1)
isBot = condBot and (lastSignal != -1)
// On pivot confirm
if isTop
confHigh := sHigh
confHighBar := sHighBar
highLine := na
highLabel := na
highLineType := 0
label.new(confHighBar, confHigh + syminfo.mintick * offTop, "●", xloc=xloc.bar_index, yloc=yloc.price, style=label.style_none, textcolor=color.red, size=size.small)
lastSignal := 1
sHigh := na
sHighBar := na
sLow := low
sLowBar := bar_index
if isBot
confLow := sLow
confLowBar := sLowBar
lowLine := na
lowLabel := na
lowLineType := 0
label.new(confLowBar, confLow - syminfo.mintick * offBot, "●", xloc=xloc.bar_index, yloc=yloc.price, style=label.style_none, textcolor=color.lime, size=size.small)
lastSignal := -1
sLow := na
sLowBar := na
sHigh := high
sHighBar := bar_index
// Raw sweep detection
rawSweepUp = not na(confHigh) and (na(lastBOSHighBar) or confHighBar != lastBOSHighBar) and high > confHigh and close <= confHigh
rawSweepDown = not na(confLow) and (na(lastBOSLowBar) or confLowBar != lastBOSLowBar) and low < confLow and close >= confLow
if rawSweepUp
pendingSweepUp := true
sweepDetectedBarUp := bar_index
sweepTargetHighPrice := confHigh
sweepTargetHighBar := confHighBar
if rawSweepDown
pendingSweepDown := true
sweepDetectedBarDown := bar_index
sweepTargetLowPrice := confLow
sweepTargetLowBar := confLowBar
// Check sweep validity
checkSweepValidUp() =>
isValid = true
if pendingSweepUp and not na(sweepDetectedBarUp)
maxOffset = bar_index - sweepDetectedBarUp
if maxOffset >= 0
for i = 0 to maxOffset
if close > sweepTargetHighPrice
isValid := false
isValid
checkSweepValidDown() =>
isValid = true
if pendingSweepDown and not na(sweepDetectedBarDown)
maxOffset = bar_index - sweepDetectedBarDown
if maxOffset >= 0
for i = 0 to maxOffset
if close < sweepTargetLowPrice
isValid := false
isValid
// BOS logic
bosUp = not na(confHigh) and c > confHigh
bosDown = not na(confLow) and c < confLow
if bosUp
pendingSweepUp := false
sweepDetectedBarUp := na
sweepTargetHighPrice := na
sweepTargetHighBar := na
lastBOSHighBar := confHighBar
if not na(highLine)
line.delete(highLine)
if not na(highLabel)
label.delete(highLabel)
highLine := line.new(confHighBar, confHigh, bar_index, confHigh, xloc=xloc.bar_index, extend=extend.none, color=c_bos_up, width=w, style=bosStyle)
highLineType := 2
if showBosLabel
midBar = math.floor((confHighBar + bar_index) / 2)
highLabel := label.new(midBar, confHigh, bosLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=c_bos_up, style=label.style_none, size=lblSize)
if bosDown
pendingSweepDown := false
sweepDetectedBarDown := na
sweepTargetLowPrice := na
sweepTargetLowBar := na
lastBOSLowBar := confLowBar
if not na(lowLine)
line.delete(lowLine)
if not na(lowLabel)
label.delete(lowLabel)
lowLine := line.new(confLowBar, confLow, bar_index, confLow, xloc=xloc.bar_index, extend=extend.none, color=c_bos_down, width=w, style=bosStyle)
lowLineType := 2
if showBosLabel
midBar = math.floor((confLowBar + bar_index) / 2)
lowLabel := label.new(midBar, confLow, bosLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=c_bos_down, style=label.style_none, size=lblSize)
// === Sweep draw (with pivot-in-between check) ===
if (isTop or isBot) and pendingSweepUp and not na(sweepTargetHighBar)
hasLowBetween = false
for i = sweepTargetHighBar to bar_index
if not na(confLowBar) and confLowBar == i
hasLowBetween := true
if checkSweepValidUp() and highLineType != 2 and hasLowBetween
if not na(highLine)
line.delete(highLine)
if not na(highLabel)
label.delete(highLabel)
highLine := line.new(sweepTargetHighBar, sweepTargetHighPrice, bar_index, sweepTargetHighPrice, xloc=xloc.bar_index, extend=extend.none, color=c_sweep_up, width=w, style=sweepStyle)
if showSweepLabel
midBar = math.floor((sweepTargetHighBar + bar_index) / 2)
highLabel := label.new(midBar, sweepTargetHighPrice, sweepLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=c_sweep_up, style=label.style_none, size=lblSize)
highLineType := 1
pendingSweepUp := false
sweepDetectedBarUp := na
sweepTargetHighPrice := na
sweepTargetHighBar := na
if (isTop or isBot) and pendingSweepDown and not na(sweepTargetLowBar)
hasHighBetween = false
for i = sweepTargetLowBar to bar_index
if not na(confHighBar) and confHighBar == i
hasHighBetween := true
if checkSweepValidDown() and lowLineType != 2 and hasHighBetween
if not na(lowLine)
line.delete(lowLine)
if not na(lowLabel)
label.delete(lowLabel)
lowLine := line.new(sweepTargetLowBar, sweepTargetLowPrice, bar_index, sweepTargetLowPrice, xloc=xloc.bar_index, extend=extend.none, color=c_sweep_down, width=w, style=sweepStyle)
if showSweepLabel
midBar = math.floor((sweepTargetLowBar + bar_index) / 2)
lowLabel := label.new(midBar, sweepTargetLowPrice, sweepLabelText, xloc=xloc.bar_index, yloc=yloc.price, textcolor=c_sweep_down, style=label.style_none, size=lblSize)
lowLineType := 1
pendingSweepDown := false
sweepDetectedBarDown := na
sweepTargetLowPrice := na
sweepTargetLowBar := na
// Alerts
alertcondition(isTop, "Top", "Top confirmed")
alertcondition(isBot, "Bot", "Bottom confirmed")
alertcondition(bosUp, "BOS Up", "Break of structure up")
alertcondition(bosDown, "BOS Down", "Break of structure down")
plot(na) // tránh lỗi
MACD Split (Top/Bottom)MACD Split Indicator Explanation
This script separates the MACD into two clean panels:
Top Panel (Mode = Top)
Plots the MACD line and the Signal line.
Used to analyze crossovers and trend direction.
Bottom Panel (Mode = Bottom)
Plots the Histogram (MACD – Signal) and its EMA smoothing.
Used to analyze momentum strength and early shifts.
You can load the same indicator twice:
Set one to Top mode → shows only MACD & Signal lines.
Set the other to Bottom mode → shows only Histogram & EMA.
This way, you get a clear split view without overlapping everything in one chart.
MMAMMA (Midpoint Moving Average)
Similar to SMA but calculated using (High + Low) / 2 instead of Close.
Helps reduce noise by smoothing out candlestick wicks.
Useful for identifying trend direction, support/resistance, and combining with other indicators.
Moving averages applied: 5, 10, 20, 50, 100, 200
Short-term: 5, 10, 20 → captures quick price action
Mid-term: 50, 100 → identifies medium trend
Long-term: 200 → widely used global trend benchmark
Color Scheme (Red → Orange → Yellow → Green → Blue → Navy)
Red: 5 / Orange: 10 / Yellow: 20 / Green: 50 / Blue: 100 / Navy: 200
Transparency: 50% → keeps chart clean when lines overlap
Line Thickness: 1 → minimal, non-intrusive visual
Pattern Scanner — RealTime By joshทำอะไรบ้าง
Double Top / Double Bottom — ตรวจ “ยอด/ฐานคู่” + เงื่อนไข “เบรกคอ” และ เลือกบังคับให้มีรีเทสท์ ได้
Head & Shoulders / Inverse — ตรวจหัว-ไหล่พร้อมวาด neckline แบบ dynamic
Wedge / Symmetrical Triangle — ใช้ pivot ล่าสุด 2 จุดบน/ล่าง สร้างเส้นลู่เข้าปัจจุบัน
Flag (Channel) — ตรวจกรอบ平行 (bull/bear) จากสโลปบน-ล่างที่ เกือบขนาน
Range (Consolidation) — เส้น High/Low ช่วงสะสมล่าสุด
โหมด Overlay: ทุกอย่างวาดบนราคาโดยตรง, ไม่สร้างข้อความ/สัญญาณลูกศรให้รกตา
What it does
Double Top / Double Bottom — Detects twin peaks/bases with a neckline-break condition, with an option to require a retest.
Head & Shoulders / Inverse — Detects H&S (and inverse) and draws a dynamic neckline.
Wedge / Symmetrical Triangle — Uses the two most recent high/low pivots to draw converging lines to the current bar.
Flag (Channel) — Detects bull/bear parallel channels from nearly parallel top/bottom slopes.
Range (Consolidation) — Plots recent consolidation High/Low levels.
Overlay mode — Everything is drawn directly on price; no text/arrows, keeping the chart clean.
Color Sensors [AlgoNata]Color Sensors is a visual trading assistant that uses dynamic color-coded signals to help traders instantly recognize market conditions. By translating price behavior into simple colors, it makes trend direction, momentum strength, and potential reversal zones much easier to interpret at a glance.
Mouse Indicator Private V3.2The "Mouse Indicator Private" is a powerful Pine Script tool designed for XAU/USD (Gold) trading on the 1-minute (M1) timeframe. It incorporates a sophisticated set of conditions to identify potential trading opportunities, focusing on specific candlestick patterns and volume dynamics, combined with advanced capital management features.
Key Features:
1. Independent of Higher Timeframe Structure: Unlike many indicators, "Mouse Trader" operates effectively on the M1 timeframe without needing confirmation from larger timeframes. This means you get timely signals directly on the fast-moving Gold market.
2. Low Stop Loss, 1:1 Risk/Reward: This indicator is designed to identify positions with a tight, low stop loss, aiming for a 1:1 Risk-to-Reward ratio. This approach allows you to take trades with well-defined risk, maximizing your trading efficiency.
3. Opportunistic Trading: Signals are generated whenever conditions are met, giving you the flexibility to seize trading opportunities as they appear throughout the trading session.
Volume Analysis: Integrates a Volume Moving Average to spot significant volume spikes and increasing volume, adding confluence to signals.
4. Automated Capital Management: Provides real-time calculations for:
- Stop Loss (SL) Price: Dynamically calculated based on the low (for Buy signals) or high (for Sell signals) of the qualifying signal candle, aiding in risk control.
- Calculated Lot Size: Automatically determines the appropriate lot size based on your predefined risk amount per trade and the calculated stop-loss distance, helping you manage your exposure effectively.
Clean Chart View: Providing a cleaner and less cluttered visual experience.
[ACR+]EXPANSION DETECTION Expansion Detection is a price-action tool that spots true momentum expansions, distinguishes high-quality displacements (CISD), and flags wick-driven reversals—all in the context of internal market structure. It keeps your chart clean: only the trade-relevant signals are plotted; structure lines/labels are computed under the hood.
Signals on the chart
Expansion (non-CISD)
Bullish: ▲ triangle below bar (green)
Bearish: ▼ triangle above bar (red)
CISD (Change In State of Delivery) — expansion with displacement & quality filters
Bullish: ◆ diamond below bar (lime)
Bearish: ◆ diamond above bar (orange)
Reversal (wick-dominant + optional engulf)
Bullish: ● circle below bar (teal)
Bearish: ● circle above bar (purple)
The script automatically prefers CISD: if a bar qualifies as CISD, only the CISD mark is shown (not the plain Expansion).
How it works (under the hood)
Body vs Wick engine
Expansion when body dominates wick (Body/Wick > kBW) and body exceeds its average (Body > kBodyAvg × SMA(Body)).
Reversal when one wick is decisively larger than the body (pin-bar style) with optional engulf confirmation.
Structure context (internal)
Builds short/intermediate/long-term swings internally and checks BOS (Break of Structure) and liquidity sweeps around the latest IT levels for higher signal quality.
CISD filter
Expansion + displacement vs ATR (min body vs ATR)
Optional FVG (3-bar gap) confirmation
Optional BOS confirmation in the same direction
Optional previous Inside Bar requirement
🌌 Skywalker Strong Signals + Labels🟩 Skywalker Entry → Detects strong bullish setups when trend and momentum align
🟨 RSI Peak – Caution → Warns when RSI crosses into overbought territory, signaling possible exhaustion (Market is overwhelmed with buyers)
🟥 Sell Zone Detected → Confirms bearish momentum shifts with trend and volume filters
EMA Trend Tracking → Visual fast/slow EMA lines to spot bullish vs bearish zones instantly
Volume filter & candle confirmation for stronger signals
Perfect on all time-frames for scalp and swing traders.
Alpha Buy/Sell Signal✅ High Accuracy – Signals are generated using advanced algorithmic conditions to highlight reliable trade opportunities and reduce false entries.
✅ Clear Visual Alerts – Buy and sell signals appear as distinct markers directly on your chart for easy interpretation.
✅ Easy to Use – Apply it directly to your charts without needing to adjust complex settings.
Beta Buy/Sell SignalThe Beta Buy/Sell Signal Indicator is designed for traders who prefer more frequent trade opportunities. Unlike the Alpha Signal, which focuses on highly selective, high-accuracy setups, Beta takes a more active approach by generating additional buy and sell signals across a variety of market conditions.
This indicator can be useful for traders who want to capture short-term moves, explore multiple setups, or complement Alpha for a more dynamic trading strategy.