First 15 Minutes High/LowFirst 15 Minutes High/Low Strategy
This indicator tracks the high and low prices during the first 15 minutes of trading and generates signals when price later breaks through these levels. It's based on the Opening Range Breakout (ORB) strategy, which is popular among day traders.
Key Features:
Automatically identifies high and low prices from the first 15 minutes of trading
Draws horizontal lines at the session high (red), low (green), and midpoint (blue)
Generates buy signals when price closes above the high level
Generates sell signals when price closes below the low level
Visual markers for breakouts with triangle indicators
Customizable session time to adapt to different markets
How to Use:
Apply the indicator to any chart with a timeframe of 15 minutes or smaller
Set your desired session time (default is 09:15-09:30)
Wait for the first 15-minute range to establish
Watch for breakout signals above or below this range
Alert Options:
High Breakout: "Long Opportunity: Price closed above the first 15-minute high!"
Low Breakout: "Short Opportunity: Price closed below the first 15-minute low!"
This indicator is ideal for traders looking to capitalize on momentum after the initial market open. It works well in markets that tend to establish a directional trend after the opening period.
Settings:
Session Time: Customize the first 15-minute window
Line Settings: Toggle visibility of high, low, and middle lines
Alert Settings: Enable/disable alert functionality
Works best on liquid assets with active morning trading sessions.
Padrões gráficos
【KitkatTrading】聪明钱交易指标KitkatTrading - Smart Money Trading Indicator
* Built on the ICT Smart Money framework
* Tailored for stocks, crypto, and futures markets.
* Key features:
1 - automatic detection of fake breakouts
2 - automatic detection of change of structure
3 - automatic FVG plotting
Smart Money Trading opportunities made instantly clear!
Author: Kitkat
www.youtube.com
Candle Eraser (New York Time, Dropdown)If you want to focus on first 3 hours of Asia, London> and New York, inspired by Stacey Burke Trading 12 Candle Window Concept
- Set your time to UTC-4 New York
CANX Gold (XAUUSD) $5 Psychological Levels© CanxStixTrader
FOR GOLD ONLY
--------------------------------
This is a vary simple yet powerful indicator based on the psychological levels that retail traders use to trade gold and institutions in turn target these levels.
--------------------------------
HOW TO USE
Once the trend has been determined then this simple indicator can be used to target the pull backs for the sniper entries you want.
-TIP, pair with other CANX indicators for optimal entries and trend identification. We use the 1 minute time frame for entries and the CANX momentum indicator & CANX Multi-Timeframe Trend indicator for extra confirmation.
--------------------------------
The indicator draws lines every 50 pips or $5 on the chart and is customizable to your preference.
Like always, Keep it simple!
© CanxStixTrader
ORB PRO - StabilIT works.the strategy is really good and will make everyone tons and tons of money and totally not make you part of the liquidity I target on a day to day basis the strategy is really good and will make everyone tons and tons of money and totally not make you partthe strategy is really good and will make everyone tons and tons of money and totally not make you part of the liquidity I target on a day to day basis the strategy is really good and will make everyone tons and tons of money and totally not make you partthe strategy is really good and will make everyone tons and tons of money and totally not make you part of the liquidity I target on a day to day basis the strategy is really good and will make everyone tons and tons of money and totally not make you partthe strategy is really good and will make everyone tons and tons of money and totally not make you part of the liquidity I target on a day to day basis the strategy is really good and will make everyone tons and tons of money and totally not make you partthe strategy is really good and will make everyone tons and tons of money and totally not make you part of the liquidity I target on a day to day basis the strategy is really good and will make everyone tons and tons of money and totally not make you part
ABC Trading ConceptThe ABC Trading Concept indicator analyzes the market through waves, impulses, and trends, helping identify key reversal and trend-change points. It automatically detects waves A, B, and C, along with stop-loss and take-profit levels. A reliable tool to enhance the accuracy and efficiency of your trading.
Key Features of the Indicator:
1. Wave and Trend Identification:
- Automatic detection of waves based on moving average (MA) crossings and ATR indicator values.
- Filtering out false signals by considering market movement ranges.
2. Trend Analysis:
- Determination of trend directions (uptrend or downtrend).
- Setting trend change points (g-points) and tracking their breakout to confirm trend reversals.
3. Impulses and Corrections:
- Automatic division of trend movements into impulses and corrections.
- Calculation of dynamic and fixed extremums for precise market structure tracking.
4. Reversal Points:
- Establishing the reversal point level within the range of a completed correction.
- Flexible settings to prevent the appearance of overly weak points.
5. Waves A, B, and C:
- Identification of wave A when the correction breaks the reversal point.
- Identification of wave B considering counter-trends or alternative parameters.
6. Correction Boost:
- Calculation of correction boosts to determine their significance.
- Automatic update of reversal points based on boosted corrections.
7. Vic Sperandeo’s Trendline:
- Construction of a trendline between the trend’s fixed extremum and the last correction’s extremum.
- Utilizing the Vic line as an additional condition for forming waves A and B.
8. Stop-Loss and Take-Profit Levels:
- Upon the appearance of a new trend, the indicator automatically plots potential stop-loss and take-profit levels.
- Levels are calculated based on the extremums of wave A or wave B (settable in the indicator’s input settings).
Advantages of Using the Indicator:
- Enhances the accuracy of market structure analysis.
- Reduces the impact of false signals by filtering market noise.
- Offers flexible parameter settings to adapt to your trading style.
- Clearly displays entry and exit points on the chart.
The ABC Trading Concept is ideal for both beginner and professional traders looking to improve their trading by leveraging clear market structures and key analysis points.
Additional Information:
For optimal performance, the indicator requires the user to input key parameters, including moving average lengths, ATR coefficient for wave identification, and levels for reversal points and correction boosts. All settings can be adjusted to fit your trading preferences.
Golden Pattern Detector Pro v2.4 – Final Full Priority
//@version=5
indicator("Golden Pattern Detector Pro v2.4 – Final Full Priority", overlay=true)
showCup = input.bool(true, title="Show Cup & Handle")
showDouble = input.bool(true, title="Show Double Top / Bottom")
showHNS = input.bool(true, title="Show Head & Shoulders")
showWedge = input.bool(true, title="Show Wedge Pattern")
showTriangle = input.bool(true, title="Show Triangle Pattern")
showAdamEve = input.bool(true, title="Show Adam & Eve Pattern")
showChannel = input.bool(true, title="Show Price Channel")
showLabels = input.bool(true, title="Show Pattern Labels")
showTargets = input.bool(true, title="Show TP Targets")
preventOverlap = input.bool(true, title="Prevent Overlapping Patterns")
onlyStrongest = input.bool(true, title="Show Only Strongest Pattern per Wave")
forceMode = input.bool(false, title="Enable Force Mode")
pivotHigh = ta.pivothigh(high, 5, 5)
pivotLow = ta.pivotlow(low, 5, 5)
relDiff(a, b) => math.abs(a - b) / a
createLabel(_x, _y, _txt, _style, _txtcolor, _offset) =>
if showLabels
label.new(x=_x, y=_y + _offset, text=_txt, style=_style, textcolor=_txtcolor)
var float lastPatternBar = na
var int strongestPriority = na
canDraw = not preventOverlap or na(lastPatternBar) or bar_index - lastPatternBar > 10
overrideAll = input.bool(false, title='Show All Patterns (Override Strongest Filter)')
canDrawThis(prio) =>
overrideAll or not onlyStrongest or na(strongestPriority) or prio < strongestPriority
// === 1. Double Top
if showDouble and canDraw and canDrawThis(1)
top1 = pivotHigh
top2 = pivotHigh
tol = forceMode ? 0.03 : 0.01
isTop = not na(top1) and not na(top2) and relDiff(top1, top2) < tol
if isTop and not na(pivotLow )
nl = pivotLow
line.new(bar_index , nl, bar_index, nl, color=color.red)
createLabel(bar_index, high, "Double Top", label.style_label_down, color.red, -0.5)
if showTargets
tp = nl - (top1 - nl)
line.new(bar_index + 1, nl, bar_index + 10, tp, color=color.red, style=line.style_dashed)
strongestPriority := 1
lastPatternBar := bar_index
// === 2. Head & Shoulders
if showHNS and canDraw and canDrawThis(2)
ls = pivotHigh
h = pivotHigh
rs = pivotHigh
nl = pivotLow
if not na(ls) and not na(h) and not na(rs)
diff = relDiff(ls, rs)
tol = forceMode ? 0.4 : 0.2
isHNS = h > ls and h > rs and diff < tol
if isHNS and not na(nl)
line.new(bar_index , nl, bar_index, nl, color=color.orange)
createLabel(bar_index, high, "Head & Shoulders", label.style_label_down, color.orange, -0.5)
if showTargets
tp = nl - (h - nl)
line.new(bar_index + 1, nl, bar_index + 10, tp, color=color.orange, style=line.style_dashed)
strongestPriority := 2
lastPatternBar := bar_index
// === 3. Cup & Handle
if showCup and canDraw and canDrawThis(3)
cupBottom = pivotLow
leftRim = pivotHigh
rightRim = pivotHigh
if not na(cupBottom) and not na(leftRim) and not na(rightRim)
rimDiff = relDiff(leftRim, rightRim)
tol = forceMode ? 0.4 : 0.2
isCup = leftRim > cupBottom and rightRim > cupBottom and rimDiff < tol
if isCup
line.new(bar_index , leftRim, bar_index , cupBottom, color=color.green)
line.new(bar_index , cupBottom, bar_index , rightRim, color=color.green)
createLabel(bar_index, high, "Cup & Handle", label.style_label_up, color.green, 0.5)
if showTargets
tp = rightRim + (rightRim - cupBottom)
line.new(bar_index + 1, rightRim, bar_index + 10, tp, color=color.green, style=line.style_dashed)
strongestPriority := 3
lastPatternBar := bar_index
// === 4. Wedge
if showWedge and canDraw and canDrawThis(4)
top1 = pivotHigh
top2 = pivotHigh
bot1 = pivotLow
bot2 = pivotLow
if not na(top1) and not na(top2) and not na(bot1) and not na(bot2)
isFall = top1 > top2 and bot1 > bot2
isRise = top1 < top2 and bot1 < bot2
if isFall
line.new(bar_index , top1, bar_index , top2, color=color.green)
line.new(bar_index , bot1, bar_index , bot2, color=color.green)
createLabel(bar_index, low, "Falling Wedge", label.style_label_up, color.green, 0.5)
strongestPriority := 4
lastPatternBar := bar_index
if isRise
line.new(bar_index , top1, bar_index , top2, color=color.red)
line.new(bar_index , bot1, bar_index , bot2, color=color.red)
createLabel(bar_index, high, "Rising Wedge", label.style_label_down, color.red, -0.5)
strongestPriority := 4
lastPatternBar := bar_index
// === 5. Triangle
if showTriangle and canDraw and canDrawThis(5)
h1 = pivotHigh
h2 = pivotHigh
l1 = pivotLow
l2 = pivotLow
if not na(h1) and not na(h2) and not na(l1) and not na(l2)
isSym = h1 > h2 and l1 < l2
isAsc = h1 > h2 and l1 > l2
isDesc = h1 < h2 and l1 < l2
if isSym
line.new(bar_index , h1, bar_index , h2, color=color.orange)
line.new(bar_index , l1, bar_index , l2, color=color.orange)
createLabel(bar_index, high, "Symmetrical Triangle", label.style_label_down, color.orange, -0.3)
if isAsc
line.new(bar_index , h1, bar_index , h2, color=color.green)
line.new(bar_index , l1, bar_index , l2, color=color.green)
createLabel(bar_index, high, "Ascending Triangle", label.style_label_down, color.green, -0.3)
if isDesc
line.new(bar_index , h1, bar_index , h2, color=color.red)
line.new(bar_index , l1, bar_index , l2, color=color.red)
createLabel(bar_index, high, "Descending Triangle", label.style_label_down, color.red, -0.3)
strongestPriority := 5
lastPatternBar := bar_index
// === 6. Adam & Eve
if showAdamEve and canDraw and canDrawThis(6)
adamLow = pivotLow
eveLow = pivotLow
isAdamEve = not na(adamLow) and not na(eveLow) and relDiff(adamLow, eveLow) < 0.03
if isAdamEve and not na(pivotHigh )
nl = pivotHigh
line.new(bar_index , nl, bar_index, nl, color=color.fuchsia)
createLabel(bar_index, low, "Adam & Eve", label.style_label_up, color.fuchsia, 0.5)
if showTargets
tp = nl + (nl - adamLow)
line.new(bar_index + 1, nl, bar_index + 10, tp, color=color.fuchsia, style=line.style_dashed)
strongestPriority := 6
lastPatternBar := bar_index
// === 7. Price Channel
if showChannel and canDraw and canDrawThis(7)
chLow1 = pivotLow
chLow2 = pivotLow
chHigh1 = pivotHigh
chHigh2 = pivotHigh
isChannel = not na(chLow1) and not na(chLow2) and not na(chHigh1) and not na(chHigh2)
if isChannel
line.new(bar_index , chHigh1, bar_index , chHigh2, color=color.gray)
line.new(bar_index , chLow1, bar_index , chLow2, color=color.gray)
createLabel(bar_index, high, "Price Channel", label.style_label_left, color.gray, -0.3)
if showTargets
chMid = (chHigh2 + chLow2) / 2
line.new(bar_index + 1, chMid, bar_index + 10, chMid, color=color.gray, style=line.style_dotted)
strongestPriority := 7
lastPatternBar := bar_index
Golden Pattern Detector Pro v2.0 – All Patterns Edition
//@version=5
indicator("Golden Pattern Detector Pro v2.0 – All Patterns Edition", overlay=true)
// === Inputs ===
showCup = input.bool(true, title="Show Cup & Handle")
showHNS = input.bool(true, title="Show Head & Shoulders")
showDouble = input.bool(true, title="Show Double Top / Bottom")
showWedge = input.bool(true, title="Show Wedge Pattern")
showTriangle = input.bool(true, title="Show Triangle Pattern")
showAdamEve = input.bool(true, title="Show Adam & Eve Pattern")
showChannel = input.bool(true, title="Show Price Channel")
showTargets = input.bool(true, title="Show TP Targets")
showLabels = input.bool(true, title="Show Pattern Labels")
forceMode = input.bool(false, title="Enable Force Mode (Relax Pattern Conditions)")
// === Helpers ===
pivotHigh = ta.pivothigh(high, 5, 5)
pivotLow = ta.pivotlow(low, 5, 5)
relDiff(a, b) => math.abs(a - b) / a
createLabel(_x, _y, _txt, _style, _txtcolor) =>
if showLabels
label.new(x=_x, y=_y, text=_txt, style=_style, textcolor=_txtcolor)
// === Cup & Handle ===
if showCup
cupBottom = pivotLow
leftRim = pivotHigh
rightRim = pivotHigh
handleLow = pivotLow
if not na(cupBottom) and not na(leftRim) and not na(rightRim)
rimDiff = relDiff(leftRim, rightRim)
rimTol = forceMode ? 0.4 : 0.2
isCup = leftRim > cupBottom and rightRim > cupBottom and rimDiff < rimTol
if isCup
line.new(bar_index , leftRim, bar_index , cupBottom, color=color.green)
line.new(bar_index , cupBottom, bar_index , rightRim, color=color.green)
if not na(handleLow)
line.new(bar_index , rightRim, bar_index, handleLow, color=color.orange)
createLabel(bar_index, high, "Cup & Handle", label.style_label_up, color.green)
if showTargets
tp = rightRim + (rightRim - cupBottom)
line.new(bar_index + 1, rightRim, bar_index + 10, tp, color=color.green, style=line.style_dashed)
// === Head & Shoulders ===
if showHNS
ls = pivotHigh
h = pivotHigh
rs = pivotHigh
nl = pivotLow
if not na(ls) and not na(h) and not na(rs)
diff = relDiff(ls, rs)
tol = forceMode ? 0.4 : 0.2
isHNS = h > ls and h > rs and diff < tol
if isHNS and not na(nl)
line.new(bar_index , nl, bar_index, nl, color=color.red)
createLabel(bar_index, high, "Head & Shoulders", label.style_label_down, color.red)
if showTargets
tp = nl - (h - nl)
line.new(bar_index + 1, nl, bar_index + 10, tp, color=color.red, style=line.style_dashed)
// === Double Top / Bottom ===
if showDouble
top1 = pivotHigh
top2 = pivotHigh
bot1 = pivotLow
bot2 = pivotLow
tol = forceMode ? 0.03 : 0.01
isTop = not na(top1) and not na(top2) and relDiff(top1, top2) < tol
isBot = not na(bot1) and not na(bot2) and relDiff(bot1, bot2) < tol
if isTop and not na(pivotLow )
nl = pivotLow
line.new(bar_index , nl, bar_index, nl, color=color.red)
createLabel(bar_index, high, "Double Top", label.style_label_down, color.red)
if showTargets
tp = nl - (top1 - nl)
line.new(bar_index + 1, nl, bar_index + 10, tp, color=color.red, style=line.style_dashed)
if isBot and not na(pivotHigh )
nl = pivotHigh
line.new(bar_index , nl, bar_index, nl, color=color.green)
createLabel(bar_index, low, "Double Bottom", label.style_label_up, color.green)
if showTargets
tp = nl + (nl - bot1)
line.new(bar_index + 1, nl, bar_index + 10, tp, color=color.green, style=line.style_dashed)
// === Wedge ===
if showWedge
top1 = pivotHigh
top2 = pivotHigh
bot1 = pivotLow
bot2 = pivotLow
if not na(top1) and not na(top2) and not na(bot1) and not na(bot2)
isFall = top1 > top2 and bot1 > bot2
isRise = top1 < top2 and bot1 < bot2
if isFall
line.new(bar_index , top1, bar_index , top2, color=color.green)
line.new(bar_index , bot1, bar_index , bot2, color=color.green)
createLabel(bar_index, low, "Falling Wedge", label.style_label_up, color.green)
if isRise
line.new(bar_index , top1, bar_index , top2, color=color.red)
line.new(bar_index , bot1, bar_index , bot2, color=color.red)
createLabel(bar_index, high, "Rising Wedge", label.style_label_down, color.red)
// === Triangle ===
if showTriangle
h1 = pivotHigh
h2 = pivotHigh
l1 = pivotLow
l2 = pivotLow
if not na(h1) and not na(h2) and not na(l1) and not na(l2)
isSym = h1 > h2 and l1 < l2
isAsc = h1 > h2 and l1 > l2
isDesc = h1 < h2 and l1 < l2
if isSym
line.new(bar_index , h1, bar_index , h2, color=color.orange)
line.new(bar_index , l1, bar_index , l2, color=color.orange)
createLabel(bar_index, high, "Symmetrical Triangle", label.style_label_down, color.orange)
if isAsc
line.new(bar_index , h1, bar_index , h2, color=color.green)
line.new(bar_index , l1, bar_index , l2, color=color.green)
createLabel(bar_index, high, "Ascending Triangle", label.style_label_down, color.green)
if isDesc
line.new(bar_index , h1, bar_index , h2, color=color.red)
line.new(bar_index , l1, bar_index , l2, color=color.red)
createLabel(bar_index, high, "Descending Triangle", label.style_label_down, color.red)
// === Adam & Eve ===
if showAdamEve
adam = pivotLow
eve = pivotLow
neckline = pivotHigh
if not na(adam) and not na(eve) and not na(neckline) and adam == eve
line.new(bar_index, neckline, bar_index + 10, neckline, color=color.fuchsia)
createLabel(bar_index, low, "Adam & Eve", label.style_label_up, color.fuchsia)
// === Channel ===
if showChannel
chH1 = pivotHigh
chH2 = pivotHigh
chL1 = pivotLow
chL2 = pivotLow
if not na(chH1) and not na(chH2) and not na(chL1) and not na(chL2)
line.new(bar_index , chH1, bar_index , chH2, color=color.blue)
line.new(bar_index , chL1, bar_index , chL2, color=color.blue)
createLabel(bar_index, high, "Price Channel", label.style_label_down, color.blue)
Golden Footprint View Pro v1.0 – Confirmed
//@version=5
indicator("Golden Footprint View Pro v1.0 – Confirmed", overlay=true)
// === INPUTS ===
deltaMultiplier = input.float(1.0, title="Delta Strength Multiplier")
showDeltaColoring = input.bool(true, title="Color Candles by Delta Strength?")
threshold = input.float(0.2, title="Delta Coloring Threshold (0-1)")
rsiPeriod = input.int(14, title="RSI Period")
cciPeriod = input.int(20, title="CCI Period")
showSignals = input.bool(true, title="Show Confirmed Entry Signals?")
// === DELTA CALCULATION ===
delta = volume * (close - open)
normalizedDelta = volume != 0 ? (delta * deltaMultiplier / volume) : 0.0
// === INDICATORS ===
rsi = ta.rsi(close, rsiPeriod)
cci = ta.cci(close, cciPeriod)
// === PRICE ACTION: Rejection Candle
upperWick = high - math.max(close, open)
lowerWick = math.min(close, open) - low
bodySize = math.abs(close - open)
isRejection = lowerWick > bodySize * 1.5 or upperWick > bodySize * 1.5
// === STRUCTURE BREAK LOGIC
prevHigh = ta.highest(close , 5)
prevLow = ta.lowest(close , 5)
bosUp = close > prevHigh
bosDown = close < prevLow
// === SIGNAL LOGIC
buySignal = showSignals and normalizedDelta > threshold and rsi < 40 and cci < -100 and isRejection and bosUp
sellSignal = showSignals and normalizedDelta < -threshold and rsi > 60 and cci > 100 and isRejection and bosDown
// === CANDLE COLORING ===
barcolor(showDeltaColoring and normalizedDelta > threshold ? color.lime :showDeltaColoring and normalizedDelta < -threshold ? color.red :showDeltaColoring ? color.gray : na)
// === SIGNAL PLOTS ===
plotshape(buySignal, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", size=size.small)
plotshape(sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", size=size.small)
// === DEBUG (Optional)
plotchar(delta, title="Delta", location=location.bottom, color=color.white, size=size.tiny, offset=-1)
Golden Pattern – Head & Shoulders v2.2//@version=5
indicator("Golden Pattern – Head & Shoulders v2.2", overlay=true)
enable_HS = input.bool(true, "Enable Head & Shoulders Detection")
show_targets = input.bool(true, "Show TP1/TP2/TP3 Levels")
min_dist = input.int(5, "Min Distance Between Points", minval=3)
sensitivity = input.float(1.5, "Deviation %", minval=0.1)
sl_buffer = input.float(0.5, "SL Buffer %")
// نقاط محورية
ph = ta.pivothigh(high, min_dist, min_dist)
pl = ta.pivotlow(low, min_dist, min_dist)
// تخزين الرأس والكتفين
var float sh1 = na
var float head = na
var float sh2 = na
var int sh1_bar = na
var int head_bar = na
var int sh2_bar = na
var float ish1 = na
var float ihead = na
var float ish2 = na
var int ish1_bar = na
var int ihead_bar = na
var int ish2_bar = na
// رأس وكتفين (بيع)
if not na(ph)
if na(sh1)
sh1 := ph
sh1_bar := bar_index
else if na(head) and ph > sh1 and bar_index - sh1_bar > min_dist
head := ph
head_bar := bar_index
else if na(sh2) and ph < head and math.abs(ph - sh1)/sh1 < sensitivity/100 and bar_index - head_bar > min_dist
sh2 := ph
sh2_bar := bar_index
else
sh1 := ph
sh1_bar := bar_index
head := na
sh2 := na
// رأس وكتفين معكوس (شراء)
if not na(pl)
if na(ish1)
ish1 := pl
ish1_bar := bar_index
else if na(ihead) and pl < ish1 and bar_index - ish1_bar > min_dist
ihead := pl
ihead_bar := bar_index
else if na(ish2) and pl > ihead and math.abs(pl - ish1)/ish1 < sensitivity/100 and bar_index - ihead_bar > min_dist
ish2 := pl
ish2_bar := bar_index
else
ish1 := pl
ish1_bar := bar_index
ihead := na
ish2 := na
// خطوط الرقبة
neckline_sell = (sh1 + sh2) / 2
neckline_buy = (ish1 + ish2) / 2
sell_break = enable_HS and not na(sh2) and close < neckline_sell and bar_index > sh2_bar
buy_break = enable_HS and not na(ish2) and close > neckline_buy and bar_index > ish2_bar
// TP / SL
depth_sell = head - neckline_sell
depth_buy = neckline_buy - ihead
tp1_sell = sell_break ? close - depth_sell : na
tp2_sell = sell_break ? close - depth_sell * 1.5 : na
tp3_sell = sell_break ? close - depth_sell * 2.0 : na
sl_sell = sell_break ? head + head * sl_buffer / 100 : na
tp1_buy = buy_break ? close + depth_buy : na
tp2_buy = buy_break ? close + depth_buy * 1.5 : na
tp3_buy = buy_break ? close + depth_buy * 2.0 : na
sl_buy = buy_break ? ihead - ihead * sl_buffer / 100 : na
// منع التكرار
var bool lastBuyPlotted = false
var bool lastSellPlotted = false
var bool plotBuySignal = false
var bool plotSellSignal = false
plotBuySignal := false
plotSellSignal := false
if buy_break and not lastBuyPlotted
plotBuySignal := true
lastBuyPlotted := true
lastSellPlotted := false
if sell_break and not lastSellPlotted
plotSellSignal := true
lastSellPlotted := true
lastBuyPlotted := false
// إشارات الدخول
plotshape(plotBuySignal, location=location.belowbar, style=shape.labelup, color=color.green, text="BUY")
plotshape(plotSellSignal, location=location.abovebar, style=shape.labeldown, color=color.red, text="SELL")
// رسم الأهداف (مع زر تحكم)
if plotBuySignal and show_targets
line.new(bar_index, tp1_buy, bar_index + 20, tp1_buy, color=color.green)
line.new(bar_index, tp2_buy, bar_index + 20, tp2_buy, color=color.teal)
line.new(bar_index, tp3_buy, bar_index + 20, tp3_buy, color=color.blue)
line.new(bar_index, sl_buy, bar_index + 20, sl_buy, color=color.red)
if plotSellSignal and show_targets
line.new(bar_index, tp1_sell, bar_index + 20, tp1_sell, color=color.green)
line.new(bar_index, tp2_sell, bar_index + 20, tp2_sell, color=color.teal)
line.new(bar_index, tp3_sell, bar_index + 20, tp3_sell, color=color.blue)
line.new(bar_index, sl_sell, bar_index + 20, sl_sell, color=color.red)
Golden Pattern – Head & Shoulders v2.2//@version=5
indicator("Golden Pattern – Head & Shoulders v2.2", overlay=true)
enable_HS = input.bool(true, "Enable Head & Shoulders Detection")
show_targets = input.bool(true, "Show TP1/TP2/TP3 Levels")
min_dist = input.int(5, "Min Distance Between Points", minval=3)
sensitivity = input.float(1.5, "Deviation %", minval=0.1)
sl_buffer = input.float(0.5, "SL Buffer %")
// نقاط محورية
ph = ta.pivothigh(high, min_dist, min_dist)
pl = ta.pivotlow(low, min_dist, min_dist)
// تخزين الرأس والكتفين
var float sh1 = na
var float head = na
var float sh2 = na
var int sh1_bar = na
var int head_bar = na
var int sh2_bar = na
var float ish1 = na
var float ihead = na
var float ish2 = na
var int ish1_bar = na
var int ihead_bar = na
var int ish2_bar = na
// رأس وكتفين (بيع)
if not na(ph)
if na(sh1)
sh1 := ph
sh1_bar := bar_index
else if na(head) and ph > sh1 and bar_index - sh1_bar > min_dist
head := ph
head_bar := bar_index
else if na(sh2) and ph < head and math.abs(ph - sh1)/sh1 < sensitivity/100 and bar_index - head_bar > min_dist
sh2 := ph
sh2_bar := bar_index
else
sh1 := ph
sh1_bar := bar_index
head := na
sh2 := na
// رأس وكتفين معكوس (شراء)
if not na(pl)
if na(ish1)
ish1 := pl
ish1_bar := bar_index
else if na(ihead) and pl < ish1 and bar_index - ish1_bar > min_dist
ihead := pl
ihead_bar := bar_index
else if na(ish2) and pl > ihead and math.abs(pl - ish1)/ish1 < sensitivity/100 and bar_index - ihead_bar > min_dist
ish2 := pl
ish2_bar := bar_index
else
ish1 := pl
ish1_bar := bar_index
ihead := na
ish2 := na
// خطوط الرقبة
neckline_sell = (sh1 + sh2) / 2
neckline_buy = (ish1 + ish2) / 2
sell_break = enable_HS and not na(sh2) and close < neckline_sell and bar_index > sh2_bar
buy_break = enable_HS and not na(ish2) and close > neckline_buy and bar_index > ish2_bar
// TP / SL
depth_sell = head - neckline_sell
depth_buy = neckline_buy - ihead
tp1_sell = sell_break ? close - depth_sell : na
tp2_sell = sell_break ? close - depth_sell * 1.5 : na
tp3_sell = sell_break ? close - depth_sell * 2.0 : na
sl_sell = sell_break ? head + head * sl_buffer / 100 : na
tp1_buy = buy_break ? close + depth_buy : na
tp2_buy = buy_break ? close + depth_buy * 1.5 : na
tp3_buy = buy_break ? close + depth_buy * 2.0 : na
sl_buy = buy_break ? ihead - ihead * sl_buffer / 100 : na
// منع التكرار
var bool lastBuyPlotted = false
var bool lastSellPlotted = false
var bool plotBuySignal = false
var bool plotSellSignal = false
plotBuySignal := false
plotSellSignal := false
if buy_break and not lastBuyPlotted
plotBuySignal := true
lastBuyPlotted := true
lastSellPlotted := false
if sell_break and not lastSellPlotted
plotSellSignal := true
lastSellPlotted := true
lastBuyPlotted := false
// إشارات الدخول
plotshape(plotBuySignal, location=location.belowbar, style=shape.labelup, color=color.green, text="BUY")
plotshape(plotSellSignal, location=location.abovebar, style=shape.labeldown, color=color.red, text="SELL")
// رسم الأهداف (مع زر تحكم)
if plotBuySignal and show_targets
line.new(bar_index, tp1_buy, bar_index + 20, tp1_buy, color=color.green)
line.new(bar_index, tp2_buy, bar_index + 20, tp2_buy, color=color.teal)
line.new(bar_index, tp3_buy, bar_index + 20, tp3_buy, color=color.blue)
line.new(bar_index, sl_buy, bar_index + 20, sl_buy, color=color.red)
if plotSellSignal and show_targets
line.new(bar_index, tp1_sell, bar_index + 20, tp1_sell, color=color.green)
line.new(bar_index, tp2_sell, bar_index + 20, tp2_sell, color=color.teal)
line.new(bar_index, tp3_sell, bar_index + 20, tp3_sell, color=color.blue)
line.new(bar_index, sl_sell, bar_index + 20, sl_sell, color=color.red)
Sniper Pro v4.6 – Final Dynamic Edition//@version=5
indicator("Sniper Pro v4.6 – Final Dynamic Edition", overlay=true)
// === INPUTS ===
showInfoBubble = input.bool(true, "Show Info Bubble")
showSMBubble = input.bool(true, "Show Smart Money Bubble")
showVWAP = input.bool(true, "Show VWAP")
showSMA20 = input.bool(true, "Show SMA20")
showSideways = input.bool(true, "Show Sideways Warning")
depth = input.int(12, "Golden Zone Depth")
// === INDICATORS ===
sma20 = ta.sma(close, 20)
vwapVal = ta.vwap
// === GOLDEN ZONE ===
ph = ta.pivothigh(high, depth, depth)
pl = ta.pivotlow(low, depth, depth)
var float lastHigh = na
var float lastLow = na
lastHigh := not na(ph) ? ph : lastHigh
lastLow := not na(pl) ? pl : lastLow
fullrange = lastHigh - lastLow
goldenTop = lastHigh - fullrange * 0.618
goldenBot = lastHigh - fullrange * 0.786
inGoldenZone = close >= goldenBot and close <= goldenTop
// === DELTA ===
delta = (close - open) * volume
absDelta = math.abs(delta)
deltaStr = absDelta > 1e6 ? str.tostring(delta / 1e6, "#.##") + "M" :
absDelta > 1e3 ? str.tostring(delta / 1e3, "#.##") + "K" :
str.tostring(delta, "#.##")
// === CANDLE STRENGTH ===
body = math.abs(close - open)
wick = high - low
strength = body / (wick + 1e-10)
strengthLevel = strength > 0.8 ? "5/5" : strength > 0.6 ? "4/5" : strength > 0.4 ? "3/5" : strength > 0.2 ? "2/5" : "1/5"
// === CANDLE PATTERNS ===
bullEngulf = close > open and close < open and close > open and open < close
bearEngulf = close < open and close > open and close < open and open > close
hammer = close > open and (open - low) > 1.5 * body
shootingStar = open > close and (high - open) > 1.5 * body
morningStar = close < open and close < open and close > ((open + close ) / 2)
eveningStar = close > open and close > open and close < ((open + close ) / 2)
pattern = bullEngulf ? "Bull Engulfing" : bearEngulf ? "Bear Engulfing" : hammer ? "Hammer" :
shootingStar ? "Shooting Star" : morningStar ? "Morning Star" :
eveningStar ? "Evening Star" : ""
// === BAR COLORING ===
barcolor(absDelta > 2 * ta.sma(absDelta, 14) ? (delta > 0 ? color.green : color.red) : na)
// === DYNAMIC INFO BUBBLE ===
var label infoBubble = na
if na(infoBubble)
infoBubble := label.new(bar_index, high, "", style=label.style_label_up, size=size.small, textcolor=color.white, color=color.new(color.gray, 80))
if showInfoBubble
infoText = "O: " + str.tostring(open, "#.##") +
" H: " + str.tostring(high, "#.##") +
" L: " + str.tostring(low, "#.##") +
" C: " + str.tostring(close, "#.##") +
" Δ: " + deltaStr +
(pattern != "" ? " Pattern: " + pattern : "") +
" Power: " + strengthLevel
label.set_xy(infoBubble, bar_index, high + syminfo.mintick * 15)
label.set_text(infoBubble, infoText)
// === SMART MONEY BUBBLE ===
efficiency = body / (wick + 1e-10)
isExplosive = efficiency > 0.6 and absDelta > 2 * ta.sma(absDelta, 14)
smBuy = close > open and isExplosive and inGoldenZone and close > sma20
smSell = close < open and isExplosive and inGoldenZone and close < sma20
var label smBubble = na
if not na(smBubble)
label.delete(smBubble)
if showSMBubble and (smBuy or smSell)
smBubble := label.new(bar_index, smBuy ? low - syminfo.mintick * 15 : high + syminfo.mintick * 15,smBuy ? "SM Buy" : "SM Sell",style=smBuy ? label.style_label_up : label.style_label_down,size=size.normal,color=smBuy ? color.yellow : color.orange,textcolor=color.black)
// === SIDEWAYS WARNING ===
range20 = ta.highest(high, 20) - ta.lowest(low, 20)
atr = ta.atr(14)
isSideways = range20 < atr * 1.5
blinking = showSideways and isSideways and bar_index % 2 == 0
plotshape(blinking, title="Sideways", location=location.top, style=shape.triangleup, size=size.small, color=color.new(color.yellow, 0), text="⚠️")
// === PLOTS ===
plot(showVWAP ? vwapVal : na, title="VWAP", color=color.aqua)
plot(showSMA20 ? sma20 : na, title="SMA20", color=color.yellow)
plot(goldenTop, title="Golden Top", color=color.yellow)
plot(goldenBot, title="Golden Bottom", color=color.orange)
Sniper Pro v4.6 – True Live Reactive Edition//@version=5
indicator("Sniper Pro v4.6 – True Live Reactive Edition", overlay=true)
// === INPUTS ===
showInfoBubble = input.bool(true, "Show Live Info Bubble")
depth = input.int(12, "Golden Zone Depth")
// === INDICATORS ===
sma20 = ta.sma(close, 20)
vwapVal = ta.vwap
// === GOLDEN ZONE ===
ph = ta.pivothigh(high, depth, depth)
pl = ta.pivotlow(low, depth, depth)
var float lastHigh = na
var float lastLow = na
lastHigh := not na(ph) ? ph : lastHigh
lastLow := not na(pl) ? pl : lastLow
fullrange = lastHigh - lastLow
goldenTop = lastHigh - fullrange * 0.618
goldenBot = lastHigh - fullrange * 0.786
inGoldenZone = close >= goldenBot and close <= goldenTop
// === DELTA ===
delta = (close - open) * volume
absDelta = math.abs(delta)
deltaStr = absDelta > 1e6 ? str.tostring(delta / 1e6, "#.##") + "M" : absDelta > 1e3 ? str.tostring(delta / 1e3, "#.##") + "K" : str.tostring(delta, "#.##")
// === STRENGTH ===
body = math.abs(close - open)
wick = high - low
strength = body / (wick + 1e-10)
strengthLevel = strength > 0.8 ? "5/5" : strength > 0.6 ? "4/5" : strength > 0.4 ? "3/5" : strength > 0.2 ? "2/5" : "1/5"
// === PATTERN ===
bullEngulf = close > open and close < open and close > open and open < close
bearEngulf = close < open and close > open and close < open and open > close
hammer = close > open and (open - low) > 1.5 * body
shootingStar = open > close and (high - open) > 1.5 * body
morningStar = close < open and close < open and close > ((open + close ) / 2)
eveningStar = close > open and close > open and close < ((open + close ) / 2)
pattern = bullEngulf ? "Bull Engulfing" : bearEngulf ? "Bear Engulfing" : hammer ? "Hammer" : shootingStar ? "Shooting Star" : morningStar ? "Morning Star" : eveningStar ? "Evening Star" : ""
// === LIVE BUBBLE ===
var label bubble = na
if na(bubble)
bubble := label.new(bar_index, high, "", style=label.style_label_up, size=size.small, textcolor=color.white, color=color.new(color.gray, 85))
if showInfoBubble
label.set_xy(bubble, bar_index, high + syminfo.mintick * 20)
label.set_text(bubble,"O: " + str.tostring(open, "#.##") +" H: " + str.tostring(high, "#.##") +" L: " + str.tostring(low, "#.##") +" C: " + str.tostring(close, "#.##") +" Δ: " + deltaStr +(pattern != "" ? " Pattern: " + pattern : "") +" Power: " + strengthLevel)
// === PLOTS ===
plot(vwapVal, title="VWAP", color=color.aqua)
plot(goldenTop, title="Golden Top", color=color.yellow)
plot(goldenBot, title="Golden Bottom", color=color.orange)
Sniper Pro v4.2 – Dynamic Wave Engine
//@version=5
indicator("Sniper Pro v4.2 – Dynamic Wave Engine", overlay=true)
// === INPUTS ===
minScore = input.int(3, "Min Conditions for Entry", minval=1, maxval=5)
filterSideways = input.bool(true, "Block in Sideways?")
showDelta = input.bool(true, "Show Delta Counter?")
showSMA20 = input.bool(true, "Show SMA20?")
showVWAP = input.bool(true, "Show VWAP?")
showGoldenZone = input.bool(true, "Show Golden Zone?")
callColor = input.color(color.green, "CALL Color")
putColor = input.color(color.red, "PUT Color")
watchBuyCol = input.color(color.new(color.green, 70), "Watch Buy Color")
watchSellCol = input.color(color.new(color.red, 70), "Watch Sell Color")
// === INDICATORS ===
sma20 = ta.sma(close, 20)
vwapVal = ta.vwap
// === DYNAMIC WAVE RANGE ===
var float lastImpulseHigh = na
var float lastImpulseLow = na
isImpulseUp = close > close and close > close
isImpulseDown = close < close and close < close
lastImpulseHigh := isImpulseUp ? high : nz(lastImpulseHigh )
lastImpulseLow := isImpulseDown ? low : nz(lastImpulseLow )
waveRange = lastImpulseHigh - lastImpulseLow
goldenTop = lastImpulseHigh - waveRange * 0.618
goldenBot = lastImpulseHigh - waveRange * 0.786
inGoldenZone = close >= goldenBot and close <= goldenTop
// === DELTA ===
delta = (close - open) * volume
normalizedDelta = volume != 0 ? delta / volume : 0
// === SIDEWAYS FILTER ===
range20 = ta.highest(high, 20) - ta.lowest(low, 20)
atr = ta.atr(14)
isSideways = range20 < atr * 1.5
block = filterSideways and isSideways
// === PRICE ACTION ===
hammer = close > open and (math.min(open, close) - low) > math.abs(close - open) * 1.5
bullishEngulf = close > open and close < open and close > open and open < close
shootingStar = close < open and (high - math.max(open, close)) > math.abs(close - open) * 1.5
bearishEngulf = close < open and close > open and close < open and open > close
// === SCORE ===
buyScore = (inGoldenZone ? 1 : 0) + (normalizedDelta > 0.2 ? 1 : 0) + ((hammer or bullishEngulf) ? 1 : 0) + (close > sma20 ? 1 : 0)
sellScore = (inGoldenZone ? 1 : 0) + (normalizedDelta < -0.2 ? 1 : 0) + ((shootingStar or bearishEngulf) ? 1 : 0) + (close < sma20 ? 1 : 0)
watchBuy = buyScore == (minScore - 1) and not block
watchSell = sellScore == (minScore - 1) and not block
call = buyScore >= minScore and not block
put = sellScore >= minScore and not block
// === BAR COLORS ===
barcolor(call ? callColor : put ? putColor : watchBuy ? watchBuyCol : watchSell ? watchSellCol : na)
// === LABELS ===
if call
label.new(bar_index, low, "CALL", style=label.style_label_up, size=size.normal, color=callColor, textcolor=color.white)
if put
label.new(bar_index, high, "PUT", style=label.style_label_down, size=size.normal, color=putColor, textcolor=color.white)
if watchBuy
label.new(bar_index, low, "B3", style=label.style_label_up, size=size.small, color=watchBuyCol, textcolor=color.white)
if watchSell
label.new(bar_index, high, "S4", style=label.style_label_down, size=size.small, color=watchSellCol, textcolor=color.white)
// === DELTA LABEL ===
deltaLabel = math.abs(delta) > 1000000 ? str.format("{0,number,#.##}M", delta / 1e6) :
math.abs(delta) > 1000 ? str.format("{0,number,#.##}K", delta / 1e3) :
str.tostring(delta, "#.##")
if showDelta
label.new(bar_index, close, deltaLabel, style=label.style_label_left, size=size.tiny, textcolor=color.white, color=delta > 0 ? color.new(color.green, 70) : color.new(color.red, 70))
// === PLOTS ===
plot(showVWAP ? vwapVal : na, title="VWAP", color=color.aqua)
plot(showGoldenZone ? goldenTop : na, title="Golden Top", color=color.yellow, style=plot.style_linebr)
plot(showGoldenZone ? goldenBot : na, title="Golden Bottom", color=color.orange, style=plot.style_linebr)
plot(showSMA20 ? sma20 : na, title="SMA20", color=color.yellow)
CSD, EC, ECSD & SPECIdentify Cliniq Model 5 elements. Identify EC with a line from previous H/L closed beyond, CSD, ECSD, and SPEC with markers. Or just use bar colors for SPEC.
AlgoFlex S&P 500 Master**AlgoFlex S\&P 15 Min HA Signals**
**Description**
Capture intraday trends on the S\&P 500 using Heikin Ashi candles on the 15-minute chart. AlgoFlex S&P 500 filters out noise and delivers precise buy/sell signals with dynamic take-profit and stop-loss levels—perfect for spotting high-probability entries in a fast market.
**Key Features**
* **Heikin Ashi Trend Filter:** Smooths volatility for clearer signals
* **Real-Time Alerts:** Instant buy/sell notifications when conditions are met
**How to Use**
1. **Apply to S\&P 500 Chart**
2. Set chart type to **Heikin Ashi** and timeframe to **15 minutes**
3. **Enable Alerts:**
* Click the **Alerts** (⏰) icon
* Select an AlgoFlex S\&P condition (Buy or Sell)
* Choose “Once Per Bar Close” and **Create**
**Disclaimer**
Signals are **recommendations only**. Trading carries risk and you’re responsible for all decisions and outcomes.
---
🔒 **Invite-Only Access**
This strategy is available by subscription only. To unlock:
1. Download **AlgoFlex AlgoTrading market** on the App Store or Google Play
2. Subscribe to the S\&P 500 script and our full suite of Forex, Indices & Commodities indicators
3. Get in-app support & regular updates
Elevate your S\&P trading—subscribe to AlgoFlex today!
AlgoFlex Gold (XAUUSD)**AlgoFlex Gold 5 Min HA Signals**
**Description**
Unlock precision buy/sell signals on XAUUSD using Heikin Ashi candles on the 5-minute timeframe. AlgoFlex Gold combines momentum detection with dynamic take-profit and stop-loss levels to help you catch short-term swings in gold with clear entry and exit guidance.
**Key Features**
* **Heikin Ashi Momentum Filter**: Smooths noise for cleaner trends.
* **Real-Time Buy/Sell Alerts**: Notifications fire immediately when setups trigger.
**How to Use**
1. Apply this script to any XAUUSD chart.
2. Set your chart type to **Heikin Ashi** and timeframe to **5 minutes**.
3. Enable Alerts: open TradingView’s Alerts panel, choose an AlgoFlex Gold condition (Buy or Sell), configure “Once Per Bar Close,” then **Create**.
**Disclaimer**
Signals are **recommendations only**. Always manage your own risk—losses can exceed deposits.
---
🔒 **Invite-Only Access**
This script is available by subscription only. To subscribe and unlock all AlgoFlex indicators:
• **Download “AlgoFlex Algo Market”** on the App Store or Google Play
• Purchase your invite-only access to XAUUSD Gold and the full suite of Forex, Indices & Commodities scripts
• Get in-app support.
Elevate your gold trading—subscribe today!
EMA MAs 7EMA(ERJUANSTURK)All ema mas values are entered. 20, 50, 100,150,200,300,400. The indicator is designed simply and elegantly.
Supply/Demand Zones + MSS Entry SignalBy Victor Chow
1 Hour OB
5min MSS
Just to use with gold for entries
Heikin Ashi + Momentum Buy Signal//@version=5
indicator("Heikin Ashi + Momentum Buy Signal", overlay=true)
// Heikin Ashi candles
heikinOpen = (open + high + low + close) / 4
heikinClose = (heikinOpen + high + low + close) / 4
heikinHigh = math.max(high, math.max(heikinOpen, heikinClose))
heikinLow = math.min(low, math.min(heikinOpen, heikinClose))
// Heikin Ashi conditions (3 bougies vertes sans mèche basse)
haC1 = heikinClose > heikinOpen
haC2 = heikinLow == heikinOpen
bullishHeikin = haC1 and haC2
ha1 = bullishHeikin
ha2 = bullishHeikin
ha3 = bullishHeikin
// Momentum
momentum = close - close
momentumOK = momentum > 0 and momentum > momentum
// Entrée signal
buySignal = ha1 and ha2 and ha3 and momentumOK
plotshape(buySignal, title="Signal Achat", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
alertcondition(buySignal, title="Alerte Achat", message="Signal d'entrée détecté : Heikin Ashi + Momentum")
MACD First Bullish Histogram (Momentum Signal)//@version=5
indicator("MACD First Bullish Histogram (Momentum Signal)", overlay=true)
// MACD Settings
fastLen = 12
slowLen = 26
signalLen = 9
// MACD Calculation
= ta.macd(close, fastLen, slowLen, signalLen)
// First green histogram bar (was red before)
firstGreenHist = hist > 0 and hist <= 0
// Confirm MACD line is above signal (bullish)
macdIsBullish = macdLine > signalLine
// Final signal condition
firstMomentumCandle = firstGreenHist and macdIsBullish
// Plot signal
plotshape(firstMomentumCandle, location=location.belowbar, color=color.lime, style=shape.labelup, size=size.small, text="MACD⇧")
// Alert condition
alertcondition(firstMomentumCandle, title="MACD Bullish Momentum Candle", message="MACD Momentum Signal on {{ticker}} at {{close}}")
Accurate Multi-Timeframe Squeeze TrendMulti Time-Frame Trend indicator.
This indicator will review the Squeeze momentum indicator and create a table that shows the trend based on that value on the 5 min, 15 min and 1 hour timeframe.
MACD Bullish Crossover Signal//@version=5
indicator("MACD Bullish Crossover Signal", overlay=true)
// MACD Calculation
fastLength = 12
slowLength = 26
signalSmoothing = 9
= ta.macd(close, fastLength, slowLength, signalSmoothing)
// Detect Bullish Crossover
bullishCross = ta.crossover(macdLine, signalLine)
// Plot signal on chart
plotshape(bullishCross, title="MACD Bullish Crossover", location=location.belowbar, color=color.green, style=shape.labelup, text="MACD+", textcolor=color.white, size=size.small)
// Create alert condition
alertcondition(bullishCross, title="Alert: MACD Bullish Crossover", message="MACD Bullish Crossover on {{ticker}} at {{close}}")
PnF ChartPoint and Figure (P&F) charts are a time-independent technical analysis tool that focuses purely on price movements, filtering out noise like minor price fluctuations and time. Unlike candlestick or bar charts, P&F charts ignore time and only record significant price changes based on predefined rules.
Key Characteristics of P&F Charts
No Time Axis
Only price movements matter; time is irrelevant.
Columns form based on reversals, not fixed time periods.
Uses X's and O's
X = Rising prices (demand in control)
O = Falling prices (supply in control)
Box Size (Price Increment)
Defines the minimum price change required to plot a new X or O.
Example: If the box size is **1∗∗,astockmustmoveatleast1∗∗,astockmustmoveatleast1 to record a new X or O.
Reversal Amount
Determines how much the price must reverse to switch from X's to O's (or vice versa).
Common reversal settings: 3-box reversal (price must reverse by 3x the box size).
How P&F Charts Work
1. Rising Prices (X-Columns)
A new X is added if the price rises by the box size.
If the price reverses down by the reversal amount, a new O-column starts.
2. Falling Prices (O-Columns)
A new O is added if the price falls by the box size.
If the price reverses up by the reversal amount, a new X-column starts.
Example of a P&F Chart
Suppose:
Box Size = $1
Reversal Amount = 3-box (i.e., $3)
Price Movement Chart Update
Stock rises from 10→10→11 X at $11
Rises to $12 X at $12
Drops to 9(9(12 → 9=9=3 drop) New O-column starts at 11,11,10, $9
Rises again to 12(12(9 → 12=12=3 rise) New X-column at 10,10,11, $12
About the Script:This Script uses columns instead of traditional X and O boxes.Column Printing (Red vs Green)
This Point and Figure chart alternates between two states:
X columns (green): Represent upward price movements
O columns (red): Represent downward price movements
When Green Columns (X) Are Printed:
A green column is printed when:
The script is in "X mode" (is_x is true)
A new column is created (new_column_created is true)
This happens after the price has reversed upward by at least the "reversal boxes" threshold from a previous O column
When Red Columns (O) Are Printed:
A red column is printed when:
The script is in "O mode" (is_x is false)
A new column is created (new_column_created is true)
This happens after the price has reversed downward by at least the "reversal boxes" threshold from a previous X column
How Trendlines Are Created
The script can draw two types of trendlines when the show_trendlines option is enabled:
Green Trendlines (Uptrend):
A green trendline is created when:
There's a transition from O to X columns (cond2 is true but wasn't true on the previous bar)
This represents the beginning of a potential uptrend
The trendline is solid and extends to the right
Red Trendlines (Downtrend):
A red trendline is created when:
There's a transition from X to O columns (cond1 is true but wasn't true on the previous bar)
This represents the beginning of a potential downtrend
The trendline is dashed and extends to the right
The script maintains two trendline objects - current_trendline and previous_trendline - and deletes the oldest one when a new trendline is created to prevent cluttering the chart.
In summary, this Point and Figure chart tracks price movements in discrete boxes and changes column types (and creates trendlines) when price reverses by a significant amount (defined by the reversal_boxes parameter). The chart also generates alerts when these trend changes occur, helping traders identify potential trend reversals.