ADX Trend Strength Filter + TRAMA [DotGain]Summary
Are you tired of trading trend signals, only to get stopped out in volatile, sideways chop?
The ADX Trend Strength Filter (ADX TSF) is designed to solve this exact problem. It is a comprehensive trend-following system that only generates signals when a trend not only has the right direction and momentum, but also sufficient strength.
This indicator filters out weak or indecisive market phases (the "chop") and will only color the bars Green or Red when all conditions for a strong, confirmed trend are met.
⚙️ Core Components and Logic
The ADX TSF relies on a triple-filter logic to generate a clear trade signal:
Trend Filter (TRAMA): A TRAMA (Trending Adaptive Moving Average) is used as the main trendline. This adaptive average automatically adjusts to market volatility, acting as a dynamic support/resistance level.
Price > TRAMA = Bullish
Price < TRAMA = Bearish
Momentum Filter (RSI Crossover): Momentum is measured by a crossover of two moving averages of the RSI (a fast EMA and a slow SMA). This confirms whether the momentum is pointing in the same direction as the trend.
Strength Filter (ADX): This is the most important filter. A signal is only considered valid if the ADX (Average Directional Index) is above a defined threshold (Default: 30). This ensures the trend has sufficient strength.
🚦 How to Read the Indicator
The indicator has three states, displayed directly as bar colors on your chart:
🟩 GREEN BARS (Strong Uptrend) All three conditions are met:
Price is above the TRAMA.
RSI momentum is bullish (Fast MA > Slow MA).
ADX is above 30 (Strong trend is present).
🟥 RED BARS (Strong Downtrend) All three conditions are met:
Price is below the TRAMA.
RSI momentum is bearish (Fast MA < Slow MA).
ADX is above 30 (Strong trend is present).
🟧 ORANGE BARS (Neutral / Caution) This state appears if any of the following conditions are true:
Weak Trend: The ADX is below 30. The market is in consolidation or a sideways phase. (This is the primary filter!)
Indecision: The price is caught in the "Neutral Zone" between the TRAMA and the 200 SMA.
Visual Elements
Bar Colors: (Green/Red/Orange) Show the current trend status.
TRAMA (Orange Line): Your primary adaptive trendline.
200 SMA (White Line): Serves as a reference for the long-term trend.
Orange Background (Fill): Fills the area between the TRAMA and SMA to visually highlight the "Neutral Zone."
Key Benefit
The goal of the ADX TSF is to keep traders out of weak, unpredictable markets and help them participate only in strong, momentum-confirmed trends.
Have fun :)
Disclaimer
This "Buy The F*cking Dip" (BTFD) indicator is provided for informational and educational purposes only. It does not, and should not be construed as, financial, investment, or trading advice.
The signals generated by this tool (both "Buy" and "Sell") are the result of a specific set of algorithmic conditions. They are not a direct recommendation to buy or sell any asset. All trading and investing in financial markets involves substantial risk of loss. You can lose all of your invested capital.
Past performance is not indicative of future results. The signals generated may produce false or losing trades. The creator (© DotGain) assumes no liability for any financial losses or damages you may incur as a result of using this indicator.
You are solely responsible for your own trading and investment decisions. Always conduct your own research (DYOR) and consider your personal risk tolerance before making any trades.
Indicators and strategies
OTHERS Power-Law Support 2025OTHERS Power-Law Calculation by Robert.
I took the BTC-Power-Law & Decay-Top and applied it to the OTHERS index.
This indicator is very experimental/in an early state.
Disclaimer: This is my own calculation and no investing advice! Use at your own risk.
RSI BandsPlots adaptive ATR bands around the 27-EMA to approximate RSI overbought and oversold zones directly on price. Provides a clean visual reference for RSI-like extremes without displaying the RSI itself.
BullTrader - ParabolicSARFlipSignals(NonRepainting)🧠 Concept & Purpose
This indicator isolates the confirmed trend‑change events produced by the Parabolic SAR and turns them into direct, non‑repainting trade signals.
Instead of plotting every SAR dot as a potential entry, it marks only the bars where price has closed across the SAR line, confirming a genuine flip from bullish → bearish or vice versa.
Each confirmed flip is displayed with a single triangle on the chart and can be connected to alerts.
The design is intentionally minimal: one simple but reliable algorithmic definition of “the trend just turned.”
⚙️ How It Works
1. The script calculates the standard Parabolic SAR value using the built‑in ta.sar() function.
2. When a candle closes above a SAR dot that was previously above price → uptrend starts (Buy Signal).
3. When a candle closes below a SAR dot that was previously below price → downtrend starts (Sell Signal).
4. Signals are confirmed only after the bar closes (barstate.isconfirmed), guaranteeing no repainting.
5. Each event can trigger an alert or simply serve as a visual reversal marker.
📈 Chart Elements
Element Description
🟠 Orange cross dots Standard Parabolic SAR trail.
🟢 Triangle below bar Confirmed SAR flip up → new bullish phase.
🔴 Triangle above bar Confirmed SAR flip down → new bearish phase.
Optional green/red background Highlights bars where a confirmed flip occurred.
🔔 Alerts
Use buySignalFinal for Buy alerts and sellSignalFinal for Sell alerts.
Set alerts to “Once per bar close” to match the non‑repainting confirmation logic.
📊 Best Use
* Identifying clear trend reversals.
* As an entry / exit overlay for manual trading.
* As a base signal for automated or alert‑driven systems.
This version keeps the indicator fast, reproducible, and completely non‑repainting — ideal for traders who prefer transparent and verifiable signals derived directly from Per J. Wilder’s original Parabolic SAR formula.
ADR levels+// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © notprofessorgreen
//@version=5
indicator("ADR levels", shorttitle = 'ADR', overlay=true, max_bars_back=5000, max_lines_count=500)
// Error catching
if (timeframe.in_seconds() >= timeframe.in_seconds('D'))
runtime.error('Timeframe cannot be greater than Daily')
// Inputs
adr_days = input.int(10, title = 'Days', maxval=250, minval = 1)
std_x = input.float(1.0, "Scale Factor")
width = input.int(1, "Line Width")
// ADR line inputs
adr_color = input.color(color.gray, "ADR Color")
adr_style = input.string("solid", "ADR Style", options= )
// Standard deviation inputs
std_dev_0_5 = input.float(0.5, "Std Dev 1 Multiplier", minval=0.1, maxval=5.0)
std_0_5_show = input.bool(true, "Show Std Dev 1", inline="std1")
std_0_5_color = input.color(color.gray, "Std Dev 1 Color", inline="std1")
std_0_5_style = input.string("dotted", "Std Dev 1 Style", options= , inline="std1")
std_dev_1 = input.float(1.0, "Std Dev 2 Multiplier", minval=0.1, maxval=5.0)
std_1_show = input.bool(true, "Show Std Dev 2", inline="std2")
std_1_color = input.color(color.gray, "Std Dev 2 Color", inline="std2")
std_1_style = input.string("dotted", "Std Dev 2 Style", options= , inline="std2")
std_dev_2 = input.float(2.0, "Std Dev 3 Multiplier", minval=0.1, maxval=5.0)
std_2_show = input.bool(true, "Show Std Dev 3", inline="std3")
std_2_color = input.color(color.gray, "Std Dev 3 Color", inline="std3")
std_2_style = input.string("dotted", "Std Dev 3 Style", options= , inline="std3")
// Fibonacci inputs
fib_1_level = input.float(0.3, "Fib Level 1", minval=0, maxval=2.0)
fib_1_show = input.bool(true, "Show Fib 1", inline="fib1")
fib_1_color = input.color(color.blue, "Fib 1 Color", inline="fib1")
fib_1_style = input.string("dashed", "Fib 1 Style", options= , inline="fib1")
fib_2_level = input.float(0.5, "Fib Level 2", minval=0, maxval=2.0)
fib_2_show = input.bool(true, "Show Fib 2", inline="fib2")
fib_2_color = input.color(color.blue, "Fib 2 Color", inline="fib2")
fib_2_style = input.string("dashed", "Fib 2 Style", options= , inline="fib2")
fib_3_level = input.float(0.7, "Fib Level 3", minval=0, maxval=2.0)
fib_3_show = input.bool(true, "Show Fib 3", inline="fib3")
fib_3_color = input.color(color.blue, "Fib 3 Color", inline="fib3")
fib_3_style = input.string("dashed", "Fib 3 Style", options= , inline="fib3")
show_labels = input.bool(true, "Show Labels")
// Stats table inputs
show_stats = input.bool(true, "Show Table")
sample_size = input.bool(true, "Show Sample Sizes")
tbl_loc = input.string('Bottom Right', "Table", options = )
tbl_size = input.string('Tiny', "", options = )
rch_color = input.color(color.rgb(3, 131, 99, 70), "Reached ")
csd_color = input.color(color.rgb(127, 1, 185, 70), "Closed Through ")
// Function to convert style string to line style
get_line_style(string style) =>
switch style
"solid" => line.style_solid
"dashed" => line.style_dashed
"dotted" => line.style_dotted
// Variables
reset = session.islastbar_regular
var float track_highs = 0.00
var float track_lows = 0.00
var float today_adr = 0.00
var adrs = array.new_float(adr_days, 0.00)
var line adr_pos = na
var line adr_neg = na
var line fib_1_pos = na
var line fib_1_neg = na
var line fib_2_pos = na
var line fib_2_neg = na
var line fib_3_pos = na
var line fib_3_neg = na
var line std_0_5_pos = na
var line std_0_5_neg = na
var line std_1_pos = na
var line std_1_neg = na
var line std_2_pos = na
var line std_2_neg = na
var label fib_1_pos_lbl = na
var label fib_1_neg_lbl = na
var label fib_2_pos_lbl = na
var label fib_2_neg_lbl = na
var label fib_3_pos_lbl = na
var label fib_3_neg_lbl = na
var label adr_pos_lbl = na
var label adr_neg_lbl = na
var label std_0_5_pos_lbl = na
var label std_0_5_neg_lbl = na
var label std_1_pos_lbl = na
var label std_1_neg_lbl = na
var label std_2_pos_lbl = na
var label std_2_neg_lbl = na
// ADR calculation
track_highs := reset ? high : math.max(high, track_highs )
track_lows := reset ? low : math.min(low, track_lows )
if reset
array.unshift(adrs, math.round_to_mintick(track_highs - track_lows ))
if array.size(adrs) > adr_days
array.pop(adrs)
today_adr := math.round_to_mintick(array.avg(adrs))
// Delete previous lines and labels
line.delete(adr_pos )
line.delete(adr_neg )
line.delete(fib_1_pos )
line.delete(fib_1_neg )
line.delete(fib_2_pos )
line.delete(fib_2_neg )
line.delete(fib_3_pos )
line.delete(fib_3_neg )
line.delete(std_0_5_pos )
line.delete(std_0_5_neg )
line.delete(std_1_pos )
line.delete(std_1_neg )
line.delete(std_2_pos )
line.delete(std_2_neg )
label.delete(fib_1_pos_lbl )
label.delete(fib_1_neg_lbl )
label.delete(fib_2_pos_lbl )
label.delete(fib_2_neg_lbl )
label.delete(fib_3_pos_lbl )
label.delete(fib_3_neg_lbl )
label.delete(adr_pos_lbl )
label.delete(adr_neg_lbl )
label.delete(std_0_5_pos_lbl )
label.delete(std_0_5_neg_lbl )
label.delete(std_1_pos_lbl )
label.delete(std_1_neg_lbl )
label.delete(std_2_pos_lbl )
label.delete(std_2_neg_lbl )
// Draw ADR lines
adr_pos := line.new(bar_index, open + today_adr, bar_index+50, open + today_adr,
width=width, color=adr_color, style=get_line_style(adr_style))
adr_neg := line.new(bar_index, open - today_adr, bar_index+50, open - today_adr,
width=width, color=adr_color, style=get_line_style(adr_style))
// Draw ADR labels
if show_labels
adr_pos_lbl := label.new(bar_index+50, open + today_adr, "ADR High (" + str.tostring(adr_days) + "D)",
xloc=xloc.bar_index, textalign=text.align_left, textcolor=adr_color, color=color.new(color.blue, 90), style=label.style_none)
adr_neg_lbl := label.new(bar_index+50, open - today_adr, "ADR Low (" + str.tostring(adr_days) + "D)",
xloc=xloc.bar_index, textalign=text.align_left, textcolor=adr_color, color=color.new(color.red, 90), style=label.style_none)
// Calculate deviations
var float half_dev = na
var float one_dev = na
var float two_dev = na
half_dev := today_adr * std_dev_0_5
one_dev := today_adr * std_dev_1
two_dev := today_adr * std_dev_2
// Draw standard deviation lines (with show/hide options)
if std_0_5_show
std_0_5_pos := line.new(bar_index, (open + today_adr) + half_dev, bar_index+50, (open + today_adr) + half_dev,
width=width, color=std_0_5_color, style=get_line_style(std_0_5_style))
std_0_5_neg := line.new(bar_index, (open - today_adr) - half_dev, bar_index+50, (open - today_adr) - half_dev,
width=width, color=std_0_5_color, style=get_line_style(std_0_5_style))
if show_labels
std_0_5_pos_lbl := label.new(bar_index+50, (open + today_adr) + half_dev, "Std " + str.tostring(std_dev_0_5),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=std_0_5_color, color=color.new(#000000,100), style=label.style_none)
std_0_5_neg_lbl := label.new(bar_index+50, (open - today_adr) - half_dev, "Std -" + str.tostring(std_dev_0_5),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=std_0_5_color, color=color.new(#000000,100), style=label.style_none)
if std_1_show
std_1_pos := line.new(bar_index, (open + today_adr) + one_dev, bar_index+50, (open + today_adr) + one_dev,
width=width, color=std_1_color, style=get_line_style(std_1_style))
std_1_neg := line.new(bar_index, (open - today_adr) - one_dev, bar_index+50, (open - today_adr) - one_dev,
width=width, color=std_1_color, style=get_line_style(std_1_style))
if show_labels
std_1_pos_lbl := label.new(bar_index+50, (open + today_adr) + one_dev, "Std " + str.tostring(std_dev_1),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=std_1_color, color=color.new(#000000,100), style=label.style_none)
std_1_neg_lbl := label.new(bar_index+50, (open - today_adr) - one_dev, "Std -" + str.tostring(std_dev_1),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=std_1_color, color=color.new(#000000,100), style=label.style_none)
if std_2_show
std_2_pos := line.new(bar_index, (open + today_adr) + two_dev, bar_index+50, (open + today_adr) + two_dev,
width=width, color=std_2_color, style=get_line_style(std_2_style))
std_2_neg := line.new(bar_index, (open - today_adr) - two_dev, bar_index+50, (open - today_adr) - two_dev,
width=width, color=std_2_color, style=get_line_style(std_2_style))
if show_labels
std_2_pos_lbl := label.new(bar_index+50, (open + today_adr) + two_dev, "Std " + str.tostring(std_dev_2),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=std_2_color, color=color.new(#000000,100), style=label.style_none)
std_2_neg_lbl := label.new(bar_index+50, (open - today_adr) - two_dev, "Std -" + str.tostring(std_dev_2),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=std_2_color, color=color.new(#000000,100), style=label.style_none)
// Draw Fibonacci lines
if fib_1_show
fib_1_pos := line.new(bar_index, open + today_adr * fib_1_level, bar_index+50, open + today_adr * fib_1_level,
width=width, color=fib_1_color, style=get_line_style(fib_1_style))
fib_1_neg := line.new(bar_index, open - today_adr * fib_1_level, bar_index+50, open - today_adr * fib_1_level,
width=width, color=fib_1_color, style=get_line_style(fib_1_style))
if show_labels
fib_1_pos_lbl := label.new(bar_index+50, open + today_adr * fib_1_level, "Fib " + str.tostring(fib_1_level),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=fib_1_color, color=color.new(#000000,100), style=label.style_none)
fib_1_neg_lbl := label.new(bar_index+50, open - today_adr * fib_1_level, "Fib -" + str.tostring(fib_1_level),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=fib_1_color, color=color.new(#000000,100), style=label.style_none)
if fib_2_show
fib_2_pos := line.new(bar_index, open + today_adr * fib_2_level, bar_index+50, open + today_adr * fib_2_level,
width=width, color=fib_2_color, style=get_line_style(fib_2_style))
fib_2_neg := line.new(bar_index, open - today_adr * fib_2_level, bar_index+50, open - today_adr * fib_2_level,
width=width, color=fib_2_color, style=get_line_style(fib_2_style))
if show_labels
fib_2_pos_lbl := label.new(bar_index+50, open + today_adr * fib_2_level, "Fib " + str.tostring(fib_2_level),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=fib_2_color, color=color.new(#000000,100), style=label.style_none)
fib_2_neg_lbl := label.new(bar_index+50, open - today_adr * fib_2_level, "Fib -" + str.tostring(fib_2_level),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=fib_2_color, color=color.new(#000000,100), style=label.style_none)
if fib_3_show
fib_3_pos := line.new(bar_index, open + today_adr * fib_3_level, bar_index+50, open + today_adr * fib_3_level,
width=width, color=fib_3_color, style=get_line_style(fib_3_style))
fib_3_neg := line.new(bar_index, open - today_adr * fib_3_level, bar_index+50, open - today_adr * fib_3_level,
width=width, color=fib_3_color, style=get_line_style(fib_3_style))
if show_labels
fib_3_pos_lbl := label.new(bar_index+50, open + today_adr * fib_3_level, "Fib " + str.tostring(fib_3_level),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=fib_3_color, color=color.new(#000000,100), style=label.style_none)
fib_3_neg_lbl := label.new(bar_index+50, open - today_adr * fib_3_level, "Fib -" + str.tostring(fib_3_level),
xloc=xloc.bar_index, textalign=text.align_left, textcolor=fib_3_color, color=color.new(#000000,100), style=label.style_none)
else
today_adr := today_adr
line.set_x2(adr_pos, bar_index+50)
line.set_x2(adr_neg, bar_index+50)
if show_labels
label.set_x(adr_pos_lbl, bar_index+50)
label.set_x(adr_neg_lbl, bar_index+50)
if std_0_5_show
line.set_x2(std_0_5_pos, bar_index+50)
line.set_x2(std_0_5_neg, bar_index+50)
if show_labels
label.set_x(std_0_5_pos_lbl, bar_index+50)
label.set_x(std_0_5_neg_lbl, bar_index+50)
if std_1_show
line.set_x2(std_1_pos, bar_index+50)
line.set_x2(std_1_neg, bar_index+50)
if show_labels
label.set_x(std_1_pos_lbl, bar_index+50)
label.set_x(std_1_neg_lbl, bar_index+50)
if std_2_show
line.set_x2(std_2_pos, bar_index+50)
line.set_x2(std_2_neg, bar_index+50)
if show_labels
label.set_x(std_2_pos_lbl, bar_index+50)
label.set_x(std_2_neg_lbl, bar_index+50)
if fib_1_show
line.set_x2(fib_1_pos, bar_index+50)
line.set_x2(fib_1_neg, bar_index+50)
if show_labels
label.set_x(fib_1_pos_lbl, bar_index+50)
label.set_x(fib_1_neg_lbl, bar_index+50)
if fib_2_show
line.set_x2(fib_2_pos, bar_index+50)
line.set_x2(fib_2_neg, bar_index+50)
if show_labels
label.set_x(fib_2_pos_lbl, bar_index+50)
label.set_x(fib_2_neg_lbl, bar_index+50)
if fib_3_show
line.set_x2(fib_3_pos, bar_index+50)
line.set_x2(fib_3_neg, bar_index+50)
if show_labels
label.set_x(fib_3_pos_lbl, bar_index+50)
label.set_x(fib_3_neg_lbl, bar_index+50)
// Stats calculation
var float d_hi = high
var float d_lo = low
var float d_open = open
var float d_range = array.new_float()
var float adr_val = na
var float d_adr_hi = na
var float d_adr_lo = na
type adr_stats
int hit_adr_hi = 0
int hit_adr_lo = 0
int hit_adr_both = 0
int thru_adr_hi = 0
int thru_adr_lo = 0
int hit_fib_1_hi = 0
int hit_fib_1_lo = 0
int hit_fib_2_hi = 0
int hit_fib_2_lo = 0
int hit_fib_3_hi = 0
int hit_fib_3_lo = 0
int hit_std_0_5_hi = 0
int hit_std_0_5_lo = 0
int hit_std_1_hi = 0
int hit_std_1_lo = 0
int hit_std_2_hi = 0
int hit_std_2_lo = 0
int d_count = 0
var adr_sun = adr_stats.new()
var adr_mon = adr_stats.new()
var adr_tue = adr_stats.new()
var adr_wed = adr_stats.new()
var adr_thu = adr_stats.new()
var adr_fri = adr_stats.new()
var adr_sat = adr_stats.new()
if timeframe.change("D")
x = adr_mon
dow = dayofweek(time , "America/New_York")
if dow == dayofweek.tuesday
x := adr_tue
else if dow == dayofweek.wednesday
x := adr_wed
else if dow == dayofweek.thursday
x := adr_thu
else if dow == dayofweek.friday
x := adr_fri
else if dow == dayofweek.saturday
x := adr_sat
else if dow == dayofweek.sunday
x := adr_sun
if not na(adr_val)
x.d_count += 1
if d_hi > d_adr_hi
x.hit_adr_hi += 1
if d_lo < d_adr_lo
x.hit_adr_lo += 1
if d_hi > d_adr_hi and d_lo < d_adr_lo
x.hit_adr_both += 1
if close > d_adr_hi
x.thru_adr_hi += 1
if close < d_adr_lo
x.thru_adr_lo += 1
if fib_1_show
if d_hi > d_open + (adr_val * fib_1_level)
x.hit_fib_1_hi += 1
if d_lo < d_open - (adr_val * fib_1_level)
x.hit_fib_1_lo += 1
if fib_2_show
if d_hi > d_open + (adr_val * fib_2_level)
x.hit_fib_2_hi += 1
if d_lo < d_open - (adr_val * fib_2_level)
x.hit_fib_2_lo += 1
if fib_3_show
if d_hi > d_open + (adr_val * fib_3_level)
x.hit_fib_3_hi += 1
if d_lo < d_open - (adr_val * fib_3_level)
x.hit_fib_3_lo += 1
if std_0_5_show
if d_hi > d_adr_hi + (adr_val * std_dev_0_5)
x.hit_std_0_5_hi += 1
if d_lo < d_adr_lo - (adr_val * std_dev_0_5)
x.hit_std_0_5_lo += 1
if std_1_show
if d_hi > d_adr_hi + (adr_val * std_dev_1)
x.hit_std_1_hi += 1
if d_lo < d_adr_lo - (adr_val * std_dev_1)
x.hit_std_1_lo += 1
if std_2_show
if d_hi > d_adr_hi + (adr_val * std_dev_2)
x.hit_std_2_hi += 1
if d_lo < d_adr_lo - (adr_val * std_dev_2)
x.hit_std_2_lo += 1
if timeframe.change("D")
d_open := open
array.unshift(d_range, d_hi - d_lo)
if array.size(d_range) > adr_days
array.pop(d_range)
if array.size(d_range) == adr_days
adr_val := array.avg(d_range)
d_adr_hi := open + (adr_val*std_x)/2
d_adr_lo := open - (adr_val*std_x)/2
d_hi := high
d_lo := low
else
d_hi := math.max(high, d_hi)
d_lo := math.min(low, d_lo)
// Table functions
get_table_pos(pos) =>
switch pos
"Bottom Center" => position.bottom_center
"Bottom Left" => position.bottom_left
"Bottom Right" => position.bottom_right
"Middle Center" => position.middle_center
"Middle Left" => position.middle_left
"Middle Right" => position.middle_right
"Top Center" => position.top_center
"Top Left" => position.top_left
"Top Right" => position.top_right
var _loc = get_table_pos(tbl_loc)
get_table_size(size) =>
switch size
'Tiny' => size.tiny
'Small' => size.small
'Normal' => size.normal
'Large' => size.large
'Huge' => size.huge
'Auto' => size.auto
var _size = get_table_size(tbl_size)
fmt_sample(s, float pct, int count) =>
str.format("{0,number,percent}", pct) + (sample_size ? " ("+str.tostring(count)+")" : "")
// Draw table
if barstate.islast and show_stats
var tbl = table.new(_loc, 100, 100, chart.bg_color, chart.fg_color, 2, chart.fg_color, 1)
// Column headers (days + empty first cell)
table.cell(tbl, 0, 0, "Level", text_size = _size)
table.cell(tbl, 1, 0, "Mon", bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, 0, "Tue", bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, 0, "Wed", bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, 0, "Thu", bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, 0, "Fri", bgcolor = rch_color, text_size = _size)
// Row headers and data
var row = 1
table.cell(tbl, 0, row, "ADR High", text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_adr_hi / adr_mon.d_count, adr_mon.hit_adr_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_adr_hi / adr_tue.d_count, adr_tue.hit_adr_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_adr_hi / adr_wed.d_count, adr_wed.hit_adr_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_adr_hi / adr_thu.d_count, adr_thu.hit_adr_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_adr_hi / adr_fri.d_count, adr_fri.hit_adr_hi), bgcolor = rch_color, text_size = _size)
row := row + 1
table.cell(tbl, 0, row, "ADR Low", text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_adr_lo / adr_mon.d_count, adr_mon.hit_adr_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_adr_lo / adr_tue.d_count, adr_tue.hit_adr_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_adr_lo / adr_wed.d_count, adr_wed.hit_adr_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_adr_lo / adr_thu.d_count, adr_thu.hit_adr_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_adr_lo / adr_fri.d_count, adr_fri.hit_adr_lo), bgcolor = rch_color, text_size = _size)
row := row + 1
table.cell(tbl, 0, row, "ADR High (Close)", text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.thru_adr_hi / adr_mon.d_count, adr_mon.thru_adr_hi), bgcolor = csd_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.thru_adr_hi / adr_tue.d_count, adr_tue.thru_adr_hi), bgcolor = csd_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.thru_adr_hi / adr_wed.d_count, adr_wed.thru_adr_hi), bgcolor = csd_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.thru_adr_hi / adr_thu.d_count, adr_thu.thru_adr_hi), bgcolor = csd_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.thru_adr_hi / adr_fri.d_count, adr_fri.thru_adr_hi), bgcolor = csd_color, text_size = _size)
row := row + 1
table.cell(tbl, 0, row, "ADR Low (Close)", text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.thru_adr_lo / adr_mon.d_count, adr_mon.thru_adr_lo), bgcolor = csd_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.thru_adr_lo / adr_tue.d_count, adr_tue.thru_adr_lo), bgcolor = csd_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.thru_adr_lo / adr_wed.d_count, adr_wed.thru_adr_lo), bgcolor = csd_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.thru_adr_lo / adr_thu.d_count, adr_thu.thru_adr_lo), bgcolor = csd_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.thru_adr_lo / adr_fri.d_count, adr_fri.thru_adr_lo), bgcolor = csd_color, text_size = _size)
row := row + 1
if fib_1_show
table.cell(tbl, 0, row, "Fib " + str.tostring(fib_1_level), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_fib_1_hi / adr_mon.d_count, adr_mon.hit_fib_1_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_fib_1_hi / adr_tue.d_count, adr_tue.hit_fib_1_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_fib_1_hi / adr_wed.d_count, adr_wed.hit_fib_1_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_fib_1_hi / adr_thu.d_count, adr_thu.hit_fib_1_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_fib_1_hi / adr_fri.d_count, adr_fri.hit_fib_1_hi), bgcolor = rch_color, text_size = _size)
row := row + 1
table.cell(tbl, 0, row, "Fib -" + str.tostring(fib_1_level), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_fib_1_lo / adr_mon.d_count, adr_mon.hit_fib_1_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_fib_1_lo / adr_tue.d_count, adr_tue.hit_fib_1_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_fib_1_lo / adr_wed.d_count, adr_wed.hit_fib_1_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_fib_1_lo / adr_thu.d_count, adr_thu.hit_fib_1_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_fib_1_lo / adr_fri.d_count, adr_fri.hit_fib_1_lo), bgcolor = rch_color, text_size = _size)
row := row + 1
if fib_2_show
table.cell(tbl, 0, row, "Fib " + str.tostring(fib_2_level), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_fib_2_hi / adr_mon.d_count, adr_mon.hit_fib_2_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_fib_2_hi / adr_tue.d_count, adr_tue.hit_fib_2_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_fib_2_hi / adr_wed.d_count, adr_wed.hit_fib_2_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_fib_2_hi / adr_thu.d_count, adr_thu.hit_fib_2_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_fib_2_hi / adr_fri.d_count, adr_fri.hit_fib_2_hi), bgcolor = rch_color, text_size = _size)
row := row + 1
table.cell(tbl, 0, row, "Fib -" + str.tostring(fib_2_level), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_fib_2_lo / adr_mon.d_count, adr_mon.hit_fib_2_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_fib_2_lo / adr_tue.d_count, adr_tue.hit_fib_2_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_fib_2_lo / adr_wed.d_count, adr_wed.hit_fib_2_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_fib_2_lo / adr_thu.d_count, adr_thu.hit_fib_2_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_fib_2_lo / adr_fri.d_count, adr_fri.hit_fib_2_lo), bgcolor = rch_color, text_size = _size)
row := row + 1
if fib_3_show
table.cell(tbl, 0, row, "Fib " + str.tostring(fib_3_level), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_fib_3_hi / adr_mon.d_count, adr_mon.hit_fib_3_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_fib_3_hi / adr_tue.d_count, adr_tue.hit_fib_3_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_fib_3_hi / adr_wed.d_count, adr_wed.hit_fib_3_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_fib_3_hi / adr_thu.d_count, adr_thu.hit_fib_3_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_fib_3_hi / adr_fri.d_count, adr_fri.hit_fib_3_hi), bgcolor = rch_color, text_size = _size)
row := row + 1
table.cell(tbl, 0, row, "Fib -" + str.tostring(fib_3_level), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_fib_3_lo / adr_mon.d_count, adr_mon.hit_fib_3_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_fib_3_lo / adr_tue.d_count, adr_tue.hit_fib_3_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_fib_3_lo / adr_wed.d_count, adr_wed.hit_fib_3_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_fib_3_lo / adr_thu.d_count, adr_thu.hit_fib_3_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_fib_3_lo / adr_fri.d_count, adr_fri.hit_fib_3_lo), bgcolor = rch_color, text_size = _size)
row := row + 1
if std_0_5_show
table.cell(tbl, 0, row, "Std " + str.tostring(std_dev_0_5), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_std_0_5_hi / adr_mon.d_count, adr_mon.hit_std_0_5_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_std_0_5_hi / adr_tue.d_count, adr_tue.hit_std_0_5_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_std_0_5_hi / adr_wed.d_count, adr_wed.hit_std_0_5_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_std_0_5_hi / adr_thu.d_count, adr_thu.hit_std_0_5_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_std_0_5_hi / adr_fri.d_count, adr_fri.hit_std_0_5_hi), bgcolor = rch_color, text_size = _size)
row := row + 1
table.cell(tbl, 0, row, "Std -" + str.tostring(std_dev_0_5), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_std_0_5_lo / adr_mon.d_count, adr_mon.hit_std_0_5_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_std_0_5_lo / adr_tue.d_count, adr_tue.hit_std_0_5_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_std_0_5_lo / adr_wed.d_count, adr_wed.hit_std_0_5_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_std_0_5_lo / adr_thu.d_count, adr_thu.hit_std_0_5_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_std_0_5_lo / adr_fri.d_count, adr_fri.hit_std_0_5_lo), bgcolor = rch_color, text_size = _size)
row := row + 1
if std_1_show
table.cell(tbl, 0, row, "Std " + str.tostring(std_dev_1), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_std_1_hi / adr_mon.d_count, adr_mon.hit_std_1_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_std_1_hi / adr_tue.d_count, adr_tue.hit_std_1_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_std_1_hi / adr_wed.d_count, adr_wed.hit_std_1_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_std_1_hi / adr_thu.d_count, adr_thu.hit_std_1_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_std_1_hi / adr_fri.d_count, adr_fri.hit_std_1_hi), bgcolor = rch_color, text_size = _size)
row := row + 1
table.cell(tbl, 0, row, "Std -" + str.tostring(std_dev_1), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_std_1_lo / adr_mon.d_count, adr_mon.hit_std_1_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_std_1_lo / adr_tue.d_count, adr_tue.hit_std_1_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_std_1_lo / adr_wed.d_count, adr_wed.hit_std_1_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_std_1_lo / adr_thu.d_count, adr_thu.hit_std_1_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_std_1_lo / adr_fri.d_count, adr_fri.hit_std_1_lo), bgcolor = rch_color, text_size = _size)
row := row + 1
if std_2_show
table.cell(tbl, 0, row, "Std " + str.tostring(std_dev_2), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_std_2_hi / adr_mon.d_count, adr_mon.hit_std_2_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_std_2_hi / adr_tue.d_count, adr_tue.hit_std_2_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_std_2_hi / adr_wed.d_count, adr_wed.hit_std_2_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_std_2_hi / adr_thu.d_count, adr_thu.hit_std_2_hi), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_std_2_hi / adr_fri.d_count, adr_fri.hit_std_2_hi), bgcolor = rch_color, text_size = _size)
row := row + 1
table.cell(tbl, 0, row, "Std -" + str.tostring(std_dev_2), text_size = _size)
table.cell(tbl, 1, row, fmt_sample(adr_mon.d_count, adr_mon.hit_std_2_lo / adr_mon.d_count, adr_mon.hit_std_2_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 2, row, fmt_sample(adr_tue.d_count, adr_tue.hit_std_2_lo / adr_tue.d_count, adr_tue.hit_std_2_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 3, row, fmt_sample(adr_wed.d_count, adr_wed.hit_std_2_lo / adr_wed.d_count, adr_wed.hit_std_2_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 4, row, fmt_sample(adr_thu.d_count, adr_thu.hit_std_2_lo / adr_thu.d_count, adr_thu.hit_std_2_lo), bgcolor = rch_color, text_size = _size)
table.cell(tbl, 5, row, fmt_sample(adr_fri.d_count, adr_fri.hit_std_2_lo / adr_fri.d_count, adr_fri.hit_std_2_lo), bgcolor = rch_color, text_size = _size)
Dance With Wolves VN PublicDance With Wolves VN
Indicator kết hợp EMA 9/21 để vào lệnh nhanh, thêm EMA 20/50/200 để xem trend lớn.
Tự tạo Entry, SL, TP1, TP2, TP3 theo ATR.
Vẽ luôn 3 mức kháng cự (R1–R3) và 3 mức hỗ trợ (S1–S3) từ pivot gần nhất.
Dùng tốt cho khung 1m–15m với crypto, stock, futures.
Dance With Wolves VN — Smart EMA Strategy
This indicator combines EMA 20/50/200 trend tracking, automatic Buy/Sell signals, Take Profit & Stop Loss levels, and Support/Resistance zones.
It helps traders identify clean entries, manage risk with visual TP/SL targets, and follow market trends with clarity.
Created by Dance With Wolves VN — a community project for traders who value discipline, teamwork, and precision.
Checklist Price A. S30-5 italiano Discrezionale CesarChecklist Price A. S30-5 italiano Discrezionale Cesar
Anchored ATH Drawdown LevelsThe Anchored ATH Drawdown Levels plots horizontal lines from a chosen anchor price (ATH), showing potential pullback zones at set percentage drops below it.
This indicator's use lies in its anchored ATH framework, which rapidly visualizes precise drawdown levels as dynamic levels of interest or price targets enabling traders to anticipate pullback depths and potential reversal levels without manual calculations.
Pick "True ATH" for the all-time high or "Period ATH" for anchored highs reset weekly, monthly, or quarterly. Lines stretch right for a cleaner visual.
Key Features
Anchoring: True ATH (lifetime max) or Period ATH (resets on 1W/1M/3M intervals).
Drawdown Levels: 8 adjustable levels (defaults: -5%, -10%, -15%, -20% on; -25% to -50% off). Toggle each, set drop % (0.1-99.9), pick color, style (solid/dashed/dotted), width (1-3).
ATH Line: Optional ATH line with custom color, style, width.
Unified Look: Global overrides for all levels' color, style, width.
Labels: Show % drops (with/without prices) via text boxes or full tags; sizes from tiny to large.
Projection: Lines extend 5-100 bars right (default 20).
Settings
Anchor: Mode and timeframe.
Display: Toggle levels/ATH, set extension.
Labels: Style (text/full/none), size, price display.
Global/ATH/Levels: Colors, styles, widths (per-level or shared).
How to Use
Load on chart (overlays prices; handles up to 500 lines).
Choose anchor for your high.
Tune levels for key pullbacks (e.g., -5% minor, -20% major).
Customize visuals where the lines update on new peaks.
BTC Power-Law Support 2025BTC Power-Law Calculation by Robert.
Shaded area resembles an uncertainty calculation.
Extrapolated data (in the future) only works in the daily chart.
Disclaimer: This is my own calculation and no investing advice! Use at your own risk.
Enhanced Auto Levels & TrendlinesOverview
The Enhanced Auto Levels & Trendlines (EAL&T) is a powerful, all-in-one indicator designed to automate the detection and visualization of key market structures. It combines auto-drawn trendlines, support/resistance levels with volume-based shadows and labels, and auto-flipping Fibonacci retracements/extensions. This tool helps traders identify potential reversals, breakouts, and targets without manual drawing.
Built on Pine Script v5, it uses pivot-based calculations for accuracy and includes customizable options for repainting, extensions, and sources. It's ideal for swing traders, scalpers, and analysts who want clean, dynamic charts.
Key Features
Auto Trendlines: Detects bullish/bearish trends based on pivots, with breakout detection and optional extensions/targets.
Auto Levels: Draws horizontal S/R levels from recent pivots, with "wick shadows" (boxes) highlighting volume strength and % buy/sell labels for sentiment.
Fibonacci Levels: Auto-flips between latest pivot high/low, showing retracements (0.236–0.786) and extensions (1.272–3.0) with customizable styles.
Customization: Override price sources, adjust lengths, colors, styles, and more. Supports repainting for real-time accuracy.
Performance: Limited to 500 bars back and 500 lines for efficiency; no heavy computations.
Visual Aids: Transparent shadows, extendable lines, and small labels for uncluttered charts.
How to Use
Step-by-Step Guide
Add to Chart: Load the indicator. Start with defaults.
Interpret Visuals:
Trendlines: Green (bullish/up), Red (bearish/down). Watch for breakouts – line "breaks" and extends if enabled.
Levels: Horizontal lines with shadows (boxes) showing wick strength. Green above price (resistance), Red below (support). Labels show % buy/sell sentiment.
Fibs: From latest swing low (0.0) to high (1.0). Use 0.5/0.618 for retracements; 1.272+ for targets. Flips automatically on trend change.
Customize for Your Strategy:
Volatile Markets (e.g., Crypto): Increase tl_length to 20+ for fewer false trends. Enable repainting for real-time.
Ranging Markets (e.g., Forex): Set override_source=true, custom_source=close for wick-ignoring pivots.
Fib Focus: Increase fib_extension_bars for longer projections. Hide trendlines if cluttered.
Levels Tuning: Shorten pivot lengths (e.g., 20) for intraday; lengthen (100+) for swings. Set shadow transparency to 100 to hide boxes.
Trading Ideas:
Breakout Trade: Buy on bull trendline break + Fib 0.618 confirmation.
Reversal: Sell at resistance level with high sell% label.
Targets: Use Fib extensions or trend targets for TP; levels for SL.
Combine: Overlay with MA crossover or volume for signals.
Tips & Troubleshooting:
Clutter? Toggle sections off or increase lengths.
No Lines? Ensure show_* is true; check chart history (needs 2x pivot length bars).
Repainting: Normal for real-time; disable for backtesting.
Custom Source: Test on demo – e.g., hl2 for median prices.
Updates: If lines don't extend, verify extend_bars > 0.
Credit : Auto Trendline Lib by HoanGhetti/SimpleTrendlines
kapanış yüzdeleri Closing percentage indicator was created to trade with closing percentage, you can increase the historical data by changing the input
SR-ZnV2There are many support and resistance scripts out there. I was unable to find one that met all of my needs so I have expanded on the closest ones that I was able to discover. The ability to show persistent S/R levels by volume at various time frames automates much of the process for the user with unique and customizable features, the lastest dated of which are displayed by its time frame support/resistance strength and extend toward the right of the screen where they can be seen more clearly by price .
// Original script is thanks to tommyf1001, synapticex and additional modifications is thanks to Lij_MC. Credit to both of them for most of the logic behind this script. Since then I have made many changes to this script as noted below.
// Changed default S/R lines from plots to lines, and gave option to user to change between solid line, dashed line, or dotted line for both S/R lines.
// Added additional time frame and gave more TF options for TF1 other than current TF. Now you will have 4 time frames to plot S/R zones from.
// Gave user option to easily change line thickness for all S/R lines.
// Made it easier to change colors of S/R lines and zones by consolidating the options under settings (rather than under style).
// Added extensions to active SR Zones to extend all the way right.
// Added option to extend or not extend the previous S/R zones up to next S/R zone.
// Added optional time frame labels to active S/R zones, with left and right options as well as option to adjust how far to the right label is set.
// Fixed issue where the higher time frame S/R zone was not properly starting from the high/low of fractal. Now any higher time frame S/R will begin exactly at the High/Low points.
// Added to script a function that will prevent S/R zones from lower time frames displaying while on a higher time frame. This helps clean up the chart quite a bit.
// Created arrays for each time frame's lines and labels so that the number of S/R zones can be controlled for each time frame and limit memory consumption.
// New alert options added and customized alert messages.
TOBYGBADE1: Dynamic Big Candle Pip RangeDisplays candle ranges in pips as a histogram in a separate pane, highlights big candles exceeding a dynamic threshold, and colors bars and labels green/red based on bullish or bearish direction.”
TOBYGBADE1: Dynamic Big Candle Pip RangeDisplays candle ranges in pips as a histogram in a separate pane, highlights big candles exceeding a dynamic threshold, and colors bars and labels green/red based on bullish or bearish direction.”
BUY/SELL/R/BBuy/Sell/R/B by SeanKidd
Purpose: A clean, anchored signal system combining StochRSI crossovers, CVI top/bottom detection, and a MACD direction line that moves with price.
⚙️ How It Works
BUY / SELL – Generated from a higher-timeframe StochRSI crossover.
BUY (Green) → %K crosses above %D
SELL (Red) → %K crosses below %D
R (Reverse) – Yellow “R” appears above the candle when the CVI model detects a local top or exhaustion point.
B (Bottom) – Blue “B” appears below the candle when CVI detects a local bottom.
MACD Direction Line –
Green = MACD above Signal → bullish momentum
Red = MACD below Signal → bearish momentum
The line rides just above the candles, offset by ATR so it always tracks price.
🧭 How to Use It
Add the indicator:
Search for Buy/Sell/R/B by SeanKidd under Community Scripts.
Click ★ to favorite it.
Apply it to your chart.
Open ⚙️ Settings → Inputs
Calculation Timeframe (StochRSI) → pick how fast or slow you want signals (default Weekly).
MACD Line Offset (ATR ×) → raise or lower the MACD line if it overlaps candles.
Adjust Top/Bottom thresholds to control how often R/B appear.
Toggle Highlight bars or Color candles for visual clarity.
Go to Settings → Scales and ensure it’s set to
✅ “Scale with Price Chart” or
✅ same scale side as the candles.
This keeps everything perfectly attached to the chart.
Optional: Add alerts
Create → Alert → Condition → Buy/Sell/R/B by SeanKidd
Choose: SRSI BUY, SRSI SELL, Top (R), or Bottom (B).
📈 Reading the Chart
Marker Meaning Color Position
BUY StochRSI %K cross above %D Lime Below bar
SELL StochRSI %K cross below %D Red Above bar
R CVI-detected top / reversal Yellow Above bar
B CVI-detected bottom Blue Below bar
Line MACD momentum direction Green/Red Above highs
💡 Tips
Works on any symbol or timeframe.
Slower charts (Daily–Weekly) give cleaner swing signals.
Faster charts (15m–1h) show short-term reversals.
Combine the MACD line direction with BUY/SELL for stronger confirmation.
Pro: Big Candle Pip Range (Upper Label)Highlights unusually large candles by calculating pip ranges dynamically based on recent volatility. Shows exact pip count above the candle, color-coded by direction (green bullish, red bearish). Features adaptive thresholds, optional histogram, and works on any instrument or timeframe. Ideal for scalpers and intraday traders spotting high-volatility candles quickly.
Fractional + Heikin-Ashi Candlestick – CF / ABNew model of Candlestick, Tis model constructed on Fractional Calculus mathematical, use two kernel - Caputo-Fabrizio and Atangana-Baleanu.
Fisher MPzFisher MPz - Multi-Period Z-Score Fisher Transform
Overview
An enhanced Fisher Transform that uses multi-period analysis and improved statistical methods to provide more reliable trading signals with the goal of fewer false positives.
Evolution Beyond Traditional Fisher Transform
While the classic Fisher Transform uses simple price normalization and basic smoothing, Fisher MPz introduces several key enhancements:
- Multi-period composite instead of single timeframe analysis
- Robust z-score normalization using median/MAD rather than mean/standard deviation
- Winsorization to handle outliers and price spikes
- Dynamic clipping that adapts to market volatility
- Kalman filtering for superior noise reduction vs. traditional EMA smoothing
These improvements result in cleaner signals, better adaptability to different market conditions, handles trending markets without over-saturation at extreme values, and reduced false signals compared to the standard Fisher Transform.
Key Features
Multi-Period Analysis
- Three Timeframe Approach: Simultaneously analyzes short (default 8), medium (default 13), and long (default 26) periods
- Weighted Composite: Combines all three periods using customizable weights for optimal signal generation
- Individual Period Display: Optional visualization of each period's Fisher Transform for deeper analysis
Advanced Statistical Methods
Robust Z-Score Calculation
- Uses median and MAD (Median Absolute Deviation) instead of mean and standard deviation
- More resistant to outliers and extreme price movements
- Provides stable normalization across varying market conditions
Winsorization
- Caps extreme price values at specified percentiles (default 5th and 95th)
- Reduces the impact of price spikes and anomalies
- Configurable lookback period for threshold calculation
Dynamic Z-Score Clipping
- Automatically adjusts clipping levels based on recent volatility
- Tighter bounds in calm markets (0.05) for precision
- Wider bounds in volatile markets (0.2) to capture significant moves
- Uses ATR-based volatility measurement
Kalman Filter Smoothing
- Optional advanced noise reduction using Kalman filtering
- Superior to traditional EMA smoothing for optimal signal extraction
- Configurable process noise (Q) and measurement noise (R) parameters
- Fallback to traditional smoothing factor available
How to Use
Basic Interpretation
- Above Zero: Bullish momentum
- Below Zero: Bearish momentum
- Extreme Values: Potential overbought/oversold conditions
- Crossovers: Entry/exit signals when composite crosses trigger line
Customizable Settings
Periods: Adjust based on your trading timeframe
- Lower values (3-10): More sensitive, suitable for scalping
- Medium values (10-20): Balanced for swing trading
- Higher values (20-50): Smoother for position trading
Weights: Customize responsiveness
- Increase short weight: More reactive to recent price changes
- Increase long weight: More stability and trend confirmation
Kalman Settings
- Lower Q (0.001-0.02): Smoother, more filtered signals
- Higher Q (0.02-0.1): More responsive to price changes
- Lower R (0.01-0.05): Trust data more, less filtering
- Higher R (0.1-1.0): More skeptical of data, more smoothing
ATR Daniel# ATR Daniel - Indicator Description
## 🇬🇧 ENGLISH VERSION
### ATR Daniel - Smart Trailing Stop Manager
**ATR Daniel** is an intelligent trailing stop indicator that automatically adapts to your trading style and the asset you're trading.
#### Key Features:
**🎯 3 Trading Modes:**
- **Swing Trading** - For position trading with wider stops
- **Intraday** - For day trading with balanced parameters
- **Scalping** - For quick trades with tight stops
**📊 Automatic Asset Detection:**
The indicator automatically recognizes 3 major assets and applies optimized parameters:
- **XAUUSD (Gold)** - Lower volatility settings
- **BTCUSDT (Bitcoin)** - Medium volatility settings
- **NAS100USD (Nasdaq 100)** - Higher volatility settings
**🔧 Flexible Configuration:**
- **Auto Mode**: Applies optimal parameters based on detected asset and selected trading mode
- **Manual Mode**: Customize ATR length and multiplier to your preferences
- **Customizable Colors**: Choose your own line color
- **ON/OFF Display**: Toggle line visibility as needed
**📈 Visual Display:**
- Dynamic trailing stop line that follows price action
- Color changes based on trend direction (bullish/bearish)
- Real-time info table showing:
- Current asset
- Trading mode
- ATR value
- Stop loss distance
- Recommended SL price
- Current trend direction
- Signal arrows at trend reversals (optional)
**💡 How It Works:**
The indicator uses ATR (Average True Range) to calculate dynamic stop loss levels that adapt to market volatility. The trailing stop follows the price in trending markets while protecting your position.
**Perfect for:**
- Traders who want automated stop loss management
- Multi-asset traders (Gold, Bitcoin, Nasdaq)
- All trading styles (Swing, Intraday, Scalping)
---
Target Trend + Filter Toggles [ChadAnt] V3Minor Update that allows the user to adjust the size of the stop loss.
Indicator Overview and Core Logic CREDIT TO BIGBELUGA FOR THE MAIN INDICATOR
The indicator, named "Target Trend + Filter Toggles", is an overlay that draws directly on the price chart.
1. Core Trend Detection (Modified SMA Channel)
The indicator uses a primary trend-following mechanism based on a custom channel built with Simple Moving Averages (SMAs) and Average True Range (ATR):
SMA High: ta.sma(high, length) + atr_value
SMA Low: ta.sma(low, length) - atr_value
The length is set by the user (default 20).
The atr_value is a smoothed ATR (SMA of ATR(200), multiplied by 0.8), acting as an offset to create a channel around the price action.
Trend Logic:
Uptrend (trend=true): When the close price crosses over the sma_high line.
Downtrend (trend=false): When the close price crosses under the sma_low line.
Visual Trend: The candles are colored based on this determined trend, and the SMA High/Low lines are plotted.
2. Signal Generation (Raw vs. Filtered)
Raw Signal: A raw signal (signal_up_raw or signal_down_raw) is triggered simply when the core trend logic changes (e.g., trend changes from down to up).
Filtered Signal: The final buy/sell signal (signal_up or signal_down) is triggered only when the raw signal is true AND all currently active filter toggles are confirmed within a specified filter_lookback period (default 3 bars).
⚙️ Filter Toggles and Calculations
The script includes an extensive system of boolean (on/off) toggles for various popular technical indicators, allowing the user to customize which filters must be confirmed for a signal to be valid.
FILTER CATEGORIES:
MACD,
VOLUME,
STOCHRSI,
AWESOME OSCILLATOR,
MOVING AVERAGE,
VWAP,
COUNTERTREND MA
COUNTERTREND VWAP
The script uses a for loop to check if the required confirmation happened within the last filter_lookback number of bars.
🎯 Target and Stop-Loss Levels
Upon a valid filtered signal (signal_up or signal_down), the indicator uses an extensive user-defined type (TrendTargets) and a custom draw_targets method to draw potential trade management lines:
Entry Price: The close price of the bar where the filtered signal occurred.
Stop Loss (SL):
For a Long signal: The sma_low line (the lower band of the trend channel).
For a Short signal: The sma_high line (the upper band of the trend channel).
Profit Targets (T1, T2, T3): These are calculated based on the ATR multiplier (atr_value) and an adjustable user input called target (default 1).
Targets are a multiple of atr_value added to (for longs) or subtracted from (for shorts) the Entry Price.
T1: Entry +/- (5 + target) * atr_value
T2: Entry +/- (10 + target * 2) * atr_value
T3: Entry +/- (15 + target * 3) * atr_value
These levels are plotted as extended lines with corresponding labels (e.g., "SL," "Entry," "T1"). The script also includes logic to mark targets with a "✔" and the stop-loss with an "✖" if the price hits those levels.
🎨 Visualization
The script provides clear visual cues:
Candle Coloring: Candles are colored with up_color (Green/Teal) for an uptrend and dn_color (Brown/Orange) for a downtrend.
Trend Lines: The sma_high and sma_low lines are plotted and subtly shaded between the price action.
Signal Shapes: A filtered signal triggers a set of two colored triangles (one small solid, one large transparent) plotted below the low for a long signal and above the high for a short signal.
Trade Zones: The area between the Stop Loss and the Entry line is shaded in the counter-trend color, and the area between the Entry line and the T3 line is shaded in the trend color.
This indicator is essentially a complete trading system that uses a combination of an ATR-based trend channel for entries, a multitude of technical indicators for confirmation, and an ATR-based system for trade management (SL/TPs).
Would you like me to focus on a specific filter's logic, or perhaps help you configure the indicator's inputs for a certain trading style?
Aroon with RSI Confirmation (92.86%)This script is an analytical tool designed to identify moments in market behavior when price momentum is shifting. It does this by combining two concepts: **Aroon Levels** (to measure trend maturity) and **RSI Slope Behavior** (to measure short-term momentum pressure).
**Functional Concept (Professional Description)**
The indicator examines when either the *Aroon Up* or *Aroon Down* value reaches approximately **92.86%**, which statistically represents a phase where price has recently made an extreme high or low relative to the selected period. This level suggests the trend is nearing a point of *decision*—either continuation or exhaustion.
At the same time, the script analyzes the **relationship between the RSI and its smoothed average**. The difference between the two reflects whether momentum is accelerating in the current direction or slowing. A small difference indicates **market stability**, while whether RSI is positioned above or below the smoothed line indicates **who has control**—buyers or sellers.
By requiring both conditions to align, the script filters out random noise and highlights moments where **trend structure and momentum sentiment converge**.
* **Buy Signal:** Occurs when the market has recently formed a significant low (Aroon Down ≈ 92.86) and buyers begin to regain control (RSI crosses above its smoothed value with low volatility).
* **Sell Signal:** Occurs when the market has recently reached a significant high (Aroon Up ≈ 92.86) and sellers begin to dominate (RSI slips below its smoothed value with low volatility).
---
**Psychological Interpretation**
Markets are driven by cycles of **attention**, **emotion**, and **participation**.
This script targets moments when:
1. **Price has made a meaningful extreme** (a recent new high or low).
This is where crowd sentiment is often strongest—either euphoria near highs or pessimism near lows.
2. **Traders are reassessing direction**, shown by momentum flattening (small RSI difference).
This reveals that participants are hesitating, watching, and waiting.
The market is effectively *thinking*.
3. **Control shifts subtly**, when RSI moves relative to its smoothed trend.
This indicates that early, informed participation is beginning to form—before the broader crowd reacts.
In psychological terms, the script highlights the **transitional turning points** where:
* Fear begins to weaken and confidence returns (buy setup), or
* Confidence begins to crumble and caution emerges (sell setup).
These are the earliest moments when market sentiment **changes hands**, often preceding visible trend reversals. The indicator is not reacting to outcomes—it is observing the underlying shift in **decision-making pressure** among market participants.
---
In essence, this tool identifies **behavioral inflection points**—where the market transitions from one emotional state to the next—providing traders with signals grounded in both structural trend positioning and real-time crowd momentum behavior.
CME Close PriceThis script adds the closing price of another asset on your chart, such as the BTC1! Futures Price on your BTC Spot Chart for example.























