SVKO InfoSVKO Info displays key market information for a chart symbol and its mapped native counterpart in one compact table. It lets users follow an underlying TradingView listing from a broker CFD chart without leaving the chart.
█ OVERVIEW
The table can show company and symbol identity, multi-period performance, extended-hours movement, a configurable history high, daily ATR, earnings, analyst target, and P/E data.
Each optional feature controls its related data request. Native TradingView charts can display their own metrics without a mapping. A broker chart remains silent when no native counterpart can be resolved.
On supported broker charts, the optional mapped price marker places the mapped symbol's latest available extended-session price beside the CFD candles for direct comparison.
█ SYMBOL RESOLUTION
SVKO Info first checks its own Mappings input. Local mappings have priority and work without a companion indicator.
When the local list has no match, the indicator can use SVKO CFD Symbol Mapper as a fallback. Connect 1st code to Map: 1st code and 2nd code to Map: 2nd code from the same Mapper instance.
Broker charts use the resolved native symbol for calculations. Native TradingView charts use their own standard ticker and can show an available inverse-mapped CFD counterpart.
█ HOW TO USE
• Add SVKO Info to the chart.
• Add complete source and target ticker pairs to Mappings for symbols that need a local mapping.
• Add SVKO CFD Symbol Mapper when the shared fallback table is required, then connect both code inputs to the same Mapper instance.
• Enable only the table rows and mapped-price drawing that you need.
• Adjust the history window before requesting long performance periods.
• Use the table and mapped-price styling controls to fit the chart layout.
█ PERFORMANCE AND MARKET DATA
Performance uses regular-session daily prices and supports rolling periods, calendar-based periods, and custom start dates. Periods outside the selected history window are omitted.
Extended-hours data compares the active premarket or postmarket price with the most recent regular-session close. Daily ATR always uses daily data, regardless of the chart timeframe.
Earnings, analyst targets, valuation data, company metadata, and mapped quotes depend on TradingView coverage and the user's data permissions.
█ ALERTS
Days to Earnings is a hidden numeric plot for manually configured Crossing alerts. The script does not create an alert by itself.
█ LIMITATIONS
Performance excludes dividends, currency conversion, position sizing, fees, and extended-hours movement. Live values refresh only when the chart receives an update, and current-bar values can change before the bar closes.
The extended-hours row and mapped price marker are current-display tools, not historical signals or backtest series. A mapped quote cannot refresh independently when the chart symbol stops producing updates.
Unavailable data appears as N/A where applicable. If a broker symbol cannot be resolved through either mapping method, the indicator draws nothing and skips its mapped data requests.
█ CREDITS AND LICENCE
Original work by SVKO. Published open source under the Mozilla Public License 2.0. Penunjuk

TargetExcursionQueueLibLibrary "TargetExcursionQueueLib"
helper lib for targetExcursionLib
f_queue_new(horizon)
Construct a fixed ring. Horizon is clamped to the supported 1..198 range.
Parameters:
horizon (int)
method advance(queue, pathHigh, pathLow, pathClose, pathValid, currentBar)
Update every unresolved path with this confirmed chart bar and
resolve the oldest origin exactly H chart bars after it was accepted.
Invalid path bars invalidate the affected target instead of hiding a gap.
Namespace types: PendingQueue
Parameters:
queue (PendingQueue)
pathHigh (float)
pathLow (float)
pathClose (float)
pathValid (bool)
currentBar (int)
method enqueue(queue, direction, origin, scale, currentBar)
Freeze one valid, non-neutral origin after older origins have advanced.
Namespace types: PendingQueue
Parameters:
queue (PendingQueue)
direction (int)
origin (float)
scale (float)
currentBar (int)
PendingOrigin
Fields:
originBar (series int)
resolutionBar (series int)
direction (series int)
origin (series float)
scale (series float)
maxHigh (series float)
minLow (series float)
pathComplete (series bool)
ResolvedExcursion
Fields:
resolved (series bool)
valid (series bool)
timingExact (series bool)
originBar (series int)
resolutionBar (series int)
direction (series int)
origin (series float)
scale (series float)
mae (series float)
mfe (series float)
closeReturn (series float)
directionalCloseReturn (series float)
PendingQueue
Fields:
slots (array)
capacity (series int)
horizon (series int)
readHead (series int)
writeHead (series int)
count (series int)
acceptedCount (series int)
resolvedCount (series int)
invalidResolvedCount (series int)
lastResolvedBar (series int) Perpustakaan

TargetExcursionStatsLibLibrary "TargetExcursionStatsLib"
helper for targetExcursionLib
f_density_new(gridSize, outcomeCap, smoothing, halfLife, familyCode, shrinkageAlpha)
Construct one independent density state.
Parameters:
gridSize (int)
outcomeCap (float)
smoothing (float)
halfLife (float)
familyCode (int)
shrinkageAlpha (float)
method advance(state, currentBar)
Advance all six streams causally to currentBar.
Namespace types: DensityState
Parameters:
state (DensityState)
currentBar (int)
method observe(state, direction, mae, mfe, resolutionBar)
Add one resolved, direction-conditioned excursion observation.
MAE and MFE are normalized, nonnegative values frozen by the queue.
Namespace types: DensityState
Parameters:
state (DensityState)
direction (int)
mae (float)
mfe (float)
resolutionBar (int)
method support(state, direction, isMae)
Effective sample support for a direction and outcome stream.
Namespace types: DensityState
Parameters:
state (DensityState)
direction (int)
isMae (bool)
method directionSupport(state, direction)
Minimum of current direction's MAE/MFE effective supports.
Namespace types: DensityState
Parameters:
state (DensityState)
direction (int)
method estimate(state, direction, isMae)
Quantiles, mode, modal probability and support for one stream.
Namespace types: DensityState
Parameters:
state (DensityState)
direction (int)
isMae (bool)
method probabilityAt(state, direction, isMae, value)
Smoothed probability mass at the bin containing value.
Namespace types: DensityState
Parameters:
state (DensityState)
direction (int)
isMae (bool)
value (float)
Histogram
Fields:
bins (array)
weight (series float)
weightSq (series float)
DensityState
Fields:
pooledMae (Histogram)
pooledMfe (Histogram)
longMae (Histogram)
longMfe (Histogram)
shortMae (Histogram)
shortMfe (Histogram)
gridSize (series int)
outcomeCap (series float)
smoothing (series float)
halfLife (series float)
familyCode (series int)
shrinkageAlpha (series float)
lastDecayBar (series int)
lastResolvedBar (series int)
resolvedCount (series int)
longResolvedCount (series int)
shortResolvedCount (series int)
DensityEstimate
Fields:
q10 (series float)
q50 (series float)
q80 (series float)
q90 (series float)
mode (series float)
modeProbability (series float)
effectiveSupport (series float) Perpustakaan

Penunjuk

Compact Trending Scanner Tiene configurados:
SPY, AMD, AAPL, NVDA, TSLA, GOOGL, META, AMZN, TSM, PLTR, MRVL, SNDK, MU, INTC, HOOD, ARM, DELL y SPCX
Los ordena automáticamente según una combinación de movimiento porcentual, ADX y alineación. Muestra:
Precio.
Movimiento porcentual contra el cierre anterior.
ADX.
Above, Below, Inside o Cross respecto al día anterior.
Posición respecto al premarket.
Posición respecto al rango de 5 minutos.
RVOL de la vela contra las últimas 20 velas.
Tendencia Bull, Bear o Wait. Penunjuk

Penunjuk

Penunjuk

MTF Bull/Bear TableMTF Bull/Bear Table — Multi-Timeframe Confluence Scanner
OVERVIEW
This tool scans a custom watchlist of symbols across five timeframes at once
(5m, 15m, 1h, 4h, 1D) and displays the result as a single table, so you can
read directional confluence across your whole list at a glance instead of
flipping through charts one by one.
For each symbol/timeframe pair, the script classifies trend state as:
BULL — price is above both the fast MA and the slow MA
BEAR — price is below both the fast MA and the slow MA
NEUTRAL — price is on opposite sides of the two MAs (mixed signal)
By default the fast MA is a 20-period SMA and the slow MA is a 200-period
SMA, the classic short-term/long-term trend pair — price above both means
both timeframes agree the trend is up, price below both means they agree
it's down, and a mixed reading flags a timeframe that's transitioning or
consolidating. Both MA lengths are adjustable in the settings.
HOW TO READ THE TABLE
Each row is one symbol. Reading left to right:
TICKER the instrument
PRICE current live price (read from the daily context; it
updates in real time and is not a fixed daily close)
24H% / 1H% / 4H% percentage change since the last completed candle close
on that timeframe (daily / 1h / 4h respectively), colored
by sign. This is not a fixed rolling window — the actual
elapsed time varies depending on where price currently
sits within the still-forming candle (e.g. "24H%" can
reflect anywhere from a few minutes to nearly 24 hours
of movement, depending on the time of day).
5M / 15M / 1H / 4H / D trend state for each timeframe, color-coded:
green = BULL, red = BEAR, gray = NEUTRAL
Reading a row across the five timeframe columns shows you confluence at a
glance: five green cells is trend alignment from intraday noise all the way
up to the daily chart — a high-conviction directional read. A mix of colors
means timeframes disagree, which typically means either a transition in
progress or a level currently being tested.
This is a screening and context tool, not a standalone entry signal — it
tells you which timeframes agree and which don't, not where to place a
trade. Combine it with your own setup criteria (structure, volume, price
action) for actual entries.
SETTINGS
Symbols comma-separated list with full exchange prefix
(e.g. HYPERLIQUID:BTCUSDC.P). TradingView cannot read your
saved watchlist programmatically, so the list is entered
directly in the script settings.
Fast / Slow MA length default 20 / 200, adjustable
Table position corner of the chart the table is drawn in
Show price columns toggle price/change columns on or off
LIMITATIONS
TradingView caps every script at a fixed number of unique request.security()
calls — 40 on non-Pro plans, 64 on Pro/Expert/Ultimate. This script uses one
call per symbol per timeframe (5 timeframes), so the practical ceiling is
roughly 8 symbols on a non-Pro plan and ~12 on Pro. Trim the symbol list to
fit your plan; the script will show "N/A" for any symbol it fails to resolve
rather than breaking the whole table.
Percentage-change values for 24H/1H/4H are pulled from the same requests
already used for the trend classification, so they add no extra request
cost beyond the base 5-per-symbol. Penunjuk

TargetExcursionLibLibrary "TargetExcursionLib"
Parent supplies origin price/scale, direction, and path high/low/close series.
Library derives no hidden source data.
Returns bands.ready, bands.status, bands.effectiveSupport, and bands.resolvedCount.
Before minimum support: status is exactly "band stats not ready yet" and all band levels are na.
f_input(direction, originPrice, originScale, predictionValid, directionProbability, externalReliability)
Construct a generic target input from series values.
Parameters:
direction (int)
originPrice (float)
originScale (float)
predictionValid (bool)
directionProbability (float)
externalReliability (float)
f_model_new(gridSize, outcomeCap, smoothing, halfLife, family, shrinkageAlpha, minSupport, supportScale, minTransparency, maxTransparency, transparencyGamma)
Construct an independent stateful model instance.
Parameters:
gridSize (int)
outcomeCap (float)
smoothing (float)
halfLife (float)
family (series DensityFamily)
shrinkageAlpha (float)
minSupport (float)
supportScale (float)
minTransparency (int)
maxTransparency (int)
transparencyGamma (float)
f_update(model, signal, pathHigh, pathLow, pathClose, horizon, currentBar, confirmed)
Parameters:
model (TargetModel)
signal (TargetInput)
pathHigh (float)
pathLow (float)
pathClose (float)
horizon (int)
currentBar (int)
confirmed (bool)
TargetInput
Fields:
direction (series int)
originPrice (series float)
originScale (series float)
predictionValid (series bool)
directionProbability (series float)
externalReliability (series float)
TargetBands
Fields:
ready (series bool)
status (series string)
direction (series int)
originPrice (series float)
originScale (series float)
mfeQ10 (series float)
mfeQ50 (series float)
mfeQ80 (series float)
mfeQ90 (series float)
mfeMode (series float)
maeQ10 (series float)
maeQ50 (series float)
maeQ80 (series float)
maeQ90 (series float)
maeMode (series float)
mfePriceQ10 (series float)
mfePriceQ50 (series float)
mfePriceQ80 (series float)
mfePriceQ90 (series float)
mfePriceMode (series float)
maePriceQ10 (series float)
maePriceQ50 (series float)
maePriceQ80 (series float)
maePriceQ90 (series float)
maePriceMode (series float)
effectiveSupport (series float)
intervalCoverageEstimate (series float)
reliability (series float)
transparency (series int)
pendingCount (series int)
resolvedCount (series int)
lastResolvedBar (series int)
PendingTarget
Fields:
originBar (series int)
resolutionBar (series int)
direction (series int)
originPrice (series float)
originScale (series float)
maxHigh (series float)
minLow (series float)
TargetModel
Fields:
pending (array)
pooledMae (array)
pooledMfe (array)
longMae (array)
longMfe (array)
shortMae (array)
shortMfe (array)
pooledMaeWeight (series float)
pooledMaeWeightSq (series float)
pooledMfeWeight (series float)
pooledMfeWeightSq (series float)
longMaeWeight (series float)
longMaeWeightSq (series float)
longMfeWeight (series float)
longMfeWeightSq (series float)
shortMaeWeight (series float)
shortMaeWeightSq (series float)
shortMfeWeight (series float)
shortMfeWeightSq (series float)
gridSize (series int)
outcomeCap (series float)
smoothing (series float)
halfLife (series float)
family (series DensityFamily)
shrinkageAlpha (series float)
minSupport (series float)
supportScale (series float)
minTransparency (series int)
maxTransparency (series int)
transparencyGamma (series float)
lastDecayBar (series int)
lastResolvedBar (series int)
resolvedCount (series int) Perpustakaan

Clean EMA Pullback Indicator v6The Clean EMA Pullback Indicator v6 is a trend-following and pullback confirmation indicator designed for traders who want a simple, objective way to identify high-probability continuation trades. It combines moving average trend analysis, market structure, multi-timeframe confirmation, and price action into a single, easy-to-read indicator.
Unlike indicators that generate frequent signals, this script is designed to filter out lower-quality setups and only alert when multiple conditions align.
Features
📈 Trend Identification
Dynamic 200 EMA that changes color:
🟢 Green = Bullish trend
🔴 Red = Bearish trend
20 EMA Pullback Channel to identify retracement zones.
50 EMA for additional trend alignment and confirmation.
📊 Market Structure
Automatically identifies key swing structure:
Higher High (HH)
Higher Low (HL)
Lower High (LH)
Lower Low (LL)
This helps traders visually confirm whether the market is making bullish or bearish price structures.
🎯 Entry Signals
The indicator generates:
BUY signals after a confirmed bullish pullback and breakout.
SELL signals after a confirmed bearish pullback and breakdown.
Signals are based on trend direction, EMA alignment, pullback confirmation, and market structure—not simply moving average crossovers.
🔄 Optional Re-Entry Signals
Optional re-entry triangles identify opportunities to rejoin an existing trend after a healthy pullback, allowing traders to participate in continuation moves without chasing price.
🕯 Trend Candle Coloring
Candles are color-coded to quickly show whether momentum favors buyers or sellers, making trend recognition easier at a glance.
📋 Multi-Timeframe Dashboard
Displays trend direction for:
15 Minute
30 Minute
4 Hour
The dashboard also provides an overall alignment status:
✅ Strong Buy
✅ Strong Sell
⚠ Mixed
This helps traders avoid trading against higher-timeframe momentum.
📅 Previous Day Range
Plots:
Previous Day High
Previous Day Low
These levels often act as key support, resistance, breakout, or reversal areas.
📦 Trend-Filtered Fair Value Gaps (FVG)
Automatically highlights Fair Value Gaps that align with the current 200 EMA trend, helping traders focus on higher-probability imbalance zones while filtering out counter-trend gaps.
📏 ATR Trade Management
Built-in ATR-based trade management automatically plots:
Entry level
Stop Loss
Take Profit 1
Take Profit 2
This provides a consistent, rules-based framework for managing risk and reward.
Best Used For
Futures (MNQ, NQ, RTY, M2K, ES, MES, GC, MGC)
Forex
Stocks
ETFs
Cryptocurrency
Recommended for intraday trading on 1-minute, 3-minute, 5-minute, and 15-minute charts while using higher timeframes for trend confirmation.
Trading Philosophy
This indicator is built around a simple principle:
Trade with the trend, wait for the pullback, and enter only after the market confirms continuation.
Rather than predicting market direction, the script is designed to help traders remain patient, reduce emotional decision-making, and focus on disciplined, high-quality setups.
Disclaimer: This indicator is intended as a decision-support tool and should not be considered financial advice. Always practice sound risk management and test any strategy thoroughly before using it in a live trading environment. Penunjuk

SVKO CFD Symbol MapperSVKO CFD Symbol Mapper resolves broker CFD tickers to their native TradingView symbols and performs reverse lookups for compatible indicators. It provides one shared mapping source instead of duplicating mappings across companion scripts.
█ OVERVIEW
This is a visually silent helper indicator. It does not draw signals, levels, tables, or volume. It resolves the counterpart of the current chart symbol and transports that symbol to a receiving indicator.
█ HOW IT WORKS
The Mapper checks user supplied Symbol Mappings before its built in mappings. Each pair uses a complete TradingView ticker ID on both sides in this form:
TRADENATION:NVDA.EX = NASDAQ:NVDA
On a supported broker chart, the Mapper returns the native TradingView symbol. On a native TradingView chart, it performs the inverse lookup and returns the first matching CFD symbol.
Pine Script cannot pass a ticker string between indicators through `input.source()`. The Mapper therefore encodes the resolved ticker into two hidden numeric plots named 1st code and 2nd code . A compatible receiving indicator reads both plots and reconstructs the symbol.
█ HOW TO USE
1 — Add SVKO CFD Symbol Mapper to the chart.
2 — Add any required custom pairs to Symbol Mappings .
3 — Add a compatible receiving indicator.
4 — In that indicator, select Map: 1st code for its 1st code input and Map: 2nd code for its 2nd code input. Both selections must come from the same Mapper instance.
The Mapper remains visually silent after connection.
█ MAPPING BEHAVIOUR
Custom mappings take priority in both directions. If several CFD symbols point to the same native symbol, inverse lookup returns the first pair in mapping order.
Delayed native exchange suffixes _DL and _DLY are normalised before lookup. If no mapping exists, both code plots return zero.
The Mapper transports symbol identity only. It does not request price, volume, fundamentals, or other data from the resolved symbol.
█ LIMITATIONS
The transported ticker can contain at most 18 encoded characters. Supported characters are uppercase letters, digits, dash, colon, dot, and underscore. Unsupported characters produce a runtime error.
The receiving indicator is responsible for requesting and interpreting data from the transported symbol.
█ CREDITS AND LICENCE
Original work by SVKO. Published open source under the Mozilla Public License 2.0. Penunjuk

Penunjuk

Penunjuk

Sprung Ladder Signals v1//@version=6
indicator("Sprung Ladder Signals v1", "SLS", overlay=true)
// ---------- Inputs (set from the gear icon, no code edits needed) ----------
shelf = input.float(0.0, "Sprung Ladder shelf level (0 = off)")
springWindow = input.int(3, "Spring reclaim window (bars)", minval=1)
lvl1 = input.float(0.0, "Alert level 1 (0 = off)")
lvl2 = input.float(0.0, "Alert level 2 (0 = off)")
hlLen = input.int(2, "Higher-low pivot strength", minval=1)
hiLen = input.int(20, "Session-high lookback (bars)", minval=5)
// ---------- Webhook payload helper ----------
f_fire(ev) =>
alert('{"event":"' + ev + '","symbol":"' + syminfo.ticker + '","tf":"' + timeframe.period + '","price":' + str.tostring(close) + ',"t":' + str.tostring(timenow) + '}', alert.freq_once_per_bar_close)
// ---------- SWEEP: pokes below a defended shelf, closes back above ----------
sweep = shelf > 0 and low < shelf and close > shelf
var float sweepHigh = na
var int sweepBar = na
if sweep
sweepHigh := high
sweepBar := bar_index
// ---------- ta.* calls hoisted to globals so they run every bar (fixes CW10002) ----------
crossSweepHigh = ta.crossover(close, sweepHigh)
pl = ta.pivotlow(low, hlLen, hlLen)
recentHigh = ta.highest(high, hiLen)
crossRecent = ta.crossover(close, recentHigh)
crossLvl1 = ta.cross(close, lvl1)
crossLvl2 = ta.cross(close, lvl2)
// ---------- SPRING: reclaim of the sweep bar's high within the window ----------
spring = not na(sweepBar) and (bar_index - sweepBar) <= springWindow and crossSweepHigh
if spring
sweepBar := na
// ---------- HL_RECLAIM: shallow pullback holds above prior pivot low, breaks recent high ----------
var float lastPivotLow = na
if not na(pl)
lastPivotLow := pl
hlReclaim = not na(lastPivotLow) and low > lastPivotLow and crossRecent
// ---------- Visuals ----------
plotshape(sweep, "SWEEP", shape.triangleup, location.belowbar, color.orange, size=size.small)
plotshape(spring, "SPRING", shape.labelup, location.belowbar, color.green, size=size.small)
plotshape(hlReclaim, "HL_RECLAIM", shape.diamond, location.belowbar, color.aqua, size=size.tiny)
plot(shelf > 0 ? shelf : na, "Shelf", color.new(color.yellow, 30), 2, plot.style_linebr)
// ---------- Fire webhooks (one TV alert: 'Any alert() function call') ----------
if sweep
f_fire("SWEEP")
if spring
f_fire("SPRING")
if hlReclaim
f_fire("HL_RECLAIM")
if lvl1 > 0 and crossLvl1
f_fire("LEVEL1_HIT")
if lvl2 > 0 and crossLvl2
f_fire("LEVEL2_HIT") Penunjuk

Improved Options Confluence RSI Filter Backtest StrategyBest Settings
EMA -9
Chandlier Exit -10
Multiplier -3
Bos look back 1
For call entries RSI must be above -47
For put entries RSI must be below - 35
RSI Mid zone low 35
RSI Mid Zone High 47
Options Confluence + RSI Filter — Backtest Strategy
A multi-factor confluence strategy designed for intraday options trading (CALL/PUT), combining trend, momentum, and volatility-exhaustion filters to reduce false signals during sideways/choppy price action.
Core Logic
The strategy only enters a trade when all of the following align:
EMA (13) — price must be trading above/below the EMA in the direction of the trade
VWAP — price must also be above/below VWAP, confirming intraday value-area bias
Chandelier Exit — an ATR-based trend/volatility filter must confirm the same directional bias
Break of Structure (BOS) — price must break the recent swing high/low over a configurable lookback, confirming momentum
RSI Filter (added to reduce sideways whipsaws)
Three additional RSI-based conditions are layered on top of the core confluence:
Mid-zone block — entries are disabled entirely when RSI sits between 45-55, since this range is typically a sign of indecisive, range-bound price action with no real momentum.
Directional confirmation — CALL entries require RSI above 55; PUT entries require RSI below 45, ensuring momentum genuinely supports the trade direction.
Overbought/Oversold block — CALL entries are disabled when RSI is above 70 (overbought), and PUT entries are disabled when RSI is below 30 (oversold), avoiding entries into an already-extended move that's prone to mean-reversion.
Effectively, this narrows valid entries to two RSI bands: CALLs only between RSI 55-70, and PUTs only between RSI 30-45.
Exit Logic
Positions are closed when price crosses back below/above the EMA, or when the Chandelier Exit flips direction — whichever comes first.
Visual Aids
EMA and VWAP plotted on the price chart
Background highlighting for RSI mid-zone (sideways), overbought, and oversold conditions, so you can visually see why a trade was or wasn't taken
CALL/PUT/EXIT labels marked directly on the chart
Inputs (fully adjustable)
EMA length, Chandelier ATR period & multiplier, BOS lookback, RSI length, RSI bull/bear confirmation levels, RSI mid-zone bounds, RSI overbought/oversold levels — every filter can be toggled or tuned to fit different instruments and timeframes.
Intended Use
Built and tested on 5-minute index charts (e.g. Bank Nifty) for options directional trading. Best used as a decision-support tool alongside price action and option-chain context, not as a fully automated signal generator. As with any strategy, backtest thoroughly on your instrument and timeframe before live use, and note that past performance does not guarantee future results. Strategi

Live Price Pro Candle Timer & SL/TP DistanceThis indicator provides a clean, customizable information panel directly on your TradingView chart. It displays the current market price, the remaining time before the active candle closes, and the live distance from the current market price to your Entry, Take Profit, and Stop Loss levels.
It is especially useful for traders who want to monitor their trade levels without repeatedly calculating price distance manually.
Main features
Live market price display
Real-time countdown to candle close
Manual Entry, Take Profit, and Stop Loss inputs
Automatic distance calculation from the current market price
Distance display in:
Price
Points
Percentage
Price and points
Price and percentage
Bullish and bearish price colors
Dark or Bull/Bear background mode
Adjustable panel size
Full panel positioning across the chart
How to use the indicator
After adding the indicator to your chart, open the indicator settings.
Under Trade Levels, enter your planned:
Entry Price
Take Profit Price
Stop Loss Price
The panel will automatically calculate the distance between the current market price and each level.
For example:
Current Price: 4069.17
Entry: 4065.00
Distance: -4.17
Take Profit: 4080.00
Distance: +10.83
Stop Loss: 4060.00
Distance: -9.17
A positive value means the level is above the current market price. A negative value means the level is below the current market price.
Candle countdown
The candle timer shows the remaining time before the current candle closes.
The timer automatically adapts to the selected chart timeframe. For example:
On a 5-minute chart, it counts down to the next 5-minute candle.
On a 1-hour chart, it counts down to the next hourly candle.
On higher timeframes, it can display hours or days when required.
The timer uses the actual candle closing time provided by TradingView.
Distance modes
You can choose how the distance is displayed.
Price
Shows the direct price difference.
+10.83
Points
Shows the distance in minimum tick increments based on the symbol.
+1083 pts
Percentage
Shows the percentage difference from the current market price.
+0.27%
Price + Points
Shows both the price difference and point distance.
+10.83 | +1083 pts
Price + Percentage
Shows both the price difference and percentage distance.
+10.83 | +0.27%
Panel positioning
The panel can be placed in any of the following chart positions:
Top Left
Top Center
Top Right
Middle Left
Middle Center
Middle Right
Bottom Left
Bottom Center
Bottom Right
This allows the panel to be positioned away from candles, indicators, or other chart elements.
Customization
Users can customize:
Panel position
Panel size
Background mode
Background transparency
Bullish price color
Bearish price color
Entry color
Take Profit color
Stop Loss color
Timer and text color
Which panel rows are visible
Important notes
The Entry, Take Profit, and Stop Loss levels are entered manually. The indicator does not place, manage, or execute trades.
A value of 0 means that the selected trade level has not been configured.
Point values depend on the symbol’s minimum tick size. Therefore, the meaning of “points” may differ between gold, forex, indices, cryptocurrencies, and other markets.
The live price is based on the current chart price and may differ slightly from the executable bid or ask price shown by a broker.
Suitable for
This indicator can be used for:
Gold trading
Forex trading
Indices
Cryptocurrencies
Intraday trading
Scalping
Swing trading
Manual trade planning
Risk and target monitoring
Disclaimer
This indicator is intended for informational and educational purposes only. It does not provide financial advice, trade signals, or guaranteed results. Traders remain fully responsible for their own entries, exits, position sizing, and risk management. Penunjuk

Strategi

Percentage Risk Position Sizer (Bull/Bear Switch)Perfect for Prop Traders
Percentage Risk Position Sizer (Bull/Bear Switch)
An advanced, highly practical position sizing tool built specifically for day traders and futures traders who manage risk dynamically based on percentage allocation.
Customizable Multipliers: Supports configurable contract/tick multipliers for instruments like MNQ, NQ, MES, and ES.
Key Features:
Percentage-Based Risk Allocation: Easily switch between risk levels (e.g., 0.5%, 1%, 2%) tailored to your exact account size.
Automatic Candle High/Low Stop Loss: Instantly calculates risk parameters using the current candle's bottom (for Longs) or top (for Shorts).
Bull/Bear Toggle Switch: Simple input setting to flip between Buy (Bullish) and Sell (Bearish) modes instantly.
On-Chart Visuals & Labeling: Plots an extended stop loss line with a clean position size label positioned cleanly to the right to avoid chart clutter.
Real-Time Data Table: Displays total risk amount, exact position size, current stop loss level, and point distance directly in a clean top-right display table.
Inputs:
Trade Direction: Choose between Bullish (Long) and Bearish (Short).
Risk Percentage (%): Select your targeted risk per trade.
Account Size ($): Input your total account equity.
Contract/Tick Multiplier: Set your dollar value per point or tick.
Label Bar Offset: Adjust horizontal shifting to keep your live price bars completely unblocked. Penunjuk

Pocket Pivot (Kacher/Morales) - Customsdasd//@version=6
indicator("Pocket Pivot (Kacher/Morales) - Custom", overlay=true)
// ─────────────────────────────────────
// SETTINGS
// ─────────────────────────────────────
smaLength = input.int(
10,
title="SMA Length",
minval=1
)
maxOffset = input.float(
4.0,
title="Max % Offset from SMA",
minval=0.1,
step=0.1
)
lookback = input.int(
10,
title="Lookback Period (Trading Days)",
minval=1
)
// ─────────────────────────────────────
// SMA
// ─────────────────────────────────────
smaValue = ta.sma(close, smaLength)
// ─────────────────────────────────────
// BUY / SELL VOLUME
// Approximation:
// Bullish candle = Buy Volume
// Bearish candle = Sell Volume
// ─────────────────────────────────────
buyVolume = close > open ? volume : 0.0
sellVolume = close < open ? volume : 0.0
// ─────────────────────────────────────
// HIGHEST SELL VOLUME
// Previous 10 candles only
// Current candle is NOT included
// ─────────────────────────────────────
highestSellVolume = ta.highest(
sellVolume ,
lookback
)
// ─────────────────────────────────────
// PRICE DISTANCE FROM SMA
// ─────────────────────────────────────
percentOffset = math.abs(
close - smaValue
) / smaValue * 100
// Price is close enough to SMA
priceNearSMA = percentOffset <= maxOffset
// ─────────────────────────────────────
// POCKET PIVOT CONDITION
// ─────────────────────────────────────
volumeCondition = buyVolume > highestSellVolume
pocketPivot = volumeCondition and priceNearSMA
// ─────────────────────────────────────
// PLOT SMA
// ─────────────────────────────────────
plot(
smaValue,
title="SMA",
color=color.teal,
linewidth=2
)
// ─────────────────────────────────────
// MARK POCKET PIVOT
// ─────────────────────────────────────
plotshape(
pocketPivot,
title="Pocket Pivot",
style=shape.labelup,
location=location.belowbar,
color=color.green,
text="PP",
textcolor=color.white,
size=size.small
)
// ─────────────────────────────────────
// ALERT
// ─────────────────────────────────────
alertcondition(
pocketPivot,
title="Pocket Pivot Detected",
message="Pocket Pivot detected on {{ticker}}"
)//@version=6
indicator("Pocket Pivot (Kacher/Morales) - Custom", overlay=true)
// ─────────────────────────────────────
// SETTINGS
// ─────────────────────────────────────
smaLength = input.int(
10,
title="SMA Length",
minval=1
)
maxOffset = input.float(
4.0,
title="Max % Offset from SMA",
minval=0.1,
step=0.1
)
lookback = input.int(
10,
title="Lookback Period (Trading Days)",
minval=1
)
// ─────────────────────────────────────
// SMA
// ─────────────────────────────────────
smaValue = ta.sma(close, smaLength)
// ─────────────────────────────────────
// BUY / SELL VOLUME
// Approximation:
// Bullish candle = Buy Volume
// Bearish candle = Sell Volume
// ─────────────────────────────────────
buyVolume = close > open ? volume : 0.0
sellVolume = close < open ? volume : 0.0
// ─────────────────────────────────────
// HIGHEST SELL VOLUME
// Previous 10 candles only
// Current candle is NOT included
// ─────────────────────────────────────
highestSellVolume = ta.highest(
sellVolume ,
lookback
)
// ─────────────────────────────────────
// PRICE DISTANCE FROM SMA
// ─────────────────────────────────────
percentOffset = math.abs(
close - smaValue
) / smaValue * 100
// Price is close enough to SMA
priceNearSMA = percentOffset <= maxOffset
// ─────────────────────────────────────
// POCKET PIVOT CONDITION
// ─────────────────────────────────────
volumeCondition = buyVolume > highestSellVolume
pocketPivot = volumeCondition and priceNearSMA
// ─────────────────────────────────────
// PLOT SMA
// ─────────────────────────────────────
plot(
smaValue,
title="SMA",
color=color.teal,
linewidth=2
)
// ─────────────────────────────────────
// MARK POCKET PIVOT
// ─────────────────────────────────────
plotshape(
pocketPivot,
title="Pocket Pivot",
style=shape.labelup,
location=location.belowbar,
color=color.green,
text="PP",
textcolor=color.white,
size=size.small
)
// ─────────────────────────────────────
// ALERT
// ─────────────────────────────────────
alertcondition(
pocketPivot,
title="Pocket Pivot Detected",
message="Pocket Pivot detected on {{ticker}}"
) Penunjuk

Penunjuk

RS Line vs QQQ + Gap Finder// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © jacksonwarrenfenton
//@version=6
indicator("RS Line vs QQQ + Gap Finder", overlay=true, max_bars_back=5000, max_boxes_count=500)
// ─────────────────────────────────────────────
// RS LINE INPUTS
// ─────────────────────────────────────────────
displayRSData = input.bool(true, "Show RS Line", group="RS Line")
benchmarkSymbol = input.symbol("QQQ", "Benchmark ETF", group="RS Line")
iOffset = input.float(1.0, "RS Vertical Offset / Multiplier", step=0.01, group="RS Line")
iWidth = input.int(2, "RS Line Width", minval=1, maxval=5, group="RS Line")
ratioColor = input.color(color.blue, "RS Line Color", group="RS Line")
showRSDots = input.bool(true, "Show RS New High Circles", group="RS New High Signals")
// ─────────────────────────────────────────────
// RS LINE CALCULATION
// Stock you are on vs QQQ
// ─────────────────────────────────────────────
benchmarkClose = request.security(benchmarkSymbol, timeframe.period, close)
ratio = close / benchmarkClose
rsPlot = ratio * iOffset
// ─────────────────────────────────────────────
// RS NEW HIGH SIGNALS
// Daily chart: new 63-day RS high
// Weekly chart: new 12-week RS high
// These are independent from each other.
// ─────────────────────────────────────────────
isDailyRSNewHigh = timeframe.isdaily and ratio > ta.highest(ratio , 63)
isWeeklyRSNewHigh = timeframe.isweekly and ratio > ta.highest(ratio , 12)
rsNewHighSignal = isDailyRSNewHigh or isWeeklyRSNewHigh
// ─────────────────────────────────────────────
// PLOT RS LINE + BLUE CIRCLES
// ─────────────────────────────────────────────
plot(displayRSData ? rsPlot : na, color=ratioColor, linewidth=iWidth, title="RS Line")
plotshape(
showRSDots and displayRSData and rsNewHighSignal ? rsPlot : na,
title="RS New High Circle",
style=shape.circle,
location=location.absolute,
color=color.blue,
size=size.tiny
)
// =====================================================
// ============ SUPPORT/RESISTANCE GAP ZONES ===========
// =====================================================
supportColor = input.color(color.new(color.green, 88), "Support Zone Color (tested)", group="Gap Zones")
resistColor = input.color(color.new(color.red, 88), "Resistance Zone Color (tested)", group="Gap Zones")
untestedColor = input.color(color.new(color.gray, 70), "Untested Gap Color", group="Gap Zones")
borderColor = input.color(color.new(color.gray, 40), "Zone Border Color", group="Gap Zones")
limitVisible = input.bool(true, "Only show most recent zones per side", group="Gap Zones")
zonesPerSide = input.int(2, "Zones per side to show", minval=1, maxval=10, group="Gap Zones")
minGapPct = input.float(0.25, "Min Gap Size (% of price)", minval=0.0, step=0.05, group="Gap Zones")
//=====================================================
// ONE GAP DEFINITION, CLOSE-TO-LOW / CLOSE-TO-HIGH:
// Gap up (support): low > close -> zone [close .. low]
// Gap down (resistance): high < close -> zone [high .. close ]
// Must be at least minGapPct % of price.
//
// LIFECYCLE:
// Every gap SHOWS IMMEDIATELY, drawn GREY (untested) for BOTH support
// and resistance. Every day, regardless of tested status, while close
// is still within the zone's bounds:
// SHRINK: a close inside the zone pulls the near edge to that close
// (tightens only, never widens) -- higher closes eat into
// resistance from below, lower closes eat into support from
// above, whether or not the zone has been tested yet
// REMOVE: a close fully through the far edge deletes it
// Once close moves beyond the zone WITHOUT triggering removal (e.g. a
// support zone's top gets closed above without the bottom ever being
// broken), the zone simply stops updating -- it does not chase price.
// The ONLY thing "tested" controls is COLOR: once a LATER bar's wick
// tests back into the zone -- low <= top for support, high >= bottom
// for resistance -- it turns into a "drendel" gap and switches from
// grey to green/red. Shrink/remove behavior is identical before and
// after that switch.
//
// All detection/lifecycle runs on CONFIRMED bars only -- live intrabar
// prices never create, test, shrink, or delete anything.
//=====================================================
var box gaps = array.new_box()
var float tops = array.new_float()
var float bottoms = array.new_float()
var bool isSupport = array.new_bool()
var int gapKey = array.new_int()
var bool tested = array.new_bool() // false = grey/untested, true = drendel (green/red)
var int createdBar = array.new_int()
//=====================================================
// DETECTION (confirmed bars only)
//=====================================================
gapUp = barstate.isconfirmed and low > close and close != 0 and (low - close ) / close * 100 >= minGapPct
gapDown = barstate.isconfirmed and high < close and close != 0 and (close - high) / close * 100 >= minGapPct
if bar_index > 0
if gapUp
array.push(gaps, na)
array.push(tops, low)
array.push(bottoms, close )
array.push(isSupport, true)
array.push(gapKey, bar_index)
array.push(tested, false)
array.push(createdBar, bar_index)
if gapDown
array.push(gaps, na)
array.push(tops, close )
array.push(bottoms, high)
array.push(isSupport, false)
array.push(gapKey, bar_index)
array.push(tested, false)
array.push(createdBar, bar_index)
//=====================================================
// LIFECYCLE (confirmed bars only)
//=====================================================
n = array.size(gaps)
if barstate.isconfirmed and n > 0
idx = n - 1
while idx >= 0
zTop = array.get(tops, idx)
zBot = array.get(bottoms, idx)
createdOnThisBar = array.get(gapKey, idx) == bar_index
wasTested = array.get(tested, idx)
if not createdOnThisBar
if array.get(isSupport, idx)
if close < zBot
curBox = array.get(gaps, idx)
if not na(curBox)
box.delete(curBox)
array.remove(gaps, idx)
array.remove(tops, idx)
array.remove(bottoms, idx)
array.remove(isSupport, idx)
array.remove(gapKey, idx)
array.remove(tested, idx)
array.remove(createdBar, idx)
else
if not wasTested and low <= zTop
array.set(tested, idx, true)
if close <= zTop
curTop = array.get(tops, idx)
newTop = math.max(close, zBot)
if newTop != curTop
array.set(tops, idx, newTop)
curBox2 = array.get(gaps, idx)
if not na(curBox2)
box.set_top(curBox2, newTop)
else
if close > zTop
curBox = array.get(gaps, idx)
if not na(curBox)
box.delete(curBox)
array.remove(gaps, idx)
array.remove(tops, idx)
array.remove(bottoms, idx)
array.remove(isSupport, idx)
array.remove(gapKey, idx)
array.remove(tested, idx)
array.remove(createdBar, idx)
else
if not wasTested and high >= zBot
array.set(tested, idx, true)
if close >= zBot
curBot = array.get(bottoms, idx)
newBot = math.min(close, zTop)
if newBot != curBot
array.set(bottoms, idx, newBot)
curBox2 = array.get(gaps, idx)
if not na(curBox2)
box.set_bottom(curBox2, newBot)
idx -= 1
//=====================================================
// PERFORMANCE CAP -- bounds the array size so the lifecycle/visibility
// loops never keep growing unbounded over a long price history. We only
// ever need enough tracked gaps to find the most recent `zonesPerSide`
// per side, so once the total exceeds maxTracked, the oldest entries
// (front of the array, since pushes are chronological) get dropped.
//=====================================================
maxTracked = 50
n4 = array.size(gaps)
while n4 > maxTracked
oldBox = array.get(gaps, 0)
if not na(oldBox)
box.delete(oldBox)
array.remove(gaps, 0)
array.remove(tops, 0)
array.remove(bottoms, 0)
array.remove(isSupport, 0)
array.remove(gapKey, 0)
array.remove(tested, 0)
array.remove(createdBar, 0)
n4 -= 1
//=====================================================
// VISIBILITY PASS -- ranks purely by recency. Arrays stay chronological
// (oldest -> newest) since zones are only ever appended, so the most
// recent zones per side are the last ones hit scanning forward. Only the
// newest `zonesPerSide` per side (default 2 + 2 = 4 total) get a box;
// hidden ones surface as visible ones fill. Boxes extend 5 bars past the
// current bar; left edges stay anchored to the zone's formation bar.
// Color is recomputed every bar so a zone flips from grey to green/red
// the moment it gets tested. This pass is the ONLY place boxes are
// created, hidden, or recolored.
//=====================================================
n3 = array.size(gaps)
if n3 > 0
supTotal = 0
resTotal = 0
for i = 0 to n3 - 1
if array.get(isSupport, i)
supTotal += 1
else
resTotal += 1
supSeen = 0
resSeen = 0
for i = 0 to n3 - 1
side = array.get(isSupport, i)
if side
supSeen += 1
else
resSeen += 1
rankFromEnd = side ? (supTotal - supSeen) : (resTotal - resSeen) // 0 = most recent
shouldShow = not limitVisible or rankFromEnd < zonesPerSide
curBox = array.get(gaps, i)
hasBox = not na(curBox)
col2 = array.get(tested, i) ? (side ? supportColor : resistColor) : untestedColor
if shouldShow and not hasBox
top2 = array.get(tops, i)
bot2 = array.get(bottoms, i)
born2 = array.get(createdBar, i)
newBox = box.new(left=born2, top=top2, right=bar_index + 5, bottom=bot2, bgcolor=col2, border_color=borderColor)
array.set(gaps, i, newBox)
else if not shouldShow and hasBox
box.delete(curBox)
array.set(gaps, i, na)
else if shouldShow and hasBox
box.set_right(curBox, bar_index + 5)
box.set_bgcolor(curBox, col2) Penunjuk

Penunjuk

Penunjuk
