SMA25 vs SMA150 – Reentry nur bei Gap-Expansion version 1📈 Strategy: SMA25 vs. SMA150 – Reentry with Gap Expansion
This trend-following strategy trades long positions only during strong uptrends.
It combines mid-term trend confirmation (SMA150) with short-term momentum (SMA25), and includes strict entry, reentry, and exit conditions to capture sustained bullish phases while cutting weak setups early.
🟢 Entry Rules
A long position is opened only if all of the following conditions are met:
Trend filter: The closing price is above SMA150 → confirms an uptrend.
Bullish candle: Current candle closes higher than it opens.
SMA range: SMA25 is 8% to 60% above SMA150.
Momentum slope: SMA25 has increased more strongly than SMA150 over the last 5 candles and is rising.
Trend confirmation: SMA25 has remained above SMA150 for at least 5 candles.
Price distance: The close is at least 0.5% above SMA25.
Stability: The previous two candles also closed above SMA25.
Short-term breakout: Current close is higher than the last 3 closes.
Reentry condition: Allowed only after 20 candles since the last exit and only if a gap expansion occurs above the previous high.
🔴 Exit Rules
A trade is closed as soon as any of the following conditions is triggered:
Dynamic trailing exit:
Close falls 3% below the highest SMA25 value since entry.
Hard stop-loss:
The low of the candle falls 5% or more below the entry price (intrabar trigger).
Early weakness filter:
If any of the first 3 candles after entry closes below the entry price, the trade is exited immediately.
⚙️ Additional Details
Long trades only (no shorts)
No pyramiding – only one position open at a time
Chart background color:
Green = position open
Red = no position
This system targets clean, established uptrends, avoids premature entries, and exits quickly when momentum fades.
It’s designed for swing and position traders who prefer systematic, trend-based setups with tight risk control and clear structure.
מחזורים
Time Range HighlighterThis indicator highlights up to two custom time ranges on your chart with fully adjustable settings:
🔧 Features:
Define two separate time sessions
Set custom start and end times (in any time zone)
Choose unique highlight colors and opacity for each session
Toggle each range on or off independently
Timezone input allows syncing sessions to any global market hours (e.g., UTC, Asia/Tehran, New York)
🕒 Example Use Cases:
Highlight market opening hours (e.g. NYSE: 0930–1600)
Track your personal trading hours or peak volatility sessions
Visualize specific algorithm time filters
📌 Usage:
Enter your desired timezone string (e.g., "Asia/Tehran" or "Etc/UTC")
Customize session times like "0930-1200" and "1500-1700"
Adjust colors and visibility to fit your strategy
Ideal for traders who rely on time-based setups or session overlays.
24h Change Shows TF‑independent 24‑hour % change in the status line. The value is computed strictly on fixed 1‑minute data—last confirmed 1m close vs. the 1m close 1,440 minutes earlier—so changing chart timeframes does not affect the result. Updates once per minute; for best parity with an exchange, use the matching symbol/price type (Last vs. Mark/Index) and ensure ≥1,440 minutes of history.
EMA + RSI Autotrade Webhook - VarunOverview
The EMA + RSI Autotrade Webhook is a powerful trend-following indicator designed for automated crypto futures trading. This indicator combines the reliability of Exponential Moving Average (EMA) crossovers with RSI momentum filtering to generate high-probability buy and sell signals optimized for webhook integration with crypto exchanges like Delta Exchange, Binance Futures, and Bybit.Key Features
Simple & Effective: Uses proven EMA 9/21 crossover strategy
RSI Momentum Filter: Eliminates low-probability trades in ranging markets
Webhook Ready: Two clean alerts (LONG Entry, SHORT Entry) for seamless automation
Exchange Compatible: Works with Delta Exchange, 3Commas, Alertatron, and other webhook platforms
Zero Lag Signals: Real-time alerts on crossover confirmation
Visual Clarity: Clean chart markers for easy signal identification
How It Works
Entry Signals:
LONG Entry: Triggers when EMA 9 crosses above EMA 21 AND RSI is above 52 (bullish momentum confirmed)
SHORT Entry: Triggers when EMA 9 crosses under EMA 21 AND RSI is below 48 (bearish momentum confirmed)
Technical Components:
Fast EMA: 9-period (tracks short-term price action)
Slow EMA: 21-period (identifies primary trend)
RSI: 14-period (confirms momentum strength)
RSI Long Threshold: 52 (filters weak bullish signals)
RSI Short Threshold: 48 (filters weak bearish signals)
Best Use Cases
Crypto Futures Trading: Bitcoin, Ethereum, Altcoin perpetual contracts
Automated Trading Bots: Integration with Delta Exchange webhooks, TradingView alerts
Timeframes: Optimized for 15-minute charts (works on 5min-1H)
Markets: Trending crypto markets with clear directional moves
Risk Management: Best used with 1-2% stop loss per trade (managed externally)
Webhook Automation Setup
Add indicator to your TradingView chart
Create alerts for "LONG Entry" and "SHORT Entry"
Configure webhook URL from your exchange (Delta Exchange, Binance, etc.)
Use alert message: Entry LONG {{ticker}} @ {{close}} or Entry SHORT {{ticker}} @ {{close}}
Exchange automatically reverses positions on opposite signals
Advantages
✅ No manual trading required - fully automated
✅ Eliminates emotional trading decisions
✅ Catches trending moves early with EMA crossovers
✅ RSI filter reduces whipsaws in choppy markets
✅ Works 24/7 without monitoring
✅ Simple two-alert system (easy to manage)
✅ Compatible with multiple exchanges via webhooksStrategy Philosophy
This indicator follows a trend-following with momentum confirmation approach. By waiting for both EMA crossover AND RSI confirmation, it ensures you're entering trades with genuine momentum behind them, not just random price noise. The tight RSI thresholds (52/48) keep you aligned with the prevailing trend.Recommended Settings
Timeframe: 15-minute (primary), 5-minute (scalping), 1-hour (swing)
Markets: BTC/USDT, ETH/USDT, high-liquidity altcoin perpetuals
Position Sizing: 100% capital per signal (exchange manages reversals)
Stop Loss: 2% (managed via exchange or external bot)
Leverage: 1-2x for conservative approach, up to 5x for aggressive
Important Notes
⚠️ This indicator generates entry signals only - position reversals are handled automatically by your exchange
⚠️ Always backtest on historical data before live trading
⚠️ Use proper risk management and position sizing
⚠️ Best performance in trending markets; may generate false signals in tight ranges
⚠️ Requires TradingView Premium or higher for webhook functionalityTags
cryptocurrency futures automated-trading ema-crossover rsi webhook delta-exchange tradingview-alerts trend-following momentum bitcoin ethereum crypto-bot algo-trading 15-minute-strategy
Market Sessions — VerticalA clean visual guide to global market sessions.
This indicator plots vertical lines at the opening and closing times of the four major forex sessions:
London, New York, Tokyo, and Sydney.
Fully customizable — toggle each session on/off, choose separate colors for open/close, and enable/disable labels.
Supports both Local (auto-DST) and GMT (fixed) modes — switch between realistic market-clock times or the standardized UTC schedule used by most trading resources.
Helps you visually identify session overlaps (e.g., London–New York) where volatility typically increases.
Ideal for forex, indices, and commodities traders who trade around session opens.
Default session times (GMT mode):
Sydney 21:00 – 06:00 GMT
Tokyo 00:00 – 09:00 GMT
London 08:00 – 17:00 GMT
New York 13:00 – 22:00 GMT
Tip: Set Anchor times by → Local (auto-DST) if you want the lines to follow each region’s real-world daylight-saving adjustments automatically.
Clean, lightweight, and built for traders who want precise, minimal clutter — just the key time windows that move the market.
3HH/3LL → Next Bar Inside = Signal (Neon)Detects 3 consecutive Higher Highs or 3 consecutive Lower Lows.
Signals only when the very next candle is an Inside Bar.
Uses your Neon Lime (HH case) and Neon Pink (LL case) colors.
Stockbee 8% 4% 9M + MA CrossoversThis is another version of my Stockbee 9% 4% 9M script, now enhanced with moving average crossovers to highlight trend shifts more effectively.
The crossovers are displayed in the same visual style as the 9 million volume indicator from the original script but use different shapes and forms for better distinction.
All crossover visuals can be customized to your liking—you can adjust their appearance to fit your charting style or preference.
💎 ProfittoPath – Glass HUD//@version=5
indicator("💎 ProfittoPath – Glass HUD", overlay=true)
// === Inputs ===
entryPrice = input.float(0.0, "Entry Price", step=0.01)
qty = input.float(1.0, "Position Size", step=1.0)
isLong = input.bool(true, "Long Trade?")
offsetY = input.int(60, "Vertical Offset (ticks)", step=1)
showPercent = input.bool(true, "Show % Change")
// === Calculations ===
inTrade = entryPrice > 0
priceDiff = inTrade ? (close - entryPrice) * (isLong ? 1 : -1) : na
plUsd = inTrade ? priceDiff * qty : na
plPercent = inTrade ? (priceDiff / entryPrice) * 100 : na
isProfit = inTrade ? (plUsd >= 0) : false
// === Colors ===
gold = color.rgb(255,215,0)
lossRed = color.rgb(255,90,90)
txtColor = isProfit ? gold : lossRed
bgGlass = color.new(color.rgb(15,15,15),85)
// === Entry Line ===
var line entryLine = na
if barstate.isfirst
entryLine := line.new(bar_index, entryPrice, bar_index, entryPrice, extend=extend.both, color=color.new(gold,40), style=line.style_dotted)
if inTrade
line.set_color(entryLine, color.new(gold,40))
else
line.set_color(entryLine, color.new(color.black,100))
// === Panel Label ===
var label pnlLabel = na
if barstate.isfirst
pnlLabel := label.new(bar_index, na, "", style=label.style_label_center, textcolor=txtColor, color=bgGlass, size=size.large)
// === Update ===
if inTrade
string pnlText = "💎 ProfittoPath Glass HUD "
pnlText += "──────────────────────── "
pnlText += "Trade: " + (isLong ? "LONG 📈" : "SHORT 📉") + " "
pnlText += "Entry: " + str.tostring(entryPrice, format.mintick) + " "
pnlText += "Current: " + str.tostring(close, format.mintick) + " "
pnlText += "P/L: " + (isProfit ? "+" : "") + str.tostring(plUsd, format.mintick) + " USD"
if showPercent
pnlText += " (" + str.tostring(plPercent, "#.##") + "%)"
pnlText += " "
pnlText += "──────────────────────── "
pnlText += "Status: " + (isProfit ? "PROFIT ✅" : "LOSS ❌")
label.set_text(pnlLabel, pnlText)
label.set_x(pnlLabel, bar_index)
label.set_y(pnlLabel, entryPrice + offsetY * syminfo.mintick)
label.set_color(pnlLabel, bgGlass)
label.set_textcolor(pnlLabel, txtColor)
else
label.set_text(pnlLabel, "💎 Set Entry Price ↑")
label.set_x(pnlLabel, bar_index)
label.set_y(pnlLabel, close)
label.set_color(pnlLabel, bgGlass)
label.set_textcolor(pnlLabel, gold)
مستويات الاتزان السعري (Equilibrium Price Levels)Equilibrium Price Levels is an educational tool that helps traders quantify “fair value” and key extension zones based on a single reference swing.
The script uses two manual inputs (reference High and Low) to compute a structured set of equilibrium and extension levels, rather than scanning swings automatically. This gives full control over which range the calculations are based on.
Calculated levels include:
• Retracement / equilibrium band from the selected range: 38.2%, 50.0%, 61.8%
• Upside extension targets from the same range: 125%, 1.618, 1.80, 2.50, 3.10, 3.86, 4.236
Features:
• Separate toggles for supports, targets, and reference high/low
• Per-level visibility switches for each extension (e.g., only show 1.618 and 2.50)
• Customizable colors for supports, targets, and reference lines
• Optional labels with configurable size and offset to keep the chart clean
• Multiple line extension modes (left, both sides, or no extension)
Typical use cases:
• Marking an equilibrium zone inside a major swing to watch for reaction or trend continuation
• Building a consistent “price map” of where mean-reversion vs. extension behavior is likely
• Combining with other tools (price action, volume, order blocks, etc.) to refine trade plans
This script is for educational and analytical purposes only and does not constitute financial advice, trade signals, or performance guarantees.
مستويات الاتزان السعري هي أداة تعليمية تساعد المتداول على قياس “السعر العادل” ومناطق التمدد المحتملة اعتمادًا على نطاق سعري واحد يحدده بنفسه.
المؤشر لا يختار القمم والقيعان آليًا، بل يعتمد على إدخال قمّة وقاع مرجعيين يدويًا، مما يعطي تحكمًا كاملًا في النطاق المستخدم في الحسابات.
المؤشر يحسب ما يلي:
• نطاق الاتزان/التراجع من القمة إلى القاع: 38.2%، 50.0%، 61.8%
• أهداف وتمددات سعرية أعلى النطاق: 125%، 1.618، 1.80، 2.50، 3.10، 3.86، 4.236
المزايا:
• مفاتيح تشغيل/إخفاء مستقلة لمستويات الدعم، الأهداف، والقمة/القاع المرجعيين
• إمكانية تفعيل/إلغاء كل هدف بشكل منفصل (مثل إظهار 1.618 و 2.50 فقط)
• تخصيص ألوان خطوط الدعم، الأهداف، وخطوط القمة والقاع
• ملصقات توضيحية اختيارية مع تحكم في حجمها وموقعها على الشارت
• خيارات امتداد للخطوط: لليسار فقط، أو يمين ويسار، أو بدون امتداد
الاستخدامات الشائعة:
• تحديد منطقة الاتزان داخل موجة رئيسية لمراقبة احتمالات الارتداد أو استمرار الاتجاه
• بناء “خريطة سعرية” ثابتة لمناطق التوازن والتمدد على مدى زمني واسع
• دمج المستويات مع أدوات أخرى مثل السلوك السعري أو الحجم أو مناطق التجميع/التصريف لتحسين قرارات الدخول والخروج
هذا السكربت موجه لأغراض تعليمية وتحليلية فقط، ولا يُعتبر نصيحة استثمارية أو توصية بيع/شراء، ولا يضمن أي أداء مستقبلي للأسعار أو النتائج.
BTC Bull/Bear marketThis indicator plots the 350-period Simple Moving Average (SMA) calculated on the Daily ("D") timeframe.
he color of the SMA line is determined by the closing price of the 2-Week ("2W") timeframe.
1. It fetches the 350-day SMA value (`sma350_daily`).
2. It checks where the *last closed* 2-Week candle finished relative to this SMA line.
3. If the 2W candle closed *above* the 350 SMA, the line is colored GREEN.
4. If the 2W candle closed *below* the 350 SMA, the line is colored RED.
This helps to visualize the long-term trend (350 SMA) confirmed by a higher (2W) timeframe bias, using non-repainting logic (`close `) for the color signal.
BullTrader - ParabolicSARFlipSignals(NonRepainting)TP/SL🧠 Purpose & Concept
This indicator refines Wilder’s Parabolic SAR into a simple, non‑repainting alert and visualization system that marks each confirmed trend flip with a clear buy or sell signal.
It also auto‑generates dynamic, ATR‑based Take‑Profit (TP) and Stop‑Loss (SL) levels, keeps them updating with price in real time, and displays the current market bias in an on‑chart table.
The goal: clarity and automation without complexity — see exactly when a new bullish or bearish phase begins, what your current TP/SL targets are, and receive a single clean alert for every new flip.
⚙️ How It Works
1. The built‑in ta.sar() function tracks the Parabolic SAR dots.
2. When a candle closes across the SAR line, a trend‑change is confirmed:
• Price crossing above a SAR dot → Buy Flip (green triangle).
• Price crossing below a SAR dot → Sell Flip (red triangle).
3. On each flip, the indicator calculates dynamic ATR‑based TP / SL targets:
TP = entry ± (ATR × tpMult) and SL = entry ∓ (ATR × slMult)
These values move automatically as the trend develops.
4. A small floating label beside the latest bar shows live‑updated TP / SL numbers.
5. A color‑coded table in the upper‑right corner displays the current trend: Lime = Bullish, Red = Bearish, Yellow = Neutral.
6. Each new flip triggers an easy‑to‑use Buy / Sell alert after the bar closes—no repainting.
🔔 Alerts
Alert Name Triggers When Message
SAR Buy Flip Alert Green triangle (bullish reversal) “BUY Flip — Parabolic SAR on {{ticker}} ({{interval}})”
SAR Sell Flip Alert Red triangle (bearish reversal) “SELL Flip — Parabolic SAR on {{ticker}} ({{interval}})”
📈 Chart Elements
Element Meaning
🟠 Orange cross Standard Parabolic SAR trail.
🟢 / 🔴 Triangles Confirmed buy / sell flips (non‑repainting).
Bright lime/red TP‑SL box Live ATR targets that move with price.
Trend table (top‑right) Instant status of bullish/bearish bias.
✅ Features & Highlights
Non‑repainting — all signals confirm on closed bars.
Visual clarity — single pair of bright triangles for flips.
Dynamic ATR‑based TP / SL values that auto‑trail with trend.
Always‑visible trend summary table.
Two ready‑made alert types (Buy / Sell).
Lightweight and optimized for any timeframe or symbol.
💡 Best Use
Ideal for traders who prefer clean trend‑based entries and volatility‑adaptive exits without signal clutter:
Pair it with your existing strategy or use it standalone for reversal‑based swing and intraday trading.
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.
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)
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.
Relative Strength vs Benchmark SPYRelative Strength vs Benchmark (SPY)
This indicator compares the performance of the charted symbol (stock or ETF) against a benchmark index — by default, SPY (S&P 500). It plots a Relative Strength (RS) ratio line (Symbol / SPY) and its EMA(50) to visualize when the asset is outperforming or underperforming the market.
Key Features
📈 RS Line (blue): Shows how the asset performs relative to SPY.
🟠 EMA(50): Smooths the RS trend to highlight sustained leadership.
🟩 Green background: Symbol is outperforming SPY (RS > EMA).
🟥 Red background: Symbol is underperforming SPY (RS < EMA).
🔔 Alerts: Automatic notifications when RS crosses above/below its EMA — signaling new leadership or weakness.
How to Use
Apply to any stock or ETF chart.
Keep benchmark = SPY, or switch to another index (e.g., QQQ, IWM, XLK).
Watch for RS crossovers and trends:
Rising RS → money flowing into the asset.
Falling RS → rotation away from the asset.
Perfect for sector rotation, ETF comparison, and momentum analysis workflows.
Alpha Trader University - Average Session SolatilityBast Indictor
You will need this indicator in your daily life, use it properly and make money.
Clock&Flow – Market Pulse IndicatorClock&Flow – Market Pulse Indicator
1) General Purpose
The Market Pulse Indicator is designed to visualize the strength and direction of market flow in a clear, intuitive way.
Unlike common volume or momentum indicators, it blends three essential dimensions — price velocity, normalized volume, and volatility (ATR) — to highlight when market pressure is truly meaningful.
It helps identify genuine liquidity inflows/outflows, potential exhaustion zones, and moments of compression or expansion within the price structure.
2) Data Sources
All data is directly taken from the current chart’s feed on TradingView:
Price (close): to measure relative price change.
Volume: to detect the intensity of market participation (normalized to average).
ATR (Average True Range): to evaluate volatility relative to price levels.
No external data or off-platform sources are used.
3) Logic and Calculation Steps
Price Velocity: calculates the percentage change between the current close and the close N bars ago.
priceChange = (close - close ) / close
Normalized Volume: compares current volume to its moving average over the same period.
volNorm = volume / sma(volume, length)
Normalized Volatility: ATR divided by price to adjust for instrument scale.
atrNorm = atr(length) / close
Combination : multiplies the three components into one raw value that represents market pulse intensity.
rawPulse = priceChange * volNorm * (1 + atrNorm)
Smoothing: a moving average (smoothLen) is applied to create a cleaner and more readable oscillator line.
flowPulse = sma(rawPulse * multiplier, smoothLen)
4) Parameters (Default Settings)
length (20): analysis period for price change, volume, and ATR.
smoothLen (5): smoothing factor; higher values reduce noise.
multiplier (100): scales the output for readability; adjust to fit chart scale.
5) How to Read the Indicator
Market Pulse > 0 (green): net inflow of liquidity; buying pressure dominates.
Market Pulse < 0 (red): net outflow of liquidity; selling pressure dominates.
Near 0: neutral phase; market balance or consolidation.
Sudden peaks: strong bursts of flow — often coincide with news releases or session overlaps.
Confirmations: use as a second-level filter before entering trades or to confirm momentum behind a breakout.
6) Divergences
Divergences between price and Market Pulse are key signals of weakening flow strength:
Bullish divergence: price forms lower lows while Market Pulse forms higher lows → selling pressure is fading; potential reversal or bounce.
Bearish divergence: price forms higher highs while Market Pulse fails to confirm → buying momentum is losing strength; potential correction ahead.
For reliability, look for divergences on higher timeframes (H4, Daily).
On lower timeframes, treat them as early warnings.
7) Typical Use Cases
Breakout confirmation: price breaks resistance with a rising Market Pulse → confirms genuine participation.
False signal filter: price breaks a level but Market Pulse remains flat/negative → likely fake breakout.
Pullback entry: after a breakout, wait for a short retracement and a new positive pulse → safer entry point.
Exit signal: if you’re long and Market Pulse suddenly turns negative with strong volume → consider partial exit or tighter stops.
8) Recommended Timeframes
Intraday / Scalping: 5–30 min charts with length 10–14, smoothLen 3–5.
Swing trading: 1h–4h charts with length 20–50.
Position trading: Daily charts with larger length (50–100) for smoother data.
Always optimize parameters to the specific asset — there are no universal settings.
9) Limitations
This indicator is not a trading system — it’s a decision-support tool.
Results depend on the quality of the volume data available for the symbol.
Performance and sensitivity are influenced by length, smoothing, and multiplier values — always test before live trading.
Use alongside sound risk and money management.
10) Disclaimer
This script is provided for educational purposes only and does not constitute financial advice.
Trading and investing involve significant risk, including the potential loss of capital.
Always test indicators in simulation environments and make independent decisions based on your own analysis and risk tolerance.
Italiano
1) Scopo generale
Flow Pulse è un oscillatore pensato per visualizzare la forza e la direzione del flusso di mercato in modo immediato. Non è un semplice indicatore di volume né una copia di RSI/MACD: combina tre dimensioni fondamentali — variazione di prezzo, volume normalizzato e volatilità — per mettere in evidenza i momenti in cui la pressione dei partecipanti è realmente significativa.
È ideale per identificare: entrate guidate da flussi reali, potenziali esaurimenti, momenti di compressione/espansione del movimento e segnali di conferma per breakout o rimbalzi.
2) Dati utilizzati
L’indicatore usa esclusivamente dati disponibili sulla piattaforma TradingView del grafico corrente:
price (close) — per calcolare la variazione percentuale del prezzo;
volume per misurare l’intensità degli scambi (normalizzato su media);
ATR (Average True Range) — per normalizzare la volatilità rispetto al prezzo;
Tutti i feed (prezzo e volume) sono quelli forniti dall’exchange/fornitore dati collegato al simbolo sul grafico.
3) Logica e passaggi di calcolo
Velocità del prezzo: calcolo della variazione percentuale tra la chiusura corrente e la chiusura N barre fa:
priceChange = (close - close ) / close
— misura la direzione e magnitudine del movimento in termine relativo.
Volume normalizzato: rapporto tra il volume corrente e la media mobile semplice del volume su length barre:
volNorm = volume / sma(volume, length)
— evidenzia volumi anomali rispetto alla media.
Volatilità normalizzata (ATR): rapporto ATR/close per rendere la volatilità comparabile across price levels:
atrNorm = atr(length) / close
Combinazione: il prodotto di questi fattori (con un piccolo offset su ATR) genera un valore grezzo:
rawPulse = priceChange * volNorm * (1 + atrNorm)
— se priceChange e volNorm sono positivi e l’ATR è presente, il rawPulse sarà significativamente positivo.
Smoothing: media mobile semplice (SMA) applicata al rawPulse e moltiplicazione per un fattore scalare (multiplier) per portare il range su livelli leggibili:
flowPulse = sma(rawPulse * multiplier, smoothLen)
4) Parametri esposti (default consigliati)
length (periodo analisi) — default 20: influenza calcolo Δ% e media volumi; allunga la finestra storica.
smoothLen (smussamento) — default 5: smoothing del segnale per ridurre rumore.
multiplier — default 100: fattore di scala per rendere l’oscillatore più leggibile.
5) Interpretazione pratica dei valori
FlowPulse > 0 (verde): predominanza di flusso d’ingresso — pressione d’acquisto. Maggiore il valore, più forte la convinzione (volume + movimento + volatilità).
FlowPulse < 0 (rosso): predominanza di flusso in uscita — pressione di vendita.
Vicino a 0: assenza di flussi netti chiari; mercato piatto o bilanciato.
Picchi repentini: indicano accelerate di flusso — spesso coincidono con rotture, open/close session, news.
Sostegno al trade: usa FlowPulse come conferma prima di entrare su breakout o come avviso di attenzione su esaurimenti.
6) Divergenze (come leggerle)
Le divergenze tra prezzo e FlowPulse sono segnali importanti:
Divergenza rialzista (bullish divergence): prezzo fa nuovi minimi mentre FlowPulse non fa nuovi minimi (o forma minimo relativo più alto) → indica che la spinta di vendita non è supportata da volume/volatilità, possibile inversione/rimbalzo.
Divergenza ribassista (bearish divergence): prezzo fa nuovi massimi mentre FlowPulse non li conferma (o forma massimo relativo più basso) → la spinta d’acquisto è “debole”, possibile esaurimento e inversione.
Note pratiche: cercare divergenze su timeframe maggiori (H4, D) per maggiore attendibilità; sui timeframe minori prendere solo come early warning.
7) Esempi d’uso operativo
Conferma breakout: prezzo rompe resistenza + FlowPulse positivo e crescente → breakout più probabile e con volumi reali.
Filtro per falsi segnali: prezzo rompe ma FlowPulse è piatto/negativo → alto rischio di false breakout.
Entrata per pullback: dopo breakout, attendere un pullback con FlowPulse che torna positivo → ingresso più prudente.
Gestione delle uscite: se sei long e FlowPulse improvvisamente si inverte in negativo su volumi elevati → considerare riduzione posizione o stop.
8) Timeframe consigliati
Intraday / Scalping: M5–M30 con length ridotto (es. 10–14) e smoothLen piccolo.
Swing trading: H1–H4 con length 20–50.
Position trading: D1 con length maggiore per filtrare rumore.
Testa i parametri sul tuo asset e timeframe; nessun parametro è universale.
9) Limitazioni e avvertenze
L’indicatore non è un sistema di trading completo: è un tool di informazione e timing.
Dipende dalla qualità dei dati di volume del simbolo: su alcuni titoli/mercati (es. alcuni ETF, Forex su certi broker) il volume può essere parziale o non rappresentativo.
I valori di margine/multiplier e smoothing influenzano sensibilmente sensibilità e falsi segnali: backtest e ottimizzazione sono raccomandati.
Non usare il solo FlowPulse per entrare su leva elevata senza gestione del rischio12) Disclaimer da inserire
Disclaimer: Questo indicatore è fornito solo a scopo didattico e non costituisce consulenza finanziaria. L’uso comporta rischi: valuta sempre la gestione del rischio e testa su conto demo prima dell’applicazione in reale.
5m Hammer Detector Pro (Clean View)//@version=5
indicator("5m Hammer Detector Pro (Clean View)", overlay=true)
// ===== Inputs =====
tf_detect = input.timeframe("5", "Detection timeframe (keep 5 for 5-min)")
min_lower_to_body = input.float(2.0, "Min lower-wick / body ratio", step=0.1)
max_upper_to_body = input.float(0.5, "Max upper-wick / body ratio", step=0.1)
max_body_to_range = input.float(0.30, "Max body / total-range ratio", step=0.01)
min_lower_to_range = input.float(0.45, "Min lower-wick / total-range ratio", step=0.01)
use_bullish_only = input.bool(true, "Only bullish hammer (close > open)?")
vol_mult = input.float(1.5, "Volume threshold multiplier (x avg volume)", step=0.1)
confirm_next_candle = input.bool(true, "Require next bullish candle for confirmation?")
// ===== Hammer Logic =====
f_is_hammer(o, h, l, c) =>
body = math.abs(c - o)
lower = math.min(o, c) - l
upper = h - math.max(o, c)
rng = h - l
body := body == 0 ? 0.0000001 : body
rng := rng == 0 ? 0.0000001 : rng
cond1 = (lower / body) >= min_lower_to_body
cond2 = (upper / body) <= max_upper_to_body
cond3 = (body / rng) <= max_body_to_range
cond4 = (lower / rng) >= min_lower_to_range
cond5 = use_bullish_only ? (c > o) : true
cond1 and cond2 and cond3 and cond4 and cond5
// ===== 5-Min Data =====
= request.security(syminfo.tickerid, tf_detect, )
vol_avg = ta.sma(rv, 20)
vol_ok = rv > (vol_avg * vol_mult)
hammer_raw = f_is_hammer(ro, rh, rl, rc)
hammer_with_vol = hammer_raw and vol_ok
= request.security(syminfo.tickerid, tf_detect, [open , high , low , close ])
confirmed = confirm_next_candle ? (hammer_with_vol and rc > ro and nc > rh) : hammer_with_vol
new_candle_5m = ta.change(rc) != 0
hammer_final = confirmed and new_candle_5m
// ===== Plot hammer mark only =====
plotshape(hammer_final, title="Hammer Signal", location=location.belowbar,
style=shape.labelup, text="✅ HAMMER 5m", color=color.new(color.green, 0),
textcolor=color.white, size=size.tiny)
bgcolor(hammer_final ? color.new(color.green, 85) : na)
// ===== Alert =====
alertcondition(hammer_final, title="5m Hammer Confirmed Alert",
message="🔥 {{ticker}} | 5m Confirmed Hammer at {{time}} | Vol OK | Close: {{close}}")
Spectre On-Chain Season (CMC #101–2000, Nov’21/Nov’24 Anchors)Spectre On-Chain Season Index measures the real health of the on-chain market by focusing on the mid-tail of crypto — not Bitcoin, not ETH, not the Top 100.
Instead of tracking hype at the top of the market, this index looks at coins ranked #101–#2000 on CoinMarketCap and compares their current price performance to their cycle highs from:
November 2021 peak
November 2024 peak
WaleedGhuman SMT/MSS/OF/ModelsAt the core of the WaleedGhuman SMT/MSS/OF/Models indicator lies a sophisticated Smart Money Technique (SMT) Divergence Engine that operates across specific distinct timeframes simultaneously. The result is a comprehensive market analysis tool that bridges the gap between macro market structure and micro price action, delivering institutional-grade divergence analysis in an accessible, visually intuitive format.
Elliott Wave Expert AdvisorElliott Wave Expert Advisor - Professional Wave Analysis Tool
OVERVIEW
--------
The Elliott Wave Expert Advisor is a comprehensive Pine Script indicator designed for TradingView that automates Elliott Wave analysis and generates high-probability trading signals. Built on Ralph Nelson Elliott's Wave Principle, this indicator identifies impulse wave patterns, validates them against strict Elliott Wave rules, and provides precise entry points with calculated risk management levels.
CORE FUNCTIONALITY
------------------
1. TREND DETECTION
- Dual Moving Average system (Fast/Slow MA)
- MACD confirmation for trend strength
- Automatic trend classification (Uptrend/Downtrend/Sideways)
- Only generates signals aligned with main trend
2. SWING POINT DETECTION
- Automatic pivot high/low identification
- Configurable sensitivity (lookback periods)
- Minimum swing size filtering to reduce noise
- ZigZag visualization connecting swing points
3. WAVE IDENTIFICATION
- 5-wave impulse pattern recognition (1-2-3-4-5)
- 3-wave corrective pattern detection (A-B-C)
- Wave labels displayed on chart
- Color-coded validation status (Blue = Valid, Orange = Pending)
4. ELLIOTT WAVE RULES VALIDATION
Strictly enforces three cardinal rules:
- Rule 1: Wave 2 never retraces more than 100% of Wave 1
- Rule 2: Wave 3 is never the shortest impulse wave
- Rule 3: Wave 4 never overlaps Wave 1 price territory
5. FIBONACCI ANALYSIS
- Automatic Fibonacci retracement calculations (23.6%, 38.2%, 50%, 61.8%, 78.6%)
- Fibonacci extension projections (100%, 161.8%, 261.8%)
- Wave 3 and Wave 5 target projections
- Fibonacci-based Take Profit levels
6. SIGNAL GENERATION
- Entry signals at Wave 2 completion (catch Wave 3)
- Entry signals at Wave 4 completion (catch Wave 5)
- Automatic Stop Loss placement below/above pivot points
- Multiple Take Profit targets (TP1 at 1.618 extension, TP2 at Wave 5 projection)
- Risk/Reward ratio calculation and filtering
- Minimum R:R threshold (default 1.5:1)
7. VISUAL ELEMENTS
- Pivot markers (H/L) showing swing highs and lows
- ZigZag lines connecting swing points
- Wave number labels (1-2-3-4-5) with validation colors
- Entry signal arrows (Green = BUY, Red = SELL)
- Stop Loss lines (Red dashed)
- Take Profit lines (Green dashed and dotted)
- Real-time status dashboard showing:
* Number of pivots detected
* Wave count progress (X/5)
* Pattern validation status
* Market trend direction
* Signal active status
* Helpful tips and guidance
OPTIMAL USAGE
-------------
• Timeframes: H1, H4, D1 (avoid M1-M5 due to noise)
• Markets: Forex majors (EUR/USD, GBP/USD), Gold (XAU/USD), Major Cryptocurrencies
• Market Conditions: Strong trending markets (avoid ranging/sideways conditions)
• Risk Management: Never risk more than 1-2% per trade
• Position Sizing: Based on calculated Stop Loss distance
CONFIGURATION PARAMETERS
------------------------
Trend Detection:
- MA Fast Period (default: 20)
- MA Slow Period (default: 50)
- MACD settings (12/26/9)
Swing Detection:
- Pivot Lookback Left/Right (default: 10/10, reduce to 5/5 for M15)
- Min Swing Size % (default: 0.1%, reduce to 0.05% for M15)
Wave Detection:
- Min Wave Size % (default: 0.5%, reduce to 0.2-0.3% for smaller timeframes)
Risk Management:
- SL Buffer % (default: 0.1%)
- TP1 Fibonacci Ratio (default: 1.618)
- Min Risk/Reward (default: 1.5)
Visualization:
- Toggle visibility for MAs, ZigZag, Wave Labels, Signals, SL/TP
- Customizable colors for all elements
- Optional trend background coloring
IMPORTANT NOTES
---------------
• Elliott Wave analysis is subjective - this indicator implements one specific interpretation
• Works best in trending markets; automatically suppresses signals in sideways conditions
• Signals are NOT repainting after pivot confirmation
• Not a "holy grail" - combine with other analysis and proper risk management
• Requires patience - quality setups are infrequent but high-probability
• Always backtest on historical data before live trading
ELLIOTT WAVE THEORY BACKGROUND
------------------------------
Elliott Wave Theory, developed by Ralph Nelson Elliott in the 1930s, proposes that market prices move in predictable wave patterns driven by investor psychology. An impulse wave consists of five sub-waves (three in the trend direction, two corrections), followed by a three-wave correction. This indicator automates the identification of these patterns and validates them against Elliott's original rules.
DISCLAIMER
----------
This indicator is for educational and informational purposes only. Past performance does not guarantee future results. Always conduct your own analysis and never trade with money you cannot afford to lose. The indicator provides signals based on technical analysis patterns and does not constitute financial advice.
VERSION
-------
v1.0 - Initial Release
Pine Script v5
Created: 2024
SUPPORT
-------
For detailed usage instructions, refer to the included documentation:
- usage_guide.md - Complete user manual with examples
- elliott_rules.md - Elliott Wave theory reference and implementation details
McRib Release Dates IndicatorMarks the McRib release dates from 2019-Current. Previous dates from Pre-2019 weren't clear enough to include accurate info. Goated Indicator. 67 😎






















