Odd Digit Candle High/Low Sums [Cross-Aware EMA]This is a test.
Do not use:
Only using to display different things indicator can do.
This is not a real indicator
サイクル
SMA Pro (Tick)Simple moving average based on 100 ticks, by default. Use for high volume markets like ES, NQ, and RTY.
Blvck 369 TestA test run on my 369 indicator for Brox to check out.
Plots pivots that align with Zeussy's 369 time price theory.
Plots pivots that align with 369 time. LTF and auto adjusts for HTF.
Can have alerts set to any label triggered. You can adjust things in the back end too like pivot sensitivity, high only/low only and looks etc.
pretty pleased with it and if you dont mind me doing so, id like to offer it to folks. Your call though.
If youd rather I not then ill just keep it to myself for now.
mp.mood UTC Sessions boxes tg - picabloEN:
UTC Sessions — wick-bounded boxes. Draws compact transparent rectangles for Tokyo, London, New York, Sydney, and Frankfurt sessions in UTC. Each box spans the session time and auto-fits vertically to candle wicks (high/low) of the current timeframe. Labels appear in the top-left of each box. Colors, transparency, and sessions are configurable.
UK:
UTC Sessions — прямокутники за сесіями. Малює лаконічні прозорі квадрати для сесій Tokyo, London, New York, Sydney та Frankfurt у UTC. Кожен квадрат охоплює час сесії та автоматично підлаштовує вертикальні межі під тіні свічок (high/low) поточного таймфрейму. Підпис у верхньому лівому куті. Кольори, прозорість і набір сесій налаштовуються.
Blvck 369 — Zeussy 3/6/9 Pivot Time FilterBlvck 369 Pivot Time Indicator implements the Zeussy 369 trading theory on-chart, so you don’t have to manually calculate 3/6/9 timings in real time. It marks pivot Highs/Lows only when the digital root of the timestamp (or date, on HTFs) equals 3, 6, or 9—all other prints are filtered out. It scales cleanly from lower timeframes (LTF) to higher timeframes (HTF) and keeps the labels neatly offset from price using an ATR-based gap.
What it shows
Intraday (auto):
H+M (hour+minute digits) and M-only (minute digits) digital roots.
If either = 3/6/9, the pivot is labeled (time on first line, matching modes on second).
HTFs (auto on Daily/Weekly/Monthly):
M+D (month+day digits) and D-only (day digits) digital roots.
If either = 3/6/9, the pivot is labeled (date + matching modes).
Filter: Only relevant 3/6/9 timings are shown—noise removed.
Why use it
Zeussy 369 automation: No more mental math or off-chart notes—everything is computed live.
Scales across LTF/HTF: Auto-switches logic (time vs date) so you can keep the same tool for scalps and swings.
Clean placement: Single, combined label per pivot with ATR-based offset for consistent spacing across symbols/timeframes.
Targeted view: Toggle Show Highs and Show Lows to focus on one side of liquidity hunts.
Settings (highlights)
Hour Offset (±): Align session times to your local clock.
Show Highs / Show Lows: Side filters.
Show numeric DR: Append which mode(s) matched (e.g., H+M 9 | M 6 or M+D 6 | D 3).
ATR Length & Multipliers: Controls label distance from the wick (stable across TFs/instruments).
Pro tip: Combine Blvck 369 Indicator with time-cycle SMT (Smart Money divergence) around these 3/6/9 pivots. The confluence often marks high-probability reversal windows.
Built for traders who like it clean, fast, and to the point. All the relevant 369 numbers are displayed—everything else is filtered out.
Kairi Relative Index Upgrated v1Kairi Relative Index Upgraded v1 — how far from “fair” are we, right now?
Most oscillators mash together price and momentum in ways that are hard to explain to a new trader. KRI is refreshingly simple: it measures how far price is from its moving average, as a percent of that average.
KRI = 100 × (Price − SMA) / SMA
Above 0 → price is above its average (stretched up).
Below 0 → price is below its average (stretched down).
The farther from 0, the more stretched we are from the mean.
This upgraded version keeps the pane clean (zero line, colored KRI, optional guide rails at +Line Above / Line Below) so you can read extension, reversion pressure, and reclaims at a glance—on any timeframe.
(If you add screenshots: image #1 should label the zero line and ± threshold lines; image #2 should show a textbook “overshoot at VAH/VAL + KRI extreme → rotate back to POC.”)
What you’re seeing (and how to read it fast)
KRI line
Green when KRI ≥ 0 (price above SMA)
Red when KRI < 0 (price below SMA)
Zero line = the moving average itself (no stretch).
Guide lines (default +10/−10) = “This is pretty far for this setting.” Treat these as review-and-decide zones, not auto-trade signals.
Three quick reads:
Magnitude: how far from the mean (size of KRI).
Direction: above/below zero (which side of the mean).
Turn: KRI curling back toward zero (reversion starting) or accelerating away (trend impulse continuing).
What KRI really measures (plain-English)
The SMA(length) is your “fair value” line for this indicator.
KRI tells you the percentage deviation from that fair value—normalized, so you can compare across assets/timeframes with the same length.
Because it’s a pure distance metric, KRI excels at:
spotting over-extensions into VP edges (VAH/VAL) and AVWAP,
timing mean-reversion back to POC/AVWAP in balance,
confirming reclaims (KRI crossing back through zero at a level),
framing pullbacks in trend (healthy dips usually avoid deep negative KRI in strong uptrends).
Using KRI on any timeframe
The workflow is always Location → Flow → KRI:
Location: a real level (Volume Profile v3.2’s VAH/VAL/POC/LVNs or Anchored VWAP).
Flow quality: check CVDv1 (Alignment OK? Absorption not red?).
KRI: are we stretched into/away from the level, and is KRI turning?
Scalping (1–5m)
Fade the stretch (balance): At VAH/VAL or Session AVWAP, an extreme KRI that rolls back toward zero = quick rotation to the middle (POC/AVWAP).
Don’t fade if bands are expanding and flow is strong (CVDv1 says go) — big KRI can stay big in expansion.
Intraday (15m–1H)
Continuation after pullback: In uptrends, look for shallow negative KRI at support (VAL/AVWAP) that turns up → join trend.
Failed breakout tell: Price pokes above VAH but KRI barely increases or rolls over quickly → likely a reclaim back inside value.
Swing (2H–4H)
Edge-to-mean rotations: At composite VAH/VAL, KRI extremes are great context: fade back to POC/HVNs if flow doesn’t confirm a breakout.
Reclaim confirmation: After a flush below Weekly AVWAP, KRI crossing back up through zero on the reclaim bar is a clean green light.
Position (1D–1W)
Regime posture: Multi-day runs with sustained positive KRI (and shallow dips) = constructive; mirror for downtrends. Use KRI pullbacks to ~0 at Weekly AVWAP for adds.
Entries, exits, and risk (simple rules)
Mean-reversion entry: At VAH/VAL or AVWAP, wait for KRI extreme at/through your guide line and a turn back toward zero.
Stop: just beyond the level; Target: POC/HVN or the zero line on KRI.
Trend-continuation entry: In a trend, take pullbacks where KRI stays modest (doesn’t blow through your lower/upper guide) and turns back with the trend at the level.
Avoid: chasing breakouts where KRI is already extreme and still climbing unless CVDv1 says Alignment OK + no Absorption and you have a clean retest.
Settings that matter (and how to tune them)
Length (default 50): defines the moving average “fair value.”
Shorter (20–34): faster, more signals, more noise—good for intraday.
Longer (50–100): steadier, better for swings/position.
Source (default close): keep it simple; hlc3 or close both work.
Line Above / Below (defaults +10/−10): your review zones. Tune them to the asset/timeframe:
Scroll back 6–12 months and eyeball typical |KRI| spikes. Set your lines around the 80th–90th percentile of |KRI| for that market and length.
Majors often need smaller thresholds than thin alts on the same timeframe.
Tip: If your KRI is always beyond the lines, increase length or widen the thresholds. If it never touches them, shorten length or tighten thresholds.
What to look for (pattern cheat sheet)
Stretch into level → curl: KRI tags an extreme right at VAH/VAL/AVWAP, then turns back → classic rotation.
Shallow pullback in trend: KRI dips toward zero but doesn’t hit your lower guide, then turns up at support → continuation.
No-juice break: New price high with weaker KRI (smaller positive % vs prior leg) → breakout lacks extension; plan for retest or reclaim.
Zero-line reclaims: After a washout, KRI crosses zero as price reclaims AVWAP/VAL → clean confirmation.
Combining KRI with other tools
Cumulative Volume Delta v1 (CVDv1):
Use KRI for stretch/turn, CVDv1 for quality.
A KRI extreme at VAH with CVDv1 Absorption (red) is a do-not-chase; look for the fail/reclaim.
A KRI pullback toward zero at VAL with Alignment OK + strong Imbalance + no Absorption = high-quality continuation.
Volume Profile v3.2:
KRI’s best signals happen at VAH/VAL/POC/LVNs.
LVN traversals with rising KRI often run quickly to the next HVN—use VP for targets.
Anchored VWAP :
Treat AVWAP as fair-value rails. KRI zero cross on an AVWAP reclaim is your green flag; KRI extreme + failure to accept beyond AVWAP warns of a fake break.
Common pitfalls KRI helps you avoid
Buying high into a tired move: KRI already very positive at VAH and rolling over = likely rotation; wait.
Fading true expansion: In strong trends with confirmed flow, KRI can remain extreme; don’t automatically fade just because it’s “far.”
Wrong thresholds: Copy-pasting ±10 to every market/timeframe can mislead. Calibrate to the market you trade.
Practical defaults to start with
Length: 50
Lines: +10 / −10 as placeholders—calibrate later.
Timeframes: great out of the box on 15m–4H; for 1–5m try Length 34 and tighter lines; for daily swings try Length 100 and broader lines.
Process: Level → CVDv1 quality → KRI stretch/turn. If any of the three disagree, wait for the retest.
Disclaimer & Licensing
This indicator and its description are provided for educational purposes only and do not constitute financial or investment advice. Trading involves risk, including the possible loss of capital. makes no warranties and assumes no responsibility for any decisions or outcomes resulting from the use of this script. Past performance is not indicative of future results. Use at your own risk.
Licensing & Attribution:
Copyright (c) 2018–present, Alex Orekhov (everget). Modified and upgraded by .
The original “Kairi Relative Index” is released under the MIT License, and this derivative is distributed under the MIT License as well. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files to deal in the Software without restriction, subject to the conditions of the MIT License, including the above copyright notice and this permission notice. The Software is provided “AS IS,” without warranty of any kind, express or implied.
Chaos Theory Pro # Anyone who has paid for this script previously, please DM as per author instructions to continue your lifetime access
## The Edge: Smart Zone-Based Trading
This indicator's primary advantage lies in its zone-based approach that naturally encompasses critical areas of support and resistance. These zones capture key market structures including:
- High-volume price clusters
- Support-to-resistance (and resistance-to-support) transitions
- Other significant price action areas
By identifying these zones, the indicator addresses two of the most challenging problems in trading : optimal stop loss placement and take profit targeting.
---
## How to Use This Indicator
### Entry Rules: Limit Orders Only
Critical: All entries must be LIMIT orders. Never use market orders or stop orders.
Here's why:
- Why limit orders? The zones represent areas of strong support and resistance (an unintended but beneficial feature of the indicator's design). Price frequently pulls back to these zones before continuing, giving you optimal entry opportunities.
- Why not market orders? You'll miss the better prices at the zone boundaries.
- Why not stop orders? These zones are areas of intense market activity. Price often "spikes" through zone borders to capture liquidity before reversing in the intended direction. Stop orders would get triggered on these false moves.
Proper Entry Technique:
1. Wait for the candle/bar to close
2. Place your limit order at the zone border
3. Let price come to you
### Take Profit Strategy
Target the next zone (recommended) or multiple zones ahead based on your risk appetite. The simplest and most consistent approach is single-zone targeting.
---
## Your Responsibility: Confluence Analysis
The indicator tells you WHERE to enter, WHERE to place your stop loss, and WHERE to take profit. But you must determine WHEN to trade by identifying confluences.
### Minimum Requirement: 3 Confluences
Before placing any order, look for at least three confirming signals from:
- Divergences : RSI, MFI, or CVD candles
- Volume analysis : Volume Profile
- Order flow : Footprint charts
- Price action : Candlestick patterns
- Market theories : Wyckoff, Dow Theory, Elliott Wave
- Other technical tools of your choice
### You Have Time
The indicator provides alerts when price approaches a zone . During the pullback, you have time to conduct thorough confluence analysis. Only place your limit order after identifying your 3+ confluences.
---
## Alternative Approaches
If you backtest and find that market entries work better for your specific strategy (e.g., using moving average crossovers or other triggers), you're free to adapt the method. However, the limit order approach outlined above is designed to work consistently for everyone, regardless of whether they have an existing strategy.
---
## How the Indicator Works: The Mathematical Foundation
### Based on Chaos Theory - A Predictive, Not Reactive System
This indicator represents a fundamentally different approach to market analysis. Unlike traditional indicators that describe what price has done (using averages, volume, volatility), this system predicts where price will go using chaos theory mathematics.
Key Principle : Price behaves as a complex dynamical system that is highly sensitive to initial conditions - similar to weather patterns or planetary orbits. While we cannot predict when price will reach a destination, we can predict where it will likely travel within probability bounds.
### What Makes This Different
Traditional Indicators:
- React to historical data with lagging signals
- Use linear mathematics and statistical averages
- Assume markets are random or follow simple patterns
This Chaos Theory Approach:
- Proactively identifies future probability zones
- Uses non-linear complex systems mathematics
- Treats markets as chaotic but mathematically predictable
- Applies universal mathematical laws (no curve fitting needed)
### The Butterfly Effect in Trading
Small changes at critical junctures can cascade into major trend changes. The indicator identifies these critical probability zones - mathematical "attractors" toward which price is naturally drawn.
### Understanding the Zones
Orange Zones : Mathematical probability destinations where price is likely to expand
Activation Rule : Price must close outside any zone (full candle body, not just wicks) to activate the next probability destination
Primary Principle : Once activated, price travels to the next zone before closing back behind the originating zone border
Red Dots : Indicate areas where valid zone sets were available for trading. Empty spaces mean price closed past the highest/lowest zone or zones were invalidated.
### Probability-Based Performance
The indicator includes a statistics panel that measures real-time success rates - tracking how often price reaches predicted zones before invalidation. This transparent performance measurement allows you to verify probability calculations for your specific symbol and timeframe.
### Universal Application
Because this is based on fundamental mathematical principles (not optimized parameters), it works consistently across:
- All markets: Forex, stocks, crypto, commodities
- All timeframes: From scalping to position trading
- All conditions: No adjustments needed for different instruments
Important Understanding : Price is a fractal structure with multiple initial conditions forming and clashing simultaneously. External events and market manipulation can interfere with natural system progression. This is why we provide probabilities, not certainties.
---
Summary : This indicator gives you the framework—precise zones for entries, stops, and targets based on chaos theory mathematics. You provide the timing through confluence analysis. Together, this creates a complete, systematic approach to trading with probability on your side.
---
## Technical Features & Alert System
### Alert System Enhancement
Alert Type Selector:
* "Limit Alerts" (pending orders) vs "Normal Alerts" (market orders)
* 8 fully customizable alert message templates with placeholder support:
* Limit Long Entry
* Limit Short Entry
* Normal Long Entry
* Normal Short Entry
* Limit Long TP/Cancel
* Limit Short TP/Cancel
* Normal Long TP
* Normal Short TP
### Placeholder System
Dynamic placeholder replacement function supporting:
* {SYMBOL} - Trading pair/instrument
* {ENTRY} - Entry price level
* {SL} - Stop loss price level
* {TP} - Take profit price level
* {COMMENT} - Additional trade notes
* {TIMEFRAME} - Current chart timeframe
* {TIME} - Alert trigger time
* {ZONE} - Zone identifier
Users can customize alert messages while maintaining data accuracy across all automated trading platforms.
### Alert Trigger Points
* Entry alerts fire when zone breakout occurs (i == 0)
* TP alerts fire when take profit conditions are met
* Unique zone identifiers prevent duplicate alerts per zone set (format: Z L/S )
### Input Parameters
Converted hardcoded values to adjustable inputs for maximum flexibility:
* Lookback Period : 10-500 (default 50)
* Value Area Share : 0.1-0.9 (default 0.3)
* Show Volume Profile Stats : Toggle on/off
* Has Premium Subscription : Toggle on/off
* Vertical Display : Toggle on/off
### Code Compliance
* All line.new(), label.new(), and table.new() calls formatted on single lines per PineScript v6 requirements
* Proper variable declarations to prevent compilation errors
* Optimized for maximum performance and stability
Core Logic : All original zone calculation, validation, and visualization logic remains intact and unchanged.
Alpha All-in-One Indicator (Separate Pane)Alpha All-in-One Indicator (Separate Pane)
in conjunction with other indicators from us (paid)
SM OTC style Supply/Demand Zones Lite+//@version=6
indicator("OTC SD MTF Lite+", "OTCSDmtf+", overlay=true, max_boxes_count=200, max_labels_count=200)
// ================= Inputs =================
useH4 = input.bool(true, "Show 4H zones")
useD1 = input.bool(true, "Show 1D zones")
useW1 = input.bool(true, "Show 1W zones")
useM1 = input.bool(false, "Show 1M zones")
baseLen = input.int(2, "Base length (HTF bars)", 1, 5)
wickPctMax = input.float(35.0, "Max wick % in base", 0, 100)
impulseX = input.float(1.5, "Departure body vs ATR (x)", 0.5, 5.0)
atrLen = input.int(14, "ATR length (HTF)")
extendBars = input.int(2000, "Extend bars on chart", 200, 10000)
maxPerTF = input.int(12, "Max zones per TF", 3, 30)
showLegend = input.bool(true, "Show tiny legend (4H/1D/1W/1M)")
onlyNearest = input.bool(false, "Show ONLY nearest zone above/below")
hideOverlapTF = input.bool(true, "Hide overlapping zones within each TF (keep newest)")
showNearestLabels = input.bool(false, "Show distance labels to nearest above/below")
// --- Hard cap for future drawing with xloc.bar_index ---
FUTURE_CAP = 500
// Colors (Demand hues per TF). Supply uses red for contrast.
colH4 = color.new(color.teal, 78)
colD1 = color.new(color.blue, 78)
colW1 = color.new(color.orange, 78)
colM1 = color.new(color.purple, 78)
colSup= color.new(color.red, 78)
// ================= Helpers =================
wickiness(h, l, o, c) =>
rng = math.max(h - l, syminfo.mintick)
topW = h - math.max(o, c)
botW = math.min(o, c) - l
100.0 * (topW + botW) / rng
// Returns: (dTrig, dProx, dDist, sTrig, sProx, sDist)
f_htfSignals(baseBars, wickMax, xImpulse, aLen) =>
float _o = open
float _h = high
float _l = low
float _c = close
float _atr = ta.atr(aLen)
bool ok = true
for i = 1 to baseBars
ok := ok and (wickiness(_h , _l , _o , _c ) <= wickMax)
bool bullDepart = _c > _o and (_c - _o) > xImpulse * _atr
bool bearDepart = _c < _o and (_o - _c) > xImpulse * _atr
float dTrig = 0.0
float dProx = na
float dDist = na
float sTrig = 0.0
float sProx = na
float sDist = na
if ok and bullDepart
float hi = ta.highest(_h, baseBars)
float lo = ta.lowest(_l, baseBars)
dTrig := 1.0
dProx := lo
dDist := hi
if ok and bearDepart
float hi2 = ta.highest(_h, baseBars)
float lo2 = ta.lowest(_l, baseBars)
sTrig := 1.0
sProx := hi2
sDist := lo2
// ================= Pull HTF signals =================
= request.security(syminfo.tickerid, "240", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
= request.security(syminfo.tickerid, "D", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
= request.security(syminfo.tickerid, "W", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
= request.security(syminfo.tickerid, "M", f_htfSignals(baseLen, wickPctMax, impulseX, atrLen))
// ================= Storage per TF =================
var zH4 = array.new_box()
var aH4 = array.new_bool()
var lH4 = array.new_label()
var sH4 = array.new_int() // 1 = Demand, -1 = Supply
var zD1 = array.new_box()
var aD1 = array.new_bool()
var lD1 = array.new_label()
var sD1 = array.new_int()
var zW1 = array.new_box()
var aW1 = array.new_bool()
var lW1 = array.new_label()
var sW1 = array.new_int()
var zM1 = array.new_box()
var aM1 = array.new_bool()
var lM1 = array.new_label()
var sM1 = array.new_int()
// ================= Overlap utils =================
overlap(topA, botA, topB, botB) =>
not (topA < botB or botA > topB)
purgeOverlaps(arrB, arrA, arrL, newTop, newBot) =>
if hideOverlapTF and array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box bOld = array.get(arrB, i)
float t = box.get_top(bOld)
float btm = box.get_bottom(bOld)
if overlap(newTop, newBot, t, btm)
box.delete(bOld)
label.delete(array.get(arrL, i))
array.set(arrA, i, false)
// ================= Add zone =================
addZone(arrB, arrA, arrL, arrS, topV, botV, baseColor, isDemand) =>
purgeOverlaps(arrB, arrA, arrL, topV, botV)
int leftX = bar_index - 1
int rightX = bar_index + math.min(extendBars, FUTURE_CAP) // respect +500 cap
box b = box.new(leftX, topV, rightX, botV, xloc=xloc.bar_index, bgcolor=baseColor, border_color=color.new(color.black, 0))
float ly = isDemand == 1 ? topV : botV
st = isDemand == 1 ? label.style_label_down : label.style_label_up
string tagTxt = isDemand == 1 ? "Demand" : "Supply"
label l = label.new(leftX, ly, tagTxt, xloc=xloc.bar_index, style=st, textcolor=color.white, color=color.new(color.black, 0), size=size.tiny)
array.push(arrB, b)
array.push(arrA, true)
array.push(arrL, l)
array.push(arrS, isDemand)
if array.size(arrB) > maxPerTF
box.delete(array.shift(arrB))
array.shift(arrA)
label.delete(array.shift(arrL))
array.shift(arrS)
// ================= Maintain / Invalidate =================
extendAll(arrB, arrA) =>
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box.set_right(array.get(arrB, i), bar_index + math.min(extendBars, FUTURE_CAP)) // respect +500 cap
invalidate(arrB, arrA, arrL) =>
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box b = array.get(arrB, i)
float t = box.get_top(b)
float btm = box.get_bottom(b)
// Close outside band → remove
if close > t or close < btm
box.delete(b)
label.delete(array.get(arrL, i))
array.set(arrA, i, false)
// ================= New HTF bar flags (strict booleans) =================
int chH4 = ta.change(time("240"))
int chD1 = ta.change(time("D"))
int chW1 = ta.change(time("W"))
int chM1 = ta.change(time("M"))
bool newBarH4 = useH4 and (not na(chH4)) and (chH4 != 0)
bool newBarD1 = useD1 and (not na(chD1)) and (chD1 != 0)
bool newBarW1 = useW1 and (not na(chW1)) and (chW1 != 0)
bool newBarM1 = useM1 and (not na(chM1)) and (chM1 != 0)
// ================= Create zones on new HTF bar =================
if newBarH4
if d4t > 0 and not na(d4p) and not na(d4d)
addZone(zH4, aH4, lH4, sH4, d4d, d4p, colH4, 1)
if s4t > 0 and not na(s4p) and not na(s4d)
addZone(zH4, aH4, lH4, sH4, s4p, s4d, colSup, -1)
if newBarD1
if d1t > 0 and not na(d1p) and not na(d1d)
addZone(zD1, aD1, lD1, sD1, d1d, d1p, colD1, 1)
if s1t > 0 and not na(s1p) and not na(s1d)
addZone(zD1, aD1, lD1, sD1, s1p, s1d, colSup, -1)
if newBarW1
if w1t > 0 and not na(w1p) and not na(w1d)
addZone(zW1, aW1, lW1, sW1, w1d, w1p, colW1, 1)
if swt > 0 and not na(swp) and not na(swd)
addZone(zW1, aW1, lW1, sW1, swp, swd, colSup, -1)
if newBarM1
if m1t > 0 and not na(m1p) and not na(m1d)
addZone(zM1, aM1, lM1, sM1, m1d, m1p, colM1, 1)
if smt > 0 and not na(smp) and not na(smd)
addZone(zM1, aM1, lM1, sM1, smp, smd, colSup, -1)
// ================= Maintain & Invalidate (every bar) =================
extendAll(zH4, aH4)
extendAll(zD1, aD1)
extendAll(zW1, aW1)
extendAll(zM1, aM1)
invalidate(zH4, aH4, lH4)
invalidate(zD1, aD1, lD1)
invalidate(zW1, aW1, lW1)
invalidate(zM1, aM1, lM1)
// ================= Nearest across all TFs =================
tfNearest(arrB, arrA) =>
int upIdx = -1
int dnIdx = -1
float upDist = 1e10
float dnDist = 1e10
float upBtm = na
float dnTop = na
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box b = array.get(arrB, i)
float t = box.get_top(b)
float btm = box.get_bottom(b)
if btm >= close
float d = btm - close
if d < upDist
upDist := d
upIdx := i
upBtm := btm
if t <= close
float d2 = close - t
if d2 < dnDist
dnDist := d2
dnIdx := i
dnTop := t
= tfNearest(zH4, aH4)
= tfNearest(zD1, aD1)
= tfNearest(zW1, aW1)
= tfNearest(zM1, aM1)
float upBest = 1e10, dnBest = 1e10
int upArr = -1, upIdxSel = -1, dnArr = -1, dnIdxSel = -1
color upColor = color.new(color.white, 100), dnColor = color.new(color.white, 100)
if (not na(uh4y)) and uh4d < upBest
upBest := uh4d, upArr := 0, upIdxSel := uh4i, upColor := colH4
if (not na(ud1y)) and ud1d < upBest
upBest := ud1d, upArr := 1, upIdxSel := ud1i, upColor := colD1
if (not na(uw1y)) and uw1d < upBest
upBest := uw1d, upArr := 2, upIdxSel := uw1i, upColor := colW1
if (not na(um1y)) and um1d < upBest
upBest := um1d, upArr := 3, upIdxSel := um1i, upColor := colM1
if (not na(dh4y)) and dh4d < dnBest
dnBest := dh4d, dnArr := 0, dnIdxSel := dh4i, dnColor := colH4
if (not na(dd1y)) and dd1d < dnBest
dnBest := dd1d, dnArr := 1, dnIdxSel := dd1i, dnColor := colD1
if (not na(dw1y)) and dw1d < dnBest
dnBest := dw1d, dnArr := 2, dnIdxSel := dw1i, dnColor := colW1
if (not na(dm1y)) and dm1d < dnBest
dnBest := dm1d, dnArr := 3, dnIdxSel := dm1i, dnColor := colM1
// ================= Nearest-only visibility (optional) =================
hideAll(arrB, arrA) =>
if array.size(arrB) > 0
for i = 0 to array.size(arrB) - 1
if array.get(arrA, i)
box.set_bgcolor(array.get(arrB, i), color.new(color.white, 100))
box.set_border_color(array.get(arrB, i), color.new(color.white, 100))
showOne(arrB, arrA, arrS, idx, demColor) =>
if idx >= 0 and idx < array.size(arrB)
if array.get(arrA, idx)
bool isDemand = array.get(arrS, idx) == 1
color c = isDemand ? demColor : colSup
box.set_bgcolor(array.get(arrB, idx), c)
box.set_border_color(array.get(arrB, idx), color.new(color.black, 0))
if onlyNearest
hideAll(zH4, aH4), hideAll(zD1, aD1), hideAll(zW1, aW1), hideAll(zM1, aM1)
if upArr == 0
showOne(zH4, aH4, sH4, upIdxSel, upColor)
if upArr == 1
showOne(zD1, aD1, sD1, upIdxSel, upColor)
if upArr == 2
showOne(zW1, aW1, sW1, upIdxSel, upColor)
if upArr == 3
showOne(zM1, aM1, sM1, upIdxSel, upColor)
if dnArr == 0
showOne(zH4, aH4, sH4, dnIdxSel, dnColor)
if dnArr == 1
showOne(zD1, aD1, sD1, dnIdxSel, dnColor)
if dnArr == 2
showOne(zW1, aW1, sW1, dnIdxSel, dnColor)
if dnArr == 3
showOne(zM1, aM1, sM1, dnIdxSel, dnColor)
// ================= Nearest distance labels (optional) =================
var label nearUp = na
var label nearDn = na
makeNearLabel(y, txt) =>
label.new(bar_index, y, txt, xloc=xloc.bar_index, style=label.style_label_left, color=color.new(color.black, 0), textcolor=color.white, size=size.tiny)
if showNearestLabels
if not na(nearUp)
label.delete(nearUp)
if not na(nearDn)
label.delete(nearDn)
if upArr != -1
box bUp = upArr == 0 ? array.get(zH4, upIdxSel) : upArr == 1 ? array.get(zD1, upIdxSel) : upArr == 2 ? array.get(zW1, upIdxSel) : array.get(zM1, upIdxSel)
float upBtm = box.get_bottom(bUp)
float pctUp = math.round(10000.0 * (upBtm - close) / close) / 100.0
nearUp := makeNearLabel(upBtm, "Nearest Above ~ " + str.tostring(pctUp) + "%")
if dnArr != -1
box bDn = dnArr == 0 ? array.get(zH4, dnIdxSel) : dnArr == 1 ? array.get(zD1, dnIdxSel) : dnArr == 2 ? array.get(zW1, dnIdxSel) : array.get(zM1, dnIdxSel)
float dnTop = box.get_top(bDn)
float pctDn = math.round(10000.0 * (close - dnTop) / close) / 100.0
nearDn := makeNearLabel(dnTop, "Nearest Below ~ " + str.tostring(pctDn) + "%")
// ================= Tiny legend (dots) =================
var table legend = na
if showLegend and na(legend)
legend := table.new(position.top_left, 4, 1)
if showLegend and not na(legend)
table.cell(legend, 0, 0, "● 4H", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(legend, 1, 0, "● 1D", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(legend, 2, 0, "● 1W", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(legend, 3, 0, "● 1M", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell_set_bgcolor(legend, 0, 0, color.new(color.teal, 70))
table.cell_set_bgcolor(legend, 1, 0, color.new(color.blue, 70))
table.cell_set_bgcolor(legend, 2, 0, color.new(color.orange, 70))
table.cell_set_bgcolor(legend, 3, 0, color.new(color.purple, 70))
Monthly Melodies by Bryan Ramirez Three months make up a quarter. My indicator highlights each month in a distinct color: the first month in green, the second in yellow, and the third in orange. Each month functions as its own time window, where the algorithm may lean toward one side of the market more than the other. I like pairing this with Steve Moore’s seasonal tendencies for added context. This approach applies across Futures, Forex, and Crypto.
Intraday Key OpensIntraday Key Opens plots the key session and cycle opening prices: 90-minute cycles opens, New York open, Asia open, and 9:30 US market open. Each line is labeled, color-coded, and can be toggled on/off independently. Designed for intraday traders to quickly identify important price levels and session pivots.
Needle XRThe Didi Index with Full Validation is a technical indicator developed for the TradingView platform, based on the concept of the Didi Index, created by Odir Aguiar (Didi). It uses the relationship between three exponential moving averages (EMAs) of different periods to identify trend reversal or continuation points, known as "needle points." To increase signal reliability, the indicator incorporates validations from four widely used technical indicators: MACD, TRIX, DMI/ADX, and Stochastic. Buy and sell signals are displayed only when all validation conditions are met, ensuring greater accuracy.
The indicator is plotted in a separate panel below the price chart, displaying the Didi Index lines (positive and negative), a central reference line, and clear buy (green triangles) and sell (red triangles) signals.
Doji Buy Signal (3-min, Body ≤ 6%)Doji Buy Signal (3-min, Body ≤ 6%) will give a Buy Signal when Doji Candle is formed
Doji Buy Signal (3-min, Body ≤ 6%)Doji Buy Signal (3-min, Body ≤ 6%) will give a buy signal when dojo candle is formed
3 Red Heikin Ashi with Higher Lows3 Red Heikin Ashi with Higher Lows. Will Give a Buy Signal when 3 Red Heikin Ashi with Higher Lows is formed
All-Time High Marker//@version=5
indicator("All-Time High Marker", overlay=true)
// 計算歷史最高價
allTimeHigh = ta.highest(high, bar_index + 1)
// 如果現價等於歷史最高,就畫個符號
isATH = close >= allTimeHigh
plotshape(isATH, title="All-Time High", style=shape.labelup,
color=color.green, text="ATH", location=location.abovebar)
Advantage RSI PredictorThe Relative Strength Index (RSI) is a widely used momentum oscillator that measures the speed and change of price movements, typically on a scale from 0 to 100, to identify overbought (above 70) or oversold (below 30) conditions. However, its reliance on historical data limits its ability to predict future price movements. To overcome this, an advanced indicator—termed the Advanced RSI Predictor (ARP)—can be developed to provide predictive bands for RSI levels, enhancing its forecasting potential.The ARP leverages machine learning techniques, such as Long Short-Term Memory (LSTM) networks, combined with traditional RSI calculations to forecast future RSI values and establish confidence intervals or bands. These bands represent a range within which the RSI is likely to fluctuate over a specified period, offering traders a probabilistic perspective on momentum shifts. The indicator starts with the standard RSI computation, using a 14-period lookback as a foundation, but enriches this by incorporating additional inputs like moving averages, volatility measures (e.g., Bollinger Bands width), and trading volume. These features are processed through an LSTM model trained on historical price and RSI data to predict future RSI trajectories.The output includes upper and lower predictive bands, typically set at a 95% confidence level, surrounding a central forecasted RSI line. For example, if the current RSI is 45, the ARP might project a band from 40 to 50 over the next five days, indicating potential momentum stability or a range for overbought/oversold thresholds. The bands adapt dynamically to market conditions—narrowing during stable trends and widening during volatile periods—using real-time data updates. This adaptability allows traders to anticipate breakouts or reversals before they manifest on the price chart.Validation can be strengthened through backtesting against historical data, ensuring the ARP’s bands align with significant market turns. This indicator proves especially valuable in trending markets, where traditional RSI levels (e.g., 70 or 30) may falter, offering a sophisticated tool for informed trading or investment decisions.
Sessions [Trade Tribe HQ]Color-coded session ranges with ADR% labels to help you trade smarter, not harder.
This tool marks New York, London, Tokyo, and Sydney sessions, showing their ranges, highs/lows, VWAPs, and ADR%.
🔹 Key Features
Colored session boxes (NY, London, Tokyo, Sydney)
Session highs & lows, VWAP, and trendlines
Dashboard showing active sessions, volume, and %ADR
ADR% labels at session close
🔹 How It Helps
Spot session traps, moves, and reversals faster
Manage expectations using ADR% (no chasing over-extended moves)
Identify overlap zones (London → NY) for volatility spikes
Simplify cycle tracking across global markets
Market Sessions Marker—making it easy to see where the energy has been spent and where opportunity is building next.
Created with ❤️ by TraderChick – part of the Trade Tribe HQ community.
If you found this tool useful, check out my profile for more strategies, classes, and resources.
Dubas_timing_macrosChanged script for my presonal user. Changed script for my presonal user. Changed script for my presonal user. Changed script for my presonal user
Bollinger Breakout MarkersSubtle triangle markers that indicate when price extends out of the Bollinger bands to indicate overbought and oversold conditions
Foxbrady D/G CrossFoxbrady D/G Cross - Golden Cross & Death Cross Indicator**
A clean and simple indicator that identifies Golden Cross and Death Cross events using the classic 50-day and 200-day simple moving averages.
Features:
- Blue line: 50-day SMA (fast moving average)
- Red line: 200-day SMA (slow moving average)
- Green "GC" label appears at the exact crossover point when a Golden Cross occurs (bullish signal)
- Red "DC" label appears at the exact crossover point when a Death Cross occurs (bearish signal)
- Built-in alert conditions for both events
- Customizable MA periods to suit your trading style
How to Use:
The Golden Cross (50 MA crossing above 200 MA) is traditionally viewed as a bullish long-term signal, while the Death Cross (50 MA crossing below 200 MA) is considered a bearish indicator. This indicator makes it easy to spot these events historically and receive alerts when they occur in real-time.
Perfect for swing traders and long-term investors looking to identify major trend changes.