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.
Candlestick analysis
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
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
Psych Zones – Continuous 250-pip Bands (clamped boxes)Market Makers liquidation and reversal zones for swing trading
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
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
ICT HTF Candles + CISD + FVG, by AlephxxiiICT HTF Candles + CISD + FVG
A practical, friendly overlay for ICT-style trading
This indicator gives you three things at once—right on your chart:
HTF Candles Panel (context):
Compact candles from higher timeframes (e.g., 5m, 15m, 1H, 4H, 1D, 1W) appear to the right of price so you always see the higher-timeframe story without switching charts. It includes labels, remaining time for the current HTF candle, and optional open/high/low/close reference lines.
CISD Levels (bias flips):
Automatically plots +CISD and -CISD lines. When price closes above +CISD, the indicator considers bullish delivery. When price closes below -CISD, it considers bearish delivery. An on-chart table (optional) shows the current bias at a glance.
FVG (Fair Value Gaps):
Highlights inefficiency zones (gaps) on your current timeframe and/or a selected higher timeframe. You can choose to mark a gap “filled” when price hits the midpoint (optional).
Quick start (2 minutes)
Add to chart and keep your normal trading timeframe (e.g., 1–5m).
In settings → HTF 1..6, pick the higher timeframes you want to see (e.g., 5m, 15m, 1H, 4H, 1D, 1W).
Turn on FVG (current, HTF or both).
Watch +CISD / -CISD lines and the Current State table.
Close above +CISD → Bullish bias
Close below -CISD → Bearish bias
Trade with the bias and use FVGs as areas to refine entries or targets.
How to read it (the simple way)
Bias (CISD):
Bullish once price closes above the active +CISD level.
Bearish once price closes below the active -CISD level.
The small table (if enabled) says Bullish or Bearish right now.
HTF panel:
Shows higher-timeframe candles next to your current chart.
Labels show the timeframe (e.g., 1H) and a countdown for the current candle.
Optional traces draw HTF Open/High/Low/Close levels—great “magnets” for price.
FVGs:
Shaded boxes = potential inefficiency areas.
If Midpoint Fill is on, a touch of the midline counts as filled.
You can display current TF, HTF, or both.
Suggested workflow (popular ICT-style intraday)
Define bias with CISD
Only look for longs if Bullish, shorts if Bearish.
Check HTF context
Are you trading into a large HTF FVG or key HTF O/H/L/C level? That can be a target or a headwind.
Refine entries with FVGs
On your entry TF (1–5m), use fresh FVGs in the direction of the bias. Avoid fading straight into big HTF imbalances.
Key settings you’ll actually use
HTF 1..6: toggle each strip, select timeframe, and how many candles to show.
Style & layout: adjust offset, spacing, and width of the right-side panels.
Labels & timers: show/hide HTF name and remaining time; place labels at Top/Bottom/Both.
Custom daily open (NY): set the 1D candle to start at Midnight, 08:30, or 09:30 (America/New_York).
Trace lines: optional HTF O/H/L/C lines (style, width, anchor TF).
FVG module (extra): choose Current TF / HTF / Both, enable Midpoint Fill, auto-delete on fill, and show timeframe labels.
CISD lines: customize color, style (solid/dotted/dashed), thickness, and forward extension.
Table: enable/disable and choose its position.
Alerts
When a CISD completes, the script fires an alert (e.g., “Bullish CISD Formed” or “Bearish CISD Formed”).
Tip: Set your TradingView alert once on the indicator, then choose the alert message you want to receive.
Notes & limitations (read me)
“VI” label: The “Volume Imbalance” option marks price imbalances (body non-overlap). It does not read volume data.
Timezone: Daily logic and timers use America/New_York, which aligns with US indices/equities and common ICT practice.
Performance: This tool draws many boxes/lines/labels. If your chart feels heavy, reduce the number of HTFs or candles shown, or narrow panel width.
Repainting: HTF panels are designed to avoid future leakage; FVG logic follows standard 3-bar checks. As usual, wait for candle closes for confirmations.
Level cleanup: If Keep old CISD levels is OFF (default), the script keeps only the current active CISD to reduce clutter.
Daily Candle by NatantiaIntroduction to the Daily Candle Indicator
The Daily Candle Indicator is a powerful and customizable tool designed for traders to visualize daily price action on any chart timeframe.
This Pine Script (version 5) indicator, built for platforms like TradingView, overlays a single candle representing the day's open, high, low, and close prices, with options to adjust its appearance and session focus.
Key Features:
Customizable Appearance: Users can set the colors for bullish (default green) and bearish (default white) candles, as well as the wick color (default white). The horizontal offset and candle thickness can also be adjusted to fit the chart layout.
Dynamic Updates: The candle updates on the last bar, with wicks drawn to reflect the daily high and low, providing a clear snapshot of the day's price movement.
Have a nice trades!
-Natantia
Ichimoku Trading Signals 1Swing Trading (Strategy 1, H4+ timeframes)
Use the Kumo Cloud to identify the trend: price above a green cloud = uptrend; price below a red cloud = downtrend.
Entry signals occur when price or the Tenkan-sen line crosses the Kijun-sen line, confirmed by Chikou Span momentum.
Exit triggers when price crosses back through the Kijun-sen or when Tenkan-sen crosses back below (for long positions) or above (for short positions).
Place stop-loss orders just beyond the nearest swing low/high candle cluster to manage risk tightly.
Close Above/Below Prev 2 Candle Strategy (Any Timeframe)Title: Close Above/Below Previous 2 Candle Strategy (Any Timeframe)
Description:
This strategy identifies potential breakout and trend continuation signals by analyzing the closing price relative to the highs and lows of the previous two candles. It works on any chart timeframe, making it versatile for intraday, swing, and daily trading.
How it works:
Long Entry (Bullish Signal): Triggered when the current candle closes above the highs of the previous two candles.
Short Entry (Bearish Signal): Triggered when the current candle closes below the lows of the previous two candles.
Visual Indicators:
Green triangles above the bar indicate bullish signals.
Red triangles below the bar indicate bearish signals.
Strategy Features:
Works on any timeframe, from 1-minute charts to daily/weekly charts.
Configurable risk/reward ratio for automatic stop-loss and take-profit levels.
Alerts trigger immediately when the condition is met, helping traders react to potential breakouts.
Provides clean visual signals for easy chart reading and decision-making.
Benefits:
Reduces noise by focusing on candle close confirmations.
Versatile and suitable for intraday, swing, and long-term trading.
Easy to combine with other indicators or strategies.
Close Above/Below Prev 2 Candle (Daily Close)This strategy identifies potential trend continuation or breakout signals by analyzing the daily candle closes relative to the previous two daily candles. It generates clear alerts and trade signals only after the daily candle has fully closed, reducing false intraday triggers.
How it works:
Long Entry (Bullish Signal): Triggered when the daily candle closes above the highs of the previous two daily candles.
Short Entry (Bearish Signal): Triggered when the daily candle closes below the lows of the previous two daily candles.
Visual Indicators: Green triangles indicate bullish signals, red triangles indicate bearish signals.
Strategy Features:
Optional long and short entries with configurable risk/reward ratio.
Automatic stop-loss and take-profit calculation based on candle structure.
Works on intraday charts using daily candle analysis.
Alerts:
Alerts trigger only after the daily candle closes above/below the previous two daily candles.
Helps traders receive precise notifications for potential breakout trades.
Benefits:
Reduces noise by using daily candle closes.
Easy to integrate with other swing or trend strategies.
Provides clear visual and alert signals for both bullish and bearish setups.
Options Trading Max Success_V1DISCLAIMER:
The information provided is NOT financial advice. I am not a financial adviser, accountant or the like. This information is purely from my own due diligence and an expression of my thoughts, my opinions based on my personal experiences, and the way I transact.
Utilize this indicator at your own risk..! The indicator creator is not liable for your loss due to untimely action / adverse consequences / server lags from Tradingview (if any).
======================================================
Welcome!
This is a 95-100% Success rate High Frequency Indicator exclusively for Binary Options Traders. It works on any time frames and pairs but is EXCLUSIVELY built for 1-minute candles for EUR/USD currency on "OANDA" forex chart. So, use it for same to get this indicator working at its best.
Use Martingale strategy (5 attempts max) for making profits / recover loss with some profits.
======================
Martingale Strategy For your knowledge with an example:
1) Lets say you are trading on binary options platform that gives 80% profit upon successful trade.
2) UP signal seen. You do the below from next candle:
a) 1st attempt = Rs.100.
- If Success, then profit = Rs.80. Cycle close and exit.
- If Loss, then do 2nd attempt.
b) 2nd attempt =Rs.200.
- If Success, then profit = Rs.160. (Rs. 100 recovery + Rs.60 Profit). Cycle close and exit.
- If Loss, then do 3rd attempt.
c) 3rd attempt = Rs. 400.
- If Success, then profit = Rs.320. (Rs. 300 recovery + Rs.20 Profit). Cycle close and exit.
- If Loss, then do 4th attempt.. and so on.
=======================
If you see any body less/Doji candle in between your attempts. Then do not continue further.
Hold this cycle for next similar stage. For example:
Select chart which promises: Success = 80% profit.
Then attempt the below on the next candle AFTER you see an UP signal.
Cycle 1: UP signal seen. 5 attempts from next candle:
Let's say:
1st attempt = Rs.100. Result = loss
2nd attempt =Rs.200. Result = loss
3rd attempt = Rs.400. Result = No profit/loss (due to Doji candle/candle without body).
Recommendation: Do not proceed further in current cycle. Hold on for next cycle/UP signal.
Park Rs.400 rupees attempt aside for a while.
Cycle 2: UP signal seen. 5 attempts from next candle:
Let's say:
1st attempt = Rs.100. Result = loss
2nd attempt =Rs.200. Result = Success
Cycle Completed. Wait for next cycle/Up signal
Cycle 3: UP signal seen. 5 attempts from next candle:
Let's say:
1st attempt = Rs.100. Result = loss
2nd attempt =Rs.200. Result = loss
3rd attempt = Now you can attempt with Rs. 800.
.
=====================
Recommendations:
- Keep a good discipline and make smart moves.
- You may add other supporting indicators of your choice along with this.
- You can keep your trading attempts low i.e. After you see an UP signal, let go the 1st one/two/three candles. If they turn out to be Red candles back to back, then good for you, as you can start entry of attempts from the 2nd/3rd/4th candle. Thereby evading one/two/three few failed attempts. If any candle gets green After Up signal and before your entry, then do not enter this cycle. Wait for next cycle.
Good luck.
================
Strategy Sheet — Customizable 4x8 Table📖 Script Description
The Strategy Sheet — 4 Columns / 8 Rows is a compact and highly customizable table-based tool for traders who want to keep their trading plan, rules, and session settings directly visible on the chart.
🔹 Features:
• Up to 4 fully configurable columns and 8 rows
• Compact UI with per-column color overrides
• Dark / Light / Custom theme modes
• Support for zebra row backgrounds (alternating colors)
• Adjustable position, padding, spacing, and alignment
• Clean layout with borders and header styling
• Perfect for trade plans, ORB setups, session notes, or risk rules
🔹 Use cases:
• Documenting strategy rules directly on chart
• Displaying ORB session times and risk management
• Creating a structured overview of trading setups
• Quick reference without leaving the chart
This script does not generate signals – it’s a visual aid designed to organize and display trading information in a clear and professional way.
Forex 5m Simple Scanner + RSI DivergenceHello everyone. this is a easy to use indicator.
I wanted something very easy to visualize and understand. Great for the beginner's.
About this script:
“Forex 5m Simple Scanner + RSI Divergence”
This scanner helps beginner traders quickly identify trade opportunities across the top 10 forex pairs. It combines a simple EMA crossover system with an optional RSI filter to confirm trend direction, and adds RSI divergence detection to spot potential reversals early.
The built-in table shows each pair’s trend, RSI value, buy/sell signal, and divergence status—all in one place.
For beginners, this makes it easier to:
Avoid flipping between multiple charts.
See clear BUY/SELL 🚀 signals instead of guessing.
Spot high-probability setups with RSI divergence markers (😊/☹️).
It simplifies decision-making by turning complex signals into a straightforward dashboard that highlights where attention is needed most.
HH&LL / MSS Detector [Tek Tek Teknik Analiz]This indicator provides a safe trading opportunity by drawing Market Structure Shift levels to determine the direction of the market after capturing the peaks and valleys in the price flow.
> 50% Body Candle A script that give the number of ATR of a candle. Good to mesure how explosive a move is.
Krish.Tradess - FX market masterit will help you to identify market sessions and identify overlapping sessions in market. You can mark your trading
Aura Trail Bitcoin H1 StrategyAuraTrail Bitcoin H1 Strategy is a meticulously crafted trend-following system designed for the Bitcoin H1 timeframe. It leverages powerful candlestick patterns and robust trailing stop logic to identify and capitalize on sustained market movements, while actively managing risk.
Strategy Logic
Signal Identification: The strategy's core is based on classic reversal candlestick patterns: the Hammer for bullish entry signals and the Shooting Star for bearish signals. It waits for the confirmation of these patterns on the previous bar.
Long Entry: A long trade is initiated when a confirmed Hammer pattern appears. The entry is placed as a pending order at the high of the previous day, aiming to enter the trade only if the bullish momentum continues.
Short Entry: A short trade is triggered upon a confirmed Shooting Star pattern. The entry is a pending order at the low of the previous day, designed to capture further downside movement.
Risk Management: The initial stop-loss is calculated based on the previous day's open and bar range. The strategy then uses a dynamic Trailing Stop based on a combination of short-term (45-period) and long-term (95-period) Average True Range (ATR) to lock in profits as the trade moves favorably.
Money Management: Position size is dynamically adjusted based on a configurable multiplier, which can be tailored to manage pyramiding or scaling into a position, ensuring controlled risk exposure.
Parameters
Initial Lots: Defines the starting position size for the first trade.
Lot Multiplier: Adjusts position size for subsequent entries in a pyramiding sequence.
Trailing Stop Coefficient: A multiplier for ATR to set the trailing stop distance.
Trailing Activation Coefficient: A multiplier for ATR to determine when the trailing stop becomes active.
Profit Target %: Defines a percentage gain for profit-taking.
Setup
Timeframe: 1-Hour (H1)
Asset: Bitcoin, also suitable for other volatile assets with clear candlestick patterns and trending behavior.
CVD Absorption + Confirmation [Orderflow & Volume]This indicator detects bullish and bearish absorption setups by combining Cumulative Volume Delta (CVD) with price action, candlestick, and volume confirmations.
🔹 What is Absorption?
Absorption happens when aggressive buyers/sellers push CVD to new highs or lows, but price fails to follow through.
Bearish absorption: CVD makes a higher high, but price does not.
Bullish absorption: CVD makes a lower low, but price does not.
This often signals that limit orders are absorbing aggressive market orders, creating potential reversal points.
🔹 Confirmation Patterns
Absorption signals are only shown if they are validated by one of the following patterns:
Engulfing candle with low volume → reversal faces little resistance.
Engulfing candle with high volume → strong aggressive participation.
Pin bar with high volume → absorption visible in the wick.
CVD flattening / slope reversal → shift in aggressive order flow.
🔹 Signals
✅ Bullish absorption confirmed → Green label below the bar.
❌ Bearish absorption confirmed → Red label above the bar.
Each label represents a potential reversal setup after orderflow absorption is validated.
🔹 Alerts
Built-in alerts are included for both bullish and bearish confirmations, so you can track setups in real-time without watching the chart 24/7.
📌 How to Use:
Best applied at key levels (supply/demand, VWAP, OR, liquidity zones).
Look for confluence with your trading strategy before taking entries.
Works on all markets and timeframes where volume is reliable.
PSP by Pr0xysp00ferCross-Asset Close Colorizer highlights candles whenever the main symbol and a reference symbol close in opposite directions (chart up-close & reference down-close, or vice versa), making cross-asset divergence instantly visible; you can choose the reference symbol and timeframe, set custom colors for both cases, and optionally color only the candle body (keeping default wicks/borders). Dojis remain neutral by design, the reference series is requested with lookahead_off to avoid repainting, and two constant alert conditions are included (“Chart UP & Ref DOWN” and “Chart DOWN & Ref UP”). Ideal for pairs like EURUSD↔GBPUSD, ES↔NQ, or BTC↔ETH—attach the indicator to your main market and select the reference (optionally on a different timeframe).