Mark Every 100 Candles Backmark every 100 candles from last to back. Show traders can regconize daily range ( 100 candles) to reduce noise when analyzing.
Göstergeler ve stratejiler
GOLDEN SCALP DEXDescription:
This tool is designed for traders who want to capture momentum shifts that occur within larger timeframe structures. The strategy identifies unique breakout opportunities inside the HTF cycle and provides precise entry and exit signals without cluttering the chart.
The system focuses on:
Pinpointing immediate momentum breakouts
Clean chart visualization with intuitive buy/sell markers
Full backtesting capability through TradingView’s Strategy Tester
Customizable position sizing for futures, forex, and crypto traders
It is especially useful for traders who prefer fast, rule-based signals during high-impact intraday moves.
⚠️ Disclaimer: This is a trading tool, not financial advice. Results may vary depending on market conditions, and proper risk management is essential.
On-Balance Volume with Multiple MA TypesOn-Balance Volume with Multiple MA Types
English Description
Overview
This is the first version of the "On-Balance Volume with Multiple MA Types" indicator designed to overlay directly on the price chart, a significant evolution from its previous iterations, which functioned solely as an oscillator in a separate window. The indicator calculates On-Balance Volume (OBV) and applies various smoothing methods to provide a clear view of volume dynamics in relation to price movements. It is pinned to the price scale for seamless integration with the chart.
Interpretation Recommendations
Price Pushing the OBV Line from Below: When the price chart pushes the OBV line upward and remains below it, this indicates rising volume, suggesting strong buying pressure.
Price Above the OBV Line: When the price chart is above the OBV line, it signals falling volume, indicating weakening momentum or selling pressure.
OBV Line Crossings: When the price crosses the OBV line, it represents a balance point in volume dynamics. The price level at the current crossing can be compared to the previous crossing to assess changes in market sentiment or momentum.
Moving Average Types
The indicator offers eight smoothing options for the OBV line, each with unique characteristics:
EMA (Exponential Moving Average): A weighted average that prioritizes recent data, providing a smooth yet responsive line.
DEMA (Double Exponential Moving Average): Uses two EMAs to reduce lag, offering faster response to volume changes.
HMA (Hull Moving Average): Combines weighted moving averages to minimize lag while maintaining smoothness.
WMA (Weighted Moving Average): Assigns more weight to recent data, balancing responsiveness and noise reduction.
TMA (Triangular Moving Average): A double-smoothed simple moving average, emphasizing central data points for smoother output.
VIDYA (Variable Index Dynamic Average): Adapts smoothing based on market volatility, using a CMO (Chande Momentum Oscillator) for dynamic weighting. Controlled by the VIDYA Alpha parameter (default: 0.2, range: 0–1), which adjusts sensitivity to volatility.
FRAMA (Fractal Adaptive Moving Average): Adjusts smoothing based on fractal dimensions of the OBV data, adapting to market conditions.
JMA (Jurik Moving Average): A proprietary adaptive average designed for minimal lag and high smoothness. Controlled by two parameters:
JMA Phase (default: 50, range: -100 to 100): Adjusts the balance between responsiveness and smoothness.
JMA Power (default: 1, range: 0.1+): Controls the strength of smoothing.
Input Parameters
OBV MA Length (default: 10): The lookback period for smoothing the OBV. Higher values produce smoother results but increase lag.
OBV MA Type (default: JMA): Selects the moving average type from the eight options listed above.
Line Width (default: 2): Thickness of the OBV line on the chart.
Bullish Color (default: Blue): Color of the OBV line when rising (indicating increasing volume).
Bearish Color (default: Red): Color of the OBV line when falling (indicating decreasing volume).
JMA Phase (default: 50): Adjusts the JMA’s responsiveness (used only when JMA is selected).
JMA Power (default: 1): Adjusts the JMA’s smoothing strength (used only when JMA is selected).
VIDYA Alpha (default: 0.2): Controls the sensitivity of VIDYA to market volatility (used only when VIDYA is selected).
How to Use
Add the indicator to your TradingView chart. It will overlay directly on the price chart, aligned with the price scale.
Adjust the OBV MA Type to select your preferred smoothing method based on your trading style (e.g., JMA for low lag, TMA for smoothness).
Modify the OBV MA Length to balance responsiveness and noise reduction. Shorter periods (e.g., 5–10) are better for short-term trading, while longer periods (e.g., 20–50) suit longer-term analysis.
Use the Bullish Color and Bearish Color to visually distinguish rising and falling volume trends.
For JMA or VIDYA, fine-tune the JMA Phase, JMA Power, or VIDYA Alpha to optimize the indicator for specific market conditions.
Interpret the OBV line in relation to price:
Watch for price pushing the OBV line upward (rising volume) or moving above it (falling volume).
Note crossings of the OBV line to identify balance points and compare with prior crossings to gauge momentum shifts.
Combine with other technical tools (e.g., support/resistance levels, trendlines) for a comprehensive trading strategy.
Notes
This indicator is designed to work on any timeframe and market, but its effectiveness depends on the chosen moving average type and parameters.
Experiment with different MA types and lengths to find the best fit for your trading approach.
The indicator is licensed under the Mozilla Public License 2.0 and copyrighted by TradingStrategyCourses © 2025.
Sagittarii LevelsHorizontal Ray with *pd/*pw/*pm high/EQ/low levels
Hang out with us @ CryptoApostles.nl or find us on TG t.me/Crypto_Apostles
Сила быков и медведейThe indicator is based on the idea that the buyer's strength is represented on the chart as the distance from the bar's minimum to the close, and the seller's strength as the distance from the bar's maximum to the close.
The indicator finds the difference between the buyer's and seller's strength for each bar, and then the arithmetic mean for the given period.
If the indicator value is above 0, then the buyer was stronger than the seller over the given period.
If the indicator value is below 0, then the seller was stronger than the buyer over the given period.
Mohammad - Auto Trendlines - Versión EstableMohammad - Auto Trendlines - Dynamic Support & Resistance
This indicator automatically identifies and draws trendlines by connecting pivot highs and pivot lows, similar to how a professional trader would manually draw them on a chart. Each pivot point is used only once to maintain clean, non-overlapping lines.
Key Features:
Automatically detects and connects pivot points to form trendlines
Distinguishes between resistance lines (connecting highs, drawn from top) and support lines (connecting lows, drawn from bottom)
Each pivot/wick is used for maximum one trendline, preventing messy overlapping
Color-coded: Black for resistance lines (bearish), Blue for support lines (bullish)
Support lines can be toggled on/off (hidden by default for cleaner charts)
Parameters:
Minimum/Maximum Length: Controls the range of bars to search for trendline connections (5-40 bars default)
Pivot Strength: Determines how prominent a high/low must be to qualify as a pivot point
Line Extension: Projects trendlines forward into the future
Tolerance: Flexibility for validating price touches on the trendline
Maximum Lines: Limits the number of visible trendlines to prevent chart clutter
How It Works:
The indicator scans historical price data to identify significant pivot points (local highs and lows). It then connects these pivots with trendlines following these rules:
Resistance lines connect pivot highs where the recent high is lower than the older high (descending)
Support lines connect pivot lows where the recent low is higher than the older low (ascending)
Lines must have intermediate price touches to be considered valid
Each pivot can only be used once, ensuring clean, logical trendline placement
Use Cases:
Identify key support and resistance levels automatically
Spot trend continuations and potential reversal points
Save time by eliminating manual trendline drawing
Maintain consistency in technical analysis
The indicator updates every 5 bars and on the last bar to ensure current relevance while maintaining performance.
Daily Open/Close + Weekday ADR (price & pips) Market Maker TTMarket development for trading weekly highs and lows during consolidation markets
Weekly High/Low ZonesMarket Makers Use weekly highs and lows before reversing price and that should help during london and new york session
Asset Info Display by FahadThis indicator helps track asset name with time(min-hour-day-week-month). it helps to get clean chart. you can easily resize text size and change color.
perfect timing//@version=6
indicator("perfect timing", overlay=true, max_boxes_count=500, max_labels_count=500, max_lines_count=500)
// ============================
// Réglages généraux
// ============================
string TZ = input.string("Europe/Paris", "Fuseau horaire", options= )
bool showAsia = input.bool(true, "Afficher box Asie")
bool showLond = input.bool(true, "Afficher box Londres")
bool showNY = input.bool(true, "Afficher box New York")
bool showDots = input.bool(true, "Afficher points horaires")
// Mode épuré (FVG + points horaires uniquement)
bool pureMode = input.bool(false, "Mode épuré (FVG + points horaires uniquement)")
// ============================
// Bannière top-centre (personnalisable)
// ============================
bool showBanner = input.bool(true, "Afficher bannière")
string bannerTitle = input.string("CLOWN FX", "Texte ligne 1")
string bannerSubtitle = input.string("PATIENCE | DISCIPLINE | RESPECT PLAN", "Texte ligne 2")
color bannerTextColor = input.color(color.white, "Couleur texte")
string titleSizeSel = input.string("huge", "Taille ligne 1", options= )
string subSizeSel = input.string("large", "Taille ligne 2", options= )
bool showBannerBg = input.bool(false, "Afficher fond bannière")
color bannerBgColor = input.color(color.new(color.gray, 85), "Couleur fond bannière")
color bannerBg = showBannerBg ? bannerBgColor : color.new(color.black, 100)
bool tS = titleSizeSel == "small", tN = titleSizeSel == "normal", tL = titleSizeSel == "large", tH = titleSizeSel == "huge"
bool sS = subSizeSel == "small", sN = subSizeSel == "normal", sL = subSizeSel == "large", sH = subSizeSel == "huge"
var table banner = na
bool bannerOn = showBanner and not pureMode
if bannerOn
if na(banner)
banner := table.new(position.top_center, 1, 2)
else
if not na(banner)
table.delete(banner)
banner := na
if bannerOn and not na(banner) and barstate.islast
if tH
table.cell(banner, 0, 0, bannerTitle, text_color=bannerTextColor, bgcolor=bannerBg, text_halign=text.align_center, text_size=size.huge)
if tL
table.cell(banner, 0, 0, bannerTitle, text_color=bannerTextColor, bgcolor=bannerBg, text_halign=text.align_center, text_size=size.large)
if tN
table.cell(banner, 0, 0, bannerTitle, text_color=bannerTextColor, bgcolor=bannerBg, text_halign=text.align_center, text_size=size.normal)
if tS
table.cell(banner, 0, 0, bannerTitle, text_color=bannerTextColor, bgcolor=bannerBg, text_halign=text.align_center, text_size=size.small)
if sH
table.cell(banner, 0, 1, bannerSubtitle, text_color=bannerTextColor, bgcolor=bannerBg, text_halign=text.align_center, text_size=size.huge)
if sL
table.cell(banner, 0, 1, bannerSubtitle, text_color=bannerTextColor, bgcolor=bannerBg, text_halign=text.align_center, text_size=size.large)
if sN
table.cell(banner, 0, 1, bannerSubtitle, text_color=bannerTextColor, bgcolor=bannerBg, text_halign=text.align_center, text_size=size.normal)
if sS
table.cell(banner, 0, 1, bannerSubtitle, text_color=bannerTextColor, bgcolor=bannerBg, text_halign=text.align_center, text_size=size.small)
// ============================
// Points horaires
// ============================
int secs = timeframe.in_seconds()
bool tfBlackOk = secs == 60 or secs == 180 or secs == 300 or secs == 900 or secs == 1800
bool tfRedBlueOk = tfBlackOk or secs == 3600
int hr = hour(time, TZ)
int mn = minute(time, TZ)
bool hitBlack = tfBlackOk and ((hr == 10 and mn == 30) or (hr == 12 and mn == 30))
bool hitRed = tfRedBlueOk and (mn == 0 and (hr == 2 or hr == 9 or hr == 14))
bool hitBlue = tfRedBlueOk and (mn == 0 and (hr == 16 or hr == 20))
bool isBear = close < open
float nudge = input.float(0.25, "Décalage (en ticks) pour les points", minval=0.0, step=0.05) * syminfo.mintick
float yBody = isBear ? open + nudge : open - nudge
bool effShowDots = pureMode ? true : showDots
bool effShowAsia = pureMode ? false : showAsia
bool effShowLond = pureMode ? false : showLond
bool effShowNY = pureMode ? false : showNY
plotshape(effShowDots and hitBlack ? yBody : na, title="10:30 & 12:30 (TZ)", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.black, 0))
plotshape(effShowDots and hitRed ? yBody : na, title="2:00, 9:00, 14:00 (TZ)", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(effShowDots and hitBlue ? yBody : na, title="16:00, 20:00 (TZ)", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.blue, 0))
// ============================
// Sessions (TZ choisi)
// ============================
int yTZ = year(time, TZ)
int mTZ = month(time, TZ)
int dTZ = dayofmonth(time, TZ)
// Asie 01:00–06:00
int asiaStart = timestamp(TZ, yTZ, mTZ, dTZ, 1, 0)
int asiaEnd = timestamp(TZ, yTZ, mTZ, dTZ, 6, 0)
bool inAsia = time >= asiaStart and time <= asiaEnd
bool startAsia = inAsia and not inAsia
bool endAsia = not inAsia and inAsia
var box asiaBox = na
var float asiaHi = na
var float asiaLo = na
if not effShowAsia and not na(asiaBox)
box.delete(asiaBox)
asiaBox := na
asiaHi := na
asiaLo := na
if effShowAsia
if startAsia
asiaHi := high
asiaLo := low
asiaBox := box.new(left=bar_index, top=asiaHi, right=bar_index, bottom=asiaLo, xloc=xloc.bar_index, bgcolor=color.new(color.black, 95), border_color=color.new(color.black, 85), border_width=1)
if inAsia and not na(asiaBox)
asiaHi := math.max(asiaHi, high)
asiaLo := math.min(asiaLo, low)
box.set_right(asiaBox, bar_index)
box.set_top(asiaBox, asiaHi)
box.set_bottom(asiaBox, asiaLo)
if endAsia and not na(asiaBox)
asiaBox := na
asiaHi := na
asiaLo := na
// Londres 08:00–11:00
int londStart = timestamp(TZ, yTZ, mTZ, dTZ, 8, 0)
int londEnd = timestamp(TZ, yTZ, mTZ, dTZ, 11, 0)
bool inLond = time >= londStart and time <= londEnd
bool startLond = inLond and not inLond
bool endLond = not inLond and inLond
var box londBox = na
var float londHi = na
var float londLo = na
if not effShowLond and not na(londBox)
box.delete(londBox)
londBox := na
londHi := na
londLo := na
if effShowLond
if startLond
londHi := high
londLo := low
londBox := box.new(left=bar_index, top=londHi, right=bar_index, bottom=londLo, xloc=xloc.bar_index, bgcolor=color.new(color.orange, 90), border_color=color.new(color.orange, 85), border_width=1)
if inLond and not na(londBox)
londHi := math.max(londHi, high)
londLo := math.min(londLo, low)
box.set_right(londBox, bar_index)
box.set_top(londBox, londHi)
box.set_bottom(londBox, londLo)
if endLond and not na(londBox)
londBox := na
londHi := na
londLo := na
// New York 13:00–16:00
int nyStart = timestamp(TZ, yTZ, mTZ, dTZ, 13, 0)
int nyEnd = timestamp(TZ, yTZ, mTZ, dTZ, 16, 0)
bool inNY = time >= nyStart and time <= nyEnd
bool startNY = inNY and not inNY
bool endNY = not inNY and inNY
var box nyBox = na
var float nyHi = na
var float nyLo = na
if not effShowNY and not na(nyBox)
box.delete(nyBox)
nyBox := na
nyHi := na
nyLo := na
if effShowNY
if startNY
nyHi := high
nyLo := low
nyBox := box.new(left=bar_index, top=nyHi, right=bar_index, bottom=nyLo, xloc=xloc.bar_index, bgcolor=color.new(color.green, 90), border_color=color.new(color.green, 85), border_width=1)
if inNY and not na(nyBox)
nyHi := math.max(nyHi, high)
nyLo := math.min(nyLo, low)
box.set_right(nyBox, bar_index)
box.set_top(nyBox, nyHi)
box.set_bottom(nyBox, nyLo)
if endNY and not na(nyBox)
nyBox := na
nyHi := na
nyLo := na
// ============================
// Midnight Open (NY optionnel)
// ============================
bool useNYMidnight = input.bool(false, "Midnight Open calé sur New York (00:00 NY)")
int midWidth = input.int(1, "Épaisseur Midnight Open", minval=1, maxval=4)
int midAlpha = input.int(15, "Transparence Midnight Open (0 opaque, 100 invisible)", minval=0, maxval=100)
color midBase = input.color(color.rgb(64, 64, 64), "Couleur Midnight Open (base)")
color midColor = color.new(midBase, midAlpha)
int yNY = year(time, "America/New_York")
int mNY = month(time, "America/New_York")
int dNY = dayofmonth(time, "America/New_York")
int midStart = timestamp(TZ, yTZ, mTZ, dTZ, 6, 0) // 6:00 Paris
if useNYMidnight
midStart := timestamp("America/New_York", yNY, mNY, dNY, 0, 0)
int midCut = timestamp(TZ, yTZ, mTZ, dTZ, 13, 0)
bool startMid = time >= midStart and nz(time , 0) < midStart
bool endMid = time > midCut and nz(time , 0) <= midCut
var line midLine = na
var float midPrice = na
if pureMode and not na(midLine)
line.delete(midLine)
midLine := na
midPrice := na
if not pureMode
if startMid
midPrice := open
midLine := line.new(bar_index, midPrice, bar_index, midPrice, xloc=xloc.bar_index, extend=extend.none, color=midColor, width=midWidth)
if not na(midLine)
if time <= midCut
line.set_x2(midLine, bar_index)
line.set_y1(midLine, midPrice)
line.set_y2(midLine, midPrice)
if endMid
line.set_extend(midLine, extend.none)
midLine := na
midPrice := na
// ============================
// FVG (haussier BLEU / baissier ROUGE)
// ============================
bool showFVG = input.bool(true, "Afficher FVG")
color fvgBullColor = input.color(color.new(color.rgb(0, 102, 255), 80), "Couleur FVG haussier (bleu)")
color fvgBearColor = input.color(color.new(color.red, 80), "Couleur FVG baissier (rouge)")
int fvgExtendBars = input.int(0, "Extension FVG (barres)", minval=0, maxval=500)
bool fvgUseMinWidth = input.bool(false, "Filtre largeur minimale")
string fvgMethod = input.string("Points", "Méthode largeur", options= )
float fvgMinWidth = input.float(0.0, "Largeur mini (selon méthode)", minval=0.0, step=0.1)
int fvgATRlen = input.int(200, "ATR pour filtre (si ATR)", minval=1)
bool fvgShowMidline = input.bool(true, "Tracer médiane FVG")
int fvgLineWidth = input.int(1, "Épaisseur médiane", minval=1, maxval=3)
color fvgBullLineCol = input.color(color.rgb(0, 102, 255), "Couleur médiane haussière (bleu)")
color fvgBearLineCol = input.color(color.red, "Couleur médiane baissière (rouge)")
bool effShowFVG = pureMode ? true : showFVG
float atrFVG = ta.atr(fvgATRlen)
int n = bar_index
fvgWidthOK(top, btm) =>
float dist = top - btm
if not fvgUseMinWidth
true
else
if fvgMethod == "Points"
dist > fvgMinWidth
else if fvgMethod == "%"
btm != 0 and dist / btm * 100 > fvgMinWidth
else
dist > atrFVG * fvgMinWidth
// Bullish FVG: low > high
float bullTop = low
float bullBtm = high
bool bullCond = effShowFVG and not na(bullBtm) and bullTop > bullBtm and fvgWidthOK(bullTop, bullBtm)
// Bearish FVG: high < low
float bearTop = low
float bearBtm = high
bool bearCond = effShowFVG and not na(bearTop) and bearBtm < bearTop and fvgWidthOK(bearTop, bearBtm)
if bullCond
box.new(n-2, bullTop, n + fvgExtendBars, bullBtm, border_color=na, bgcolor=fvgBullColor)
if fvgShowMidline
float midB = math.avg(bullTop, bullBtm)
line.new(n-2, midB, n + fvgExtendBars, midB, color=fvgBullLineCol, width=fvgLineWidth)
if bearCond
box.new(n-2, bearTop, n + fvgExtendBars, bearBtm, border_color=na, bgcolor=fvgBearColor)
if fvgShowMidline
float midS = math.avg(bearTop, bearBtm)
line.new(n-2, midS, n + fvgExtendBars, midS, color=fvgBearLineCol, width=fvgLineWidth)
// ============================
// Sticky Notes (fond BLANC + texte NOIR, table dynamique)
// ============================
bool showNotes = input.bool(true, "Afficher Sticky Notes")
string notesPosSel = input.string("Top Right", "Position Notes", options= )
string notesTitle = input.string("Notes", "Nom du panneau")
string iconChecked = input.string("✅", "Icône coché")
string iconEmpty = input.string("⬜", "Icône vide")
// Par défaut: noir sur blanc
color noteClrTitle = input.color(color.black, "Couleur titre (Notes)")
color noteClrText = input.color(color.black, "Couleur texte")
color noteClrBg = input.color(color.white, "Couleur fond")
color noteClrGreen = input.color(#4caf50, "Couleur validé")
color noteClrDue = input.color(#ff5252, "Couleur en retard")
groupNote(id) => "Note " + str.tostring(id)
// Note 1
bool n_on_1 = input.bool(true, "Activer", group=groupNote(1), inline="n1a")
string n_t1 = input.string("1st Note", "", group=groupNote(1), inline="n1a")
bool n_d1 = input.bool(true, "Done", group=groupNote(1), inline="n1a")
string n_c1 = input.text_area("This is my first note", "", group=groupNote(1))
bool n_h1 = input.bool(false, "Avec échéance", group=groupNote(1), inline="n1b")
int n_dt1 = input.time(timestamp("31 Dec 2024 00:00"), "Due", group=groupNote(1), inline="n1b")
// Note 2
bool n_on_2 = input.bool(true, "Activer", group=groupNote(2), inline="n2a")
string n_t2 = input.string("2nd Task", "", group=groupNote(2), inline="n2a")
bool n_d2 = input.bool(false, "Done", group=groupNote(2), inline="n2a")
string n_c2 = input.text_area("Serious task with due date.", "", group=groupNote(2))
bool n_h2 = input.bool(true, "Avec échéance", group=groupNote(2), inline="n2b")
int n_dt2 = input.time(timestamp("31 Dec 2028 00:00"), "Due", group=groupNote(2), inline="n2b")
// Note 3
bool n_on_3 = input.bool(true, "Activer", group=groupNote(3), inline="n3a")
string n_t3 = input.string("Forgot something", "", group=groupNote(3), inline="n3a")
bool n_d3 = input.bool(false, "Done", group=groupNote(3), inline="n3a")
string n_c3 = input.text_area("I forgot something... again.", "", group=groupNote(3))
bool n_h3 = input.bool(true, "Avec échéance", group=groupNote(3), inline="n3b")
int n_dt3 = input.time(timestamp("31 Jan 2024 00:00"), "Due", group=groupNote(3), inline="n3b")
// Note 4
bool n_on_4 = input.bool(false, "Activer", group=groupNote(4), inline="n4a")
string n_t4 = input.string("4th Note", "", group=groupNote(4), inline="n4a")
bool n_d4 = input.bool(false, "Done", group=groupNote(4), inline="n4a")
string n_c4 = input.text_area("", "", group=groupNote(4))
bool n_h4 = input.bool(false, "Avec échéance", group=groupNote(4), inline="n4b")
int n_dt4 = input.time(timestamp("31 Dec 2024 00:00"), "Due", group=groupNote(4), inline="n4b")
// Note 5
bool n_on_5 = input.bool(true, "Activer", group=groupNote(5), inline="n5a")
string n_t5 = input.string("5th Note", "", group=groupNote(5), inline="n5a")
bool n_d5 = input.bool(false, "Done", group=groupNote(5), inline="n5a")
string n_c5 = input.text_area("Skipped the 4th note because I can!", "", group=groupNote(5))
bool n_h5 = input.bool(false, "Avec échéance", group=groupNote(5), inline="n5b")
int n_dt5 = input.time(timestamp("31 Dec 2024 00:00"), "Due", group=groupNote(5), inline="n5b")
// Note 6
bool n_on_6 = input.bool(true, "Activer", group=groupNote(6), inline="n6a")
string n_t6 = input.string("Let's meeek money!", "", group=groupNote(6), inline="n6a")
bool n_d6 = input.bool(true, "Done", group=groupNote(6), inline="n6a")
string n_c6 = input.text_area("Done already? Coffee time.", "", group=groupNote(6))
bool n_h6 = input.bool(false, "Avec échéance", group=groupNote(6), inline="n6b")
int n_dt6 = input.time(timestamp("31 Dec 2024 00:00"), "Due", group=groupNote(6), inline="n6b")
// Tableaux typés
var bool NS_on = array.new_bool(6)
var string NS_tt = array.new_string(6)
var bool NS_dn = array.new_bool(6)
var string NS_cm = array.new_string(6)
var bool NS_hd = array.new_bool(6)
var int NS_dt = array.new_int(6)
array.set(NS_on, 0, n_on_1), array.set(NS_on, 1, n_on_2), array.set(NS_on, 2, n_on_3), array.set(NS_on, 3, n_on_4), array.set(NS_on, 4, n_on_5), array.set(NS_on, 5, n_on_6)
array.set(NS_tt, 0, n_t1 ), array.set(NS_tt, 1, n_t2 ), array.set(NS_tt, 2, n_t3 ), array.set(NS_tt, 3, n_t4 ), array.set(NS_tt, 4, n_t5 ), array.set(NS_tt, 5, n_t6 )
array.set(NS_dn, 0, n_d1 ), array.set(NS_dn, 1, n_d2 ), array.set(NS_dn, 2, n_d3 ), array.set(NS_dn, 3, n_d4 ), array.set(NS_dn, 4, n_d5 ), array.set(NS_dn, 5, n_d6 )
array.set(NS_cm, 0, n_c1 ), array.set(NS_cm, 1, n_c2 ), array.set(NS_cm, 2, n_c3 ), array.set(NS_cm, 3, n_c4 ), array.set(NS_cm, 4, n_c5 ), array.set(NS_cm, 5, n_c6 )
array.set(NS_hd, 0, n_h1 ), array.set(NS_hd, 1, n_h2 ), array.set(NS_hd, 2, n_h3 ), array.set(NS_hd, 3, n_h4 ), array.set(NS_hd, 4, n_h5 ), array.set(NS_hd, 5, n_h6 )
array.set(NS_dt, 0, n_dt1 ), array.set(NS_dt, 1, n_dt2 ), array.set(NS_dt, 2, n_dt3 ), array.set(NS_dt, 3, n_dt4 ), array.set(NS_dt, 4, n_dt5 ), array.set(NS_dt, 5, n_dt6 )
// Position
getNotesPos(s) =>
s == "Top Left" ? position.top_left :
s == "Top Center" ? position.top_center :
s == "Top Right" ? position.top_right :
s == "Middle Left" ? position.middle_left :
s == "Middle Center" ? position.middle_center :
s == "Middle Right" ? position.middle_right :
s == "Bottom Left" ? position.bottom_left :
s == "Bottom Center" ? position.bottom_center : position.bottom_right
// Table dynamique (zéro zone blanche quand des notes sont OFF)
int NOTES_COLS = 3
var table notesTbl = na
bool notesOn = showNotes and not pureMode
rowsNeeded() =>
int r = 0
r += 1 // titre "Notes"
r += 1 // séparateur top
for i = 0 to 5
if array.get(NS_on, i)
r += 1 // ligne icône + titre
if array.get(NS_hd, i)
r += 1 // ligne date/compte à rebours
r += 1 // ligne commentaire
r += 1 // séparateur
r
if notesOn and barstate.islast
int NOTES_ROWS = math.max(rowsNeeded(), 2)
if not na(notesTbl)
table.delete(notesTbl)
notesTbl := table.new(getNotesPos(notesPosSel), NOTES_COLS, NOTES_ROWS)
int row = 0
// En-tête
table.cell(notesTbl, 0, row, notesTitle, text_size=size.large, text_color=noteClrTitle, bgcolor=noteClrBg, text_halign=text.align_left)
table.merge_cells(notesTbl, 0, row, 2, row)
row += 1
table.cell(notesTbl, 0, row, "", bgcolor=color.new(color.gray, 85), height=0.1)
table.merge_cells(notesTbl, 0, row, 2, row)
row += 1
// Corps
for i = 0 to 5
if not array.get(NS_on, i)
continue
bool done = array.get(NS_dn, i)
bool hasD = array.get(NS_hd, i)
int due = array.get(NS_dt, i)
string tit = array.get(NS_tt, i)
string com = array.get(NS_cm, i)
table.cell(notesTbl, 0, row, done ? iconChecked : iconEmpty, text_color=done ? noteClrGreen : noteClrDue, text_size=size.normal, bgcolor=noteClrBg)
table.cell(notesTbl, 1, row, tit, text_color=noteClrTitle, text_size=size.large, text_halign=text.align_left, bgcolor=noteClrBg)
table.merge_cells(notesTbl, 1, row, 2, row)
row += 1
if hasD
bool is_due = timenow >= due and not done
color clr = is_due ? noteClrDue : done ? noteClrGreen : noteClrText
string txt_due = is_due ? "Overdue!" : done ? "" : str.format("{0} days left", math.floor((due - timenow) / 8.64e7))
table.cell(notesTbl, 1, row, str.format_time(due, "yyyy-MM-dd"), text_color=clr, text_size=size.small, text_halign=text.align_left, bgcolor=noteClrBg)
table.cell(notesTbl, 2, row, txt_due, text_color=clr, text_size=size.small, text_halign=text.align_center, bgcolor=noteClrBg)
row += 1
table.cell(notesTbl, 0, row, com, text_color=noteClrText, text_size=size.normal, text_halign=text.align_left, bgcolor=noteClrBg)
table.merge_cells(notesTbl, 0, row, 2, row)
row += 1
table.cell(notesTbl, 0, row, "", bgcolor=color.new(color.gray, 85), height=0.1)
table.merge_cells(notesTbl, 0, row, 2, row)
row += 1
else if not notesOn and not na(notesTbl)
table.delete(notesTbl)
notesTbl := na
SMT - Squeeze Momentum Trend📊 Squeeze Momentum Trend
An indicator that combines volatility, momentum, and trend to anticipate the market’s strongest moves. 🚀
✅ Squeeze → when Bollinger Bands tighten inside the Keltner Channel: the market is in compression, ready to “explode”.
✅ Momentum → shows direction and strength (green = bullish push, red = bearish push).
✅ Trend Filter → confirms direction using a higher timeframe EMA (to avoid false signals).
💡 In practice:
🔥 If price breaks out of a squeeze with positive momentum → potential long breakout.
❄️ If it breaks out with negative momentum → potential short breakout.
📌 Perfect for spotting key moments when the market stops “resting” and makes its next big move.
Psych Zones – Continuous 250-pip Bands (clamped boxes)Market Makers liquidation and reversal zones for swing trading
BOS FVG IndicatorBOS FVG Indicator (Smart Market Structure Tool)
🔎 Overview
The BOS FVG Indicator is a smart price-action–based tool that combines Break of Structure (BOS), Change of Character (CHoCH), Fair Value Gaps (FVG), Supertrend, and ADX strength into one powerful indicator.
It helps traders identify market structure shifts, imbalances, and high-probability trade setups while also highlighting no-trade zones (NTZ) where the market is choppy or lacks trend strength.
This indicator is designed for intraday and swing traders who follow ICT-style concepts or price-action based trading.
⚡ Key Features
Break of Structure (BOS) & CHoCH Detection
Labels bullish BOS (📈 BOS↑) and bearish BOS (📉 BOS↓).
Highlights structure shifts for trend confirmation.
Fair Value Gaps (FVG)
Auto-detects bullish and bearish FVGs.
Draws transparent boxes with labels where imbalances appear.
Supertrend Confirmation
Adaptive supertrend line with dynamic coloring (green = bullish, red = bearish).
No Trade Zone (NTZ)
Automatically shades background gray when ADX is weak or no BOS detected.
Helps avoid false signals in sideways/choppy markets.
Multi-Timeframe Context
Previous 4H candle range plotted as a dotted yellow box.
Useful for intraday traders tracking HTF liquidity zones.
Signal Strength
Regular and Strong Buy/Sell signals based on ADX confirmation.
Labels include entry info, RR (2:1), and trend strength.
Market Info Dashboard
Table on chart showing ADX strength, current trend, and trade zone status.
🛠 How to Use
Add to Chart → Apply the indicator to any timeframe (works best on 5m–1H for intraday, 4H–Daily for swing).
Choose Mode
Indicator Mode → Shows visual signals, BOS, FVG, NTZ zones, and dashboard.
Strategy Mode → Displays trade entry labels with RR info for backtesting setups.
Filters
Only trade signals when ADX > threshold and NTZ is inactive.
Confirm with Supertrend direction + BOS + FVG alignment.
Entries & Exits
Long Entry → Bullish BOS + Bullish FVG + Trend bullish.
Short Entry → Bearish BOS + Bearish FVG + Trend bearish.
Stop Loss: Recent swing high/low.
Take Profit: Auto-suggested 2:1 RR.
🔔 Alerts
Set alerts to never miss key signals:
✅ Bullish / Bearish BOS
✅ Bullish / Bearish FVG
✅ Strong Buy / Sell
✅ Regular Buy / Sell
✅ Long / Short Entries
✅ No Trade Zone active
Alerts are pre-configured with clear messages (📈, 📉, 🚀, 🟢, 🔴, ⚪).
📌 Best Use Cases
ICT-style liquidity and FVG traders.
Intraday traders filtering strong vs weak signals.
Swing traders using multi-timeframe confirmation.
Traders who want an all-in-one market structure toolkit.
👉 This script is not financial advice. Always backtest before using in live markets.
SPX Daily Key Levels# Day Trading GPS S&P500 SPX Index Daily Key Levels Indicator
## Description
The Day Trading GPS S&P500 SPX Index Daily Key Levels Indicator (DT-GPS SPX) is a specialized technical tool designed for day traders focusing on trading index options on the CBOE S&P500 SPX index. This indicator provides daily key levels for both the CBOE SPX Index and EIGHTCAP SPX500 CFD, offering traders comprehensive price level analysis and actionable insights.
## Key Features
1. **Dual Market Coverage**:
- CBOE SPX Index levels generation on CBOE SPX chart at 9:30 AM EST
- EIGHTCAP SPX500 CFD levels generation on EIGHTCAP SPX500 CFD at 9:00 AM EST as well as
early display of CBOE SPX Index levels while on EIGHTCAP SPX500 chart at 9:00 AM EST (30 minutes before CBOE SPX 9:30 AM EST market open via separate Table Display for CBOE SPX levels
2. **Comprehensive Level Generation**:
- CBOE SPX index Daily Bull/Bear Key Price Level (BB-KPL) - this is the indicator's daily key Bull/Bear Pivot level for the current day's CBOE SPX trading session
- Multiple Support and Resistance Levels (R1-R6, S1-S6) to accommodate low, moderate and high volatility market environments
- Option for user to also display midpoint levels between any or all main levels if desired
- Fully customizable display options for each main level as well as midpoint levels
3. **Advanced Visualization**:
- Customizable line colors, styles, and widths
- Zone shading between levels
- Midpoint line calculations and display
4. **Dynamic Reference Tables**:
- Separate tables for CBOE SPX Index and EIGHTCAP SPX500 CFD levels
- Customizable table positioning and appearance
- Real-time level updates
5. **Pre-Market Analysis**:
- Early level generation for the EIGHTCAP SPX500 CFD at 9:00AM EST
- Preview of CBOE SPX index levels at 9:00 AM EST - 30 minutes before CBOE SPX index market open at 9:30 AM EST via separate table display at 9:00 AM EST for CBOE SPX index on EIGHTCAP SPX500 CFD chart
## Unique Aspects
1. **Market-Specific Timing**:
- Early access to CBOE SPX levels at 9:00 AM EST (30 minutes before 9:30 AM EST CBOE SPX index market open) via additional CBOE SPX levels table display on EIGHTCAP SPX500 CFD chart displayed at 9:00 AM EST
- CBOE SPX levels on CBOE SPX chart at CBOE SPX index market open (9:30 AM EST)
2. **Dual Display System**:
- Simultaneous viewing of both EIGHTCAP and CBOE levels
- Comparative analysis capabilities
3. **Precision Adjustment**:
- Automatic level adjustments between CFD and Index values
- Market-specific volatility calculations
## How It Enhances Your Trading
- Access key levels before market open through CFD analysis
- Compare and validate levels across both instruments
- Identify potential support and resistance zones with precision
- Implement sophisticated level-to-level trading strategies
- Manage risk with clearly defined price levels
- Track market structure through multiple timeframes
- Make informed decisions for SPX Index Options Trading with comprehensive level information
## Recommended Setup
For optimal use, it's recommended to run the indicator on two charts simultaneously:
1. EIGHTCAP SPX500 CFD chart for early level generation at 9:00 AM EST - 30 minutes before CBOE SPX index market open at 9:30 AM EST
2. CBOE SPX Index chart for official market levels
## Historical Level Analysis Features
**Historical Bull/Bear Key Price Level (BB-KPL)**
The Historical BB-KPL serves as a critical reference point for measuring value and potential price extensions in the market. By analyzing past BB-KPL interactions, traders can better anticipate future price behavior and make more informed decisions about entries and exits.
**Historical Support and Resistance Levels**
These dynamic levels provide crucial insights into market extension and momentum conditions, with levels further from the BB-KPL indicating potential reversal zones while also signaling strong trend conditions. Historical analysis of these levels helps traders identify high-probability trading opportunities by understanding how price has previously reacted at similar extensions from value.
**Video On Indicator Set-Up And Features**
www.youtube.com
**Videos On How To Trade Using This Indicator**
www.youtube.com
www.youtube.com
www.youtube.com
www.youtube.com
## Note
This indicator is specifically designed for day trading index options on the CBOE S&P500 SPX index. It requires appropriate data subscriptions for both CBOE indices and CFDs on TradingView. The indicator works best on timeframes of 30 minutes or less and should be used in conjunction with proper risk management practices. Past performance does not guarantee future results.
Psych Zones – Single 750-pip Range (000 to 750)Market structure on each range of the market, use this if you are counter-trend trading or looking to exit out of a trade.
Psych Levels – 250 pip gridMarket Test: Each 250 Pip, Institutional market behavior works in market rotations
Support & Resistance (Ramil Style)Support & Resistance (Ramil Style) is an indicator that automatically detects and plots strong support and resistance levels based on Alexander Gerchik’s methodology.
🔹 The algorithm finds local highs and lows, clusters nearby price levels, and counts how many times price touched them. The more touches — the stronger the level, and the more visible it becomes on the chart.
🔹 Support is marked in green, resistance in red.
🔹 Price labels are displayed next to each level for clarity.
✅ This tool helps traders quickly identify key zones where price may bounce or break through. It works on all timeframes but is especially effective on daily charts, as recommended by Ramil.
IFVG by Toño# IFVG by Toño - Pine Script Indicator
## Overview
This Pine Script indicator identifies and visualizes **Fair Value Gaps (FVG)** and **Inverted Fair Value Gaps (IFVG)** on trading charts. It provides advanced analysis of price inefficiencies and their subsequent inversions when mitigated.
## Key Features
### 1. Fair Value Gap (FVG) Detection
- **Bullish FVG**: Detected when `low > high ` (gap between current low and high of 2 bars ago)
- **Bearish FVG**: Detected when `high < low ` (gap between current high and low of 2 bars ago)
- Visual representation using colored rectangles (green for bullish, red for bearish)
### 2. Inverted Fair Value Gap (IFVG) Creation
- **IFVG Formation**: When a FVG gets mitigated (price fills the gap with candle body), an IFVG is created
- **Color Inversion**: The IFVG takes the opposite color of the original FVG
- Mitigated bullish FVG → Creates red (bearish) IFVG
- Mitigated bearish FVG → Creates green (bullish) IFVG
- **Mitigation Logic**: Uses only candle body (not wicks) to determine when a FVG is filled
### 3. Customizable Display Options
- **Show Normal FVG**: Toggle visibility of regular Fair Value Gaps
- **Show IFVG**: Toggle visibility of Inverted Fair Value Gaps
- **Smart FVG Display**: Even when "Show Normal FVG" is disabled, FVGs that are part of IFVGs remain visible
- **Extension Control**: Option to extend FVGs until they are mitigated
### 4. IFVG Extension Methods
- **Full Cross Method**: IFVG remains active until price completely crosses through it (including wicks)
- **Number of Bars Method**: IFVG remains active for a specified number of bars (1-100)
### 5. Visual Mitigation Signals
- **Cross Markers**: Shows X-shaped markers when IFVGs are mitigated
- Green cross above bar: Bearish IFVG mitigated
- Red cross below bar: Bullish IFVG mitigated
### 6. Comprehensive Alert System
- **IFVG Formation Alerts**: Notifications when new IFVGs are created
- **IFVG Mitigation Alerts**: Notifications when IFVGs are filled/mitigated
- **Separate Controls**: Individual toggles for bullish and bearish IFVG alerts
## How It Works
### Step-by-Step Process:
1. **FVG Detection**: Script continuously scans for 3-bar patterns that create price gaps
2. **FVG Tracking**: Each FVG is stored with its coordinates, type, and status
3. **Mitigation Monitoring**: Script watches for candle bodies that fill the FVG
4. **IFVG Creation**: Upon mitigation, creates an IFVG with opposite polarity at the same location
5. **IFVG Management**: Tracks and extends IFVGs according to chosen method
6. **Visual Updates**: Dynamically updates colors and visibility based on user settings
## Use Cases
- **Support/Resistance Analysis**: IFVGs often act as strong support/resistance levels
- **Market Structure Understanding**: Helps identify how market inefficiencies get filled and reversed
- **Entry/Exit Timing**: Can be used to time entries around IFVG formations or mitigations
- **Confluence Analysis**: Combine with other technical analysis tools for stronger signals
## Configuration Parameters
- **Colors**: Customizable colors for bullish/bearish FVGs and IFVGs
- **Extension**: Choose how long to display gaps on the chart
- **Alerts**: Full control over notification preferences
- **Visual Clarity**: Options to show/hide different gap types for cleaner charts
## Technical Specifications
- **Pine Script Version**: 5
- **Overlay**: True (displays directly on price chart)
- **Max Boxes**: 500 (supports up to 500 simultaneous gaps)
- **Performance**: Optimized array management for smooth operation
This indicator is particularly valuable for traders who use **Smart Money Concepts (SMC)** and **Inner Circle Trader (ICT)** methodologies, as it provides clear visualization of how institutional order flow creates and fills market inefficiencies.
OHLC Lines – Yesterday & Today (Minimalist Option)This indicator draws horizontal lines representing the Open, High, Low, and Close (OHLC) levels of yesterday and today directly on your chart. It automatically updates each day, showing only the lines for the previous day and the current day, keeping your chart clean and focused.
Features:
Display Yesterday’s OHLC levels.
Display Today’s OHLC levels.
Optional Minimalist Mode with customizable color, width, and line style.
Lines automatically update each day and remove old lines.
Fully customizable colors, visibility, and line width for each OHLC level.
Use Case:
Perfect for traders who want to monitor key daily price levels, identify support/resistance zones, or incorporate OHLC levels into intraday strategies.
Offset Strike LinesOffset Strike Lines (OSL) is a tool designed to plot strike-based grid levels by offsetting one symbol against another. It compares two instruments (for example, futures vs. index) and projects evenly spaced horizontal lines above and below a calculated reference price. Each line is annotated with the adjusted counter-symbol price, making it easy to visualize relative levels across markets. Customization options include interval size, number of lines, text size, line and text colors — giving traders a clear, flexible framework for mapping out strike zones and price relationships.
TCL v3 DCTCL Strategy to trade TCL
TCL Strategy to trade TCLTCL Strategy to trade TCLTCL Strategy to trade TCLTCL Strategy to trade TCLTCL Strategy to trade TCLTCL Strategy to trade TCL
🏹 EMA Momentum TheoryEMA Trend following system
Summary
This indicator blends EMA trend direction with momentum confirmation to plot high-quality Buy/Sell signals, plus safe exit and profit-booking cues. It’s designed to keep you aligned with the primary trend, avoid chop, and exit decisively when momentum fades.
How it works
Trend Engine: Fast and slow EMAs define bias (Uptrend when Fast EMA > Slow EMA; Downtrend when Fast EMA < Slow EMA).
Signals:
Buy when uptrend + momentum turns positive after a pullback.
Sell when downtrend + momentum turns negative after a bounce.
Best use
Works on all liquid symbols (Index, Equity, Futures, FX, Crypto).
Timeframes: 15m–1D for cleaner structure.
Risk management
Position sizing per trade ≤ 1–2% account risk.
Avoid trading during major news events on lower TFs.
Alerts
“Buy Signal” on confirmed uptrend + momentum flip
“Sell Signal” on confirmed downtrend + momentum flip
“Safe Exit” on momentum fade or trail stop hit
“Partial TP” when RR target reached
Disclaimer
This tool is for education & research. Past performance doesn’t guarantee future results. Always validate on demo and manage risk.
Changelog
v1.0 — Initial release: EMA trend + momentum filter, ATR/EMA trail, partial TP, full alert suite.