Daily ATR% Dashboard george_pirlog//@version=6
indicator("ATR(14) – Daily + % vs Daily Close & Current (Heat + Alerts)", overlay=true)
// ── Inputs
atrLen = input.int(14, "ATR Length")
tfATR = input.timeframe("D", "ATR Timeframe (for ATR & daily close)")
decATR = input.int(2, "Decimals (ATR)", minval=0, maxval=6)
decPct = input.int(2, "Decimals (%)", minval=0, maxval=6)
pos = input.string("Top Right", "Table Position", options= )
bgAlpha = input.int(75, "Table BG Transparency (0-100)", minval=0, maxval=100)
showLabel = input.bool(false, "Show floating label")
yOffsetATR = input.float(0.25, "Label Y offset (× ATR)", step=0.05)
// Praguri culoare / alerte
warnPct = input.float(2.0, "Warn Threshold % (yellow/orange)", step=0.1)
highPct = input.float(3.0, "High Threshold % (red)", step=0.1)
// ── Helpers
f_pos(p) =>
if p == "Top Left"
position.top_left
else if p == "Top Right"
position.top_right
else if p == "Bottom Left"
position.bottom_left
else
position.bottom_right
f_heatColor(pct) =>
if pct >= highPct
color.new(color.red, 0)
else if pct >= warnPct
color.new(color.orange, 0)
else
color.new(color.teal, 0)
// ── Serii daily
atrDaily = request.security(syminfo.tickerid, tfATR, ta.atr(atrLen))
closeD = request.security(syminfo.tickerid, tfATR, close)
// ── Ultima valoare & procente
atrLast = atrDaily
pctOfDailyClose = atrLast / closeD * 100
pctOfCurrent = atrLast / close * 100
// ── Tabel static (3×2)
var table box = table.new(f_pos(pos), 3, 2, border_width=1, frame_color=color.new(color.gray, 0), bgcolor=color.new(color.black, bgAlpha))
if barstate.islast
table.cell(box, 0, 0, "ATR14 (Last D)", text_color=color.white, text_size=size.small, bgcolor=color.new(color.black, bgAlpha))
table.cell(box, 1, 0, "% of Daily Close", text_color=color.white, text_size=size.small, bgcolor=color.new(color.black, bgAlpha))
table.cell(box, 2, 0, "% of Current", text_color=color.white, text_size=size.small, bgcolor=color.new(color.black, bgAlpha))
table.cell(box, 0, 1, str.tostring(atrLast, "0." + str.repeat("0", decATR)), text_color=color.white, bgcolor=color.new(color.black, bgAlpha))
table.cell(box, 1, 1, str.tostring(pctOfDailyClose, "0." + str.repeat("0", decPct)) + "%", text_color=f_heatColor(pctOfDailyClose), bgcolor=color.new(color.black, bgAlpha))
table.cell(box, 2, 1, str.tostring(pctOfCurrent, "0." + str.repeat("0", decPct)) + "%", text_color=f_heatColor(pctOfCurrent), bgcolor=color.new(color.black, bgAlpha))
// ── Etichetă opțională (apel pe o singură linie)
var label info = na
if showLabel and barstate.islast
label.delete(info)
txt = "ATR14 (Last D): " + str.tostring(atrLast, "0." + str.repeat("0", decATR)) +
" vs Daily Close: " + str.tostring(pctOfDailyClose, "0." + str.repeat("0", decPct)) + "%" +
" vs Current: " + str.tostring(pctOfCurrent, "0." + str.repeat("0", decPct)) + "%"
info := label.new(x=bar_index, y=close + atrLast * yOffsetATR, text=txt, xloc=xloc.bar_index, yloc=yloc.price, style=label.style_label_left, textcolor=color.white, color=color.new(color.black, 0), size=size.normal)
// ── Alerts (cross peste praguri)
dailyWarnUp = ta.crossover(pctOfDailyClose, warnPct)
dailyHighUp = ta.crossover(pctOfDailyClose, highPct)
currWarnUp = ta.crossover(pctOfCurrent, warnPct)
currHighUp = ta.crossover(pctOfCurrent, highPct)
alertcondition(dailyWarnUp, "Daily % crossed WARN", "ATR% vs Daily Close crossed above WARN threshold")
alertcondition(dailyHighUp, "Daily % crossed HIGH", "ATR% vs Daily Close crossed above HIGH threshold")
alertcondition(currWarnUp, "Current % crossed WARN", "ATR% vs Current Price crossed above WARN threshold")
alertcondition(currHighUp, "Current % crossed HIGH", "ATR% vs Current Price crossed above HIGH threshold")
Candlestick analysis
Anti-PDT Swing Trade Signals//@version=5
indicator("Anti-PDT Swing Trade Signals", overlay=true)
// === User Inputs ===
priceLimit = input.float(25, "Max Price ($)", minval=1)
minVolume = input.int(200000, "Min Avg Volume (10D)", minval=1)
// === Indicators ===
sma20 = ta.sma(close, 20)
sma50 = ta.sma(close, 50)
macdLine = ta.ema(close, 12) - ta.ema(close, 26)
signalLine = ta.ema(macdLine, 9)
rsi = ta.rsi(close, 14)
avgVolume = ta.sma(volume, 10)
// === Conditions ===
priceFilter = close <= priceLimit
volumeFilter = avgVolume >= minVolume
rsiFilter = ta.crossover(rsi, 40)
macdFilter = ta.crossover(macdLine, signalLine)
smaFilter = close > sma20 and close > sma50
momentumFilter = close > close * 1.03 and close < close * 1.10
// === Day Filter ===
isMonWedFri = dayofweek == dayofweek.monday or dayofweek == dayofweek.wednesday or dayofweek == dayofweek.friday
entryCondition = priceFilter and volumeFilter and rsiFilter and macdFilter and smaFilter and momentumFilter and isMonWedFri
// === Alerts & Visuals ===
plotshape(entryCondition, title="BUY", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
alertcondition(entryCondition, title="BUY Alert", message="BUY Signal: {{ticker}} meets swing trading entry criteria.")
plot(sma20, color=color.orange)
plot(sma50, color=color.blue)
Nithin's LQ Sweep//@version=6
indicator("Liquidity Sweep Zones (HTF -> LTF)", overlay=true, max_boxes_count=200, max_labels_count=500)
// ----------------- Inputs -----------------
htf_tf = input.timeframe("240", "Structure Timeframe (HTF) - example: 240=4H")
pivot_left = input.int(3, "Pivot Left", minval=1)
pivot_right = input.int(1, "Pivot Right", minval=1)
min_wick_pts = input.float(0.0, "Min sweep wick size (points)", step=0.1)
zone_width = input.int(80, "Zone width (bars to the right)", minval=1)
show_struct = input.bool(true, "Show HTF structure level")
show_labels = input.bool(true, "Show sweep labels")
alpha_fill = input.int(78, "Zone fill transparency (0-255)", minval=0, maxval=255)
// ----------------- HTF Pivot (structure) -----------------
// request HTF pivots (these return series aligned to LTF bars)
htf_pH = request.security(syminfo.tickerid, htf_tf, ta.pivothigh(high, pivot_left, pivot_right), barmerge.gaps_off, barmerge.lookahead_off)
htf_pL = request.security(syminfo.tickerid, htf_tf, ta.pivotlow(low, pivot_left, pivot_right), barmerge.gaps_off, barmerge.lookahead_off)
// Keep latest non-na HTF pivot levels
var float lastHTFHigh = na
var float lastHTFLow = na
if not na(htf_pH)
lastHTFHigh := htf_pH
if not na(htf_pL)
lastHTFLow := htf_pL
// Optional: draw HTF levels as lines
var line htfHighLine = na
var line htfLowLine = na
if show_struct
if not na(lastHTFHigh)
if not na(htfHighLine)
line.set_xy1(htfHighLine, bar_index - 500, lastHTFHigh)
line.set_xy2(htfHighLine, bar_index + 1, lastHTFHigh)
else
htfHighLine := line.new(bar_index - 500, lastHTFHigh, bar_index + 1, lastHTFHigh, xloc=xloc.bar_index, extend=extend.none, color=color.new(color.red, 60), width=1)
if not na(lastHTFLow)
if not na(htfLowLine)
line.set_xy1(htfLowLine, bar_index - 500, lastHTFLow)
line.set_xy2(htfLowLine, bar_index + 1, lastHTFLow)
else
htfLowLine := line.new(bar_index - 500, lastHTFLow, bar_index + 1, lastHTFLow, xloc=xloc.bar_index, extend=extend.none, color=color.new(color.green, 70), width=1)
// ----------------- Sweep detection (on current timeframe) -----------------
high_sweep = false
low_sweep = false
// High sweep: price makes a wick above last HTF high, but closes back below that HTF level
if not na(lastHTFHigh)
high_sweep := (high > lastHTFHigh) and (close < lastHTFHigh) and (high - lastHTFHigh >= min_wick_pts)
// Low sweep: price makes a wick below last HTF low, but closes back above that HTF level
if not na(lastHTFLow)
low_sweep := (low < lastHTFLow) and (close > lastHTFLow) and (lastHTFLow - low >= min_wick_pts)
// ----------------- Create red zone rectangles -----------------
var array boxes = array.new()
// Function to create a box and push to array; removes oldest if > max
f_newBox(_x1, _y1, _x2, _y2, _fillColor, _borderColor) =>
b = box.new(_x1, _y1, _x2, _y2, xloc=xloc.bar_index, border_width=1, bgcolor=_fillColor, border_color=_borderColor)
array.push(boxes, b)
// keep reasonable number of boxes
maxBoxes = 200
if array.size(boxes) > maxBoxes
old = array.shift(boxes)
box.delete(old)
b
if high_sweep
topY = math.max(high, lastHTFHigh)
bottomY = lastHTFHigh
// create box from the HTF level to the wick high
col = color.new(color.red, alpha_fill)
bord = color.new(color.red, 40)
f_newBox(bar_index - 0, topY, bar_index + zone_width, bottomY, col, bord)
if show_labels
label.new(bar_index, high, "High Sweep", style=label.style_label_down, textcolor=color.white, color=color.new(color.red, 0), size=size.tiny)
if low_sweep
bottomY = math.min(low, lastHTFLow)
topY = lastHTFLow
col = color.new(color.red, alpha_fill) // same red fill as screenshot-red zones
bord = color.new(color.red, 40)
f_newBox(bar_index - 0, topY, bar_index + zone_width, bottomY, col, bord)
if show_labels
label.new(bar_index, low, "Low Sweep", style=label.style_label_up, textcolor=color.white, color=color.new(color.red, 0), size=size.tiny)
// Visual sweep markers (optional small shapes)
plotshape(high_sweep, title="High Sweep marker", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.red)
plotshape(low_sweep, title="Low Sweep marker", style=shape.triangleup, location=location.belowbar, size=size.tiny, color=color.red)
// ----------------- Info panel -----------------
var table info = table.new(position.top_right, 1, 1)
if barstate.islast
table.cell(info, 0, 0, "HTF: " + htf_tf + " | Pivot L/R: " + str.tostring(pivot_left) + "/" + str.tostring(pivot_right), text_color=color.white, bgcolor=color.new(color.blue, 85))
Nithin Liquidity Sweep//@version=6
indicator("Liquidity Sweep Finder", overlay=true, max_labels_count=500)
// Input settings
lookback = input.int(10, "Lookback Bars for High/Low", minval=2)
showHighSweep = input.bool(true, "Show High Sweeps")
showLowSweep = input.bool(true, "Show Low Sweeps")
// Identify recent swing high/low
recentHigh = ta.highest(high, lookback)
recentLow = ta.lowest(low, lookback)
// Sweep conditions
highSweep = showHighSweep and high > recentHigh and close < recentHigh
lowSweep = showLowSweep and low < recentLow and close > recentLow
// Plot signals
plotshape(highSweep, title="High Liquidity Sweep", style=shape.labeldown,
text="Sweep ⬇", location=location.abovebar, color=color.red, size=size.tiny)
plotshape(lowSweep, title="Low Liquidity Sweep", style=shape.labelup,
text="Sweep ⬆", location=location.belowbar, color=color.green, size=size.tiny)
// Highlight background when sweep occurs
bgcolor(highSweep ? color.new(color.red, 85) : na)
bgcolor(lowSweep ? color.new(color.green, 85) : na)
orderflow, moneyflow, confluence, divergence, momentumorderflow, moneyflow, confluence, divergence, momentum
HTF Candles - DolphinTradeBot1️⃣ Overview
The "HTF Candles - DolphinTradeBot" indicator displays higher timeframe (HTF) candlesticks and their OHLC (Open, High, Low, Close) levels on any lower timeframe chart.
While staying on lower timeframes this helps confirm entries or reversals and visualize major market structure, trend bias, and key price zone
2️⃣ How to Use It ?
Use these levels to identify major support/resistance or trend structure.
Observe higher timeframe candle formations (e.g., engulfing, pin bar, doji)
3️⃣ ⚙️Settings
TimeFrame → Select the higher timeframe to display.
Show OHLC Levels → Toggle lines for Open, High, Low, Close.
Line Colors → Customize the color for each level.
Micro SuiteWhat it is: One Pine v5 indicator that stacks several tools: EMA ribbon + a color-flipping 11/34 EMA trend line, multi-timeframe RSI pressure arrows, and a Bollinger Band re-entry system that marks Top/Bottom triggers (T/B) and later “r” confirmations. It also sprinkles in 3-Line Strike, Leledc exhaustion dots, and a small “Micro Dots” engine (ATR regime + VMA filter). Alerts for all of it.
TradingView
The core signals you’ll actually use:
RSI arrows: Up arrow when current RSI(6) < 30 and selected higher-TF RSIs are also < 30; down arrow when > 70 cluster cools. Idea = stacked OB/OS “pressure.”
TradingView
Bollinger re-entry (T/B + r):
T = first close back inside upper band; B = first close back inside lower band.
r = confirmation within N bars (price takes out the trigger bar’s high/low). These bars tint so they’re easy to see.
TradingView
Trend filter: EMA-11 vs EMA-34 color flip + optional VMA trend line; helps you ignore counter-trend stabs.
TradingView
Quick playbook (how to read it):
Reversal short: See a T near the top band → get the r within your window → bonus if a down RSI arrow or a Leledc high dot shows up.
Reversal long: Mirror that with B → r, plus an up RSI arrow/Leledc low dot.
Continuation: If Micro Dot stays green (or red) and 11>34 EMA holds, ignore isolated T/B traps.
TradingView
Inputs that matter:
confirmBars for the T/B “r” window.
Which higher-TF RSIs must agree for arrows.
Show/hide and lengths for EMAs and BB.
Micro block: show dots, VMA line, and speed (Fast/Med/Slow).
TradingView
Why people like it: You get trend, momentum, and mean-revert cues on one pane with ready-made alerts, so it’s easier to build a ruleset (e.g., “only take B→r longs when 11>34 and there’s an RSI up arrow”).
TradingView
Caveats: It’s still just TA—OB/OS clusters can persist in trends; confirmations can miss V-shaped turns; and stacking signals can be late in fast markets. Pair it with risk rules (fixed R, ATR stops) and a higher-TF bias.
One-liner cheat sheet:
Longs: B → r + RSI up arrow + 11>34 (optional Micro Dot green).
Shorts: T → r + RSI down arrow + 11<34 (optional Micro Dot red).
TradingView
4H Sell Signals at Swing Highs/LowsThis shows only zones where a 4H FVG and a 4H OB overlap (i.e., true HPZ).
Uses strict filters (FVG size vs avg body, OB body multiplier) to reduce noise and show very few, high-quality zones.
Each HPZ is drawn once (box deleted/created only when the zone changes) to avoid chart spam.
Optional label appears when price is currently inside the HPZ so you can spot active opportunities quickly.
4H + 15m Sell Signals It shows sell positions on the 15 min based on 4 hour ,imbalance, order block and swing high and low frameworks.
VIX Fear Gauge – Intraday Horizontal with alerts by Carlos CThe VIX Fear Gauge – Intraday Horizontal is a clean overlay tool that displays the current market sentiment (Fear & Greed levels) based on the VIX index.
Key Features:
📊 Horizontal Dashboard with five levels: Low, Light Fear, Neutral, High Fear, Panic.
🎨 Color Schemes: choose between Normal (fear = red) or Inverted (fear = green).
📍 Custom Positioning: move the panel to any chart corner.
🏷️ Dynamic Label: optional large label showing the current VIX value and category.
🚨 Smart Alerts: triggers when VIX enters or exits High Fear and Panic zones.
This indicator is designed for intraday traders who use the VIX as a risk barometer to confirm directional bias in SPY, QQQ, and other equities or options trading setups.
bar count plot only for far lookbackPurpose:
TradingView limits the number of text/label objects (≈500), which causes traditional bar-count indicators to stop showing numbers when you scroll far back in history.
This plots-only version bypasses that limitation entirely, allowing you to view bar numbers anywhere on the chart, even thousands of bars back.
How It Works:
Displays each bar’s in-day sequence number (1–78 by default) under the candles.
Counts restart automatically at the start of each trading day.
Uses a dual-channel “digit plot” system (tens + ones) instead of labels—extremely light on performance and unlimited in lookback.
The digits are drawn every N bars (default = 3) to keep the view uncluttered.
Key Parameters:
Show every Nth bar: Controls how often numbers appear (1 = every bar, 3 = every 3 bars, etc.).
Notes:
Digits are plotted directly via plotshape()—no labels—so they remain visible even 5 000 + bars back.
Alignment may vary slightly depending on chart zoom; this version is intended mainly for deep historical review rather than precise near-term alignment.
Channels by TradingConTotoThis indicator plots clear and minimalistic High (H) and Low (L) pivot points only within the selected trading session (e.g., 10:00–12:00).
During the active session, the background is shaded for easy visual reference, and pivot labels alternate automatically — meaning no consecutive H or L points appear in a row. This makes it simple to identify real swing changes within a specific session.
⚙️ Features
Detects and labels pivots only during the chosen time range.
Alternating logic prevents consecutive highs or lows (H → L → H → L).
Clean session background highlight for visual clarity.
Fully customizable parameters (session time, sensitivity, colors, etc.).
Ideal for intraday traders, scalpers, and structure-based strategies.
💡 Suggested Use
Perfect for traders who focus on specific market sessions (e.g., New York, London, or custom hours).
The alternating pivot logic helps visualize market swings and structural shifts without visual clutter, making it an excellent companion for price action analysis.
Range Breakout with Volume ConfirmationRange Breakout along with Volume Build up. However, ADX needs to be checked manually
Microgaps (plots-only, 4-channel, same-day only)Purpose:
This indicator visually highlights 3-bar price gaps on your chart, showing clear visual structure for gap zones without lag or diagonal artifacts.
It draws two outer lines (top and bottom of the gap) for every valid 3-bar gap, and optionally a midline when the gap is considered “large.”
⚙️ How it works
A bull gap is detected when the current bar’s low is higher than the high from two bars ago (low > high ).
A bear gap is detected when the current bar’s high is lower than the low from two bars ago (high < low ).
The lines are centered at the middle bar of the 3-bar sequence.
Gaps are only drawn within the same trading day to avoid false overnight gaps.
To prevent overlapping artifacts, up to four concurrent gap channels can be drawn efficiently using GPU-friendly plot() lines.
🔵 Midline logic
The midline (center of the gap) is only displayed when the gap’s vertical size is “large” relative to recent volatility.
“Large” means the gap height is greater than a user-defined fraction of the average bar range over the past N bars.
Example: if the average 8-bar range = 2 points, and the threshold = 0.3, then only gaps larger than 0.6 points will show the midline.
🧩 Parameters
Setting Description
Bull Gap Color / Width Style of bullish gaps (top and bottom lines).
Bear Gap Color / Width Style of bearish gaps (top and bottom lines).
Mid Gap Color / Width Style of the optional midline (shown only when “large”).
Large Gap — Lookback (bars) Number of bars used to calculate the average range (default: 8).
Large Gap — Size vs Avg Range Fraction of the average range that defines a “large” gap (default: 0.5). Set lower (e.g. 0.3) to show more midlines.
💡 Tips
Set threshold lower (0.2–0.4) for more midlines, higher (0.6–1.0) to highlight only extreme gaps.
Works best on intraday timeframes (1-min to 30-min).
Fully GPU-efficient — can scroll back thousands of bars without lag.
DCC Sessions Pro — fixed sessionsDCC Sessions Pro automatically highlights the three main market sessions directly on your candles for a clean and professional chart view.
• Asia (purple): 01:00 – 08:00
• London (blue): 08:00 – 15:30
• US (orange): 15:30 – 23:00
Weekends are automatically excluded so you only see relevant price action.
Perfect for intraday traders who want to track session behavior, volume shifts, and liquidity timing without overlapping colors or messy backgrounds.
TMC Strategy - Simplified Buy/Sell Signals//@version=5
indicator("TMC Strategy - Simplified Buy/Sell Signals", overlay=true)
// Input parameters
emaLength = input.int(20, title="EMA Length")
rsiLength = input.int(10, title="RSI Length")
macdFast = input.int(12, title="MACD Fast Length")
macdSlow = input.int(26, title="MACD Slow Length")
macdSignal = input.int(9, title="MACD Signal Length")
// Calculate indicators
ema = ta.ema(close, emaLength)
rsi = ta.rsi(close, rsiLength)
= ta.macd(close, macdFast, macdSlow, macdSignal)
// Trend condition
uptrend = close > ema
downtrend = close < ema
// Momentum condition
rsiBullish = rsi > 50
rsiBearish = rsi < 50
// MACD condition
macdBullish = ta.crossover(macdLine, signalLine)
macdBearish = ta.crossunder(macdLine, signalLine)
// Buy and Sell Signals
buySignal = uptrend and rsiBullish and macdBullish
sellSignal = downtrend and rsiBearish and macdBearish
// Plot Buy and Sell Signals
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", size=size.small)
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", size=size.small)
// Optional: Plot EMA for visual reference
plot(ema, title="EMA", color=color.blue, linewidth=2)
50 SMA 5-Candle Crossover50 SMA 5-Candle Crossover. Testing out. Not for trading but for investing. HOLD
Volume-Confirmed Reversal Engine [AlgoPoint]Volume-Confirmed Reversal Engine v2.0
Overview
A price pattern alone is not enough to signal a high-probability reversal. True market turning points—moments of capitulation or euphoria—are almost always confirmed by a significant spike in volume.
The Volume-Confirmed Reversal Engine is designed to identify these exact moments. It filters out low-conviction price movements and focuses only on reversal patterns that are backed by meaningful volume activity.
How It Works
The indicator's logic is based on a sequential confirmation process:
- High-Volume Anchor Candle: The engine first scans for an "Anchor Candle"—a candle that makes a new high or low over a user-defined look_back period. Critically, this candle's volume must also be significantly higher than the recent average. Low-volume breakouts are ignored.
- Setup Activation & Visualization: When a valid Anchor Candle is detected, the indicator enters a "setup" phase. It visually marks this on your chart by drawing a Setup Box around the high and low of the Anchor Candle, extending it forward for the duration of the confirm_in window.
- Confirmation & Signal: A final signal is only triggered if the price breaks out of the opposite side of the Setup Box within the confirmation window. This action, combined with the initial volume spike, confirms the reversal.
- Setup Box Visualization: See exactly which candle the indicator is watching and the key price levels (the box boundaries) that need to be broken for a signal.
Signal Strength Score (1-4): Every signal now comes with a score, providing insight into its quality based on four factors:
- The base price pattern is met.
- The initial Anchor Candle had high volume.
- The final Confirmation Candle also had high volume.
- The signal is aligned with the long-term macro trend (e.g., a BUY signal above the 200 EMA).
Status Dashboard: A simple panel on your chart tells you what the indicator is doing in real-time ("Scanning for Setups," "Watching Bullish Setup," etc.) and displays a countdown for how many bars are left for a confirmation.
How to Interpret & Use
- The Box: When a colored box appears, it's an early warning that a reversal setup is active. Watch the boundaries of the box for a potential breakout.
- The Score: Use the score to gauge the quality of a signal. A 3/4 or 4/4 score represents a very high-conviction setup where multiple technical factors are aligned.
- The Dashboard: Use the panel to understand the indicator's current state and the time-sensitivity of an active setup.
- The BUY/SELL Labels: These are the final, actionable triggers, appearing only after the full price and volume confirmation process is complete.
Volume Peak (2 before & 2 after) - FixedThe option to detect volume peaks higher than the surrounding bars.
Twisted Forex's Doji + Area StrategyTitle
Twisted Forex’s Doji + Area Strategy
Description
What this strategy does
This strategy looks for doji candles forming inside or near supply/demand areas . Areas are built from swing pivots and sized with ATR, then tracked for retests (“confirmations”). When a doji prints close to an area and quality checks pass, the strategy places a trade with the stop beyond the doji and a configurable R:R target.
How areas (zones) are built
• Swings are detected with a user-set pivot length.
• Each swing spawns a horizontal area centered at the pivot price with half-height = zoneHalfATR × ATR .
• Duplicates are de-duplicated by center distance (ATR-scaled).
• Areas fade when broken beyond a buffer or after an optional age (expiry).
• Retests are recorded when price touches and then bounces away from the area; repeated reactions increase the zone’s “strength”.
Signal logic (summary)
Doji detection: strict or loose body criteria with optional minimum wick fractions and ATR-scaled minimum range.
Proximity: price must be inside/near a supply or demand area (proxATR × ATR).
Side resolution: overlap is resolved by (a) which side price penetrates more, (b) fast/slow EMA trend, or (c) nearest distance. Optional “previous candle flip” can bias long after a bearish candle and short after a bullish one.
Optional 1-bar confirmation: the bar after the doji must close away from the area by confirmATR × ATR .
Quality filter (Off/Soft/Strict): four checks—(i) wick rejection past the edge, (ii) doji closes in an edge “band” of the area, (iii) fresh touch (cooldown), (iv) approach impulse over a short lookback. In Strict , thresholds auto-tighten.
Orders & exits
• Long: stop below doji low minus buffer; Short: above doji high plus buffer.
• Target = rrMultiple × risk distance .
• Pyramiding is off by default.
Position sizing
You can size from the script or from Strategy Properties:
• Script-driven (default): set Position sizing = “Risk % of equity” and choose riskPercent (e.g., 1.0%). The script applies safe floors/rounding (FX micro-lots by default) so quantity never rounds to zero.
• Properties-driven : toggle Use TV Properties → Order size ON, then pick “Percent of equity” in Properties (e.g., 1%). The header includes safe defaults so trades still place.
Key inputs to explore
• Zone building : pivotLen, zoneHalfATR, minDepartureATR, expiryBars, breakATR, leftBars, dedupeATR.
• Doji & proximity : strictDoji, dojiBodyFrac, minWickFrac, minRangeATR, proxATR, minBarsBetween.
• Overlap resolution : usePenetration, useTrend (EMA 21/55), “previous candle flip”, needNextBarConf & confirmATR.
• Quality : qualityMode (Off/Soft/Strict), minQualPass/kStrict, wickPenATR, edgeBandFrac, approachLookback, approachMinATR, freshTouchBars.
• Zone strength gating : minStrengthSoft / minStrengthStrict.
• HTF confluence (optional) : useHTFTrend (HTF EMA 34/89) and/or useHTFZoneProx (HTF swing bands).
Tips to make it cleaner / higher quality
• Turn needNextBarConf ON and use confirmATR = 0.10–0.15 .
• Increase approachMinATR (e.g., 0.35–0.45) to require a stronger pre-touch impulse.
• Raise minStrengthSoft/Strict (e.g., 4–6) so only well-reacted zones can signal.
• Use signalsOnlyConfirmed ON if you prefer trades only from zones with retests (the script falls back gracefully when none exist yet).
• Nudge proxATR to 0.5–0.6 to demand tighter proximity to the level.
• Optional: enable useHTFTrend to filter counter-trend setups.
Default settings used in this publication
• Initial capital: 100,000 (illustrative).
• Slippage: 1 tick; Commission: 0% (you can raise commission if you prefer—spread is partly modeled by slippage).
• Sizing: Risk % of equity via inputs; riskPercent = 1.0% ; FX uses micro-lot floors by default.
• Quality: Off by default (Soft/Strict available).
• HTF trend gate: Off by default.
Backtesting notes
For a meaningful sample size, test on liquid symbols/timeframes that yield 100+ trades (e.g., majors on 5–15m over 1–2 years). Backtests are modelled and broker costs/spread vary—validate on your feed and forward-test.
How to read the chart
Shaded bands are supply (above) and demand (below). Brighter bands are the nearest K per side (visual aid). BUY/SELL labels mark entries; colored dots show entry/SL/TP levels. You can hide zones or unconfirmed zones for a cleaner view.
Disclaimer
This is educational material, not financial advice. Trading involves risk. Always test and size responsibly.
Trend CandlesThis shows candlesticks that only follow the trend. So it will make it easier to know where the trend is going.