Tweezer CandlesMarks Tweezers Candlesticks Patterns with an Icon of you choice and color. Simple and efficient code. It Just Works.
Pattern grafici
Aethix Cipher DivergencesAethix Cipher Divergences v6
Core Hook: Custom indicator inspired by VuManChu B, Grok-enhanced for crypto intel—blends WaveTrend (WT) oscillator with multi-divergences for buy/sell circles (green/teal buys #00FFFF, red sells) and dots (divs, gold overbought alerts).
Key Features:
WaveTrend Waves: Dual waves (teal WT1, darker teal WT2) with VWAP (purple for neon vibe), overbought/oversold lines, crosses for signals.
Divergences: Regular/hidden for WT, RSI, Stoch—red bearish, green bullish dots; extra range for deeper insights.
RSI + MFI Area: Colored area (green positive, red negative) for sentiment/volume flow.
Stochastic RSI: K/D lines with fill for overbought/oversold trends.
Schaff Trend Cycle: Purple line for cycle smoothing.
Sommi Patterns: Flags (pink bearish, blue bullish) and diamonds for HTF patterns, purple higher VWAP.
MACD Colors on WT: Dynamic WT shading based on MACD for enhanced reads.
Engulfing CandlesSimple and effective. Shows Engulfing Candlesticks Patterns.
**DOES NOT SHOW Same color engulfing patterns. In other words it does not show a Bullish Candlestick engulfing another bullish candlestick. Same with Bearish.
Engulfing CandlesticksThis is my personal Pine Script for Engulfing Candlesticks. Plenty of options, solid code, Simple and it works.
**DOES NOT Show same color candlestick engulfing! In other words it will not show a Bullish engulfing a bullish candlestick, or a bearish engulfing a bearish candlestick, like other pine scripts I have found do. Mine doesn't do this!
Three-Candle SwingsThis will place an Icon of your choice above or below (your choice for each) the bars, marking Bullish and Bearish Three-Candle Swings.
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.
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.
Trend and verser AI indicator V1.01Declaration: NO REPAINTING, NO LAG, NO DISPLACEMENT – SIGNALS NEVER DISAPPEAR!
Indicator Usage Guide (Simple & Effective):
(1) Red Zone + UP Arrow → Go LONG
(2) Green Zone + DOWN Arrow → Go SHORT
(3) Alternating Red/Green Zones → Consolidation Phase (NO TRADING!)
Default parameters are optimized for reliable signals but can be customized as needed.
Instructions:
(1) This indicator is suitable for any trading instrument (stocks, futures, forex, cryptocurrencies, options, etc.) and any timeframe (minutes, hours, days, weeks, months).
(2) The indicator only provides entry signals (buy/sell signals). It does not provide exit signals. Profitability depends entirely on your holding period. This indicator does not guarantee profits.
(3) Arrows come in Red and Blue, representing two different signal types. Red signals may provide more precise reversal points on the candlestick chart compared to Blue signals.
(4) The indicator plots three distinct trend lines: a Red trend line, a Green trend line, and a Yellow trend line.
(5) * When the Red trend line is ABOVE the Yellow trend line, it signifies a Bullish (uptrend) market,consider taking LONG positions based on arrow signals.
* When the Green trend line is BELOW the Yellow trend line, it signifies a Bearish (downtrend) market,consider taking SHORT positions based on arrow signals.
* When the Red and Green trend lines are ALTERNATING (crossing frequently), it signifies a Ranging (sideways/consolidation) market, arrow signals are less reliable during this phase, and trading is NOT recommended.
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.
US OIL VT ARMY BY VIPIN High–Low (last N days, bug fix)London First Hour High–Low (Last N Days)
This indicator marks the High and Low of the first hour of the London trading session (08:00–09:00 Europe/London time).
It is designed to help traders identify the key price range during the most active early London market period and use it for breakout or range-based strategies.
Features:
• Multi-day History – Plots the first-hour range for the past N sessions (default 15).
• Two Display Modes – Show only the top (High) line or display the full High–Low box.
• Extend-Right Control – Option to extend the marking for all sessions or only the latest session.
• Price Labels – Automatic price labels for the High and Low levels of each session.
• Customizable Styling – Adjustable colors, transparency, and line width.
How It Works:
1. The script uses the Europe/London timezone to detect the session start and end time.
2. It tracks the highest and lowest prices during the defined first hour.
3. At the session close, it plots a line or box to mark the range and optionally extends it to the right.
4. You can configure the number of past sessions to display.
Usage Example:
• Mark the London open range and look for breakouts above the High or breakdowns below the Low.
• Combine with volume, momentum, or volatility indicators for confirmation.
Inputs Overview:
• London Start / End – Define session time (HH:MM).
• Show only TOP line – Toggle between High line only or full High–Low box.
• Extend-right only latest session – Extend markings for the most recent session only.
• Keep last N sessions – Number of historical sessions to display.
This script does not execute trades and is intended purely for visual analysis.
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)
Trendline Touch ScreenerIdentifies stocks that are close to trend line touches based on user inputs.
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.
Strenth Comparison [joshu]Strenth Comparison visualizes relative performance across a basket of assets by measuring percent change from the chosen anchor timeframe’s open.
Each new anchor period resets the baseline to 0%, making it easy to spot leaders/laggards and momentum shifts over time.
Anchor timeframe (TF, default: 1W): The period used as the performance baseline.
Assets : Currencies or American Indices.
Symbols :
Currencies: CME:6S1!, CME:6E1!, CME:6B1!, CME:6J1!, CME:6A1!, CME:6N1!, TVC:DXY (inverted for comparability).
American Indices: CME_MINI:ES1!, CME_MINI:NQ1!, CBOT_MINI:YM1!, CME_MINI:RTY1!.
Visuals: All lines plotted in percent; DXY is inverted and highlighted; labels show the symbol at the latest bar; zero line for reference; vertical dividers mark new anchor periods.
Use cases: Compare strength/weakness within FX or US index baskets; monitor rotation, divergence, and leadership over weekly (or chosen) cycles.
Twlv's Key KeyLevels with DashboardWhat It Is
A clean key‑levels tool that plots yesterday’s and last week’s highs/lows plus the prior overnight session’s high/low, and shows a compact dashboard that tells you when the current chart or selected symbols have “engaged” (touched) those levels.
Levels it tracks
- PDH/PDL: Previous Daily High/Low (from TradingView’s prior daily bar).
- PWH/PWL: Previous Weekly High/Low (from the prior weekly bar).
- PSH/PSL: Prior 20:00–05:00 EST session High/Low.
- Finalized at 05:00 EST.
- Shown only between 06:00–17:00 EST on intraday charts.
How it decides “engaged”
- A level is “engaged” once price trades through it after the current day starts.
- Engagement latches for the rest of the day and resets at the next day start.
Dashboard
- Two columns: Symbol | Key Level.
- Always shows the current chart plus any watchlist symbols you enable.
- Key Level cell lists any engaged levels (e.g., PWL, PDH, PSH). Turns green when at least one is engaged; otherwise grey.
- Symbols are auto‑cleaned (e.g., “CME_MINI:ES1!” → “ES”). Footer watermark is centered.
Drawing
- Horizontal lines anchored to real candles (no “floating”).
- Finite line length so labels remain visible; labels sit at the right edge.
Time handling
- Session window uses strict EST (no DST) via `Etc/GMT+5`.
- PSH/PSL reset daily; PD/PW update on each new completed D/W bar.
Customization
- Pick up to six symbols to monitor; the chart always plots its own lines.
- Color, width, labels, and dashboard on/off are configurable. Core engine timing and session rules are fixed to prevent accidental changes.
Intended use
- Spot where price is likely to react: yesterday/week highs/lows and the prior overnight range.
- Glance at the dashboard to know which levels are active across your chosen markets without switching charts.
WaveTrend Signal [TCMaster]Features:
Calculates WaveTrend using customizable channel and average lengths.
Highlights overbought and oversold zones for easier visual reference.
Adds vertical dotted lines when the two WaveTrend lines cross in extreme zones (possible turning points).
Optional BUY/SELL markers for quick identification of crossover events.
Built-in alert conditions for integration with TradingView alerts.
How it works:
A potential BUY signal occurs when WT1 crosses above WT2 while both are below the oversold threshold.
A potential SELL signal occurs when WT1 crosses below WT2 while both are above the overbought threshold.
These events are purely technical conditions and do not guarantee market direction.
Important Disclaimer:
This script is provided for educational and informational purposes only. It is not financial advice, and past performance does not guarantee future results. Always do your own research and use proper risk management before making trading decisions.
Trend Reversal Pattern DetectorPine Script (TradingView) that identifies the most common trend reversal patterns and automatically places “Buy” and “Sell” labels on the chart when they occur.
Including:
- Hammer & Bullish Engulfing → Buy signal
- Shooting Star & Bearish Engulfing → Sell signal
- Works on any timeframe and symbol
- Uses simple detection logic for visual clarity