Stoch RSI Buy/Sell Signals with AlertsMy charts show HBM and CMCL graphs. The colors show you when to buy and when to sell.
The script is data-driven:
It calculates RSI and Stoch RSI based on each ticker’s own price movement.
The %K and %D lines are smoothed from that ticker’s momentum.
Signals only fire when that ticker’s %K crosses %D in the right zone.
So if CMCL is oversold and HBM is overbought, you’ll get:
✅ Green K line and green background on CMCL
❌ Red K line and red background on HBM
Even if they both show gray at the same time, it’s because neither is in a signal zone — not because the charts are duplicates.
Indicators and strategies
Instant Volume Flow1. Volume Bars (Green/Red)
Shows instantly whether buyers or sellers are dominant.
2. Delta Volume Histogram
Green = net buying pressure
Red = net selling pressure
This lets you spot:
Big sell dumps
Sudden buy absorption
Volume momentum shifts
3. Spike Alerts
You get alerts when volume is more than 2× the 20-MA average volume.
VWAP + EMA9/21/50 + Ichimoku + RSI (M5) - Strict + TPSL//@version=5
indicator("VWAP + EMA9/21/50 + Ichimoku + RSI (M5) - Strict + TPSL", overlay=true, shorttitle="VWAP_EMA_ICH_RSI_TPSL")
// === Inputs ===
emaFastLen = input.int(9, "EMA Fast (9)")
emaMidLen = input.int(21, "EMA Mid (21)")
emaSlowLen = input.int(50, "EMA Slow (50)")
// Ichimoku inputs
tenkanLen = input.int(9, "Tenkan Sen Length")
kijunLen = input.int(26, "Kijun Sen Length")
senkouBLen = input.int(52, "Senkou B Length")
displacement = input.int(26, "Displacement")
// RSI
rsiLen = input.int(14, "RSI Length")
rsiThreshold = input.int(50, "RSI Threshold")
// VWAP option
useSessionVWAP = input.bool(true, "Use Session VWAP (true) / Daily VWAP (false)")
// Volume filter
useVolumeFilter = input.bool(true, "Enable Volume Filter")
volAvgLen = input.int(20, "Volume Avg Length")
volMultiplier = input.float(1.2, "Min Volume > avg *", step=0.1)
// Higher timeframe trend check
useHTF = input.bool(true, "Enable Higher-Timeframe Trend Check")
htfTF = input.string("60", "HTF timeframe (e.g. 60, 240, D)")
// Alerts / webhook
alertOn = input.bool(true, "Enable Alerts")
useWebhook = input.bool(true, "Send webhook on alerts")
webhookURL = input.string("", "Webhook URL (leave blank to set in alert)")
// TP/SL & Trailing inputs
useTP = input.bool(true, "Enable Take Profit (TP)")
tpTypeRR = input.bool(true, "TP as Risk-Reward ratio (true) / Fixed points (false)")
tpRR = input.float(1.5, "TP RR (e.g. 1.5)", step=0.1)
fixedTPpts = input.float(40.0, "Fixed TP (ticks/pips) if not RR")
useSL = input.bool(true, "Enable Stop Loss (SL)")
slTypeATR = input.bool(true, "SL as ATR-based (true) / Fixed points (false)")
atrLen = input.int(14, "ATR Length")
atrMult = input.float(1.5, "ATR Multiplier for SL", step=0.1)
fixedSLpts = input.float(20.0, "Fixed SL (ticks/pips) if not ATR")
useTrailing = input.bool(true, "Enable Trailing Stop")
trailType = input.string("ATR", "Trailing type: ATR or EMA", options= ) // "ATR" or "EMA"
trailATRmult = input.float(1.0, "Trailing ATR Multiplier", step=0.1)
trailEMAlen = input.int(9, "Trailing EMA Length (if EMA chosen)")
trailLockInPts = input.float(5.0, "Trail lock-in (min profit before trail active, pts)")
// Other
showArrows = input.bool(true, "Show Entry Arrows")
// === Calculations ===
ema9 = ta.ema(close, emaFastLen)
ema21 = ta.ema(close, emaMidLen)
ema50 = ta.ema(close, emaSlowLen)
// VWAP
vwapVal = ta.vwap
// Ichimoku
highestHighTenkan = ta.highest(high, tenkanLen)
lowestLowTenkan = ta.lowest(low, tenkanLen)
tenkan = (highestHighTenkan + lowestLowTenkan) / 2
highestHighKijun = ta.highest(high, kijunLen)
lowestLowKijun = ta.lowest(low, kijunLen)
kijun = (highestHighKijun + lowestLowKijun) / 2
highestHighSenkouB = ta.highest(high, senkouBLen)
lowestLowSenkouB = ta.lowest(low, senkouBLen)
senkouB = (highestHighSenkouB + lowestLowSenkouB) / 2
senkouA = (tenkan + kijun) / 2
// RSI
rsi = ta.rsi(close, rsiLen)
// Volume
volAvg = ta.sma(volume, volAvgLen)
volOk = not useVolumeFilter or (volume > volAvg * volMultiplier)
// Higher timeframe trend values
htf_close = request.security(syminfo.tickerid, htfTF, close)
htf_ema50 = request.security(syminfo.tickerid, htfTF, ta.ema(close, emaSlowLen))
htf_rsi = request.security(syminfo.tickerid, htfTF, ta.rsi(close, rsiLen))
htf_bull = htf_close > htf_ema50
htf_bear = htf_close < htf_ema50
htf_ok = not useHTF or (htf_bull and close > ema50) or (htf_bear and close < ema50)
// Trend filters (on current timeframe)
priceAboveVWAP = close > vwapVal
priceAboveEMA50 = close > ema50
priceAboveCloud = close > senkouA and close > senkouB
bullTrend = priceAboveVWAP and priceAboveEMA50 and priceAboveCloud
bearTrend = not priceAboveVWAP and not priceAboveEMA50 and not priceAboveCloud
// Pullback detection (price near EMA21 within tolerance)
tolPerc = input.float(0.35, "Pullback tolerance (%)", step=0.05) / 100.0
nearEMA21 = math.abs(close - ema21) <= ema21 * tolPerc
// Entry conditions
emaCrossUp = ta.crossover(ema9, ema21)
emaCrossDown = ta.crossunder(ema9, ema21)
longConditionBasic = bullTrend and (nearEMA21 or close >= vwapVal) and emaCrossUp and rsi > rsiThreshold
shortConditionBasic = bearTrend and (nearEMA21 or close <= vwapVal) and emaCrossDown and rsi < rsiThreshold
longCondition = longConditionBasic and volOk and htf_ok and (not useHTF or htf_bull) and (rsi > rsiThreshold)
shortCondition = shortConditionBasic and volOk and htf_ok and (not useHTF or htf_bear) and (rsi < rsiThreshold)
// More strict: require Tenkan > Kijun for bull and Tenkan < Kijun for bear
ichimokuAlign = (tenkan > kijun) ? 1 : (tenkan < kijun ? -1 : 0)
longCondition := longCondition and (ichimokuAlign == 1)
shortCondition := shortCondition and (ichimokuAlign == -1)
// ATR for SL / trailing
atr = ta.atr(atrLen)
// --- Trade management state variables ---
var float activeLongEntry = na
var float activeShortEntry = na
var float activeLongSL = na
var float activeShortSL = na
var float activeLongTP = na
var float activeShortTP = na
var float activeLongTrail = na
var float activeShortTrail = na
// Function to convert fixed points to price (assumes chart in points as price units)
fixedToPriceLong(p) => p
fixedToPriceShort(p) => p
// On signal, set entry, SL and TP
if longCondition
activeLongEntry := close
// SL
if useSL
if slTypeATR
activeLongSL := close - atr * atrMult
else
activeLongSL := close - fixedToPriceLong(fixedSLpts)
else
activeLongSL := na
// TP
if useTP
if tpTypeRR and useSL and not na(activeLongSL)
risk = activeLongEntry - activeLongSL
activeLongTP := activeLongEntry + risk * tpRR
else
activeLongTP := activeLongEntry + fixedToPriceLong(fixedTPpts)
else
activeLongTP := na
// reset short
activeShortEntry := na
activeShortSL := na
activeShortTP := na
// init trailing
activeLongTrail := activeLongSL
if shortCondition
activeShortEntry := close
if useSL
if slTypeATR
activeShortSL := close + atr * atrMult
else
activeShortSL := close + fixedToPriceShort(fixedSLpts)
else
activeShortSL := na
if useTP
if tpTypeRR and useSL and not na(activeShortSL)
riskS = activeShortSL - activeShortEntry
activeShortTP := activeShortEntry - riskS * tpRR
else
activeShortTP := activeShortEntry - fixedToPriceShort(fixedTPpts)
else
activeShortTP := na
// reset long
activeLongEntry := na
activeLongSL := na
activeLongTP := na
// init trailing
activeShortTrail := activeShortSL
// Trailing logic (update only when in profit beyond 'lock-in')
if not na(activeLongEntry) and useTrailing
// current unrealized profit in points
currProfitPts = close - activeLongEntry
if currProfitPts >= trailLockInPts
// declare candidate before use to avoid undeclared identifier errors
float candidate = na
if trailType == "ATR"
candidate := close - atr * trailATRmult
else
candidate := close - ta.ema(close, trailEMAlen)
// move trail stop up but never below initial SL
activeLongTrail := math.max(nz(activeLongTrail, activeLongSL), candidate)
// ensure trail never goes below initial SL if SL exists
if useSL and not na(activeLongSL)
activeLongTrail := math.max(activeLongTrail, activeLongSL)
// update SL to trailing
activeLongSL := activeLongTrail
if not na(activeShortEntry) and useTrailing
currProfitPtsS = activeShortEntry - close
if currProfitPtsS >= trailLockInPts
// declare candidateS before use
float candidateS = na
if trailType == "ATR"
candidateS := close + atr * trailATRmult
else
candidateS := close + ta.ema(close, trailEMAlen)
activeShortTrail := math.min(nz(activeShortTrail, activeShortSL), candidateS)
if useSL and not na(activeShortSL)
activeShortTrail := math.min(activeShortTrail, activeShortSL)
activeShortSL := activeShortTrail
// Detect TP/SL hits (for plotting & alerts)
longTPHit = not na(activeLongTP) and close >= activeLongTP
longSLHit = not na(activeLongSL) and close <= activeLongSL
shortTPHit = not na(activeShortTP) and close <= activeShortTP
shortSLHit = not na(activeShortSL) and close >= activeShortSL
if longTPHit or longSLHit
// reset long state after hit
activeLongEntry := na
activeLongSL := na
activeLongTP := na
activeLongTrail := na
if shortTPHit or shortSLHit
activeShortEntry := na
activeShortSL := na
activeShortTP := na
activeShortTrail := na
// Plot EMAs
p_ema9 = plot(ema9, title="EMA9", linewidth=1)
plot(ema21, title="EMA21", linewidth=1)
plot(ema50, title="EMA50", linewidth=2)
// Plot VWAP
plot(vwapVal, title="VWAP", linewidth=2, style=plot.style_line)
// Plot Ichimoku lines (Tenkan & Kijun)
plot(tenkan, title="Tenkan", linewidth=1)
plot(kijun, title="Kijun", linewidth=1)
// Plot cloud (senkouA & senkouB shifted forward)
plot(senkouA, title="Senkou A", offset=displacement, transp=60)
plot(senkouB, title="Senkou B", offset=displacement, transp=60)
fill(plot(senkouA, offset=displacement), plot(senkouB, offset=displacement), color = senkouA > senkouB ? color.new(color.green, 80) : color.new(color.red, 80))
// Plot active trade lines
plotshape(not na(activeLongEntry), title="Active Long", location=location.belowbar, color=color.new(color.green, 0), style=shape.circle, size=size.tiny)
plotshape(not na(activeShortEntry), title="Active Short", location=location.abovebar, color=color.new(color.red, 0), style=shape.circle, size=size.tiny)
plot(activeLongSL, title="Long SL", color=color.red, linewidth=2)
plot(activeLongTP, title="Long TP", color=color.green, linewidth=2)
plot(activeShortSL, title="Short SL", color=color.red, linewidth=2)
plot(activeShortTP, title="Short TP", color=color.green, linewidth=2)
// Arrows / labels
if showArrows
if longCondition
label.new(bar_index, low, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)
if shortCondition
label.new(bar_index, high, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)
// Alerts
// alertcondition must be declared in global scope so TradingView can create alerts from them
alertcondition(longCondition, "VWAP+EMA+Ichimoku+RSI — BUY (STRICT)", "BUY signal from VWAP+EMA+Ichimoku+RSI (STRICT)")
alertcondition(shortCondition, "VWAP+EMA+Ichimoku+RSI — SELL (STRICT)", "SELL signal from VWAP+EMA+Ichimoku+RSI (STRICT)")
// Runtime alerts (still use alert() to trigger immediate alerts; webhook is added in TradingView Alert dialog)
if alertOn
if longCondition
alert("VWAP+EMA+Ichimoku+RSI — BUY (STRICT)", alert.freq_once_per_bar_close)
if shortCondition
alert("VWAP+EMA+Ichimoku+RSI — SELL (STRICT)", alert.freq_once_per_bar_close)
// Alerts for TP/SL hits
if longTPHit
alert("LONG TP HIT", alert.freq_once_per_bar_close)
if longSLHit
alert("LONG SL HIT", alert.freq_once_per_bar_close)
if shortTPHit
alert("SHORT TP HIT", alert.freq_once_per_bar_close)
if shortSLHit
alert("SHORT SL HIT", alert.freq_once_per_bar_close)
// Info table
var table info = table.new(position.top_right, 1, 8)
if barstate.islast
table.cell(info, 0, 0, text = 'Trend: ' + (bullTrend ? 'Bull' : bearTrend ? 'Bear' : 'Neutral'))
table.cell(info, 0, 1, text = 'EMA9/21/50: ' + str.tostring(ema9, format.mintick) + ' / ' + str.tostring(ema21, format.mintick) + ' / ' + str.tostring(ema50, format.mintick))
table.cell(info, 0, 2, text = 'VWAP: ' + str.tostring(vwapVal, format.mintick))
table.cell(info, 0, 3, text = 'RSI: ' + str.tostring(rsi, format.mintick))
table.cell(info, 0, 4, text = 'Vol OK: ' + (volOk ? 'Yes' : 'No'))
table.cell(info, 0, 5, text = 'HTF: ' + htfTF + ' ' + (htf_bull ? 'Bull' : htf_bear ? 'Bear' : 'Neutral'))
table.cell(info, 0, 6, text = 'ActiveLong: ' + (not na(activeLongEntry) ? 'Yes' : 'No'))
table.cell(info, 0, 7, text = 'ActiveShort: ' + (not na(activeShortEntry) ? 'Yes' : 'No'))
// End of script
Ichimoku Multi-Timeframe Heatmap 12/5/2025
Multi-Timeframe Ichimoku Heatmap - Scan Your Watchlist in Seconds
This indicator displays all 5 critical Ichimoku signals (Cloud Angle, Lagging Line, Price vs Cloud, Kijun Slope, and Tenkan/Kijun Cross) across 10 timeframes (15s, 1m, 3m, 5m, 15m, 30m, 1h, 4h, Daily, Weekly) in one compact heatmap table. Instantly spot multi-timeframe trend alignment with color-coded cells: green for bullish, red for bearish, and gray for neutral. Perfect for quickly scanning through your entire watchlist to identify the strongest setups with confluent signals across all timeframes.
Buy-Sell Arrows – SuperTrend Entries OnlyRecommended Rules for "Buy Calls Only + Exit Fast on Downtrend"
Signal from SuperTrend Script Your Action (Calls Only)
Green BUY arrow → Enter calls (ATM or slightly OTM, 21–45 DTE)
Red SELL arrow → Immediately exit the call (market order or tight stop) — do NOT wait
No position between signals Stay in cash — no calls open during red SuperTrend phases
MC² Daily Candidates (v1.0 SAFE)// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © mason_fibkins
//@version=5
indicator("MC² Daily Candidates (v1.0 SAFE)", overlay=true)
// ──────────────────────────────────────────
// INTERNAL DAILY DATA (NO TIMEFRAME ARGUMENT)
// ──────────────────────────────────────────
getDaily(_src) =>
request.security(syminfo.tickerid, "D", _src)
// Daily values
d_close = getDaily(close)
d_open = getDaily(open)
d_high = getDaily(high)
d_low = getDaily(low)
d_vol = getDaily(volume)
// ──────────────────────────────────────────
// Parameters
// ──────────────────────────────────────────
lookbackVol = input.int(10, "Vol Lookback (days)")
atrLength = input.int(14, "ATR Length")
emaLen = input.int(20, "EMA Length")
smaLen = input.int(50, "SMA Length")
// ──────────────────────────────────────────
// Core Calculations (DAILY)
// ──────────────────────────────────────────
// Relative Volume
relVol = d_vol / request.security(syminfo.tickerid, "D", ta.sma(volume, lookbackVol))
// Momentum — last 2 daily bullish candles
twoGreen = (d_close > d_open) and (request.security(syminfo.tickerid, "D", close ) > request.security(syminfo.tickerid, "D", open ))
// Trend filters
emaTrend = d_close > request.security(syminfo.tickerid, "D", ta.ema(close, emaLen))
smaTrend = d_close > request.security(syminfo.tickerid, "D", ta.sma(close, smaLen))
// ATR Expansion
d_atr = request.security(syminfo.tickerid, "D", ta.atr(atrLength))
atrExpand = d_atr > request.security(syminfo.tickerid, "D", ta.atr(atrLength))
// Strong Close
dayRange = d_high - d_low
closePos = dayRange > 0 ? (d_close - d_low) / dayRange : 0.5
strongClose = closePos > 0.70
// MASTER CONDITION
candidate = relVol > 2.0 and twoGreen and emaTrend and smaTrend and atrExpand and strongClose
// ──────────────────────────────────────────
// PLOT — GREEN CIRCLE BELOW DAILY BARS
// ──────────────────────────────────────────
plotshape(candidate, title="Daily Candidate", style=shape.circle, size=size.large, color=color.new(color.green, 0), location=location.belowbar, text="MC²")
// ──────────────────────────────────────────
// END
// ──────────────────────────────────────────
plot(candidate ? 1 : 0, title="MC2_Signal", display=display.none)
alertable spaceman v2slight modification to Key Levels SpacemanBTC IDWM script
credit: spacemanbtc
this is a new version to fix a bug that would pop unwanted alerts on certain levels. I realised the issue was how tradingview handles time. in tradingview,1D paints a new candle at 7pm NY time, but in low timeframe, the "next" day doesn't officially start until 12a.m, like a military clock would. this would cause some repainting issues.
implemented some changes by using stable values that would hopefully circumvent that. script is open sourced in case anyone wants to use it to make changes in case there are other issues
SMC Pre-Trade Checklist (Mozzys)Here is a **clean, professional description** you can use when publishing your TradingView script.
It clearly explains what the indicator does and why traders use it—perfect for the public library.
---
# **📌 Script Description (for Publishing)**
**SMC Pre-Trade Checklist (Compact Edition)**
This indicator provides a **smart, compact on-chart checklist** designed for traders who use **Smart Money Concepts (SMC)**.
Instead of guessing or rushing entries, the checklist helps you confirm the essential SMC conditions *before* taking a trade.
The checklist displays as a **small 3-column panel** in the corner of your chart, making it easy to scan without covering price action.
All items are controlled through indicator settings, where you can tick each condition as you validate it in your analysis.
---
## **🔥 What This Tool Helps You Do**
This script helps you stay disciplined by verifying the core components of an SMC setup:
### **1. Higher-Timeframe (HTF) Bias**
* Market direction clarity
* Premium vs. discount zones
* HTF POIs and liquidity targets
### **2. Liquidity Conditions**
* Liquidity sweeps
* Liquidity-based take-profit targets
### **3. Market Structure**
* BOS/CHOCH confirmation
* Displacement
* Clean pullback into POI
### **4. Entry Validation**
* Quality POI
* LTF confirmation
* Logical SL/TP and RR
### **5. Risk Management**
* Correct position sizing
* Avoiding high-impact news
* Spread/volatility conditions
### **6. Trader Discipline**
* Trade matches your model
* No revenge or emotional trading
---
## **🎯 Why Traders Love This**
Most losses come from **breaking rules**, not market randomness.
This checklist forces consistency, clarity, and patience—especially in fast environments like FX, indices, and crypto.
* Prevents emotional entries
* Reduces impulsive trades
* Keeps you aligned with your SMC plan
* Works with any strategy or SMC style
* Clean, minimal, non-intrusive layout
---
## **📌 Features**
* Compact 3-column layout
* Customizable from the indicator settings
* Works on all timeframes and assets
* Zero chart clutter
* Perfect for rule-based traders
---
## **🚀 Who This Indicator Is For**
* SMC traders
* ICT-style traders
* Liquidity-based traders
* Anyone who wants more discipline & consistency
* Backtesters who want structured trade evaluation
--
Pharma vs Market Monthly Returns (XLV vs SPY)A Bloomberg-style pharma momentum indicator built for TradingView.
This script recreates the “Pharma Index Monthly Returns” chart highlighted by Jordi Visser in his Youtube video — offering a clean, accessible poor man’s Bloomberg version of sector-rotation analysis for users without institutional data feeds.
Features
• XLV monthly returns (absolute mode)
• XLV vs SPY relative monthly returns (market-neutral mode)
• Top 5 strongest months ★ (momentum spikes)
• Top 5 weakest months ★ (capitulation signals)
• Optional 6-month rolling momentum line (regime trend)
• Full history from 1998 (XLV inception)
Use Cases
Ideal for tracking pharma/healthcare sector regimes, macro rotations, biotech cycles, and timing asymmetric entries in innovation themes (AI-pharma, computational drug discovery, biotech moonshots, etc.).
ICT Asian & London Range + First Presented FVGIndicator: ICT Sessions + First Presented FVG
What it does: This tool automates the markup of key ICT (Inner Circle Trader) timeframes and entry signals. It allows you to trade on higher timeframes (like the 5m or 15m) while the script automatically "looks inside" the 1-minute chart to find specific setups for you.
Key Features:
Session Ranges (Asian & London)
Automatically highlights the Asian Session (8 PM - Midnight NY) and London Open (2 AM - 5 AM NY).
Draws a shaded box for the session's High and Low.
New: Extends the High and Low lines to 4:00 PM NY (end of the trading day) so you can use them as liquidity targets.
The "First Presented" FVG (Sniper Logic)
It detects the very first Fair Value Gap (FVG) that forms on the 1-minute chart immediately after a session starts.
It draws this 1-minute gap on your current chart, regardless of what timeframe you are viewing.
The FVG box automatically extends to the end of the trading day (4 PM NY), showing you where price might return to "mitigate" or react later in the day.
Trend with ADX, multiple EMAs - Buy & Sell✔ Trend Direction
Via DI+ > DI–
✔ Trend Strength
Via ADX
✔ Fast Entry Signals
5/8 EMA crossovers
✔ Larger Trend Confirmation
13/48 EMA crossovers
✔ Macro Trend
EMA 200
✔ Intraday Bias
VWAP
✔ Visual Trend (background)
✔ Alerts for signals + trend shifts
The Quantum Leap: Renko + ML(Note: This indicator uses the BackQuant & SuperTrend which takes a 4-5 seconds to load)
This strategy uses the following indicators (please see source code)
Synthetic Renko: Ignores time and focuses purely on price movement to detect clear trend reversals (Red-to-Green).
ATR (Average True Range): Measures volatility to calculate the Renko brick sizes and SuperTrend sensitivity.
Adaptive SuperTrend: A trend filter that uses volatility clustering to confirm if the market is currently in a "Bearish" state.
RSI (Relative Strength Index): A momentum gauge ensuring the asset is "Oversold" (exhausted) before we consider a setup.
Monthly Pivots: Horizontal support lines based on last month's data acting as price "floors" (S1, S2, S3).
SMA (Simple Moving Average): A 100-bar average ensuring we are strictly buying below the long-term mean (deep value).
BackQuant (KNN): A Machine Learning engine that compares current data to historical patterns to predict immediate momentum.
This is a sophisticated, multi-stage strategy script. It combines "Old School" price action (Renko) with "New School" Machine Learning (KNN and Clustering).
Here is the high-level summary of how we will break this down:
Topic 1: The "Bottom Hunter" Setup. How the script uses Renko bricks and aggressive filtering (SuperTrend, SMA, RSI, Pivots) to find a potential market bottom.
Topic 2: The ML Engine (BackQuant & SuperTrend). How the script uses K-Nearest Neighbors (KNN) to predict momentum and Volatility Clustering to adjust the SuperTrend.
Topic 3: The "Leap" Execution. How the script synchronizes the Setup (Topic 1) with the ML Trigger (Topic 2) using a time window.
Topic 1: The "Bottom Hunter" Setup
This script is designed as a Mean Reversion strategy (often called "catching a falling knife" or "bottom fishing"). It is trying to find the exact moment a downtrend stops and reverses.
Most strategies buy when price is above the 200 SMA or above the SuperTrend. This script does the exact opposite.
The Logic:
Renko Bricks: It simulates Renko bricks internally (without changing your chart view). It waits for a specific pattern: A Red Brick followed immediately by a Green Brick (a reversal).
The "Bearish" Filters: To generate a "WATCH" signal, the following must be true:
Price < SuperTrend: The market must officially be in a downtrend.
Price < SMA: Long-term trend is down.
Price < Monthly Pivot: Price is deeply discounted.
RSI < Threshold: The asset is oversold (exhausted).
Recommended Settings for daily signals for Stocks :
Confirmation : 10. (How many bars after Renko Buy signal the AI has to identify a bullish move).
Percentage : 2 (This is the Renko bar size. This represents 2% move.)
SMA: 100 (Signal must be found below 100 SMA)
Price must be below: PIVOT (This is the monthly Pivot levels)
3rd Candle Coach – VWAP/ORB Tool3rd Candle Coach, VWAP and ORB Logic Script
This script helps you spot clean setups by checking your key conditions at the same time. It shows a simple pass or fail for each piece and prints a signal only when everything agrees.
What this script checks:
1. **3 Candle Breakouts from VWAP, Volume Weighted Average Price, or ORB, Opening Range Breakout**
* Needs two full candles above or below VWAP or ORB
* Third candle must follow in the same direction
* Marks the setup once all three confirm
2. **Trend Using EMAs, Exponential Moving Averages (9 and 21)**
* Shows if the fast EMA is above or below the slow EMA
* Can confirm if the EMAs support the trade direction
3. **Momentum Using RSI, Relative Strength Index, and MACD, Moving Average Convergence Divergence**
* RSI must clear your level for longs or shorts
* MACD must agree with the direction
4. **Volume Check, Simple and Relative Volume Comparison**
* Compares current volume to a volume moving average
* Can check relative volume for strength
5. **Higher Timeframe Trend Using HTF EMA, Higher Timeframe Exponential Moving Average**
* Shows larger trend direction for bias
6. **Session Timing Filter, Session Based Signal Control**
* Lets signals fire only inside your chosen session window
7. **ATR Extension Check, Average True Range Distance from VWAP or ORB**
* Measures how far price has stretched from VWAP or ORB using ATR units
* Blocks signals when the move is too extended
8. **Long and Short Signal Markers, Directional Trade Alerts**
* Prints a long marker when all enabled conditions pass
* Prints a short marker when all enabled conditions pass
9. **Condition Breakdown Panel, Real Time Pass or Fail Table**
* Shows pass or fail for trend, RSI, MACD, volume, relative volume, higher timeframe bias, session, and extension
10. **Explanation Labels, Signal Reasoning Summary**
* When a signal fires, a label shows which conditions triggered it
---
This script gives you a clean checklist and one clear signal only when everything lines up. It helps you see the setup form step by step and keeps your chart easy to read.
---
note:
I built this to help you spot when indicators actually agree. It is mainly a training script. Alerts on the one minute fire a lot, so turn them off or use a five minute chart. You can turn almost everything off to keep it as simple or strict as you want.
RSI + MACD Day Trading Toolkit//@version=6
indicator("RSI + MACD Day Trading Toolkit", overlay = true)
//──────────────────────────────────────────────────────────────────────────────
// 1. INPUTS
//──────────────────────────────────────────────────────────────────────────────
// RSI settings
rsiLength = input.int(14, "RSI Length")
rsiOverbought = input.float(70, "RSI Overbought Level", minval = 50, maxval = 100)
rsiOversold = input.float(30, "RSI Oversold Level", minval = 0, maxval = 50)
// MACD settings (classic 12 / 26 / 9)
macdFastLength = input.int(12, "MACD Fast Length")
macdSlowLength = input.int(26, "MACD Slow Length")
macdSignalLength = input.int(9, "MACD Signal Length")
// Risk model selection
riskModel = input.string("ATR", "Risk Model", options = )
// ATR-based SL/TP
atrLength = input.int(14, "ATR Length")
atrSLMult = input.float(1.5, "SL ATR Multiplier", minval = 0.1, step = 0.1)
atrTPMult = input.float(2.5, "TP ATR Multiplier", minval = 0.1, step = 0.1)
// Percent-based SL/TP (for scalping on very tight spreads)
slPercent = input.float(0.5, "SL % (when Risk Model = Percent)", minval = 0.05, step = 0.05)
tpPercent = input.float(1.0, "TP % (when Risk Model = Percent)", minval = 0.05, step = 0.05)
// Visual / styling
showSLTPLines = input.bool(true, "Plot Stop Loss / Take Profit Lines")
//──────────────────────────────────────────────────────────────────────────────
// 2. CORE INDICATORS: RSI & MACD
//──────────────────────────────────────────────────────────────────────────────
rsiValue = ta.rsi(close, rsiLength)
// Manual MACD calculation (avoids tuple unpacking issues)
macdFastEMA = ta.ema(close, macdFastLength)
macdSlowEMA = ta.ema(close, macdSlowLength)
macdValue = macdFastEMA - macdSlowEMA
macdSignal = ta.ema(macdValue, macdSignalLength)
macdHist = macdValue - macdSignal
atrValue = ta.atr(atrLength)
// Hide internal plots from price scale (still accessible if you change display)
plot(rsiValue, "RSI", display = display.none)
plot(macdValue, "MACD", display = display.none)
plot(macdSignal, "MACD Sig", display = display.none)
plot(macdHist, "MACD Hist", display = display.none)
//──────────────────────────────────────────────────────────────────────────────
// 3. SIGNAL LOGIC (ENTRY CONDITIONS)
//──────────────────────────────────────────────────────────────────────────────
//
// Idea:
// - LONG bias: RSI emerges from oversold AND MACD crosses above signal below zero
// - SHORT bias: RSI falls from overbought AND MACD crosses below signal above zero
//
// Combines momentum (RSI) with trend confirmation (MACD).
//──────────────────────────────────────────────────────────────────────────────
// RSI events
rsiBullCross = ta.crossover(rsiValue, rsiOversold) // RSI crosses UP out of oversold
rsiBearCross = ta.crossunder(rsiValue, rsiOverbought) // RSI crosses DOWN from overbought
// MACD crossover with trend filter
macdBullCross = ta.crossover(macdValue, macdSignal) and macdValue < 0 // Bullish cross below zero-line
macdBearCross = ta.crossunder(macdValue, macdSignal) and macdValue > 0 // Bearish cross above zero-line
// Raw (ungated) entry signals
rawLongSignal = rsiBullCross and macdBullCross
rawShortSignal = rsiBearCross and macdBearCross
//──────────────────────────────────────────────────────────────────────────────
// 4. STATE MANAGEMENT (SIMULATED POSITION TRACKING)
//──────────────────────────────────────────────────────────────────────────────
//
// position: 1 = long
// -1 = short
// 0 = flat
//
// We track entry price and SL/TP levels as if this were a strategy.
// This is still an indicator – it just computes and plots the logic.
//──────────────────────────────────────────────────────────────────────────────
var int position = 0
var float longEntryPrice = na
var float shortEntryPrice = na
var float longSL = na
var float longTP = na
var float shortSL = na
var float shortTP = na
// Per-bar flags (for plotting / alerts)
var bool longEntrySignal = false
var bool shortEntrySignal = false
var bool longExitSignal = false
var bool shortExitSignal = false
// Reset per-bar flags each bar
longEntrySignal := false
shortEntrySignal := false
longExitSignal := false
shortExitSignal := false
//──────────────────────────────────────────────────────────────────────────────
// 5. EXIT LOGIC (STOP LOSS / TAKE PROFIT / OPPOSITE SIGNAL)
//──────────────────────────────────────────────────────────────────────────────
//
// Exits are evaluated BEFORE new entries on each bar.
//──────────────────────────────────────────────────────────────────────────────
// Stop-loss / take-profit hits for existing positions
longStopHit = position == 1 and not na(longSL) and low <= longSL
longTakeHit = position == 1 and not na(longTP) and high >= longTP
shortStopHit = position == -1 and not na(shortSL) and high >= shortSL
shortTakeHit = position == -1 and not na(shortTP) and low <= shortTP
// Opposite signals can also close positions
reverseToShort = position == 1 and rawShortSignal
reverseToLong = position == -1 and rawLongSignal
// Combine exit conditions
longExitNow = longStopHit or longTakeHit or reverseToShort
shortExitNow = shortStopHit or shortTakeHit or reverseToLong
// Register exits and flatten position
if longExitNow and position == 1
longExitSignal := true
position := 0
longEntryPrice := na
longSL := na
longTP := na
if shortExitNow and position == -1
shortExitSignal := true
position := 0
shortEntryPrice := na
shortSL := na
shortTP := na
//──────────────────────────────────────────────────────────────────────────────
// 6. ENTRY LOGIC WITH RISK MODEL (SL/TP CALCULATION)
//──────────────────────────────────────────────────────────────────────────────
//
// Only take a new trade when flat.
// SL/TP are calculated relative to entry price using either ATR or Percent.
//──────────────────────────────────────────────────────────────────────────────
if position == 0
// Long entry
if rawLongSignal
position := 1
longEntryPrice := close
if riskModel == "ATR"
longSL := longEntryPrice - atrValue * atrSLMult
longTP := longEntryPrice + atrValue * atrTPMult
else // Percent model
longSL := longEntryPrice * (1.0 - slPercent / 100.0)
longTP := longEntryPrice * (1.0 + tpPercent / 100.0)
longEntrySignal := true
// Short entry
else if rawShortSignal
position := -1
shortEntryPrice := close
if riskModel == "ATR"
shortSL := shortEntryPrice + atrValue * atrSLMult
shortTP := shortEntryPrice - atrValue * atrTPMult
else // Percent model
shortSL := shortEntryPrice * (1.0 + slPercent / 100.0)
shortTP := shortEntryPrice * (1.0 - tpPercent / 100.0)
shortEntrySignal := true
//──────────────────────────────────────────────────────────────────────────────
// 7. PLOTTING: ENTRIES, EXITS, STOPS & TARGETS
//──────────────────────────────────────────────────────────────────────────────
// Entry markers
plotshape(longEntrySignal, title = "Long Entry", style = shape.triangleup, location = location.belowbar, color = color.new(color.lime, 0), size = size.small, text = "LONG")
plotshape(shortEntrySignal, title = "Short Entry", style = shape.triangledown, location = location.abovebar, color = color.new(color.red, 0), size = size.small, text = "SHORT")
// Exit markers (generic exits: SL, TP or reversal)
plotshape(longExitSignal, title = "Long Exit", style = shape.xcross, location = location.abovebar, color = color.new(color.orange, 0), size = size.tiny, text = "LX")
plotshape(shortExitSignal, title = "Short Exit", style = shape.xcross, location = location.belowbar, color = color.new(color.orange, 0), size = size.tiny, text = "SX")
// Optional: show SL/TP levels on chart while in position
plot(showSLTPLines and position == 1 ? longSL : na, title = "Long Stop Loss", style = plot.style_linebr, color = color.new(color.red, 0), linewidth = 1)
plot(showSLTPLines and position == 1 ? longTP : na, title = "Long Take Profit", style = plot.style_linebr, color = color.new(color.lime, 0), linewidth = 1)
plot(showSLTPLines and position == -1 ? shortSL : na, title = "Short Stop Loss", style = plot.style_linebr, color = color.new(color.red, 0), linewidth = 1)
plot(showSLTPLines and position == -1 ? shortTP : na, title = "Short Take Profit", style = plot.style_linebr, color = color.new(color.lime, 0), linewidth = 1)
//──────────────────────────────────────────────────────────────────────────────
// 8. ALERT CONDITIONS
//──────────────────────────────────────────────────────────────────────────────
//
// Configure TradingView alerts using these conditions.
//──────────────────────────────────────────────────────────────────────────────
// Entry alerts
alertcondition(longEntrySignal, title = "Long Entry (RSI+MACD)", message = "RSI+MACD: Long entry signal")
alertcondition(shortEntrySignal, title = "Short Entry (RSI+MACD)", message = "RSI+MACD: Short entry signal")
// Exit alerts (by type: SL vs TP vs reversal)
alertcondition(longStopHit, title = "Long Stop Loss Hit", message = "RSI+MACD: Long STOP LOSS hit")
alertcondition(longTakeHit, title = "Long Take Profit Hit", message = "RSI+MACD: Long TAKE PROFIT hit")
alertcondition(shortStopHit, title = "Short Stop Loss Hit", message = "RSI+MACD: Short STOP LOSS hit")
alertcondition(shortTakeHit, title = "Short Take Profit Hit", message = "RSI+MACD: Short TAKE PROFIT hit")
alertcondition(reverseToShort, title = "Long Exit by Reverse Signal", message = "RSI+MACD: Long exit by SHORT reverse signal")
alertcondition(reverseToLong, title = "Short Exit by Reverse Signal", message = "RSI+MACD: Short exit by LONG reverse signal")
//──────────────────────────────────────────────────────────────────────────────
// 9. QUICK USAGE NOTES
//──────────────────────────────────────────────────────────────────────────────
//
// - Indicador, não estratégia: ele simula posição, SL/TP e sinais de saída.
// - Para backtest/auto, basta portar a mesma lógica para um script `strategy()`
// usando `strategy.entry` e `strategy.exit`.
// - Em day trade, teste ATR vs Percent e ajuste os multiplicadores ao ativo.
//──────────────────────────────────────────────────────────────────────────────
UM OBV with Signal (EMA/SMA/WMA/NWE)SUMMARY
A visual OBV trend tool that highlights bullish and bearish volume pressure using smart smoothing and intuitive color-coding.
⸻
WHY THIS INDICATOR?
There are only three variables you can adjust on a chart: price, volume, and time. I wanted a good volume indicator.
⸻
DESCRIPTION
This tool extends classic On-Balance Volume with selectable trend smoothing (EMA, SMA, WMA, or NWE) and visual directional coloring on both OBV and the Signal line. Green shows bullish volume flow, red shows bearish volume flow. Optional crossover markers help confirm shifts in buying pressure.
Nadaraya-Watson Regression (NWE) provides a smooth, non-MA alternative for filtering volume trend noise, and optional dual-NWE coloring helps reduce false flips in choppy markets.
⸻
THE CHART
The indicator is added twice at the bottom; once with a 21 EMA and again with a 55 SMA. The chart has text and illustrations to show where the OBV flipped colors. More red equals more selling pressure. More green equals more buying volume or pressure.
⸻
DEFAULTS
• OBV smoothing length = 3
• Signal = 21 EMA
• Crossover bubbles are hidden/off by default
⸻
SUGGESTED USES
• Combine with price structure, momentum, or volatility tools to confirm trend strength.
• Try switching between EMA and NWE on faster intraday charts to see volume trend earlier.
• Use crossover signals as secondary confirmation rather than standalone entries.
• Use this indicator with your other favorite indicators for confirmation.
• Select timeframes suitable to your style of trading.
• I use the 30-minute, 6-hour, and Daily timeframes.
• I question myself if I am buying something with this indicator being red.
• Experiment with various timeframes and settings.
⸻
AUTHOR OBSERVATIONS
OBV often turns before price—especially when volume surges ahead of breakout levels.
NWE tends to smooth choppy OBV much better than traditional moving averages in noisy markets.
Look for Signal color flips at key support/resistance or volatility inflection points.
⸻
ALERTS
Right-click the indicator and choose Add alert… – two presets are available:
• Bullish OBV Turning Up
• Bearish OBV Turning Down
Donchian 20/10 Screener + Alerts Donchian 20/10 Screener + Alerts identifies stocks breaking their 20-day high.
Includes ADX trend filter to confirm strong momentum.
Plots Donchian high/low lines and marks BUY/SELL signals on chart.
Screener output shows “PASS” for stocks meeting entry criteria.
Supports alerts for entry, exit, and screener signals for easy monitoring.
Monthly DCA & Last 10 YearsThis Pine Script indicator simulates a Monthly Dollar Cost Averaging (DCA) strategy to help long-term investors visualize historical performance. Instead of complex timing, the script automatically executes a hypothetical fixed-dollar purchase (e.g., $100) on the first trading day of every month. It visually marks entry points with green "B" labels and plots a dynamic yellow line representing your Global Break-Even Price, allowing you to instantly see if the current price is above or below your average cost basis. To provide deep insight, it generates a detailed performance table in the bottom-right corner that breaks down metrics year-by-year—including total capital invested, shares/coins accumulated, and Profit/Loss percentage—along with a grand total summary of the entire investment period.
KING 2 Super Trend Hull (Multi MA)KING supertrend MA nın multi time frame eklenmiş hali alexsander ma gibi ortalamalar da var içinde
Мой скриптinputs:
window(1),
type(0), // 0: close, 1: high low, 2: fractals up down, 3: new fractals
persistent(False),
exittype(1),
nbars(160),
adxthres(40),
nstop(3000);
vars:
currentSwingLow(0),
currentSwingHigh(0),
trailStructureValid(false),
downFractal(0),
upFractal(0),
breakStructureHigh(0),
breakStructureLow(0),
BoS_H(0),
BoS_L(0),
Regime(0),
Last_BoS_L(0),
Last_BoS_H(0),
PeakfilterX(false);
BoS(window,persistent,type,Bos_H,BoS_L,upFractal,downFractal,breakStructureHigh,breakStructureLow);
//BOS Regime
If BoS_H <> 0 then begin
Regime = 1; // Bullish
Last_BoS_H = BoS_H ;
end;
If BoS_L <> 0 Then begin
Regime = -1; // Bearish
Last_BoS_L = BoS_L ;
end;
//Entry Logic: if we are in BoS regime then wait for break swing to entry
if ADX(5) of data2 < adxthres then begin
if time>900 and Regime = 1 and EntriesToday(date)= 0 and Last_BoS_H upFractal then buy next bar at market;
end;
if time>900 and EntriesToday(date)= 0 and Regime = -1 and Last_BoS_L>downFractal then
begin
if close < downFractal then sellshort next bar at market;
end;
end;
// Exits: nbars or stoploss or at the end of the day
if marketposition <> 0 and barssinceentry >nbars then begin
sell next bar at market;
buytocover next bar at market;
end;
setstoploss(nstop);
setexitonclose;
Stock Relative Strength Rotation Graph🔄 Visualizing Market Rotation & Momentum (Stock RSRG)
This tool visualizes the sector rotation of your watchlist on a single graph. Instead of checking 40 different charts, you can see the entire market cycle in one view. It plots Relative Strength (Trend) vs. Momentum (Velocity) to identify which assets are leading the market and which are lagging.
📜 Credits & Disclaimer
Original Code: Adapted from the open-source " Relative Strength Scatter Plot " by LuxAlgo.
Trademark: This tool is inspired by Relative Rotation Graphs®. Relative Rotation Graphs® is a registered trademark of JOOS Holdings B.V. This script is neither endorsed, nor sponsored, nor affiliated with them.
📊 How It Works (The Math)
The script calculates two metrics for every symbol against a benchmark (Default: SPX):
X-Axis (RS-Ratio): Is the trend stronger than the benchmark? (>100 = Yes)
Y-Axis (RS-Momentum): Is the trend accelerating? (>100 = Yes)
🧩 The 4 Market Quadrants
🟩 Leading (Top-Right): Strong Trend + Accelerating. (Best for holding).
🟦 Improving (Top-Left): Weak Trend + Accelerating. (Best for entries).
⬜ Weakening (Bottom-Right): Strong Trend + Decelerating. (Watch for exits).
🟥 Lagging (Bottom-Left): Weak Trend + Decelerating. (Avoid).
✨ Significant Improvements
This open-source version adds unique features not found in standard rotation scripts:
📝 Quick-Input Engine: Paste up to 40 symbols as a single comma-separated list (e.g., NVDA, AMD, TSLA). No more individual input boxes.
🎯 Quadrant Filtering: You can now hide specific quadrants (like "Lagging") to clear the noise and focus only on actionable setups.
🐛 Trajectory Trails: Visualizes the historical path of the rotation so you can see the direction of momentum.
🛠️ How to Use
Paste Watchlist: Go to settings and paste your symbols (e.g., US Sectors: XLK, XLF, XLE...).
Find Entries: Look for tails moving from Improving ➔ Leading.
Find Exits: Be cautious when tails move from Leading ➔ Weakening.
Zoom: Use the "Scatter Plot Resolution" setting to zoom in or out if dots are bunched up.






















