Renkli EMA BAR//@version=5
indicator("EMA Color Cross + Trend Arrows V6", overlay=true, max_bars_back=500)
// === Inputs ===
fastLen = input.int(9, "Hızlı EMA")
slowLen = input.int(21, "Yavaş EMA")
// === EMA Hesapları ===
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)
// Trend Yönü
trendUp = emaFast > emaSlow
trendDown = emaFast < emaSlow
// === Çizgi Renkleri ===
lineColor = trendUp ? color.new(color.green, 0) : color.new(color.red, 0)
// === EMA Çizgileri (agresif kalın) ===
plot(emaFast, "Hızlı EMA", lineColor, 4)
plot(emaSlow, "Yavaş EMA", color.new(color.gray, 70), 2)
// === Ok Sinyalleri ===
buySignal = ta.crossover(emaFast, emaSlow)
sellSignal = ta.crossunder(emaFast, emaSlow)
// Büyük Oklar
plotshape(buySignal, title="AL", style=shape.triangleup, color=color.green, size=size.large, location=location.belowbar)
plotshape(sellSignal, title="SAT", style=shape.triangledown, color=color.red, size=size.large, location=location.abovebar)
// === Trend Bar Color ===
barcolor(trendUp ? color.green : color.red)
Phân tích Xu hướng
ZLSMA Trend + Al/Sat Sinyali/@version=6
indicator("ZLSMA Trend + Al/Sat Sinyali", overlay=true, max_labels_count=500)
length = input.int(25, "ZLSMA Periyodu")
src = input.source(close, "Kaynak")
thickness = input.int(4, "Çizgi Kalınlığı")
colorUp = input.color(color.new(color.lime, 0), "Yükselen Renk")
colorDown = input.color(color.new(color.red, 0), "Düşen Renk")
ema1 = ta.ema(src, length)
ema2 = ta.ema(ema1, length)
zlsma = 2 * ema1 - ema2
trendUp = zlsma > zlsma
trendDown = zlsma < zlsma
zlsmaColor = trendUp ? colorUp : colorDown
plot(zlsma, title="ZLSMA", color=zlsmaColor, linewidth=thickness)
buySignal = ta.crossover(close, zlsma)
sellSignal = ta.crossunder(close, zlsma)
plotshape(buySignal, title="Al", location=location.belowbar, color=color.new(color.lime, 0), style=shape.triangleup, size=size.large, text="AL")
plotshape(sellSignal, title="Sat", location=location.abovebar, color=color.new(color.red, 0), style=shape.triangledown, size=size.large, text="SAT")
bgcolor(trendUp ? color.new(color.lime, 90) : color.new(color.red, 90))
Basit Trend AL/SAT//@version=5
indicator("Basit Trend AL/SAT", overlay=true)
yesil = close > open
kirmizi = close < open
1 = yeşil, -1 = kırmızı, 0 = başlangıç
var int trend = 0
trend := yesil ? 1 : kirmizi ? -1 : trend
al = yesil and trend != 1
sat = kirmizi and trend != -1
plotshape(al, title="AL", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.large, text="AL")
plotshape(sat, title="SAT", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.large, text="SAT")
bgcolor(trend == 1 ? color.new(color.green, 85) : trend == -1 ? color.new(color.red, 85) : na)
Short-Term Bubble Risk [Phantom] Short-Term Bubble Risk
Concept
This indicator visualizes short-term market risk by measuring how far price is stretched relative to its recent weekly trend.
Instead of focusing on absolute price levels, it looks at price behavior.
A similar reading means similar market conditions, whether price is high or low.
The goal is to help identify areas of potential accumulation and potential distribution in a clear, visual way.
How It Works
The indicator compares the weekly closing price to a weekly moving average and displays the deviation as a histogram.
When price is far below its average, risk is considered lower
When price is far above its average, risk is considered higher
The zero line represents fair value, where price equals its weekly average.
Features
Color-coded histogram showing short-term risk levels
Designed to work across different assets and price ranges
Optional bar coloring on the main chart using weekly risk data
Safe to use on any timeframe (risk is calculated on weekly data)
Settings
# Moving Average Length (Weeks):
Adjusts how sensitive the indicator is to price changes
# Color Visibility Toggles:
Allows hiding or showing specific risk zones
# Bar Coloring:
Option to color chart candles based on weekly risk levels
Usage
This indicator is best used as a risk lens, not a timing tool.
Common uses include:
Identifying potential accumulation zones during weakness
Spotting overextended conditions during strong moves
Comparing short-term risk across different assets
Adding context to trend-following or DCA strategies
Trade Ideas
# Lower-risk zones (cool colors):
Can support accumulation or patience during downtrends
# Higher-risk zones (warm colors):
Can signal caution, reduced exposure, or profit-taking
Always combine with:
Trend direction
Market structure
Higher-timeframe context
Limitations
This indicator does not predict tops or bottoms
High risk can remain high during strong trends
Low risk does not guarantee immediate reversals
It should not be used as a standalone trading system.
Disclaimer
This indicator is for educational and informational purposes only.
It is not financial advice.
Always do your own research and manage risk appropriately.
Dynamic Pivot Point [MarkitTick]Title: Dynamic Pivot Point MarkitTick
Concept
Unlike traditional Pivot Points, which plot static horizontal levels based on the previous period's High, Low, and Close, this script introduces a dynamic element by applying an Exponential Moving Average (EMA) to the calculated pivot levels. This approach allows the Support and Resistance zones to adapt more fluidly to recent price action, reducing the jagged steps often seen in standard multi-timeframe pivot indicators.
How It Works
The script operates in two distinct phases of calculation:
1. Data Extraction and Core Math:
The indicator first requests the High, Low, and Close data from a user-defined timeframe (e.g., Daily, Weekly). Using this data, it calculates the standard Pivot Point (P) alongside three levels of Support (S1, S2, S3) and three levels of Resistance (R1, R2, R3) using standard geometric formulas:
Pivot = (High + Low + Close) / 3
R1 = 2 * Pivot - Low
S1 = 2 * Pivot - High
(Subsequent levels follow standard Floor Pivot logic).
2. Dynamic Smoothing:
Instead of plotting these raw values directly, the script processes each calculated level (P, S1-S3, R1-R3) through an Exponential Moving Average (EMA). The length of this EMA is controlled by the Pivot Length input. This smoothing process filters out minor volatility and creates curved, dynamic trajectories for the pivot levels rather than static straight lines.
How to Use
Traders can use this tool to identify dynamic areas of interest where price may react.
The White Line represents the Central Pivot. Price action relative to this line helps determine the immediate bias (above for bullish, below for bearish).
Green Lines (Support 1, 2, 3) indicate potential demand zones where price may bounce during a downtrend.
Red Lines (Resistance 1, 2, 3) indicate potential supply zones where price may reject during an uptrend.
Because the levels are smoothed, they can also act as dynamic trend followers, similar to moving averages, but derived from pivot geometry.
Settings
Show Pivot Points: Toggles the visibility of the plot lines on the chart.
Pivot Length: Defines the lookback period for the EMA smoothing applied to the pivot levels. A higher number results in smoother, slower-reacting lines.
Timeframe: Determines the timeframe used for the underlying High/Low/Close data (e.g., selecting "D" calculates pivots based on Daily data while viewing a lower timeframe chart).
Disclaimer This tool is for educational and technical analysis purposes only. Breakouts can fail (fake-outs), and past geometric patterns do not guarantee future price action. Always manage risk and use this tool in conjunction with other forms of analysis.
MP SESSIONS, DST, OTTMP SESSIONS, DST, OTT – What this indicator does
This script is a multi-session market timing tool that:
Draws full trading sessions on the chart (Asia, Sydney, Tokyo, Shanghai, Europe, London, New York, NYSE)
Automatically adjusts for Daylight Saving Time (DST) for Sydney, London, and New York
Shows a live info table with session times, DST status, and whether each session is currently open or closed
Adds optional custom “OTT” vertical lines at user-defined intraday times (for your own models, killzones, or time blocks)
Main Features (high level)
1. Market mode & time zone handling
Market Mode:
Forex
Stock
User Custom (you type your own session ranges)
TFlab suggestion (predefined “optimized” session times)
Time Zone Mode:
UTC
Session Local Time (local exchange time: Sydney, Tokyo, London, New York etc.)
Your Time Zone (converts to the user-selected TZ, e.g. UTC-4:00)
Handles separate time zones for:
Asia, Sydney, Tokyo, Shanghai, Europe, London, New York, NYSE
Has logic to recalculate session start/end depending on DST and the chosen mode.
2. Daylight Saving Time (DST) engine
The function DST_Detector:
Calculates when DST starts and ends for:
Australia/Sydney
Europe/London
America/New_York
Detects the correct Sunday (2nd, 4th, etc.) for start/end using day-of-week and week counts.
Returns 'Active' or 'Inactive' for each region.
These values are then used to shift the sessions (e.g. New York 13:00–21:00 vs 12:00–20:00 in UTC).
The script can also draw vertical lines on the chart when DST starts/ends and label them:
“Sydney DST Started / Ended”
“London DST Started / Ended”
“New York DST Started / Ended”
3. Session timing & sessions on the chart
The function Market_TimeZone_Calculator:
Based on Market Mode + Time Zone Mode + DST state, it returns:
Time ranges for: Sydney, Tokyo, Shanghai, Asia (combined), Europe, London, New York, NYSE
These ranges are in "HHMM-HHMM" format.
Then the script:
Converts these to time() conditions using the proper time zone
Creates boolean series like On_sesAsia, On_sesEurope, On_sesNewYork, etc., which are 1 when the session is open and 0 when closed.
4. Session high/low boxes & labels
The function LowHighSessionDetector:
Tracks high and low of each session while it’s active.
When a new session starts:
Resets and starts recording the session high/low.
While session is active:
Updates High with the max of current bar high and previous session high.
Updates Low with the min of current bar low and previous session low.
When the session is "on":
Draws a box from session low to high (box.new) and extends it to the right as long as the session continues.
Places a label with session name (Asia, London, New York, etc.) near the high:
Style depends on the session (down/right/left).
You have visibility toggles per session:
Asia Session, Sydney Session, Tokyo Session, Shanghai Session, Europe Session, London Session, New York Session, NYSE (for TFlab mode).
So you visually see:
A shaded box for each session
The full H/L range for that session
A text label with the session name.
5. Info table
The indicator builds a table in a corner of the chart showing:
Header:
“FOREX Session”, “Stock Market Trading Hours”, “User Custom Session”, or “TFlab suggestion” depending on mode.
Columns:
Session name (Asia, Sydney, Tokyo, Shanghai, Europe, London, New York, NYSE)
DST status for that region (“Active 🌞 / Inactive 🍂 / Not Observed”)
Session start time
Session end time
Current status (“Open / Closed”, with green/red background)
The function SplitFunction:
Parses the "HHMM-HHMM" strings for each session.
Converts them into:
Either raw times (if viewing in UTC/session local)
Or converted times in Your Time Zone using timestamp and hour/ minute with YourTZ.
Returns formatted Start and End strings like 9:30, 13:00, etc.
So the table is effectively a live session schedule that:
Auto-adjusts to DST
Can show times in your own time zone
Shows which session is open right now.
6. OTT vertical lines (custom intraday markers)
At the bottom, there is an OTT section which lets you draw up to three sets of vertical lines at specific times:
Each OTT block has:
Enable toggle (Enable OTT 1/2/3)
Start hour & minute
End hour & minute
Color
Global OTT settings:
Line style: Solid / Dashed / Dotted
Line width
Toggle: “Show OTT Labels?”
Logic:
is_ott_time() checks if current bar’s hour and minute match the OTT input time.
draw_ott():
When the bar time matches, draws a vertical line through the candle from low to high (extend.both).
Optionally adds a label above the bar, like "OTT1 Start", "OTT1 End", etc.
Use cases:
Marking open/close of your trading session
Defining killzones, news times, or custom model windows
Visual anchors for your intraday routine (NY open, 10 AM candle, etc.)
SuperTrend BUY SELL Color//@version=6
indicator("SuperTrend by Cell Color", overlay=true, precision=2)
// --- Parametreler ---
atrPeriod = input.int(10, "ATR Periyodu")
factor = input.float(3.0, "Çarpan")
showTrend = input.bool(true, "Trend Renkli Hücreleri Göster")
// --- ATR Hesaplama ---
atr = ta.atr(atrPeriod)
// --- SuperTrend Hesaplama ---
up = hl2 - factor * atr
dn = hl2 + factor * atr
var float trendUp = na
var float trendDown = na
var int trend = 1 // 1 = bullish, -1 = bearish
trendUp := (close > trendUp ? math.max(up, trendUp ) : up)
trendDown := (close < trendDown ? math.min(dn, trendDown ) : dn)
trend := close > trendDown ? 1 : close < trendUp ? -1 : trend
// --- Renkli Hücreler ---
barcolor(showTrend ? (trend == 1 ? color.new(color.green, 0) : color.new(color.red, 0)) : na)
// --- SuperTrend Çizgileri ---
plot(trend == 1 ? trendUp : na, color=color.green, style=plot.style_line, linewidth=2)
plot(trend == -1 ? trendDown : na, color=color.red, style=plot.style_line, linewidth=2)
T3 Al-Sat Sinyalli//@version=5
indicator("T3 Al-Sat Sinyalli", overlay=true, shorttitle="T3 Signal")
// Kullanıcı ayarları
length = input.int(14, minval=1, title="Periyot")
vFactor = input.float(0.7, minval=0.0, maxval=1.0, title="Volatility Factor (0-1)")
// EMA hesaplamaları
ema1 = ta.ema(close, length)
ema2 = ta.ema(ema1, length)
ema3 = ta.ema(ema2, length)
// T3 hesaplaması
c1 = -vFactor * vFactor * vFactor
c2 = 3 * vFactor * vFactor + 3 * vFactor * vFactor * vFactor
c3 = -6 * vFactor * vFactor - 3 * vFactor - 3 * vFactor * vFactor * vFactor
c4 = 1 + 3 * vFactor + vFactor * vFactor * vFactor + 3 * vFactor * vFactor
t3 = c1 * ema3 + c2 * ema2 + c3 * ema1 + c4 * close
// T3 çizimi
plot(t3, color=color.new(color.blue, 0), linewidth=2, title="T3")
// Mum renkleri
barcolor(close > t3 ? color.new(color.green, 0) : color.new(color.red, 0))
// Al-Sat sinyalleri
buySignal = ta.crossover(close, t3)
sellSignal = ta.crossunder(close, t3)
// Okları çiz
plotshape(buySignal, title="Al", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="Sat", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
EMA COLOR BUY SELL
indicator("Sorunsuz EMA Renk + AL/SAT", overlay=true)
length = input.int(20, "EMA Periyodu")
src = input.source(close, "Kaynak")
emaVal = ta.ema(src, length)
isUp = emaVal > emaVal
emaCol = isUp ? color.green : color.red
plot(emaVal, "EMA", color=emaCol, linewidth=2)
buy = isUp and not isUp // kırmızı → yeşil
sell = not isUp and isUp // yeşil → kırmızı
plotshape(buy, style=shape.arrowup, location=location.belowbar, color=color.green, size=size.large, text="AL")
plotshape(sell, style=shape.arrowdown, location=location.abovebar, color=color.red, size=size.large, text="SAT")
alertcondition(buy, "EMA AL", "EMA yukarı döndü")
alertcondition(sell, "EMA SAT", "EMA aşağı döndü")
SuperTrend Basit v5 - Agresif//@version=5
indicator("SuperTrend Basit v5 - Agresif", overlay=true)
// === Girdi ayarları ===
factor = input.float(3.0, "ATR Katsayısı")
atrPeriod = input.int(10, "ATR Periyodu")
// === Hesaplamalar ===
= ta.supertrend(factor, atrPeriod)
// === Çizim ===
bodyColor = direction == 1 ? color.new(color.lime, 0) : color.new(color.red, 0)
bgcolor(direction == 1 ? color.new(color.lime, 85) : color.new(color.red, 85))
plot(supertrend, color=bodyColor, linewidth=4, title="SuperTrend Çizgisi") // Kalın çizgi
// === Al/Sat sinyali ===
buySignal = ta.crossover(close, supertrend)
sellSignal = ta.crossunder(close, supertrend)
plotshape(buySignal, title="AL", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.large, text="AL")
plotshape(sellSignal, title="SAT", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.large, text="SAT")
Renkli EMA Crossover//@version=5
indicator("Renkli EMA Crossover", overlay=true)
// EMA periyotları
fastLength = input.int(9, "Hızlı EMA")
slowLength = input.int(21, "Yavaş EMA")
// EMA hesaplama
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
// EMA renkleri
fastColor = fastEMA > fastEMA ? color.green : color.red
slowColor = slowEMA > slowEMA ? color.blue : color.orange
// EMA çizgileri (agresif kalın)
plot(fastEMA, color=fastColor, linewidth=3, title="Hızlı EMA")
plot(slowEMA, color=slowColor, linewidth=3, title="Yavaş EMA")
// Kesişimler
bullCross = ta.crossover(fastEMA, slowEMA)
bearCross = ta.crossunder(fastEMA, slowEMA)
// Oklarla sinyal gösterimi
plotshape(bullCross, title="Al Sinyali", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.large)
plotshape(bearCross, title="Sat Sinyali", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.large)
Vortex Imbalance DetectorVortex Imbalance Detector (VID)
Core Purpose:
To spot "fresh" institutional order flow entering the market, aiming to catch the early stage of a potential reversal driven by an imbalance between aggressive buyers and sellers.
It looks for moments when a surge in buying or selling pressure coincides with a sharp acceleration in price momentum at a market extreme.
The Vortex Imbalance Detector identifies high-probability reversal points by detecting simultaneous shifts in order flow (buy/sell pressure) and price momentum acceleration.
What It Does:
Order Flow Proxy: Creates a cumulative delta-like metric using price action (body vs. range) to estimate net buying or selling pressure.
Momentum Vortex: Calculates price acceleration (the rate of change of velocity) to gauge the force behind a move.
Imbalance Signal: Triggers when both conditions align:
Flow Flip: The order flow proxy crosses above/below zero with significant strength (exceeding a threshold).
Vortex Reversal: The momentum acceleration confirms the direction (positive for buys, negative for sells).
Price Extreme: The signal occurs at a recent low (for buys) or high (for sells).
Output:
Buy Signal (▲): A bullish order flow imbalance with upward momentum acceleration at a short-term low.
Sell Signal (▼): A bearish order flow imbalance with downward momentum acceleration at a short-term high.
Nooner's Heikin-Ashi/Bull-Bear CandlesCandles are colored red and green when Heikin-Ashi and Bull/Bear indicator agree. They are colored yellow when they disagree.
Ultimate Reversion BandsURB – The Smart Reversion Tool
URB Final filters out false breakouts using a real retest mechanism that most indicators miss. Instead of chasing wicks that fail immediately, it waits for price to confirm rejection by retesting the inner band—proving sellers/buyers are truly exhausted.
Eliminates fakeouts – The retest filter catches only genuine reversions
Triple confirmation – Wick + retest + optional volume/RSI filters
Clear visuals – Outer bands show extremes, inner bands show retest zones
Works on any timeframe – From scalping to swing trading
Perfect for traders tired of getting stopped out by false breakouts.
Core Construction:
Smart Dynamic Bands:
Basis = Weighted hybrid EMA of HLC3, SMA, and WMA
Outer Bands = Basis ± (ATR × Multiplier)
Inner Bands = Basis ± (ATR × Multiplier × 0.5) → The "retest zone"
The Unique Filter: The Real Retest
Step 1: Identify an extreme wick touching the outer band
Step 2: Wait 1-3 bars for price to return and touch the inner band
Why it works: Most false breakouts never retest. A genuine reversal shows seller/buyer exhaustion by allowing price to come back to the "halfway" level.
Optional Confirmations:
Volume surge filter (default ON)
RSI extremes filter (optional)
Each can be toggled ON/OFF
How to Use:
Watch for extreme wicks touching the red/lime outer bands
Wait for the retest – price must return to touch the inner band (dotted line) within 3 bars
Enter on confirmation with built-in volume/RSI filters
Set stops beyond the extreme wick
EMA Color Cross + Trend Arrows//@version=5
indicator("T3 Al-Sat Sinyalli", overlay=true, shorttitle="T3 Signal")
// Kullanıcı ayarları
length = input.int(14, minval=1, title="Periyot")
vFactor = input.float(0.7, minval=0.0, maxval=1.0, title="Volatility Factor (0-1)")
// EMA hesaplamaları
ema1 = ta.ema(close, length)
ema2 = ta.ema(ema1, length)
ema3 = ta.ema(ema2, length)
// T3 hesaplaması
c1 = -vFactor * vFactor * vFactor
c2 = 3 * vFactor * vFactor + 3 * vFactor * vFactor * vFactor
c3 = -6 * vFactor * vFactor - 3 * vFactor - 3 * vFactor * vFactor * vFactor
c4 = 1 + 3 * vFactor + vFactor * vFactor * vFactor + 3 * vFactor * vFactor
t3 = c1 * ema3 + c2 * ema2 + c3 * ema1 + c4 * close
// T3 çizimi
plot(t3, color=color.new(color.blue, 0), linewidth=2, title="T3")
// Mum renkleri
barcolor(close > t3 ? color.new(color.green, 0) : color.new(color.red, 0))
// Al-Sat sinyalleri
buySignal = ta.crossover(close, t3)
sellSignal = ta.crossunder(close, t3)
// Okları çiz
plotshape(buySignal, title="Al", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="Sat", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
EMA Cross Color Buy/Sell//@version=5
indicator("EMA Color Cross + Trend Arrows V6", overlay=true, max_bars_back=500)
// === Inputs ===
fastLen = input.int(9, "Hızlı EMA")
slowLen = input.int(21, "Yavaş EMA")
// === EMA Hesapları ===
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)
// Trend Yönü
trendUp = emaFast > emaSlow
trendDown = emaFast < emaSlow
// === Çizgi Renkleri ===
lineColor = trendUp ? color.new(color.green, 0) : color.new(color.red, 0)
// === EMA Çizgileri (agresif kalın) ===
plot(emaFast, "Hızlı EMA", lineColor, 4)
plot(emaSlow, "Yavaş EMA", color.new(color.gray, 70), 2)
// === Ok Sinyalleri ===
buySignal = ta.crossover(emaFast, emaSlow)
sellSignal = ta.crossunder(emaFast, emaSlow)
// Büyük Oklar
plotshape(buySignal, title="AL", style=shape.triangleup, color=color.green, size=size.large, location=location.belowbar)
plotshape(sellSignal, title="SAT", style=shape.triangledown, color=color.red, size=size.large, location=location.abovebar)
// === Trend Bar Color ===
barcolor(trendUp ? color.green : color.red)
Multiple Horizontal Lines_SanHorizontal lines can be drawn with given coordinates with defined intervals
Candle Reversal Pattern Detector (Trend-Filtered)This indicator is designed to highlight potential reversal moments in price action while keeping them aligned with the broader market context. The focus is on clarity, selectivity, and visual simplicity. Very fast trading.
Core concept
The tool observes candle behavior to identify situations where market control may be shifting. These situations are considered relevant only when they are consistent with the prevailing directional environment, helping to avoid counterproductive signals.
Context awareness
Signals are filtered using a directional reference, so reversal patterns are shown only when they appear within a coherent market phase. This helps reduce noise and emphasizes higher-quality situations.
Visual approach
Signals are displayed directly on the chart using clear, minimal markers. Optional labels can be enabled to provide immediate visual recognition without cluttering the price action.
How to use it
This indicator is best used as a decision-support tool rather than a standalone trading system. It works well when combined with basic structure reading and higher-timeframe context.
Best conditions
Most effective in markets that respect directional movement and show clean price behavior. In very choppy or low-structure environments, signals should be interpreted with discretion.
For educational and analytical purposes only. Always test across different instruments and timeframes before relying on it.
Confluence Signal Intelligence Indicators (CSI Indicators)CSI - Confluence Signal Intelligence is a dual-oscillator analysis tool that combines two specialized indicators in a single pane. It provides visibility into cycle exhaustion and statistical deviation conditions to help identify potential turning points.
The Two Oscillators
CEI - Cycle Exhaustion Index (Upper Section)
CEI measures where price sits within its recent cycle range and detects momentum depletion states. It identifies moments when a move has stretched beyond typical levels, which historically have preceded mean-reversion.
Normalized range from -1.0 to +1.0
Configurable exhaustion thresholds
Reversal signals (REV) when extreme zones begin turning
Cycle wave overlay showing peak/trough phases
Stepped confluence indicator between sections
PRG - PDF Reversal Gauge (Lower Section)
PRG applies statistical transforms across multiple timeframes to measure deviation from price norms. It combines readings from primary and secondary periods to create a confluence assessment.
Multi-period analysis for timing and confirmation
Strong Confluence (SC) signals at statistical extremes
Confluence scoring when multiple periods align
Deviation bars showing distance from mean
Signal Types
CEI Signals:
REV - Reversal signal when exhaustion zone begins turning
Triangle markers - Entry into exhaustion zones
X markers - Extreme exhaustion levels
PRG Signals:
SC - Strong Confluence signal when threshold met
Triangle markers - Standard reversal signals
Diamond markers - Multi-period confluence alignment
Visual Design
The pane is divided into two distinct sections with a separator line:
Upper Section (CEI) - Cycle analysis with area fill and confluence stepping
Lower Section (PRG) - Statistical gauge with deviation bars
Color Coding - Gold for strong confluence, Green/Red for direction, Gray for neutral
Zone Backgrounds - Shaded areas marking overbought/oversold regions
Information Table - Real-time values, zones, confluence scores, and signals for both oscillators
Configuration
CEI Settings:
Cycle period and exhaustion lookback
Signal smoothing and sensitivity
Upper/lower exhaustion thresholds
Extreme level definition
PRG Settings:
Primary and secondary periods
Smoothing and extreme threshold
Confluence sensitivity
Strong confluence threshold
Multi-period confluence toggle
Layout Settings:
Adjustable vertical positioning
Independent scale factors for each oscillator
Separator position control
Alert Conditions
CEI Alerts - Bull/Bear reversals, extreme exhaustion levels
PRG Alerts - Strong confluence buy/sell, standard reversals
Combined Alerts - Both oscillators signaling together, strong combined confluence
Companion Indicator
CSI - Confluence Signal Intelligence is the main chart overlay that generates BUY/SELL signals with confidence classifications (HIGH/MEDIUM/LOW). This oscillator pane is designed to work alongside it, showing the cycle and statistical dynamics that contribute to signal generation.
When using both together:
Main CSI provides analytical signals directly on the price chart
This pane reveals the underlying CEI and PRG oscillator states
Aligned readings across both indicate stronger confluence
Reading the Pane
For potential long setups:
CEI in lower exhaustion zone (OS) and rising
PRG in oversold territory and turning up
REV or SC labels appearing
Both oscillators showing elevated confluence scores
For potential short setups:
CEI in upper exhaustion zone (OB) and falling
PRG in overbought territory and turning down
REV or SC labels appearing
Both oscillators showing elevated confluence scores
The oscillators may not signal on the exact same bar. When readings cluster within a few bars, this suggests developing conditions that warrant attention.
Risk Disclosure
This indicator measures technical conditions—not future price direction. Confluence scores represent analytical assessments based on statistical deviation and cycle position, not guarantees of market movement. All trading involves substantial risk of loss. Use this tool alongside your own analysis and proper risk management. No indicator can predict future price movements with certainty.
---
## AUTHOR'S INSTRUCTIONS:
```
To request access to CSI - Confluence Signal Intelligence , please send a private message or visit frontieralgo.com/tradingview.
For best results, use alongside the main CSI overlay on the price chart.
Confluence Signal Intelligence (CSI)CSI - Confluence Signal Intelligence is a professional-grade analytical overlay that evaluates market conditions across multiple dimensions simultaneously. Rather than relying on a single indicator, CSI synthesizes multiple evidence factors and classification models into unified BUY/SELL signals with confidence classifications.
What It Does
CSI identifies potential reversal zones by detecting when multiple independent analytical components align in the same direction. Each signal displays a confidence classification:
HIGH - Strong multi-factor alignment (Gold labels)
MEDIUM - Moderate factor alignment
LOW - Limited factor alignment
Important : The confidence level measures analytical consensus—not a prediction of trade outcome. A HIGH reading means multiple components agree on directional bias at that moment, not that the trade will be profitable.
Multi-Factor Analysis
The classification system evaluates conditions across several categories:
Statistical Extremes - Normalized price transforms that identify stretched conditions
Momentum Indicators - Multiple oscillators confirming oversold/overbought states
Cycle Analysis - Gauges measuring exhaustion and potential turning points
Trend Alignment - Multi-timeframe directional agreement
Market Structure - Break of Structure events and swing point analysis
Pattern Classification - Models comparing current conditions to historical setups
Volume Analysis - Confirming directional moves with participation
Divergence Detection - Price/momentum disagreements across multiple oscillators
Classification Components
CSI incorporates multiple classification models (KNN, gradient boosting approximation, perceptron) that analyze current market conditions against historical patterns. These models contribute to the overall confidence assessment by identifying setups with characteristics similar to past formations.
Smart Money Concepts
The indicator includes institutional trading concepts:
Break of Structure (BOS) - Markers when price violates significant swing points
Order Blocks - Potential support/resistance zones based on price structure
Fair Value Gaps (FVG) - Price imbalances that may act as future reference points
Regime Detection - Background coloring distinguishing trending vs. ranging conditions
Key Features
Non-Repainting Mode - Optional bar-close confirmation prevents signal changes on the current bar
Adaptive Thresholds - Automatically adjusts sensitivity based on market volatility
Signal Filtering - Option to hide LOW confidence signals to reduce noise
Configurable Cooldown - Minimum bars between signals to prevent overtrading
Comprehensive Dashboard - Real-time display of key metrics and states
Trend EMAs - 20/50/200 period moving averages for context
Extensive Alerts - Conditions for signals, structure breaks, divergences, and more
Intended Use
CSI is designed as a decision-support tool for traders conducting their own analysis. It identifies moments of technical alignment that may warrant further investigation—it does not guarantee profitable outcomes. Market results depend on numerous variables beyond any single analytical tool.
The indicator works across all markets and timeframes.
Companion Indicator
CSI - Confluence Signal Intelligence is published separately and displays the underlying oscillators in their own pane:
CEI (Cycle Exhaustion Index) - Cycle position and momentum depletion measurement
PRG (PDF Reversal Gauge) - Statistical deviation scoring
When used together, the main CSI overlay provides signals on the chart while the oscillator pane offers visibility into the cycle and reversal dynamics contributing to those signals.
Risk Disclosure
This indicator is an analytical tool—not financial advice. Past performance does not guarantee future results. All trading involves substantial risk of loss. Confidence levels reflect internal model agreement only and should be considered alongside broader market context, your own analysis, and sound risk management practices. No indicator can predict future price movements with certainty.
---
## AUTHOR'S INSTRUCTIONS:
```
To request access to CSI - Confluence Signal Intelligence, please visit frontieralgo.com/tradingview or send a private message.
Multi-Confirmation Fib Zones This indicator combines **dynamic Fibonacci-style price zones** with a **multi-signal confirmation layer** to highlight areas where reactions are more likely to matter.
Core purpose
* Map out **contextual price areas** derived from recent market ranges.
* Provide a structured way to read potential **reaction / continuation zones** without relying on a single input.
Zone framework
* The tool continuously tracks the market’s recent extremes and builds **adaptive reference zones** around them.
* It can display both **bullish-context** and **bearish-context** zones, depending on the current market behavior.
Confirmation layer (confluence concept)
Instead of treating any zone touch as a signal, it evaluates **multiple market perspectives**, such as:
* momentum pressure,
* momentum shifts,
* short-term oscillation balance,
* participation / activity confirmation.
Signals are intended to be interpreted only when **several views align**, helping reduce false positives.
Practical use
* Useful for traders who want **structured levels + confirmation** in one visual workflow.
* Can support both **trend continuation** and **reaction-based setups**, depending on broader context.
* Best treated as a **decision support system** (a “dashboard”), not a standalone trade trigger.
Best conditions
* Works best when markets are **respecting ranges and reacting at obvious areas**.
* In extremely noisy, thin, or news-driven spikes, confirmations may desync and require more discretion.
*For educational and analytical purposes only. Always validate across different instruments and timeframes.*
Killshotcopy// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
//@version=5
indicator("Killshot", overlay=true, format = format.price, max_labels_count=500, max_lines_count=500)
max_bars_back(time, 5000)
////////////////////////////////////////////////////////////////////////////
///// /////
///// Input Block /////
///// /////
////////////////////////////////////////////////////////////////////////////
// Color inputs for EMAs
short_color = input.color(defval=color.blue, title="Fast EMA Color", group="EMA Settings")
medium_color = input.color(defval=color.orange, title="Slow EMA Color", group="EMA Settings")
long_color = input.color(defval=color.red, title="Long EMA Color", group="EMA Settings")
// EMA period inputs
fastEMA = input.int(defval=20, title="Fast EMA", group="EMA Settings")
slowEMA = input.int(defval=50, title="Slow EMA", group="EMA Settings")
longEMA = input.int(defval=238, title="Long EMA", group="EMA Settings")
//Support & Resistance
showSR = input.bool(title="Display Support and Resistance", defval=true, group="S&R; Settings")
atrMovement = input.float(title="ATR Movement Required", defval=1.0, step=0.5, tooltip="Minimum ATR distance price must move to consider a pivot zone to be 'major'")
lookback = input.int(title="High/Low Lookback", defval=25, step=5, tooltip="Lookback period for detecting swing highs/lows")
maxZoneSize = input.float(title="Max Zone Size (Compared to ATR)", defval=2.5, step=0.5, tooltip="If a zone is larger than the current ATR multiplied by this, it is considered too large and ignored")
newStructureReset = input.int(title="Zone Update Count Before Reset", defval=25, step=5, tooltip="The script draws two zones until they're violated - if the first zone is updated this many times, the second zone is reset")
drawPreviousStructure = input.bool(title="Draw Previous Structure", defval=true, tooltip="This turns on/off drawing 'support-turned-resistance' and 'resistance-turned-support'")
displayStars = input.bool(title="Display Stars", defval=true, group="Star Settings")
////////////////////////////////////////////////////////////////////////////
///// /////
///// EMA Cross Plot Block /////
///// /////
////////////////////////////////////////////////////////////////////////////
short = ta.ema(close, fastEMA)
medium = ta.ema(close, slowEMA)
long = ta.ema(close, longEMA)
plot(short, color=short_color, linewidth=1)
plot(medium, color=medium_color, linewidth=1)
plot(long, color=long_color, linewidth=1)
//Show the directional arrows
plotshape(ta.cross(short,medium) and short>medium ? short : na, style=shape.triangleup, color=color.blue, size=size.small, location=location.belowbar)
plotshape(ta.cross(short,medium) and shortmedium ? bullColor : bearColor
plot(series=low, style=plot.style_columns, color=c_ma)
////////////////////////////////////////////////////////////////////////////
///// /////
///// Support & Resistance Code Block /////
///// /////
////////////////////////////////////////////////////////////////////////////
// Get current ATR value
atr = ta.atr(14)
// Get highest body and lowest body for the current candle
highestBody = open > close ? open : close
lowestBody = open > close ? close : open
// Set up our persistent S&R; variables (1 = the wick and 2 = the body)
var res1 = 0.0
var res2 = 0.0
var sup1 = 0.0
var sup2 = 0.0
var lookForNewResistance = true
var lookForNewSupport = true
// Set up our *previous* support & resistance variables (for drawing support-turned-resistance etc)
var previousRes1 = 0.0
var previousRes2 = 0.0
var previousSup1 = 0.0
var previousSup2 = 0.0
// Set up our ATR variables (for identifying significant declines/rallies to validate S&R; zones)
var atrSaved = 0.0
var potentialR1 = 0.0
var potentialR2 = 0.0
var potentialS1 = 0.0
var potentialS2 = 0.0
// Detect fractal swing highs for resistance
// We're looking for this pattern: .|.
if high == ta.highest(high, lookback) and high < high and lookForNewResistance
r1 = high
r2 = highestBody > highestBody ? highestBody : highestBody > highestBody ? highestBody : highestBody
if (r1 - r2) / atr <= maxZoneSize
lookForNewResistance := false
potentialR1 := r1
potentialR2 := r2
atrSaved := atr
// Detect fractal swing lows for support
// We're looking for this pattern: *|*
if low == ta.lowest(low, lookback) and low > low and lookForNewSupport
s1 = low
s2 = lowestBody < lowestBody ? lowestBody : lowestBody < lowestBody ? lowestBody : lowestBody
if (s2 - s1) / atr <= maxZoneSize
lookForNewSupport := false
potentialS1 := s1
potentialS2 := s2
atrSaved := atr
// Check if potential resistance zone has already been violated. If it has, reset our potential R1 & R2
if close > potentialR1 and barstate.isconfirmed
potentialR1 := na
potentialR2 := na
// Check if potential support zone has already been violated. If it has, reset our potential S1 & S2
if close < potentialS1 and barstate.isconfirmed
potentialS1 := na
potentialS2 := na
// Check if we've had a significant decline since detecting swing high
if potentialR1 - low >= (atrSaved * atrMovement)
previousRes1 := na(previousRes1) ? potentialR1 : previousRes1 // Store previous resistance if we're not already drawing it
previousRes2 := na(previousRes2) ? potentialR2 : previousRes2
res1 := potentialR1
res2 := potentialR2
potentialR1 := na
potentialR2 := na
// Check if we've had a significant rally since detecting swing low
if high - potentialS1 >= (atrSaved * atrMovement)
previousSup1 := na(previousSup1) ? potentialS1 : previousSup1 // Store previous support if we're not already drawing it
previousSup2 := na(previousSup2) ? potentialS2 : previousSup2
sup1 := potentialS1
sup2 := potentialS2
potentialS1 := na
potentialS2 := na
// Declare support & resistance update counters
// This is used for forcing a zone reset if a zone is not violated within a reasonable period of time
var supCount = 0
var resCount = 0
// If the previous resistance high has been violated then begin searching for a new resistance zone
if close >= res1 and barstate.isconfirmed
lookForNewResistance := true
lookForNewSupport := true
resCount := resCount + 1
// If the previous support low has been violated then begin searching for a new support zone
if close <= sup1 and barstate.isconfirmed
lookForNewSupport := true
lookForNewResistance := true
supCount := supCount + 1
// If our current resistance zone has been violated, store its values to draw new *potential* support zone
// The idea being that once a major resistance zone is violated it often becomes future support
// But we only save previous S&R; if we don't already have one saved (or our zone update count exceeds newStructureReset)
if (close > res1 and na(previousRes1) and barstate.isconfirmed) or previousRes1 == 0.0 or supCount >= newStructureReset
previousRes1 := res1
previousRes2 := res2
supCount := 0
// If our current support zone has been violated, store its values to draw new *potential* resistance zone
// The idea being that once a major support zone is violated it often becomes future resistance
// But we only save previous S&R; if we don't already have one saved (or our zone update count exceeds newStructureReset)
if (close < sup1 and na(previousSup1) and barstate.isconfirmed) or previousSup1 == 0.0 or resCount >= newStructureReset
previousSup1 := sup1
previousSup2 := sup2
resCount := 0
// If our resistance-turned-support zone has been violated, reset our saved resistance variables
if close < previousRes2 and barstate.isconfirmed
previousRes1 := na
previousRes2 := na
// If our support-turned-resistance zone has been violated, reset our saved support variables
if close > previousSup2 and barstate.isconfirmed
previousSup1 := na
previousSup2 := na
// Draw our current resistance zone
r1 = plot(res1 == res1 ? res1 : na, color=close >= res1 ? color.green : color.red, style=plot.style_linebr, title="R1")
r2 = plot(res1 == res1 ? res2 : na, color=close >= res1 ? color.green : color.red, style=plot.style_linebr, title="R2")
fill(r1, r2, color=close > res1 ? color.green : color.new(color.red, 50), title="Resistance Zone")
// Draw our current support zone
s1 = plot(sup1 == sup1 ? sup1 : na, color=close < sup1 ? color.red : color.green, style=plot.style_linebr, title="S1")
s2 = plot(sup1 == sup1 ? sup2 : na, color=close < sup1 ? color.red : color.green, style=plot.style_linebr, title="S2")
fill(s1, s2, color=close < sup1 ? color.red : color.new(color.green, 50), title="Support Zone")
// Draw our previous support zone (turned potential resistance)
ps1 = plot(previousSup1 == previousSup1 and previousSup1 != sup1 and drawPreviousStructure ? previousSup1 : na, color=color.red, style=plot.style_linebr, title="PS1")
ps2 = plot(previousSup1 == previousSup1 and previousSup1 != sup1 and drawPreviousStructure ? previousSup2 : na, color=color.red, style=plot.style_linebr, title="PS2")
fill(ps1, ps2, color=color.new(color.red, 10), title="Previous Support Zone")
// Draw our previous resistance zone (turned potential support)
pr1 = plot(previousRes1 == previousRes1 and previousRes1 != res1 and drawPreviousStructure ? previousRes1 : na, color=color.green, style=plot.style_linebr, title="PR1")
pr2 = plot(previousRes1 == previousRes1 and previousRes1 != res1 and drawPreviousStructure ? previousRes2 : na, color=color.green, style=plot.style_linebr, title="PR2")
fill(pr1, pr2, color=color.new(color.green, 10), title="Previous Resistance Zone")
////////////////////////////////////////////////////////////////////////////
///// /////
///// STARS Code Block /////
///// /////
////////////////////////////////////////////////////////////////////////////
//calculation variables. Hardcoded for now.
Depth1 = 5
Depth2 = 13
Depth3 = 34
Deviation1 = 1
Deviation2 = 8
Deviation3 = 13
Backstep1 = 3
Backstep2 = 5
Backstep3 = 8
// STAR Color settings - MEDIUM NOW BLUE
color1 = input(title = "Small Stars Color", defval = color.yellow)
color2 = color1
color3 = input(title = "Medium Stars Color", defval = color.aqua)
color4 = color3
color5 = input(title = "Large Sell Stars Color", defval = color.red)
color6 = input(title = "Large Buy Stars Color", defval = color.lime)
repaint = true
// CHATGPT FIX #1: Add useStar parameter
zigzag(Depth0, Deviation0, Backstep0, color0, color00, size0, useStar) =>
var last_h = 1
last_h += 1
var last_l = 1
last_l += 1
var lw = 1
var hg = 1
lw += 1
hg += 1
p_lw = -ta.lowestbars(Depth0)
p_hg = -ta.highestbars(Depth0)
lowing = lw == p_lw or low - low > Deviation0 * syminfo.mintick
highing = hg == p_hg or high - high > Deviation0 * syminfo.mintick
lh = ta.barssince(not highing )
ll = ta.barssince(not lowing )
down = ta.barssince(not(lh > ll)) >= Backstep0
lower = low > low
higher = high < high
if lw != p_lw and (not down or lower)
lw := p_lw < hg ? p_lw : 0
lw
if hg != p_hg and (down or higher)
hg := p_hg < lw ? p_hg : 0
hg
label point = na
x1 = down ? lw : hg
y1 = down ? low -3 : high
if down == down
if repaint
label.delete(point )
down
if down != down
if down
last_h := hg
last_h
else
last_l := lw
last_l
if not repaint
nx = down ? last_h : last_l
point := label.new(bar_index-nx, down ? high : low -6, text = "🟡", style=down?label.style_label_down:label.style_label_up)
down
if repaint
// FINAL FIX: Use red/green circle emojis for Depth3, yellow circles for Depth1/2
txt = useStar ? (down ? "🟢" : "🔴") : "🟡"
point := label.new(bar_index - x1, y1, txt, style=label.style_none, size=size0, textcolor=down ? color00 : color0, xloc=xloc.bar_index, yloc=yloc.price, force_overlay=true)
if displayStars
// CHATGPT FIX #3: Pass false for Depth1/2, true for Depth3
zigzag(Depth1, Deviation1, Backstep1, color1, color2, size.normal, false)
zigzag(Depth2, Deviation2, Backstep2, color3, color4, size.large, false)
zigzag(Depth3, Deviation3, Backstep3, color5, color6, size.huge, true)
////////////////////////////////////////////////////////////////////////////
///// /////
///// Trigger Alerts /////
///// /////
////////////////////////////////////////////////////////////////////////////
// Code Alerts
alert_message = ""
if ta.cross(short,medium) and short>medium
alert_message := "EMA Cross Buy alert for " + syminfo.description + " price: " + str.tostring(math.round(open, 2))
alert(alert_message, freq=alert.freq_once_per_bar)
if ta.cross(short,medium) and short






















