Momentum Grid 2.1 + Top Stocks📊 MOMENTUM GRID 2.1 + TOP STOCKS
Overview
A multi-timeframe confirmation system specifically designed for NIFTY 50 and BANK NIFTY index options trading. This script combines 8 independent technical indicators into a weighted scoring model to generate high-probability CE (Call) and PE (Put) signals, while simultaneously tracking the top 5 constituent stocks for sector-wide momentum validation.
________________________________________
🎯 Core Methodology
1. 8-Factor Confirmation System
Unlike traditional single-indicator approaches, this script requires multiple confirmations before generating signals. Each factor votes independently:
Trend Alignment (3 votes):
• C1: Price above/below EMA 9 (immediate trend)
• C2: EMA 9 above/below EMA 20 (short-term momentum)
• C3: EMA 20 above/below EMA 50 (intermediate trend)
Oscillator Confirmation (3 votes):
• C4: RSI above/below 50 (momentum strength)
• C5: Stochastic K above/below D (entry timing)
• C6: MACD Histogram positive/negative (momentum direction)
Advanced Momentum (2 votes):
• C7: Parabolic SAR position (trend continuation)
• C8: Squeeze Momentum direction (volatility expansion)
Mathematical Logic:
Bullish Score = C1 + C2 + C3 + C4 + C5 + C6 + C7 + C8
Signal Triggered when Score ≥ Threshold (default: 5/8)
Why This Works: By requiring 5+ confirmations, the script filters out false signals that occur when only 1-2 indicators align by chance. This dramatically reduces whipsaws in choppy markets.
________________________________________
📈 Constituent Stock Analysis System
Real-Time Top 5 Stocks Tracking
The script fetches live data from the most heavily-weighted stocks in the selected index:
NIFTY 50 Constituents:
• Reliance Industries
• HDFC Bank
• Infosys
• ICICI Bank
• TCS
BANK NIFTY Constituents:
• HDFC Bank
• ICICI Bank
• Kotak Mahindra Bank
• State Bank of India
• Axis Bank
Stock Scoring Algorithm (0-6 Scale):
For each stock, the script calculates a momentum score based on:
1. Price vs EMA 9 position
2. EMA 9 vs EMA 20 relationship
3. EMA 20 vs EMA 50 hierarchy
4. RSI above/below 50
5. MACD histogram direction
6. Intraday price change direction
Signal Interpretation:
• 🚀🔥 Strong Bullish: Score ≥5 + Day Change >0.5%
• ⚠️❄️ Strong Bearish: Score ≤1 + Day Change <-0.5%
• 📈 Moderate Bullish: Score ≥3 + Positive change
• 📉 Moderate Bearish: Score ≤3 + Negative change
Why Track Constituents?
Index options are a weighted average of their components. When 4 out of 5 top stocks show strong bullish signals but the index signal is neutral, it indicates:
• Sector rotation is happening
• Underlying strength not yet reflected in index
• Early warning for potential index breakout
________________________________________
🎨 Visual Dashboard System
1. Main Momentum Grid (Middle Right)
Real-time status of all 8 confirmation factors:
• Individual indicator values
• Bullish/Bearish status per indicator
• Cumulative Bull Score and Bear Score
• Visual color coding (Green = Bullish, Red = Bearish)
2. Top Stocks Status Panel (Top Right)
Live tracking table showing:
• LTP (Last Traded Price): Current stock price
• Day Change %: Intraday movement from open
• Status: Overall bullish/bearish trend
• EMA Status: Position relative to EMA 9
• Signal Emoji: Visual strength indicator
3. Scenario Guide (Bottom Right)
Auto-calculates trade parameters based on current signal:
• Side: CE (Call) or PE (Put) recommendation
• Strike Reference: Current index price
• Trigger Level: Entry confirmation level (high/low of signal bar)
• Risk Limit: Stop loss using 1.5x ATR
• Price Objective: Target using 2.5x ATR
ATR-Based Risk Management: Average True Range (14-period) adapts stop-loss and targets to current volatility, ensuring consistent risk-reward ratios across different market conditions.
________________________________________
🚨 Signal Generation Logic
CE (Call) Signal Triggers When:
1. Bullish Score ≥ Threshold (5/8 default)
2. Previous bar Bullish Score < Threshold
3. Confirmation candle closes above EMA 9
4. Background turns light green
PE (Put) Signal Triggers When:
1. Bearish Score ≥ Threshold (5/8 default)
2. Previous bar Bearish Score < Threshold
3. Confirmation candle closes below EMA 9
4. Background turns light red
Signal Validation: Labels appear only when a new qualifying bar completes, preventing repainting. The tooltip shows the exact score and entry price for record-keeping.
________________________________________
🔧 Customization Options
Parameter Purpose Recommendation
Index Selection Choose NIFTY 50 or BANK NIFTY Match to your trading instrument
EMA Periods Adjust trend sensitivity Default (9/20/50/100) suits 5-15 min
Signal Threshold Min confirmations required 5/8 (balanced), 6/8 (conservative)
RSI Length Momentum calculation period 14 (standard), 21 (smoother)
MACD Settings Fast/Slow/Signal periods 12/26/9 (industry standard)
________________________________________
📊 Technical Indicator Details
Exponential Moving Averages (EMA)
• Why EMA vs SMA: Exponential weighting gives more importance to recent price action, making it more responsive to trend changes in fast-moving index options.
Relative Strength Index (RSI)
• Measures momentum on 0-100 scale
• 50 level acts as bull/bear dividing line
• Used for confirmation, not overbought/oversold
Stochastic Oscillator
• Compares closing price to recent range
• K line crossing above D line = bullish momentum shift
• Sensitive to short-term reversals
MACD (Moving Average Convergence Divergence)
• Histogram shows momentum acceleration/deceleration
• Positive histogram = increasing bullish momentum
• Used as tiebreaker when other signals conflict
Parabolic SAR
• Tracks stop-and-reverse points
• Dots below price = uptrend, above = downtrend
• Adds trend-following confirmation
Squeeze Momentum
• Identifies periods of low volatility (consolidation)
• Bollinger Bands inside Keltner Channels = "squeeze"
• Positive momentum during squeeze = bullish breakout setup
________________________________________
💡 What Makes This Script Unique
1. Index-Specific Design: Unlike generic multi-timeframe indicators, this is purpose-built for NIFTY/BANKNIFTY options with constituent stock correlation analysis.
2. Multi-Layer Validation: Combines price action (EMAs), momentum (RSI/Stoch/MACD), and volatility (Squeeze) for comprehensive market assessment.
3. Smart Constituent Tracking: Automatically switches stock universe based on selected index, providing sector-level context that single-chart indicators miss.
4. Adaptive Risk Management: ATR-based stop-loss and targets adjust to market volatility automatically, unlike fixed-point systems.
5. No Repainting: All calculations use confirmed bars with lookahead=barmerge.lookahead_off parameter, ensuring historical backtesting accuracy.
________________________________________
📚 Best Practices
Timeframe Selection:
• 5 min: Scalping (high frequency, tight stops)
• 15 min: Intraday swing trades (balanced)
• 1 hour: Positional option trades (overnight holds)
Trade Execution:
1. Wait for CE/PE label to appear
2. Check Top Stocks Status - look for 3+ stocks confirming index direction
3. Verify Scenario Guide shows acceptable risk-reward (min 1:1.5)
4. Enter on next candle open or use trigger level for limit orders
5. Place stop-loss at "Risk Limit" level
6. Scale out at "Price Objective" or trail with Parabolic SAR
False Signal Filters:
• Avoid signals during first 15 minutes of market open (high volatility)
• Skip signals when Top Stocks show conflicting directions (3 bull, 2 bear)
• Increase threshold to 6/8 during major news events
• Disable trading 30 minutes before important announcements
________________________________________
⚠️ Limitations & Considerations
• Index Options Specific: Optimized for NIFTY/BANKNIFTY - may need recalibration for other instruments
• Not Suitable for Trending Markets: Works best in swing/range conditions; reduce threshold in strong trends
• Constituent Data Dependency: Relies on accurate real-time stock data; verify broker data quality
• Options Greeks Ignored: Script doesn't account for theta decay, IV changes - user must manage option selection
________________________________________
🔔 Built-In Alerts
Set alerts for:
• CE Signal Generated: Bullish score crosses threshold
• PE Signal Generated: Bearish score crosses threshold
Alert messages include ticker symbol and entry price for quick execution.
________________________________________
📈 Performance Optimization Tips
1. Score Correlation Check: If Bull Score and Bear Score are both high (6+/8), market is conflicted - wait for resolution.
2. Stock Divergence Strategy: When 4/5 stocks are bullish but index shows PE signal, it often indicates a false breakdown - counter-trend opportunity.
3. Squeeze Breakout Combo: Strongest signals occur when Squeeze changes from "ON" to "OFF" simultaneously with CE/PE trigger.
4. EMA Stacking: Maximum confidence signals have all three EMAs in proper order (9>20>50 for bull, reverse for bear).
________________________________________
🎓 Educational Context
This methodology synthesizes:
• Multi-Timeframe Analysis: EMAs represent different trend horizons
• Oscillator Convergence: Multiple momentum tools reduce false positives
• Index Arbitrage Concepts: Constituent tracking exploits pricing inefficiencies
• Adaptive Volatility: ATR-based risk scales with market conditions
The 8-factor system mirrors institutional decision frameworks where analysts require consensus across multiple models before position changes.
________________________________________
📋 Quick Reference
Bullish Setup Checklist: ✅ Bull Score ≥ 5/8
✅ Green background color
✅ 3+ top stocks showing 📈 or 🚀
✅ Price above EMA 9
✅ MACD Histogram positive
Bearish Setup Checklist: ✅ Bear Score ≥ 5/8
✅ Red background color
✅ 3+ top stocks showing 📉 or ⚠️
✅ Price below EMA 9
✅ MACD Histogram negative
________________________________________
⚖️ Disclaimer
This indicator is a decision support tool, not an automated trading system. Index options involve substantial risk and can result in total loss of premium paid. The constituent stock analysis provides context but does not guarantee index price movement. Users must:
• Understand options Greeks (delta, theta, vega)
• Use proper position sizing (max 2-3% capital per trade)
• Never trade based on signals alone without market context
• Comply with SEBI regulations and broker policies
Past performance of signals does not guarantee future results.
________________________________________
Version: Pine Script v6
Supported Indices: NIFTY 50, BANK NIFTY
Resource Usage: Moderate (Multi-security data requests)
Update Frequency: Real-time on current timeframe
________________________________________
For support or suggestions, please comment below. If this script helps your trading, please like and follow for updates! 🚀📊
Pesquisar nos scripts por "smart"
Stochastic BTC OptimizedEnhanced Stochastic for Bitcoin (BTC) – Optimized for Daily Timeframe
This enhanced Stochastic oscillator is specifically fine-tuned for BTC/USD on the 1D timeframe, leveraging historical data from Bitstamp (2011–2025) to minimize false signals and maximize reliability in Bitcoin's volatile swings.
Unlike the classic Stochastic (14, 3, 3), this version uses optimized parameters:
- K Period = 21 – smoother reaction, better suited for BTC’s macro cycles
- D Period = 3, Smooth K = 3 – reduces noise while preserving responsiveness
- Overbought = 85, Oversold = 15 – accounts for BTC’s tendency to trend strongly within extreme zones without immediate reversal
✅ Smart Signal Logic:
Buy/sell signals appear only when %K crosses %D inside the oversold (≤15) or overbought (≥85) zones, and only the first signal is shown to avoid whipsaws.
Visual Enhancements:
- Thick lines when %K/%D are in overbought/oversold zones
- Green/red background highlights on valid signals
- Optional up/down arrows for clear entry visualization
- Customizable colors, line widths, and transparency
🔒 No alerts included – clean, focused on price action and momentum.
💡 Pro Tip: For even higher accuracy, use this indicator in combination with a long-term trend filter (e.g., EMA 200). The oscillator excels in ranging or retracement phases but should not be used alone in strong parabolic moves.
Based on Mozilla Public License v2.0 – feel free to use, modify, and share. Perfect for swing traders and long-term Bitcoin analysts seeking high-probability reversal zones.
перевод на русский
Улучшенный Stochastic для Bitcoin (BTC) — оптимизирован для дневного таймфрейма
Этот улучшенный осциллятор Stochastic специально настроен под BTC/USD на дневном графике, с учётом исторических данных Bitstamp (2011–2025), чтобы минимизировать ложные сигналы и повысить надёжность в условиях высокой волатильности биткоина.
В отличие от классического Stochastic (14, 3, 3), эта версия использует оптимизированные параметры:
- Период K = 21 — более плавная реакция, лучше соответствует макроциклам BTC
- Период D = 3, Сглаживание K = 3 — снижает шум, сохраняя отзывчивость
- Уровень перекупленности = 85, перепроданности = 15 — учитывает склонность BTC к сильным трендам в экстремальных зонах без немедленного разворота
✅ Интеллектуальная логика сигналов:
Покупка/продажа отображается только при пересечении %K и %D внутри зоны перепроданности (≤15) или перекупленности (≥85), и только первый сигнал фиксируется, чтобы избежать «хлыстов».
Улучшенная визуализация:
- Жирные линии, когда %K/%D находятся в экстремальных зонах
- Зелёный/красный фон при появлении сигналов
- Опциональные стрелки для чёткого отображения точек входа
- Настройка цветов, толщины линий и прозрачности
🔒 Без алертов — чистый инструмент, сфокусированный на цене и импульсе.
💡 Совет профессионала: для ещё большей точности используйте этот индикатор вместе с трендовым фильтром (например, EMA 200). Осциллятор лучше всего работает в фазах консолидации или отката, но не стоит применять его в одиночку во время сильных параболических движений.
На основе Mozilla Public License v2.0 — свободно используйте, модифицируйте и делитесь. Идеален для свинг-трейдеров и аналитиков Bitcoin, ищущих зоны с высокой вероятностью разворота.
Filter Bar1. Indicator Name
Filter Bar
2. One-line Introduction
A trend-aware bar coloring system that visualizes market direction and strength through adaptive transparency based on regression scoring.
3. General Overview
Filter Bar+ is a minimalist but powerful trend visualization tool that colors chart bars according to market direction and momentum strength.
It analyzes the linear regression trend alignment over a specified lookback period and uses a pairwise comparison algorithm to determine whether the market is in a bullish, bearish, or neutral state.
The result is a "trend score" that gets normalized to reflect trend intensity (0~1).
Bar colors are then dynamically updated using the specified bullish or bearish base colors, where higher intensity results in more opaque (darker) bars, and weaker trends lead to lighter, faded tones.
If no strong trend is detected, bars are shown in gray, signaling indecision or neutrality.
The strength of this indicator lies in its simplicity—it doesn’t draw lines, waves, or shapes, but overlays insight directly onto the chart through smart color cues.
It’s particularly effective as a background filter for price action traders, scalpers, and anyone who prefers clean charts but still wants embedded directional context.
4. Key Advantages
🎨 Adaptive Bar Coloring
Bar color opacity increases with trend strength, offering instant visual confirmation without clutter.
📊 Quantified Trend Direction
Uses a regression-based scoring system to reliably detect uptrends, downtrends, or sideways markets.
⚖️ Customizable Sensitivity
Parameters like lookback period and tolerance percentage give users full control over signal responsiveness.
🧼 Clean Chart Presentation
No lines, shapes, or overlays—just color-coded bars that blend into your existing chart setup.
🚀 Lightweight & Fast
Minimal computational load ensures it works smoothly even on lower-end devices or multiple chart setups.
🔒 Secure Internal Logic
Algorithm is neatly encapsulated and optimized, with no critical logic exposed.
📘 Indicator User Guide
📌 Basic Concept
Filter Bar+ evaluates trend direction and strength using a pairwise comparison of linear regression values.
The result determines whether the market is bullish, bearish, or neutral, and adjusts bar colors accordingly.
It visually amplifies the current market state without drawing any indicators on the chart.
⚙️ Settings Explained
Lookback Period: Number of bars used to compare regression values
Range Tolerance (%): Minimum score required to label a trend as bullish or bearish
Regression Source: Data input used for regression (default: close)
Linear Regression Length: Period for generating the base regression line
Bull/Bear Base Colors: Choose colors to represent bullish or bearish bars
📈 Buy Timing Example
Bars are green (or user-set bullish color) and becoming more vivid
Indicates a strengthening bullish trend; helpful when used alongside breakout confirmation or support zones
📉 Sell Timing Example
Bars turn red (or your custom bearish color) with increasing opacity
Signals growing bearish pressure; acts as confirmation during short setups or breakdowns
🧪 Recommended Use Cases
Combine with volume, RSI, or price action setups for direction filtering
Ideal for clean chart strategies where visual simplicity is preferred
Use as a confirmation layer to reduce noise in sideways markets
🔒 Precautions
This is a visual filter, not a signal generator—use alongside other strategies for entries/exits
In choppy markets, bars may flicker between colors—adjust sensitivity as needed
Works best when you already have a directional thesis and want to validate it visually
Always test settings for your asset/timeframe before applying in live trades
Stochastic Hash Strat [Hash Capital Research]# Stochastic Hash Strategy by Hash Capital Research
## 🎯 What Is This Strategy?
The **Stochastic Slow Strategy** is a momentum-based trading system that identifies oversold and overbought market conditions to capture mean-reversion opportunities. Think of it as a "buy low, sell high" approach with smart mathematical filters that remove emotion from your trading decisions.
Unlike fast-moving indicators that generate excessive noise, this strategy uses **smoothed stochastic oscillators** to identify only the highest-probability setups when momentum truly shifts.
---
## 💡 Why This Strategy Works
Most traders fail because they:
- **Chase prices** after big moves (buying high, selling low)
- **Overtrade** in choppy, directionless markets
- **Exit too early** or hold losses too long
This strategy solves all three problems:
1. **Entry Discipline**: Only trades when the stochastic oscillator crosses in extreme zones (oversold for longs, overbought for shorts)
2. **Cooldown Filter**: Prevents revenge trading by forcing a waiting period after each trade
3. **Fixed Risk/Reward**: Pre-defined stop-loss and take-profit levels ensure consistent risk management
**The Math Behind It**: The stochastic oscillator measures where the current price sits relative to its recent high-low range. When it's below 25, the market is oversold (time to buy). When above 70, it's overbought (time to sell). The crossover with its moving average confirms momentum is shifting.
---
## 📊 Best Markets & Timeframes
### ⭐ OPTIMAL PERFORMANCE:
**Crude Oil (WTI) - 12H Timeframe**
- **Why it works**: Oil markets have predictable volatility patterns and respect technical levels
**AAVE/USD - 4H to 12H Timeframe**
- **Why it works**: DeFi tokens exhibit strong momentum cycles with clear extremes
### ✅ Also Works Well On:
- **BTC/USD** (12H, Daily) - Lower frequency but high win rate
- **ETH/USD** (8H, 12H) - Balanced volatility and liquidity
- **Gold (XAU/USD)** (Daily) - Classic mean-reversion asset
- **EUR/USD** (4H, 8H) - Lower volatility, requires patience
### ❌ Avoid Using On:
- Timeframes below 4H (too much noise)
- Low-liquidity altcoins (wide spreads kill performance)
- Strongly trending markets without pullbacks (Bitcoin in 2021)
- News-driven instruments during major events
---
## 🎛️ Understanding The Settings
### Core Stochastic Parameters
**Stochastic Length (Default: 16)**
- Controls the lookback period for price comparison
- Lower = faster reactions, more signals (10-14 for volatile markets)
- Higher = smoother signals, fewer trades (16-21 for stable markets)
- **Pro tip**: Use 10 for crypto 4H, 16 for commodities 12H
**Overbought Level (Default: 70)**
- Threshold for short entries
- Lower values (65-70) = more trades, earlier entries
- Higher values (75-80) = fewer but higher-conviction trades
- **Sweet spot**: 70 works for most assets
**Oversold Level (Default: 25)**
- Threshold for long entries
- Higher values (25-30) = more trades, earlier entries
- Lower values (15-20) = fewer but stronger bounce setups
- **Sweet spot**: 20-25 depending on market conditions
**Smooth K & Smooth D (Default: 7 & 3)**
- Additional smoothing to filter out whipsaws
- K=7 makes the indicator slower and more reliable
- D=3 is the signal line that confirms the trend
- **Don't change these unless you know what you're doing**
---
### Risk Management
**Stop Loss % (Default: 2.2%)**
- Automatically exits losing trades
- Should be 1.5x to 2x your average market volatility
- Too tight = death by a thousand cuts
- Too wide = uncontrolled losses
- **Calibration**: Check ATR indicator and set SL slightly above it
**Take Profit % (Default: 7%)**
- Automatically exits winning trades
- Should be 2.5x to 3x your stop loss (reward-to-risk ratio)
- This default gives 7% / 2.2% = 3.18:1 R:R
- **The golden rule**: Never have R:R below 2:1
---
### Trade Filters
**Bar Cooldown Filter (Default: ON, 3 bars)**
- **What it does**: Forces you to wait X bars after closing a trade before entering a new one
- **Why it matters**: Prevents emotional revenge trading and overtrading in choppy markets
- **Settings guide**:
- 3 bars = Standard (good for most cases)
- 5-7 bars = Conservative (oil, slow-moving assets)
- 1-2 bars = Aggressive (only for experienced traders)
**Exit on Opposite Extreme (Default: ON)**
- Closes your long when stochastic hits overbought (and vice versa)
- Acts as an early profit-taking mechanism
- **Leave this ON** unless you're testing other exit strategies
**Divergence Filter (Default: OFF)**
- Looks for price/momentum divergences for additional confirmation
- **When to enable**: Trending markets where you want fewer but higher-quality trades
- **Keep OFF for**: Mean-reverting markets (oil, forex, most of the time)
---
## 🚀 Quick Start Guide
### Step 1: Set Up in TradingView
1. Open TradingView and navigate to your chart
2. Click "Pine Editor" at the bottom
3. Copy and paste the strategy code
4. Click "Add to Chart"
5. The strategy will appear in a separate pane below your price chart
### Step 2: Choose Your Market
**If you're trading Crude Oil:**
- Timeframe: 12H
- Keep all default settings
- Watch for signals during London/NY overlap (8am-11am EST)
**If you're trading AAVE or crypto:**
- Timeframe: 4H or 12H
- Consider these adjustments:
- Stochastic Length: 10-14 (faster)
- Oversold: 20 (more aggressive)
- Take Profit: 8-10% (higher targets)
### Step 3: Wait for Your First Signal
**LONG Entry** (Green circle appears):
- Stochastic crosses up below oversold level (25)
- Price likely near recent lows
- System places limit order at take profit and stop loss
**SHORT Entry** (Red circle appears):
- Stochastic crosses down above overbought level (70)
- Price likely near recent highs
- System places limit order at take profit and stop loss
**EXIT** (Orange circle):
- Position closes either at stop, target, or opposite extreme
- Cooldown period begins
### Step 4: Let It Run
The biggest mistake? **Interfering with the system.**
- Don't close trades early because you're scared
- Don't skip signals because you "have a feeling"
- Don't increase position size after a big win
- Don't revenge trade after a loss
**Follow the system or don't use it at all.**
---
### Important Risks:
1. **Drawdown Pain**: You WILL experience losing streaks of 5-7 trades. This is mathematically normal.
2. **Whipsaw Markets**: Choppy, range-bound conditions can trigger multiple small losses.
3. **Gap Risk**: Overnight gaps can cause your actual fill to be worse than the stop loss.
4. **Slippage**: Real execution prices differ from backtested prices (factor in 0.1-0.2% slippage).
---
## 🔧 Optimization Guide
### When to Adjust Settings:
**Market Volatility Increased?**
- Widen stop loss by 0.5-1%
- Increase take profit proportionally
- Consider increasing cooldown to 5-7 bars
**Getting Too Few Signals?**
- Decrease stochastic length to 10-12
- Increase oversold to 30, decrease overbought to 65
- Reduce cooldown to 2 bars
**Getting Too Many Losses?**
- Increase stochastic length to 18-21 (slower, smoother)
- Enable divergence filter
- Increase cooldown to 5+ bars
- Verify you're on the right timeframe
### A/B Testing Method:
1. **Run default settings for 50 trades** on your chosen market
2. Document: Win rate, profit factor, max drawdown, emotional tolerance
3. **Change ONE variable** (e.g., oversold from 25 to 20)
4. Run another 50 trades
5. Compare results
6. Keep the better version
**Never change multiple settings at once** or you won't know what worked.
---
## 📚 Educational Resources
### Key Concepts to Learn:
**Stochastic Oscillator**
- Developed by George Lane in the 1950s
- Measures momentum by comparing closing price to price range
- Formula: %K = (Close - Low) / (High - Low) × 100
- Similar to RSI but more sensitive to price movements
**Mean Reversion vs. Trend Following**
- This is a **mean reversion** strategy (price returns to average)
- Works best in ranging markets with defined support/resistance
- Fails in strong trending markets (2017 Bitcoin, 2020 Tech stocks)
- Complement with trend filters for better results
**Risk:Reward Ratio**
- The cornerstone of profitable trading
- Winning 40% of trades with 3:1 R:R = profitable
- Winning 60% of trades with 1:1 R:R = breakeven (after fees)
- **This strategy aims for 45% win rate with 2.5-3:1 R:R**
### Recommended Reading:
- *"Trading Systems and Methods"* by Perry Kaufman (Chapter on Oscillators)
- *"Mean Reversion Trading Systems"* by Howard Bandy
- *"The New Trading for a Living"* by Dr. Alexander Elder
---
## 🛠️ Troubleshooting
### "I'm not seeing any signals!"
**Check:**
- Is your timeframe 4H or higher?
- Is the stochastic actually reaching extreme levels (check if your asset is stuck in middle range)?
- Is cooldown still active from a previous trade?
- Are you on a low-liquidity pair?
**Solution**: Switch to a more volatile asset or lower the overbought/oversold thresholds.
---
### "The strategy keeps losing money!"
**Check:**
- What's your win rate? (Below 35% is concerning)
- What's your profit factor? (Below 0.8 means serious issues)
- Are you trading during major news events?
- Is the market in a strong trend?
**Solution**:
1. Verify you're using recommended markets/timeframes
2. Increase cooldown period to avoid choppy markets
3. Reduce position size to 5% while you diagnose
4. Consider switching to daily timeframe for less noise
---
### "My stop losses keep getting hit!"
**Check:**
- Is your stop loss tighter than the average ATR?
- Are you trading during high-volatility sessions?
- Is slippage eating into your buffer?
**Solution**:
1. Calculate the 14-period ATR
2. Set stop loss to 1.5x the ATR value
3. Avoid trading right after market open or major news
4. Factor in 0.2% slippage for crypto, 0.1% for oil
---
## 💪 Pro Tips from the Trenches
### Psychological Discipline
**The Three Deadly Sins:**
1. **Skipping signals** - "This one doesn't feel right"
2. **Early exits** - "I'll just take profit here to be safe"
3. **Revenge trading** - "I need to make back that loss NOW"
**The Solution:** Treat your strategy like a business system. Would McDonald's skip making fries because the cashier "doesn't feel like it today"? No. Systems work because of consistency.
---
### Position Management
**Scaling In/Out** (Advanced)
- Enter 50% position at signal
- Add 50% if stochastic reaches 10 (oversold) or 90 (overbought)
- Exit 50% at 1.5x take profit, let the rest run
**This is NOT for beginners.** Master the basic system first.
---
### Market Awareness
**Oil Traders:**
- OPEC meetings = volatility spikes (avoid or widen stops)
- US inventory reports (Wed 10:30am EST) = avoid trading 2 hours before/after
- Summer driving season = different patterns than winter
**Crypto Traders:**
- Monday-Tuesday = typically lower volatility (fewer signals)
- Thursday-Sunday = higher volatility (more signals)
- Avoid trading during exchange maintenance windows
---
## ⚖️ Legal Disclaimer
This trading strategy is provided for **educational purposes only**.
- Past performance does not guarantee future results
- Trading involves substantial risk of loss
- Only trade with capital you can afford to lose
- No one associated with this strategy is a licensed financial advisor
- You are solely responsible for your trading decisions
**By using this strategy, you acknowledge that you understand and accept these risks.**
---
## 🙏 Acknowledgments
Strategy development inspired by:
- George Lane's original Stochastic Oscillator work
- Modern quantitative trading research
- Community feedback from hundreds of backtests
Built with ❤️ for retail traders who want systematic, disciplined approaches to the markets.
---
**Good luck, stay disciplined, and trade the system, not your emotions.**
Fractals Trend [BigBeluga]🔵 OVERVIEW
Fractals Trend is a trend-following overlay that leverages fractal swing points to define dynamic support and resistance zones. By storing and averaging recent high and low fractals, it determines trend direction and plots a smooth band that flips depending on market bias—displaying support during uptrends and resistance during downtrends .
🔵 CONCEPTS
Fractal Swings: Fractals are identified using a customizable length. A high fractal forms when the current high is the highest in a range; a low fractal when the current low is the lowest.
Fractal Memory: The indicator keeps a rolling window of recent high and low fractals inside arrays, limited by the user-defined storage quantity.
switch
upperF => FracrtalsUpper.push(high )
lowerF => FracrtalsLower.push(low )
FracrtalsUpper.size() > fCount => FracrtalsUpper.shift()
FracrtalsLower.size() > fCount => FracrtalsLower.shift()
Trend Detection: Price crossing above the average, min/max or median high fractals signals an uptrend; crossing below average, min/max or median low fractals signals a downtrend.
Dynamic Band Plotting: Depending on the trend, the script plots the average of either the upper or lower fractals as a trailing support or resistance line.
Visual Confirmation: Fractal labels appear as triangle markers at highs and lows, providing additional structural context.
🔵 FEATURES
Automatically detects high and low fractals using customizable length.
Stores a defined number of fractals to smooth out noise and reduce false signals.
Flips trend bias dynamically with colored band and smooth transitions.
Plots fractal-based support in bullish trends, resistance in bearish trends.
Triangle markers show real-time fractal highs and lows.
Fully configurable visuals, color themes, and fractal detection logic.
Clean, non-intrusive overlay that works on any market or timeframe.
🔵 HOW TO USE
Use the colored band as a directional filter: green = uptrend (support), orange = downtrend (resistance).
Combine with entry signals or break/retest strategies when price approaches the band.
Use triangle markers to confirm structural swing points.
Adjust Fractals Length to tune sensitivity—shorter values detect quicker shifts, longer values reduce noise.
Change the fractal bands type to adapt trend detection to different market conditions.
Use in conjunction with momentum or volume tools for confluence.
🔵 CONCLUSION
Fractals Trend offers a lightweight, intuitive way to track market bias using price structure alone. Its smart switching logic and clean visuals make it a powerful tool for trend traders seeking structure-based dynamic S/R—without laggy moving averages or overcomplicated signals.
Tactical Deviation🎯 TACTICAL DEVIATION - Volume-Backed VWAP Deviation Analysis
What Makes This Different?
Unlike basic VWAP indicators, Tactical Deviation combines:
• Multi-timeframe VWAP deviation bands (Daily/Weekly/Monthly)
• Volume spike intelligence - signals only appear with volume confirmation
• Pivot reversal detection at deviation extremes
• Optional multi-VWAP confluence system
• Smart defaults for quality over quantity
This unique combination filters weak setups and identifies high-probability entries at extreme price deviations from fair value.
📊 DEFAULT SETTINGS (Ready to Use)
✅ Daily VWAP with ±2σ deviation bands
✅ Volume spike detection (1.5x average required)
✅ 2σ minimum deviation for signals
❌ Weekly/Monthly VWAPs (enable for multi-timeframe)
❌ Pivot reversal requirement (enable for stronger signals)
❌ Fill zones (optional visual enhancement)
Why: Daily VWAP is most relevant for intraday trading. 2σ bands catch meaningful moves. Volume spikes ensure conviction. Clean chart focuses on what matters.
🚀 HOW TO USE
BASIC USAGE:
• Green triangles (below bars) = Long signals at oversold deviations
• Red triangles (above bars) = Short signals at overbought deviations
SIGNAL QUALITY:
• Normal size, bright colors = Volume spike (best quality)
• Small size, lighter colors = Volume momentum
• Tiny size = No volume confirmation
DEVIATION ZONES:
• ±2σ = Extreme deviation (signals appear here)
• ±1σ to ±2σ = Extended but not extreme
• Within ±1σ = Normal range
TRADING APPROACHES:
Mean Reversion:
→ Enter when price reaches ±2σ with volume spike
→ Target: Return to VWAP or opposite band
→ Stop: Beyond extreme deviation
Trend Continuation:
→ Use bands to identify pullbacks
→ Enter pullback to VWAP in trending market
→ Volume confirms continuation
Reversal Trading:
→ Enable "Require Pivot Reversal" for stronger signals
→ Signals only when deviation + pivot reversal occur
→ Higher probability, fewer signals
⚙️ EXPLORE SETTINGS FOR FULL USE
VWAP SETTINGS:
• Show Weekly/Monthly VWAP = Multi-timeframe context
• Show ±1σ Bands = Normal deviation range
• Show ±3σ Bands = Extreme extremes (rare but powerful)
SIGNAL SETTINGS:
• Min Deviation: 1σ (more signals) | 2σ (default) | 3σ (fewer, extreme only)
• Require Pivot Reversal: OFF (default) | ON (stronger but fewer)
• Volume Spike Threshold: 1.5x (default) | 2.0x+ (major spikes) | 1.2x (more signals)
CONFLUENCE SETTINGS:
• Require Multi-VWAP Confluence: OFF (default) | ON (2+ VWAPs must agree)
• Min VWAPs: 2 (Daily + Weekly/Monthly) | 3 (all must agree)
VISUAL SETTINGS:
• Show Fill Zones = Shaded areas between bands
• Fill Opacity = Transparency adjustment
• Line Widths = Customize thickness
💡 PRO TIPS
1. Start with defaults, then enable features as you learn
2. Volume spike requirement filters weak moves - keep it enabled
3. Enable Weekly/Monthly VWAPs for higher timeframe context
4. Enable confluence for swing trading setups
5. Pivot reversals: ON for reversals, OFF for continuations
6. Check top-right info table for current deviation levels
🎨 VISUAL GUIDE
• Cyan Line = Daily VWAP (fair value)
• Cyan Bands = Daily deviation zones
• Orange Line = Weekly VWAP (if enabled)
• Purple Line = Monthly VWAP (if enabled)
• Green Triangle = Long signal (oversold)
• Red Triangle = Short signal (overbought)
⚠️ IMPORTANT
Educational purposes only. Always use proper risk management. Signals are based on statistical deviation, not guarantees. Volume confirmation improves quality but doesn't guarantee outcomes. Combine with your own analysis.
The unique combination of VWAP deviation analysis, volume profile confirmation, pivot identification, and multi-timeframe confluence in a single clean interface makes Tactical Deviation different from basic VWAP indicators.
Happy Trading! 📈
Scaling_mastery:Free TrendlinesScaling_mastery Trendlines is a clean, trading-ready smart trendline tool built for the Scaling_mastery community.
It automatically finds swing highs/lows and draws dynamic trendlines or channels that stay locked to price, on any symbol and any timeframe.
🔧 Modes
Trendline type
Wicks – classic trendlines anchored on candle wicks (high/low).
Bodies – trendlines anchored on candle bodies (open/close), great for closing structure.
Channel – 3-line channel:
outer lines form a band around price
middle line runs through the centre of the channel
thickness is adjustable (Small / Medium / Large).
Trend strength
Controls how strong the pivots must be to form a line.
Weak → more lines, reacts faster.
Medium → balanced, good for most pairs.
Strong → only the cleanest swings, higher-probability trendlines.
🎨 Visual controls
Max support / resistance lines – cap how many lines are kept on chart.
Show broken lines – hide broken trendlines or keep them for structure history.
Extend lines – None / Right / Both.
Support / Resistance colors – separate colors for active vs broken.
Channel thickness – Small / Medium / Large (0.5% / 1% / 2% of price).
Channel outer lines – color for channel edges.
Channel middle line – color + style (dotted / dashed / solid).
Broken lines are automatically faded + dotted, so you can instantly see what’s still respected and what’s already been taken out.
🧠 How to use
Add the indicator to any chart.
Start with:
Trendline type: Wicks
Trend strength: Strong
Max lines: 1–2 for both support & resistance
Once you like the behavior, experiment with:
Switching between Wicks / Bodies / Channel
Adjusting Channel thickness and Trend strength
Use the lines as a visual confluence tool with your own strategy:
HTF trend direction
LTF entries / retests
Liquidity grabs around broken lines
This script doesn’t generate entries or risk management – it’s designed to give you clean, reliable structure so you can execute your own edge.
⚠️ Disclaimer
This tool is for educational and visual purposes only and is not financial advice.
Always do your own research and manage risk.
Naveen Prabhu with EMA//@version=6
indicator('Naveen Prabhu with EMA', overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500)
a = input(2, title = 'Key Vaule. \'This changes the sensitivity\'')
c = input(5, title = 'ATR Period')
h = input(false, title = 'Signals from Heikin Ashi Candles')
BULLISH_LEG = 1
BEARISH_LEG = 0
BULLISH = +1
BEARISH = -1
GREEN = #089981
RED = #F23645
BLUE = #2157f3
GRAY = #878b94
MONO_BULLISH = #b2b5be
MONO_BEARISH = #5d606b
HISTORICAL = 'Historical'
PRESENT = 'Present'
COLORED = 'Colored'
MONOCHROME = 'Monochrome'
ALL = 'All'
BOS = 'BOS'
CHOCH = 'CHoCH'
TINY = size.tiny
SMALL = size.small
NORMAL = size.normal
ATR = 'Atr'
RANGE = 'Cumulative Mean Range'
CLOSE = 'Close'
HIGHLOW = 'High/Low'
SOLID = '⎯⎯⎯'
DASHED = '----'
DOTTED = '····'
SMART_GROUP = 'Smart Money Concepts'
INTERNAL_GROUP = 'Real Time Internal Structure'
SWING_GROUP = 'Real Time Swing Structure'
BLOCKS_GROUP = 'Order Blocks'
EQUAL_GROUP = 'EQH/EQL'
GAPS_GROUP = 'Fair Value Gaps'
LEVELS_GROUP = 'Highs & Lows MTF'
ZONES_GROUP = 'Premium & Discount Zones'
modeTooltip = 'Allows to display historical Structure or only the recent ones'
styleTooltip = 'Indicator color theme'
showTrendTooltip = 'Display additional candles with a color reflecting the current trend detected by structure'
showInternalsTooltip = 'Display internal market structure'
internalFilterConfluenceTooltip = 'Filter non significant internal structure breakouts'
showStructureTooltip = 'Display swing market Structure'
showSwingsTooltip = 'Display swing point as labels on the chart'
showHighLowSwingsTooltip = 'Highlight most recent strong and weak high/low points on the chart'
showInternalOrderBlocksTooltip = 'Display internal order blocks on the chart\n\nNumber of internal order blocks to display on the chart'
showSwingOrderBlocksTooltip = 'Display swing order blocks on the chart\n\nNumber of internal swing blocks to display on the chart'
orderBlockFilterTooltip = 'Method used to filter out volatile order blocks \n\nIt is recommended to use the cumulative mean range method when a low amount of data is available'
orderBlockMitigationTooltip = 'Select what values to use for order block mitigation'
showEqualHighsLowsTooltip = 'Display equal highs and equal lows on the chart'
equalHighsLowsLengthTooltip = 'Number of bars used to confirm equal highs and equal lows'
equalHighsLowsThresholdTooltip = 'Sensitivity threshold in a range (0, 1) used for the detection of equal highs & lows\n\nLower values will return fewer but more pertinent results'
showFairValueGapsTooltip = 'Display fair values gaps on the chart'
fairValueGapsThresholdTooltip = 'Filter out non significant fair value gaps'
fairValueGapsTimeframeTooltip = 'Fair value gaps timeframe'
fairValueGapsExtendTooltip = 'Determine how many bars to extend the Fair Value Gap boxes on chart'
showPremiumDiscountZonesTooltip = 'Display premium, discount, and equilibrium zones on chart'
modeInput = input.string( HISTORICAL, 'Mode', group = SMART_GROUP, tooltip = modeTooltip, options = )
styleInput = input.string( COLORED, 'Style', group = SMART_GROUP, tooltip = styleTooltip,options = )
showTrendInput = input( false, 'Color Candles', group = SMART_GROUP, tooltip = showTrendTooltip)
showInternalsInput = input( false, 'Show Internal Structure', group = INTERNAL_GROUP, tooltip = showInternalsTooltip)
showInternalBullInput = input.string( ALL, 'Bullish Structure', group = INTERNAL_GROUP, inline = 'ibull', options = )
internalBullColorInput = input( GREEN, '', group = INTERNAL_GROUP, inline = 'ibull')
showInternalBearInput = input.string( ALL, 'Bearish Structure' , group = INTERNAL_GROUP, inline = 'ibear', options = )
internalBearColorInput = input( RED, '', group = INTERNAL_GROUP, inline = 'ibear')
internalFilterConfluenceInput = input( false, 'Confluence Filter', group = INTERNAL_GROUP, tooltip = internalFilterConfluenceTooltip)
internalStructureSize = input.string( TINY, 'Internal Label Size', group = INTERNAL_GROUP, options = )
showStructureInput = input( false, 'Show Swing Structure', group = SWING_GROUP, tooltip = showStructureTooltip)
showSwingBullInput = input.string( ALL, 'Bullish Structure', group = SWING_GROUP, inline = 'bull', options = )
swingBullColorInput = input( GREEN, '', group = SWING_GROUP, inline = 'bull')
showSwingBearInput = input.string( ALL, 'Bearish Structure', group = SWING_GROUP, inline = 'bear', options = )
swingBearColorInput = input( RED, '', group = SWING_GROUP, inline = 'bear')
swingStructureSize = input.string( SMALL, 'Swing Label Size', group = SWING_GROUP, options = )
showSwingsInput = input( false, 'Show Swings Points', group = SWING_GROUP, tooltip = showSwingsTooltip,inline = 'swings')
swingsLengthInput = input.int( 50, '', group = SWING_GROUP, minval = 10, inline = 'swings')
showHighLowSwingsInput = input( false, 'Show Strong/Weak High/Low',group = SWING_GROUP, tooltip = showHighLowSwingsTooltip)
showInternalOrderBlocksInput = input( true, 'Internal Order Blocks' , group = BLOCKS_GROUP, tooltip = showInternalOrderBlocksTooltip, inline = 'iob')
internalOrderBlocksSizeInput = input.int( 5, '', group = BLOCKS_GROUP, minval = 1, maxval = 20, inline = 'iob')
showSwingOrderBlocksInput = input( true, 'Swing Order Blocks', group = BLOCKS_GROUP, tooltip = showSwingOrderBlocksTooltip, inline = 'ob')
swingOrderBlocksSizeInput = input.int( 5, '', group = BLOCKS_GROUP, minval = 1, maxval = 20, inline = 'ob')
orderBlockFilterInput = input.string( 'Atr', 'Order Block Filter', group = BLOCKS_GROUP, tooltip = orderBlockFilterTooltip, options = )
orderBlockMitigationInput = input.string( HIGHLOW, 'Order Block Mitigation', group = BLOCKS_GROUP, tooltip = orderBlockMitigationTooltip, options = )
internalBullishOrderBlockColor = input.color(color.new(GREEN, 80), 'Internal Bullish OB', group = BLOCKS_GROUP)
internalBearishOrderBlockColor = input.color(color.new(#f77c80, 80), 'Internal Bearish OB', group = BLOCKS_GROUP)
swingBullishOrderBlockColor = input.color(color.new(GREEN, 80), 'Bullish OB', group = BLOCKS_GROUP)
swingBearishOrderBlockColor = input.color(color.new(#b22833, 80), 'Bearish OB', group = BLOCKS_GROUP)
showEqualHighsLowsInput = input( false, 'Equal High/Low', group = EQUAL_GROUP, tooltip = showEqualHighsLowsTooltip)
equalHighsLowsLengthInput = input.int( 3, 'Bars Confirmation', group = EQUAL_GROUP, tooltip = equalHighsLowsLengthTooltip, minval = 1)
equalHighsLowsThresholdInput = input.float( 0.1, 'Threshold', group = EQUAL_GROUP, tooltip = equalHighsLowsThresholdTooltip, minval = 0, maxval = 0.5, step = 0.1)
equalHighsLowsSizeInput = input.string( TINY, 'Label Size', group = EQUAL_GROUP, options = )
showFairValueGapsInput = input( false, 'Fair Value Gaps', group = GAPS_GROUP, tooltip = showFairValueGapsTooltip)
fairValueGapsThresholdInput = input( true, 'Auto Threshold', group = GAPS_GROUP, tooltip = fairValueGapsThresholdTooltip)
fairValueGapsTimeframeInput = input.timeframe('', 'Timeframe', group = GAPS_GROUP, tooltip = fairValueGapsTimeframeTooltip)
fairValueGapsBullColorInput = input.color(color.new(#00ff68, 70), 'Bullish FVG' , group = GAPS_GROUP)
fairValueGapsBearColorInput = input.color(color.new(#ff0008, 70), 'Bearish FVG' , group = GAPS_GROUP)
fairValueGapsExtendInput = input.int( 1, 'Extend FVG', group = GAPS_GROUP, tooltip = fairValueGapsExtendTooltip, minval = 0)
showDailyLevelsInput = input( false, 'Daily', group = LEVELS_GROUP, inline = 'daily')
dailyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'daily', options = )
dailyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'daily')
showWeeklyLevelsInput = input( false, 'Weekly', group = LEVELS_GROUP, inline = 'weekly')
weeklyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'weekly', options = )
weeklyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'weekly')
showMonthlyLevelsInput = input( false, 'Monthly', group = LEVELS_GROUP, inline = 'monthly')
monthlyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'monthly', options = )
monthlyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'monthly')
showPremiumDiscountZonesInput = input( false, 'Premium/Discount Zones', group = ZONES_GROUP , tooltip = showPremiumDiscountZonesTooltip)
premiumZoneColorInput = input.color( RED, 'Premium Zone', group = ZONES_GROUP)
equilibriumZoneColorInput = input.color( GRAY, 'Equilibrium Zone', group = ZONES_GROUP)
discountZoneColorInput = input.color( GREEN, 'Discount Zone', group = ZONES_GROUP)
type alerts
bool internalBullishBOS = false
bool internalBearishBOS = false
bool internalBullishCHoCH = false
bool internalBearishCHoCH = false
bool swingBullishBOS = false
bool swingBearishBOS = false
bool swingBullishCHoCH = false
bool swingBearishCHoCH = false
bool internalBullishOrderBlock = false
bool internalBearishOrderBlock = false
bool swingBullishOrderBlock = false
bool swingBearishOrderBlock = false
bool equalHighs = false
bool equalLows = false
bool bullishFairValueGap = false
bool bearishFairValueGap = false
type trailingExtremes
float top
float bottom
int barTime
int barIndex
int lastTopTime
int lastBottomTime
type fairValueGap
float top
float bottom
int bias
box topBox
box bottomBox
type trend
int bias
type equalDisplay
line l_ine = na
label l_abel = na
type pivot
float currentLevel
float lastLevel
bool crossed
int barTime = time
int barIndex = bar_index
type orderBlock
float barHigh
float barLow
int barTime
int bias
// @variable current swing pivot high
var pivot swingHigh = pivot.new(na,na,false)
// @variable current swing pivot low
var pivot swingLow = pivot.new(na,na,false)
// @variable current internal pivot high
var pivot internalHigh = pivot.new(na,na,false)
// @variable current internal pivot low
var pivot internalLow = pivot.new(na,na,false)
// @variable current equal high pivot
var pivot equalHigh = pivot.new(na,na,false)
// @variable current equal low pivot
var pivot equalLow = pivot.new(na,na,false)
// @variable swing trend bias
var trend swingTrend = trend.new(0)
// @variable internal trend bias
var trend internalTrend = trend.new(0)
// @variable equal high display
var equalDisplay equalHighDisplay = equalDisplay.new()
// @variable equal low display
var equalDisplay equalLowDisplay = equalDisplay.new()
// @variable storage for fairValueGap UDTs
var array fairValueGaps = array.new()
// @variable storage for parsed highs
var array parsedHighs = array.new()
// @variable storage for parsed lows
var array parsedLows = array.new()
// @variable storage for raw highs
var array highs = array.new()
// @variable storage for raw lows
var array lows = array.new()
// @variable storage for bar time values
var array times = array.new()
// @variable last trailing swing high and low
var trailingExtremes trailing = trailingExtremes.new()
// @variable storage for orderBlock UDTs (swing order blocks)
var array swingOrderBlocks = array.new()
// @variable storage for orderBlock UDTs (internal order blocks)
var array internalOrderBlocks = array.new()
// @variable storage for swing order blocks boxes
var array swingOrderBlocksBoxes = array.new()
// @variable storage for internal order blocks boxes
var array internalOrderBlocksBoxes = array.new()
// @variable color for swing bullish structures
var swingBullishColor = styleInput == MONOCHROME ? MONO_BULLISH : swingBullColorInput
// @variable color for swing bearish structures
var swingBearishColor = styleInput == MONOCHROME ? MONO_BEARISH : swingBearColorInput
// @variable color for bullish fair value gaps
var fairValueGapBullishColor = styleInput == MONOCHROME ? color.new(MONO_BULLISH,70) : fairValueGapsBullColorInput
// @variable color for bearish fair value gaps
var fairValueGapBearishColor = styleInput == MONOCHROME ? color.new(MONO_BEARISH,70) : fairValueGapsBearColorInput
// @variable color for premium zone
var premiumZoneColor = styleInput == MONOCHROME ? MONO_BEARISH : premiumZoneColorInput
// @variable color for discount zone
var discountZoneColor = styleInput == MONOCHROME ? MONO_BULLISH : discountZoneColorInput
// @variable bar index on current script iteration
varip int currentBarIndex = bar_index
// @variable bar index on last script iteration
varip int lastBarIndex = bar_index
// @variable alerts in current bar
alerts currentAlerts = alerts.new()
// @variable time at start of chart
var initialTime = time
// we create the needed boxes for displaying order blocks at the first execution
if barstate.isfirst
if showSwingOrderBlocksInput
for index = 1 to swingOrderBlocksSizeInput
swingOrderBlocksBoxes.push(box.new(na,na,na,na,xloc = xloc.bar_time,extend = extend.right))
if showInternalOrderBlocksInput
for index = 1 to internalOrderBlocksSizeInput
internalOrderBlocksBoxes.push(box.new(na,na,na,na,xloc = xloc.bar_time,extend = extend.right))
// @variable source to use in bearish order blocks mitigation
bearishOrderBlockMitigationSource = orderBlockMitigationInput == CLOSE ? close : high
// @variable source to use in bullish order blocks mitigation
bullishOrderBlockMitigationSource = orderBlockMitigationInput == CLOSE ? close : low
// @variable default volatility measure
atrMeasure = ta.atr(200)
// @variable parsed volatility measure by user settings
volatilityMeasure = orderBlockFilterInput == ATR ? atrMeasure : ta.cum(ta.tr)/bar_index
// @variable true if current bar is a high volatility bar
highVolatilityBar = (high - low) >= (2 * volatilityMeasure)
// @variable parsed high
parsedHigh = highVolatilityBar ? low : high
// @variable parsed low
parsedLow = highVolatilityBar ? high : low
// we store current values into the arrays at each bar
parsedHighs.push(parsedHigh)
parsedLows.push(parsedLow)
highs.push(high)
lows.push(low)
times.push(time)
leg(int size) =>
var leg = 0
newLegHigh = high > ta.highest( size)
newLegLow = low < ta.lowest( size)
if newLegHigh
leg := BEARISH_LEG
else if newLegLow
leg := BULLISH_LEG
leg
startOfNewLeg(int leg) => ta.change(leg) != 0
startOfBearishLeg(int leg) => ta.change(leg) == -1
startOfBullishLeg(int leg) => ta.change(leg) == +1
drawLabel(int labelTime, float labelPrice, string tag, color labelColor, string labelStyle) =>
var label l_abel = na
if modeInput == PRESENT
l_abel.delete()
l_abel := label.new(chart.point.new(labelTime,na,labelPrice),tag,xloc.bar_time,color=color(na),textcolor=labelColor,style = labelStyle,size = size.small)
drawEqualHighLow(pivot p_ivot, float level, int size, bool equalHigh) =>
equalDisplay e_qualDisplay = equalHigh ? equalHighDisplay : equalLowDisplay
string tag = 'EQL'
color equalColor = swingBullishColor
string labelStyle = label.style_label_up
if equalHigh
tag := 'EQH'
equalColor := swingBearishColor
labelStyle := label.style_label_down
if modeInput == PRESENT
line.delete( e_qualDisplay.l_ine)
label.delete( e_qualDisplay.l_abel)
e_qualDisplay.l_ine := line.new(chart.point.new(p_ivot.barTime,na,p_ivot.currentLevel), chart.point.new(time ,na,level), xloc = xloc.bar_time, color = equalColor, style = line.style_dotted)
labelPosition = math.round(0.5*(p_ivot.barIndex + bar_index - size))
e_qualDisplay.l_abel := label.new(chart.point.new(na,labelPosition,level), tag, xloc.bar_index, color = color(na), textcolor = equalColor, style = labelStyle, size = equalHighsLowsSizeInput)
getCurrentStructure(int size,bool equalHighLow = false, bool internal = false) =>
currentLeg = leg(size)
newPivot = startOfNewLeg(currentLeg)
pivotLow = startOfBullishLeg(currentLeg)
pivotHigh = startOfBearishLeg(currentLeg)
if newPivot
if pivotLow
pivot p_ivot = equalHighLow ? equalLow : internal ? internalLow : swingLow
if equalHighLow and math.abs(p_ivot.currentLevel - low ) < equalHighsLowsThresholdInput * atrMeasure
drawEqualHighLow(p_ivot, low , size, false)
p_ivot.lastLevel := p_ivot.currentLevel
p_ivot.currentLevel := low
p_ivot.crossed := false
p_ivot.barTime := time
p_ivot.barIndex := bar_index
if not equalHighLow and not internal
trailing.bottom := p_ivot.currentLevel
trailing.barTime := p_ivot.barTime
trailing.barIndex := p_ivot.barIndex
trailing.lastBottomTime := p_ivot.barTime
if showSwingsInput and not internal and not equalHighLow
drawLabel(time , p_ivot.currentLevel, p_ivot.currentLevel < p_ivot.lastLevel ? 'LL' : 'HL', swingBullishColor, label.style_label_up)
else
pivot p_ivot = equalHighLow ? equalHigh : internal ? internalHigh : swingHigh
if equalHighLow and math.abs(p_ivot.currentLevel - high ) < equalHighsLowsThresholdInput * atrMeasure
drawEqualHighLow(p_ivot,high ,size,true)
p_ivot.lastLevel := p_ivot.currentLevel
p_ivot.currentLevel := high
p_ivot.crossed := false
p_ivot.barTime := time
p_ivot.barIndex := bar_index
if not equalHighLow and not internal
trailing.top := p_ivot.currentLevel
trailing.barTime := p_ivot.barTime
trailing.barIndex := p_ivot.barIndex
trailing.lastTopTime := p_ivot.barTime
if showSwingsInput and not internal and not equalHighLow
drawLabel(time , p_ivot.currentLevel, p_ivot.currentLevel > p_ivot.lastLevel ? 'HH' : 'LH', swingBearishColor, label.style_label_down)
drawStructure(pivot p_ivot, string tag, color structureColor, string lineStyle, string labelStyle, string labelSize) =>
var line l_ine = line.new(na,na,na,na,xloc = xloc.bar_time)
var label l_abel = label.new(na,na)
if modeInput == PRESENT
l_ine.delete()
l_abel.delete()
l_ine := line.new(chart.point.new(p_ivot.barTime,na,p_ivot.currentLevel), chart.point.new(time,na,p_ivot.currentLevel), xloc.bar_time, color=structureColor, style=lineStyle)
l_abel := label.new(chart.point.new(na,math.round(0.5*(p_ivot.barIndex+bar_index)),p_ivot.currentLevel), tag, xloc.bar_index, color=color(na), textcolor=structureColor, style=labelStyle, size = labelSize)
deleteOrderBlocks(bool internal = false) =>
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
for in orderBlocks
bool crossedOderBlock = false
if bearishOrderBlockMitigationSource > eachOrderBlock.barHigh and eachOrderBlock.bias == BEARISH
crossedOderBlock := true
if internal
currentAlerts.internalBearishOrderBlock := true
else
currentAlerts.swingBearishOrderBlock := true
else if bullishOrderBlockMitigationSource < eachOrderBlock.barLow and eachOrderBlock.bias == BULLISH
crossedOderBlock := true
if internal
currentAlerts.internalBullishOrderBlock := true
else
currentAlerts.swingBullishOrderBlock := true
if crossedOderBlock
orderBlocks.remove(index)
storeOrdeBlock(pivot p_ivot,bool internal = false,int bias) =>
if (not internal and showSwingOrderBlocksInput) or (internal and showInternalOrderBlocksInput)
array a_rray = na
int parsedIndex = na
if bias == BEARISH
a_rray := parsedHighs.slice(p_ivot.barIndex,bar_index)
parsedIndex := p_ivot.barIndex + a_rray.indexof(a_rray.max())
else
a_rray := parsedLows.slice(p_ivot.barIndex,bar_index)
parsedIndex := p_ivot.barIndex + a_rray.indexof(a_rray.min())
orderBlock o_rderBlock = orderBlock.new(parsedHighs.get(parsedIndex), parsedLows.get(parsedIndex), times.get(parsedIndex),bias)
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
if orderBlocks.size() >= 100
orderBlocks.pop()
orderBlocks.unshift(o_rderBlock)
drawOrderBlocks(bool internal = false) =>
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
orderBlocksSize = orderBlocks.size()
if orderBlocksSize > 0
maxOrderBlocks = internal ? internalOrderBlocksSizeInput : swingOrderBlocksSizeInput
array parsedOrdeBlocks = orderBlocks.slice(0, math.min(maxOrderBlocks,orderBlocksSize))
array b_oxes = internal ? internalOrderBlocksBoxes : swingOrderBlocksBoxes
for in parsedOrdeBlocks
orderBlockColor = styleInput == MONOCHROME ? (eachOrderBlock.bias == BEARISH ? color.new(MONO_BEARISH,80) : color.new(MONO_BULLISH,80)) : internal ? (eachOrderBlock.bias == BEARISH ? internalBearishOrderBlockColor : internalBullishOrderBlockColor) : (eachOrderBlock.bias == BEARISH ? swingBearishOrderBlockColor : swingBullishOrderBlockColor)
box b_ox = b_oxes.get(index)
b_ox.set_top_left_point( chart.point.new(eachOrderBlock.barTime,na,eachOrderBlock.barHigh))
b_ox.set_bottom_right_point(chart.point.new(last_bar_time,na,eachOrderBlock.barLow))
b_ox.set_border_color( internal ? na : orderBlockColor)
b_ox.set_bgcolor( orderBlockColor)
displayStructure(bool internal = false) =>
var bullishBar = true
var bearishBar = true
if internalFilterConfluenceInput
bullishBar := high - math.max(close, open) > math.min(close, open - low)
bearishBar := high - math.max(close, open) < math.min(close, open - low)
pivot p_ivot = internal ? internalHigh : swingHigh
trend t_rend = internal ? internalTrend : swingTrend
lineStyle = internal ? line.style_dashed : line.style_solid
labelSize = internal ? internalStructureSize : swingStructureSize
extraCondition = internal ? internalHigh.currentLevel != swingHigh.currentLevel and bullishBar : true
bullishColor = styleInput == MONOCHROME ? MONO_BULLISH : internal ? internalBullColorInput : swingBullColorInput
if ta.crossover(close,p_ivot.currentLevel) and not p_ivot.crossed and extraCondition
string tag = t_rend.bias == BEARISH ? CHOCH : BOS
if internal
currentAlerts.internalBullishCHoCH := tag == CHOCH
currentAlerts.internalBullishBOS := tag == BOS
else
currentAlerts.swingBullishCHoCH := tag == CHOCH
currentAlerts.swingBullishBOS := tag == BOS
p_ivot.crossed := true
t_rend.bias := BULLISH
displayCondition = internal ? showInternalsInput and (showInternalBullInput == ALL or (showInternalBullInput == BOS and tag != CHOCH) or (showInternalBullInput == CHOCH and tag == CHOCH)) : showStructureInput and (showSwingBullInput == ALL or (showSwingBullInput == BOS and tag != CHOCH) or (showSwingBullInput == CHOCH and tag == CHOCH))
if displayCondition
drawStructure(p_ivot,tag,bullishColor,lineStyle,label.style_label_down,labelSize)
if (internal and showInternalOrderBlocksInput) or (not internal and showSwingOrderBlocksInput)
storeOrdeBlock(p_ivot,internal,BULLISH)
p_ivot := internal ? internalLow : swingLow
extraCondition := internal ? internalLow.currentLevel != swingLow.currentLevel and bearishBar : true
bearishColor = styleInput == MONOCHROME ? MONO_BEARISH : internal ? internalBearColorInput : swingBearColorInput
if ta.crossunder(close,p_ivot.currentLevel) and not p_ivot.crossed and extraCondition
string tag = t_rend.bias == BULLISH ? CHOCH : BOS
if internal
currentAlerts.internalBearishCHoCH := tag == CHOCH
currentAlerts.internalBearishBOS := tag == BOS
else
currentAlerts.swingBearishCHoCH := tag == CHOCH
currentAlerts.swingBearishBOS := tag == BOS
p_ivot.crossed := true
t_rend.bias := BEARISH
displayCondition = internal ? showInternalsInput and (showInternalBearInput == ALL or (showInternalBearInput == BOS and tag != CHOCH) or (showInternalBearInput == CHOCH and tag == CHOCH)) : showStructureInput and (showSwingBearInput == ALL or (showSwingBearInput == BOS and tag != CHOCH) or (showSwingBearInput == CHOCH and tag == CHOCH))
if displayCondition
drawStructure(p_ivot,tag,bearishColor,lineStyle,label.style_label_up,labelSize)
if (internal and showInternalOrderBlocksInput) or (not internal and showSwingOrderBlocksInput)
storeOrdeBlock(p_ivot,internal,BEARISH)
fairValueGapBox(leftTime,rightTime,topPrice,bottomPrice,boxColor) => box.new(chart.point.new(leftTime,na,topPrice),chart.point.new(rightTime + fairValueGapsExtendInput * (time-time ),na,bottomPrice), xloc=xloc.bar_time, border_color = boxColor, bgcolor = boxColor)
deleteFairValueGaps() =>
for in fairValueGaps
if (low < eachFairValueGap.bottom and eachFairValueGap.bias == BULLISH) or (high > eachFairValueGap.top and eachFairValueGap.bias == BEARISH)
eachFairValueGap.topBox.delete()
eachFairValueGap.bottomBox.delete()
fairValueGaps.remove(index)
// @function draw fair value gaps
// @returns fairValueGap ID
drawFairValueGaps() =>
= request.security(syminfo.tickerid, fairValueGapsTimeframeInput, [close , open , time , high , low , time , high , low ],lookahead = barmerge.lookahead_on)
barDeltaPercent = (lastClose - lastOpen) / (lastOpen * 100)
newTimeframe = timeframe.change(fairValueGapsTimeframeInput)
threshold = fairValueGapsThresholdInput ? ta.cum(math.abs(newTimeframe ? barDeltaPercent : 0)) / bar_index * 2 : 0
bullishFairValueGap = currentLow > last2High and lastClose > last2High and barDeltaPercent > threshold and newTimeframe
bearishFairValueGap = currentHigh < last2Low and lastClose < last2Low and -barDeltaPercent > threshold and newTimeframe
if bullishFairValueGap
currentAlerts.bullishFairValueGap := true
fairValueGaps.unshift(fairValueGap.new(currentLow,last2High,BULLISH,fairValueGapBox(lastTime,currentTime,currentLow,math.avg(currentLow,last2High),fairValueGapBullishColor),fairValueGapBox(lastTime,currentTime,math.avg(currentLow,last2High),last2High,fairValueGapBullishColor)))
if bearishFairValueGap
currentAlerts.bearishFairValueGap := true
fairValueGaps.unshift(fairValueGap.new(currentHigh,last2Low,BEARISH,fairValueGapBox(lastTime,currentTime,currentHigh,math.avg(currentHigh,last2Low),fairValueGapBearishColor),fairValueGapBox(lastTime,currentTime,math.avg(currentHigh,last2Low),last2Low,fairValueGapBearishColor)))
getStyle(string style) =>
switch style
SOLID => line.style_solid
DASHED => line.style_dashed
DOTTED => line.style_dotted
drawLevels(string timeframe, bool sameTimeframe, string style, color levelColor) =>
= request.security(syminfo.tickerid, timeframe, [high , low , time , time],lookahead = barmerge.lookahead_on)
float parsedTop = sameTimeframe ? high : topLevel
float parsedBottom = sameTimeframe ? low : bottomLevel
int parsedLeftTime = sameTimeframe ? time : leftTime
int parsedRightTime = sameTimeframe ? time : rightTime
int parsedTopTime = time
int parsedBottomTime = time
if not sameTimeframe
int leftIndex = times.binary_search_rightmost(parsedLeftTime)
int rightIndex = times.binary_search_rightmost(parsedRightTime)
array timeArray = times.slice(leftIndex,rightIndex)
array topArray = highs.slice(leftIndex,rightIndex)
array bottomArray = lows.slice(leftIndex,rightIndex)
parsedTopTime := timeArray.size() > 0 ? timeArray.get(topArray.indexof(topArray.max())) : initialTime
parsedBottomTime := timeArray.size() > 0 ? timeArray.get(bottomArray.indexof(bottomArray.min())) : initialTime
var line topLine = line.new(na, na, na, na, xloc = xloc.bar_time, color = levelColor, style = getStyle(style))
var line bottomLine = line.new(na, na, na, na, xloc = xloc.bar_time, color = levelColor, style = getStyle(style))
var label topLabel = label.new(na, na, xloc = xloc.bar_time, text = str.format('P{0}H',timeframe), color=color(na), textcolor = levelColor, size = size.small, style = label.style_label_left)
var label bottomLabel = label.new(na, na, xloc = xloc.bar_time, text = str.format('P{0}L',timeframe), color=color(na), textcolor = levelColor, size = size.small, style = label.style_label_left)
topLine.set_first_point( chart.point.new(parsedTopTime,na,parsedTop))
topLine.set_second_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedTop))
topLabel.set_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedTop))
bottomLine.set_first_point( chart.point.new(parsedBottomTime,na,parsedBottom))
bottomLine.set_second_point(chart.point.new(last_bar_time + 20 * (time-time ),na,parsedBottom))
bottomLabel.set_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedBottom))
higherTimeframe(string timeframe) => timeframe.in_seconds() > timeframe.in_seconds(timeframe)
updateTrailingExtremes() =>
trailing.top := math.max(high,trailing.top)
trailing.lastTopTime := trailing.top == high ? time : trailing.lastTopTime
trailing.bottom := math.min(low,trailing.bottom)
trailing.lastBottomTime := trailing.bottom == low ? time : trailing.lastBottomTime
drawHighLowSwings() =>
var line topLine = line.new(na, na, na, na, color = swingBearishColor, xloc = xloc.bar_time)
var line bottomLine = line.new(na, na, na, na, color = swingBullishColor, xloc = xloc.bar_time)
var label topLabel = label.new(na, na, color=color(na), textcolor = swingBearishColor, xloc = xloc.bar_time, style = label.style_label_down, size = size.tiny)
var label bottomLabel = label.new(na, na, color=color(na), textcolor = swingBullishColor, xloc = xloc.bar_time, style = label.style_label_up, size = size.tiny)
rightTimeBar = last_bar_time + 20 * (time - time )
topLine.set_first_point( chart.point.new(trailing.lastTopTime, na, trailing.top))
topLine.set_second_point( chart.point.new(rightTimeBar, na, trailing.top))
topLabel.set_point( chart.point.new(rightTimeBar, na, trailing.top))
topLabel.set_text( swingTrend.bias == BEARISH ? 'Strong High' : 'Weak High')
bottomLine.set_first_point( chart.point.new(trailing.lastBottomTime, na, trailing.bottom))
bottomLine.set_second_point(chart.point.new(rightTimeBar, na, trailing.bottom))
bottomLabel.set_point( chart.point.new(rightTimeBar, na, trailing.bottom))
bottomLabel.set_text( swingTrend.bias == BULLISH ? 'Strong Low' : 'Weak Low')
drawZone(float labelLevel, int labelIndex, float top, float bottom, string tag, color zoneColor, string style) =>
var label l_abel = label.new(na,na,text = tag, color=color(na),textcolor = zoneColor, style = style, size = size.small)
var box b_ox = box.new(na,na,na,na,bgcolor = color.new(zoneColor,80),border_color = color(na), xloc = xloc.bar_time)
b_ox.set_top_left_point( chart.point.new(trailing.barTime,na,top))
b_ox.set_bottom_right_point(chart.point.new(last_bar_time,na,bottom))
l_abel.set_point( chart.point.new(na,labelIndex,labelLevel))
// @function draw premium/discount zones
// @returns void
drawPremiumDiscountZones() =>
drawZone(trailing.top, math.round(0.5*(trailing.barIndex + last_bar_index)), trailing.top, 0.95*trailing.top + 0.05*trailing.bottom, 'Premium', premiumZoneColor, label.style_label_down)
equilibriumLevel = math.avg(trailing.top, trailing.bottom)
drawZone(equilibriumLevel, last_bar_index, 0.525*trailing.top + 0.475*trailing.bottom, 0.525*trailing.bottom + 0.475*trailing.top, 'Equilibrium', equilibriumZoneColorInput, label.style_label_left)
drawZone(trailing.bottom, math.round(0.5*(trailing.barIndex + last_bar_index)), 0.95*trailing.bottom + 0.05*trailing.top, trailing.bottom, 'Discount', discountZoneColor, label.style_label_up)
parsedOpen = showTrendInput ? open : na
candleColor = internalTrend.bias == BULLISH ? swingBullishColor : swingBearishColor
plotcandle(parsedOpen,high,low,close,color = candleColor, wickcolor = candleColor, bordercolor = candleColor)
if showHighLowSwingsInput or showPremiumDiscountZonesInput
updateTrailingExtremes()
if showHighLowSwingsInput
drawHighLowSwings()
if showPremiumDiscountZonesInput
drawPremiumDiscountZones()
if showFairValueGapsInput
deleteFairValueGaps()
getCurrentStructure(swingsLengthInput,false)
getCurrentStructure(5,false,true)
if showEqualHighsLowsInput
getCurrentStructure(equalHighsLowsLengthInput,true)
if showInternalsInput or showInternalOrderBlocksInput or showTrendInput
displayStructure(true)
if showStructureInput or showSwingOrderBlocksInput or showHighLowSwingsInput
displayStructure()
if showInternalOrderBlocksInput
deleteOrderBlocks(true)
if showSwingOrderBlocksInput
deleteOrderBlocks()
if showFairValueGapsInput
drawFairValueGaps()
if barstate.islastconfirmedhistory or barstate.islast
if showInternalOrderBlocksInput
drawOrderBlocks(true)
if showSwingOrderBlocksInput
drawOrderBlocks()
lastBarIndex := currentBarIndex
currentBarIndex := bar_index
newBar = currentBarIndex != lastBarIndex
if barstate.islastconfirmedhistory or (barstate.isrealtime and newBar)
if showDailyLevelsInput and not higherTimeframe('D')
drawLevels('D',timeframe.isdaily,dailyLevelsStyleInput,dailyLevelsColorInput)
if showWeeklyLevelsInput and not higherTimeframe('W')
drawLevels('W',timeframe.isweekly,weeklyLevelsStyleInput,weeklyLevelsColorInput)
if showMonthlyLevelsInput and not higherTimeframe('M')
drawLevels('M',timeframe.ismonthly,monthlyLevelsStyleInput,monthlyLevelsColorInput)
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = barmerge.lookahead_off) : close
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop , 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop , 0) and src < nz(xATRTrailingStop , 0) ? math.min(nz(xATRTrailingStop ), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop , 0) and src > nz(xATRTrailingStop , 0) ? math.max(nz(xATRTrailingStop ), src - nLoss) : iff_2
pos = 0
iff_3 = src > nz(xATRTrailingStop , 0) and src < nz(xATRTrailingStop , 0) ? -1 : nz(pos , 0)
pos := src < nz(xATRTrailingStop , 0) and src > nz(xATRTrailingStop , 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
//---------------------------------------------------------------------------------------------------------------------}
//ALERTS
//---------------------------------------------------------------------------------------------------------------------{
alertcondition(currentAlerts.internalBullishBOS, 'Internal Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(currentAlerts.internalBullishCHoCH, 'Internal Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(currentAlerts.internalBearishBOS, 'Internal Bearish BOS', 'Internal Bearish BOS formed')
alertcondition(currentAlerts.internalBearishCHoCH, 'Internal Bearish CHoCH', 'Internal Bearish CHoCH formed')
alertcondition(currentAlerts.swingBullishBOS, 'Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(currentAlerts.swingBullishCHoCH, 'Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(currentAlerts.swingBearishBOS, 'Bearish BOS', 'Bearish BOS formed')
alertcondition(currentAlerts.swingBearishCHoCH, 'Bearish CHoCH', 'Bearish CHoCH formed')
alertcondition(currentAlerts.internalBullishOrderBlock, 'Bullish Internal OB Breakout', 'Price broke bullish internal OB')
alertcondition(currentAlerts.internalBearishOrderBlock, 'Bearish Internal OB Breakout', 'Price broke bearish internal OB')
alertcondition(currentAlerts.swingBullishOrderBlock, 'Bullish Swing OB Breakout', 'Price broke bullish swing OB')
alertcondition(currentAlerts.swingBearishOrderBlock, 'Bearish Swing OB Breakout', 'Price broke bearish swing OB')
alertcondition(currentAlerts.equalHighs, 'Equal Highs', 'Equal highs detected')
alertcondition(currentAlerts.equalLows, 'Equal Lows', 'Equal lows detected')
alertcondition(currentAlerts.bullishFairValueGap, 'Bullish FVG', 'Bullish FVG formed')
alertcondition(currentAlerts.bearishFairValueGap, 'Bearish FVG', 'Bearish FVG formed')
alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')
plotshape(buy, title = 'Buy', text = 'Buy', style = shape.labelup, location = location.belowbar, color = color.new(color.green, 0), textcolor = color.new(color.white, 0), size = size.tiny)
plotshape(sell, title = 'Sell', text = 'Sell', style = shape.labeldown, location = location.abovebar, color = color.new(color.red, 0), textcolor = color.new(color.white, 0), size = size.tiny)
//--------------------------------------------------------------------------------------
// EMA ADDITIONS (Editable)
//--------------------------------------------------------------------------------------
ema5Len = input.int(5, "5 EMA Length", minval = 1)
ema9Len = input.int(9, "9 EMA Length", minval = 1)
ema5 = ta.ema(src, ema5Len)
ema9 = ta.ema(src, ema9Len)
plot(ema5, "EMA 5", color = color.red, linewidth = 2)
plot(ema9, "EMA 9", color = color.blue, linewidth = 2)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
SCOB Pattern with ERC & AlertsSingle Candle Block (SC0B) consists of a single candle appearing at a significant price level, indicating a confirmed reversal in price direction from that particular area of interest.
SCOB is primarily used to confirm and execute trades.
Using a single candle block to enter a trade minimizes risk and maximizes reward.
Single bullish candle block?
1st candle closes at bullish point of interest with a short or long wick.
2nd candle sweeps the low of previous(1st) candle and closes above the low of previous candle.
3rd candle closes above the high of 2nd candle.
How to trade with Scob bullish.
To Trade using Bullish SCOB you have to wait for price to come down and test the single candle order block.
When price tests the SCOB you can directly execute a buy trade or for a precise entry you can wait for a market structure shift in lower time frame.
Scob discount is the opposite of price increase.
This strategy should only be used when price "sweeps through key lever, liquidity, imbalance, poi htf areas.
This indicator will add a filter to help you reduce signal noise.
Use the "Use engulfing candle to test" function to filter the 3rd candle.
Only search for Scob if the 3rd candle is an Engulfing candle.
The logic for finding Engulfing candles can be changed based on the "% maximum wick length" option. The default is that the candle wick is 25% of the total candle wick length.
You can also use the alert function when Scob appears
With Smart money concept, no strategy is perfect in trading, so you should not risk too much of your capital on this strategy.
To be safer, always remember to use stop loss for every trade.
Fib and Slope Trend Detector [EWT] + MTF Dashboard🚀 Overview
The Momentum Structure Trend Detector is a sophisticated trend-following tool that combines Price Velocity (Slope) with Market Structure (Fibonacci) to identify high-probability trend reversals and continuations.
Unlike traditional indicators that rely heavily on lagging moving averages, this script analyzes the speed of price action in real-time. It operates on the core principle of market structure: Impulse moves are fast and steep, while corrections are slow and shallow.
🧠 The Logic: Physics Meets Market Structure
This indicator determines the trend direction by calculating the Slope (Velocity) of price swings.
ZigZag Calculation: It first identifies market swings (Highs and Lows) using a standard pivot detection algorithm.
Slope Calculation: It calculates the velocity of every completed leg using the formula: $Slope = \frac{|Price Change|}{|Time Duration|}$.
Trend Definition:
Uptrend : If the previous Up-move was fast (Impulse) and the subsequent Down-move is slower (Correction), the market is primed for an uptrend.
Downtrend : If the previous Down-move was fast (Impulse) and the subsequent Up-move is slower (Correction), the market is primed for a downtrend.
🔥 Key Features
1. Aggressive Real-Time Detection (No Lag)
Most structure indicators wait for a "Higher High" to confirm a trend, which often leads to late entries. This script uses an Aggressive Live Slope calculation:
It compares the current developing slope of the live price action against the slope of the previous completed leg.
Result: As soon as the current move becomes "steeper" (faster) than the previous correction, the trend flips immediately. This allows you to catch the "meat" of the move before a new pivot is even confirmed.
2. Fibonacci Validity Filter
Momentum alone isn't enough; we need structural integrity.
The script calculates the 78.6% Retracement level of the impulse leg.
If a correction moves deeper than this Fibonacci limit (on a closing basis), the trend structure is considered "broken" or "invalid," and the indicator switches to a Neutral state. This filters out choppy/ranging markets.
3. Multi-Timeframe (MTF) Dashboard
A customizable dashboard on the chart allows for fractal analysis. You can view the trend state (UP/DOWN/NEUTRAL) across 9 different timeframes (1m to 1M) simultaneously.
Green Row : Uptrend
Red Row : Downtrend
Gray : Neutral/Indeterminate
4. Smart Visuals
Background Colo r: Changes dynamically (Teal for Bullish, Red for Bearish, Gray for Neutral) to give you an instant read of the market state.
Slope Labels : Displays the calculated numeric slope on the chart, helping you visualize the momentum difference between impulse and corrective waves.
Invalidation Levels : Automatically plots the invalidation line (Stop Loss level) based on the market structure.
🛠️ Settings & Inputs
Strategy Settings
Pivot Deviation Length : Sensitivity of the ZigZag calculation (Default: 5). Lower numbers = more sensitive to small swings.
Max Retracement % : The Fibonacci limit for a valid correction (Default: 78.6%).
Min Bars for Live Calc : To prevent noise, the script waits for this many bars after a pivot before calculating the "Live Slope" (Default: 3).
Dashboard Settings
Show Dashboard : Toggle the table on/off.
Timeframe Toggles : Enable/Disable specific timeframes (1m, 5m, 15m, 30m, 1H, 4H, 1D, 1W, 1M) to suit your trading style.
🎯 How to Use
Wait for Background Change : When the background turns Teal, it indicates that a corrective pullback has ended and a new impulse with high velocity has begun.
Check Invalidation : Look at the plotted Stop Loss Level. If price closes below this line, the trade idea is invalid.
Confirm with Dashboard : Use the table to ensure the higher timeframes (e.g., 1H, 4H) align with your current chart's direction for higher probability setups.
Disclaimer : This tool is designed for trend analysis and educational purposes. Past performance (momentum) is not indicative of future results. Always manage your risk.
Kernel Regression Trend LineKTrend – Non-Repainting Kernel Regression Trend (2025 Clean Version)
Ultra-clean, powerful, and completely non-repainting trend-following tool based on advanced Kernel regression (Rational Quadratic + Gaussian blend).
How it works:
• Uses two different kernel estimates with smart lag to detect genuine trend reversals
• Plots a thick, beautifully colored trend line (teal when rising, deep red when falling)
• Places precise, locked-in Bullish Flip (green triangle below bar) and Bearish Flip (red triangle above bar) signals only on confirmed bar close – zero repaint, ever
• Optional smoothing mode for even cleaner visuals
Features
✓ 100% non-repainting signals and line
✓ Minimal lag while staying extremely responsive
✓ Clean aesthetic – perfect for BTC, ETH, stocks, forex, any timeframe
✓ Built-in alerts for Bullish & Bearish flips
✓ Fully open source (MPL 2.0)
Default settings are already battle-tested and loved by thousands:
- Lookback Window: 11
- Relative Weighting: 8.0
- Regression Level: 25
- Lag: 2
Great on 1H–Daily charts, especially crypto and indices.
Credits: Original kernel library by jdehorty, cleaned & enhanced flip logic by HighlanderOne.
Enjoy the smoothest, most reliable kernel trend tool on TradingView – completely free!
Gold Correlation Dashboard + Alerts [XAUUSD Helper]這是一個專為黃金 (XAUUSD) 交易者設計的 **跨市分析儀表板 (Intermarket Correlation Dashboard)**。
這個指標的核心邏輯基於基本面與資金流向,協助交易者在 10 秒內快速判斷黃金的當前趨勢。它自動監控與黃金高度負相關的資產(美元、美債、日圓),並在圖表上直接顯示多空傾向。
### 📊 監控資產與邏輯
本腳本即時抓取以下關鍵市場數據,並分析其對黃金的影響:
1. **DXY (美元指數)**:黃金最大競爭對手。
- DXY 跌 📉 → 黃金偏多
- DXY 漲 📈 → 黃金偏空
2. **US10Y (10年期美債殖利率)**:黃金的持有成本指標。
- 殖利率跌 📉 → 黃金偏多
- 殖利率漲 📈 → 黃金偏空
3. **USDJPY (美日)** & **USDCHF (美瑞)**:避險資金流向參考。
- 匯率跌 (日圓/瑞郎強) 📉 → 黃金偏多
4. **VIX (恐慌指數)**:市場情緒指標。
- VIX 飆升 📈 → 黃金通常受惠 (避險屬性)
### 🚀 主要功能
1. **即時儀表板**:無需切換視窗,直接在黃金圖表角落查看所有關鍵資產的漲跌狀態。
2. **智能信號總結**:
- 系統會自動計算 **DXY + US10Y + USDJPY** 的綜合方向。
- 當這三大核心指標方向一致時,系統會顯示 **★ STRONG BUY (強力做多)** 或 **★ STRONG SELL (強力做空)**。
- 根據歷史經驗,當這三者同步時,趨勢準確度極高。
3. **警報系統 (Alerts)**:
- 內建警報功能,當出現「強力做多」或「強力做空」信號時,可設定推播通知,不錯過進場機會。
### ⚙️ 如何使用
- 將此指標加載到 XAUUSD (黃金) 的圖表上。
- 建議搭配 H1, H4 或 Daily 時框使用。
- **綠色背景** = 利多黃金 (Bullish)
- **紅色背景** = 利空黃金 (Bearish)
---
*免責聲明:此腳本僅供輔助分析與教育用途,不構成任何投資建議。交易請做好風險控管。*
**Gold (XAUUSD) Intermarket Correlation Dashboard & Alerts**
This indicator is designed for Gold traders who want to combine Technical Analysis with **Fundamental Intermarket Analysis**. It provides a real-time dashboard overlay that monitors key assets highly correlated with XAUUSD.
According to market logic, Gold is heavily influenced by the US Dollar (DXY), US Treasury Yields (US10Y), and global risk sentiment (USDJPY/VIX). This script helps you spot the trend in seconds.
### 📊 Monitored Assets & Logic
The dashboard tracks the real-time direction of the following assets and calculates their impact on Gold:
1. **DXY (US Dollar Index)**: Inverse correlation.
* DXY ↓ = Bullish for Gold
* DXY ↑ = Bearish for Gold
2. **US10Y (US 10-Year Treasury Yield)**: Inverse correlation (Cost of Holding).
* Yields ↓ = Bullish for Gold
* Yields ↑ = Bearish for Gold
3. **USDJPY & USDCHF**: Risk sentiment and currency flow.
* Pair ↓ (Strong JPY/CHF) = Bullish for Gold
4. **VIX (Volatility Index)**: Fear gauge.
* VIX ↑ = Generally Bullish for Gold (Safe Haven demand)
### 🚀 Key Features
**1. Real-Time Dashboard**
View the status of all 5 key assets directly on your XAUUSD chart without switching tabs. The dashboard indicates the "Gold Bias" (Bullish/Bearish) for each asset based on the current timeframe.
**2. Smart Bias Signal ("The 3-Storyline Confirmation")**
The script automatically analyzes the three most critical indicators: **DXY, US10Y, and USDJPY**.
* **★ STRONG BUY ★**: When DXY, US10Y, and USDJPY are **ALL Falling** simultaneously. (High probability setup).
* **★ STRONG SELL ★**: When DXY, US10Y, and USDJPY are **ALL Rising** simultaneously.
**3. Integrated Alerts**
Never miss a setup. You can set alerts to notify you immediately when the "Strong Buy" or "Strong Sell" conditions are met.
### ⚙️ How to Use
1. Add this script to your XAUUSD chart.
2. Works best on H1, H4, or Daily timeframes.
3. Look for the **Summary Row** at the bottom of the dashboard:
* **Green (Strong Buy)**: Look for Long entries.
* **Red (Strong Sell)**: Look for Short entries.
---
*Disclaimer: This script is for educational and informational purposes only. It does not constitute financial advice. Always manage your risk.*
Pre-Market ORB Break and Retest - Institutional═══════════════════════════════════
PRE-MARKET ORB BREAK AND RETEST - INSTITUTIONAL
═══════════════════════════════════
Free professional Pre-Market Opening Range Breakout indicator from QuantCrawler - your AI-powered futures trading analysis platform.
Built as a free resource for the trading community. Support us at quantcrawler.com and on YouTube @AutomateWithAaron.
═══════════════════════════════════
📊 HOW IT WORKS
1. Captures the 8:00-8:15 AM ET pre-market range where institutional investors position
2. Draws OR High, OR Low, and Midpoint levels on your chart
3. Waits for market open at 9:30 AM EST before detecting breakouts
4. Fires LONG/SHORT entry signals when price retests the OR midpoint after breakout
═══════════════════════════════════
✓ FEATURES
- Runs on 1m or 5m charts - captures 15m pre-market range automatically
- Zone marked at 8:15 AM, trades trigger after 9:30 AM market open
- Universal - works on futures, forex, stocks, and crypto
- Customizable sessions - NY, London, Asia, or any custom timeframe
- Adjustable breakout distance to match your instrument
- Clean visual signals - only shows actionable entries
- Session end time stops monitoring after market close
═══════════════════════════════════
⚙️ SETTINGS
- Breakout Distance (Points): Distance outside OR zone to confirm breakout
- Timezone: Select your trading session
- Opening Range Time: Pre-market positioning window (default 8:00-8:15)
- Session End Time: When to stop monitoring (default 16:00)
═══════════════════════════════════
🎯 IDEAL FOR
Day traders who defend institutional positioning levels. The 8:00-8:15 AM range captures where smart money positions before retail market open, giving you an edge on key support/resistance zones.
═══════════════════════════════════
🚀 WANT MORE?
This indicator pairs perfectly with QuantCrawler's AI-powered chart analysis:
- Multi-timeframe futures analysis (15m/5m/1m scalping, 4H/1H/30m intraday, 1D/4H/1H swing)
- Precision entry points, stop losses, and profit targets
- Confidence scoring for every setup
- Covers futures, forex, and crypto markets
Visit quantcrawler.com to see how AI can level up your trading.
═══════════════════════════════════
⚠️ DISCLAIMER
This indicator is for educational purposes only. Past performance does not guarantee future results. Always use proper risk management and never risk more than you can afford to lose.
═══════════════════════════════════
Built with ❤️ by Aaron at QuantCrawler
quantcrawler.com | AI-Powered Futures Trading Analysis
Pre-Market ORB Break and Retest - Institutional═══════════════════════════════════
PRE-MARKET ORB BREAK AND RETEST - INSTITUTIONAL
═══════════════════════════════════
Free professional Pre-Market Opening Range Breakout indicator from QuantCrawler - your AI-powered futures trading analysis platform.
Built as a free resource for the trading community. Support us at quantcrawler.com and on YouTube @AutomateWithAaron.
═══════════════════════════════════
📊 HOW IT WORKS
1. Captures the 8:00-8:15 AM ET pre-market range where institutional investors position
2. Draws OR High, OR Low, and Midpoint levels on your chart
3. Waits for market open at 9:30 AM EST before detecting breakouts
4. Fires LONG/SHORT entry signals when price retests the OR midpoint after breakout
═══════════════════════════════════
✓ FEATURES
- Runs on 1m or 5m charts - captures 15m pre-market range automatically
- Zone marked at 8:15 AM, trades trigger after 9:30 AM market open
- Universal - works on futures, forex, stocks, and crypto
- Customizable sessions - NY, London, Asia, or any custom timeframe
- Adjustable breakout distance to match your instrument
- Clean visual signals - only shows actionable entries
- Session end time stops monitoring after market close
═══════════════════════════════════
⚙️ SETTINGS
- Breakout Distance (Points): Distance outside OR zone to confirm breakout
- Timezone: Select your trading session
- Opening Range Time: Pre-market positioning window (default 8:00-8:15)
- Session End Time: When to stop monitoring (default 16:00)
═══════════════════════════════════
🎯 IDEAL FOR
Day traders who defend institutional positioning levels. The 8:00-8:15 AM range captures where smart money positions before retail market open, giving you an edge on key support/resistance zones.
═══════════════════════════════════
🚀 WANT MORE?
This indicator pairs perfectly with QuantCrawler's AI-powered chart analysis:
- Multi-timeframe futures analysis (15m/5m/1m scalping, 4H/1H/30m intraday, 1D/4H/1H swing)
- Precision entry points, stop losses, and profit targets
- Confidence scoring for every setup
- Covers futures, forex, and crypto markets
Visit quantcrawler.com to see how AI can level up your trading.
═══════════════════════════════════
⚠️ DISCLAIMER
This indicator is for educational purposes only. Past performance does not guarantee future results. Always use proper risk management and never risk more than you can afford to lose.
═══════════════════════════════════
Built with ❤️ by Aaron at QuantCrawler
quantcrawler.com | AI-Powered Futures Trading Analysis
COT Net Positions OTCCOT Net Positions Indicator Description
This is a TradingView Pine Script indicator that displays Commitment of Traders (COT) data for any trading instrument.
What it does:
Fetches COT Data - Uses the TradingView COT library to retrieve official CFTC (Commodity Futures Trading Commission) data for the current symbol
Calculates Net Positions for three trader categories:
Commercial (Blue) - Large hedging institutions; represents institutional long/short positioning
Non-Commercial (Yellow) - Large speculators and hedge funds; often considered "smart money"
Retail (Red) - Small individual traders; often considered contrarian indicators
Net Position Calculation - For each category:
Takes Long Positions minus Short Positions
Plots the result on a separate panel below the price chart
Special Symbol Handling - Includes custom mappings for specific commodities:
Copper (HG) → CFTC code 085692
Brazilian Real (LBR) → CFTC code 058644
Use Cases:
Market Bias Detection - See if institutions are mostly long or short
Contrarian Trading - When retail traders are extremely positioned one way, often the market reverses
Trend Confirmation - Non-commercial positioning often aligns with established trends
Support/Resistance - Extreme COT positions can signal market turning points
Coinbase Premium Index (Custom Tickers)📊 Coinbase Premium Index (Auto Symbol Support)
1. Overview
The Coinbase Premium Index is a widely used indicator to gauge the sentiment difference between US institutional investors (Coinbase Pro) and global retail/futures traders (Binance).
This script calculates the percentage difference between the Coinbase (USD pair) price and the Binance (USDT pair) price.
2. Key Features
🔄 Auto Symbol Matching (New): You no longer need to manually change tickers when switching charts.
If you are looking at a SOL/USDT chart, the indicator automatically detects "SOL" and compares COINBASE:SOLUSD vs BINANCE:SOLUSDT.
🛠 Manual Mode: Includes a manual override option if you wish to compare specific fixed tickers (e.g., strictly BTC).
🎨 Dynamic Visuals:
Histogram: Color-coded bars (Green/Red) indicate positive or negative premiums.
Smart Label: Displays the real-time premium value on the chart. The label color adapts to the trend, and hovering over it shows a Tooltip confirming exactly which tickers are being compared.
3. How to Interpret
The premium indicates the flow of funds and buying pressure:
🟢 Positive Premium (Green Bar):
Coinbase Price > Binance Price
Interpretation: Strong buying pressure from US institutions or spot whales. Often considered a Bullish signal.
🔴 Negative Premium (Red Bar):
Coinbase Price < Binance Price
Interpretation: Strong selling from US investors, or overheated buying in the offshore futures market (Binance). Often considered a Bearish or mean-reversion signal.
4. Settings Guide
Ticker Mode:
Auto (Current Chart): Automatically sets the comparison based on your current chart's base currency (Recommended).
Manual (Custom): Uses the specific tickers defined in the manual input fields below.
Manual Inputs: Enter tickers here if using Manual Mode (Default: COINBASE:BTCUSD vs BINANCE:BTCUSDT).
Bar & Label Settings: Customize colors, transparency, and the vertical position (Y-Offset) of the data label to fit your chart layout.
Advanced Triple Strategy ScalperHere are the three scalping strategies presented in the video "3 Scalping Strategies That Work Every Day (Backtested & Proven)" by Asia Forex Mentor – Ezekiel Chew:
### Scalper’s Trend Filter (Triple EMA)
This strategy uses three EMAs (25, 50, 100) on the 5-minute chart to filter high-probability trades aligned with momentum .
- Only trade when all three EMAs are angled in the same direction and clearly separated (no crossing or tangling) .
- Enter when price pulls back toward the 25 or 50 EMA and then bounces back toward the 25 EMA, but do not enter if price closes below the 100 EMA .
- Set stop-loss just below the 50 EMA or swing low and aim for a risk-to-reward ratio of 1:1.5 .
### Flip Zone Trap (Reversal Catching)
This method identifies precise reversal moments where market structure shifts from weakness to strength .
- Use the 15-min chart to locate key support or resistance zones where price previously reacted .
- Wait for price to stop making lower lows and begin making higher highs (or vice versa for shorts); confirm with a trendline break AND follow-through (higher lows & highs within 5-7 candles) .
- Use confirmation candles (bullish engulfing, pin bar rejection) at the zone before entry .
### Liquidity Shift Trigger (Smart Money Trap)
This system leverages institutional stop hunts and liquidity sweeps at key zones for sniper entries .
- Start with a 15-min chart to identify structure breaks and points of interest (order blocks, flip zones, demand zones) .
- Drop to 1-min chart and wait for price to enter the refined zone and sweep liquidity (sharp wick/spike below/above key level) .
- Once liquidity is swept, wait for a clean structure shift (break of most recent internal high or low) within 5–6 candles—if confirmed, refine entry to the candle that caused the break and enter when price returns to that candle with a strong reaction .
***
### Practical Application
- These strategies are systematic, rule-based, and designed to cut out fake moves, avoid early stop-outs, and align entries with momentum and institutional activity .
- Perfect for short timeframes and volatile pairs like XAUUSD, especially if paired with additional confirmation from other technical analysis tools .
All three strategies emphasize filtering noise, waiting for momentum/trend confirmation, and avoiding impulsive entries—key principles for consistent scalping success
Flout Ranges + STDVs [bilal]# Flout Ranges + STDVs
## What It Does
Automatically draws FLOUT, CBDR, and ASIA session ranges with standard deviation levels and highlight zones. Perfect for ICT-style trading and session-based strategies.
## Main Features
**📊 Session Ranges**
- FLOUT, CBDR, and ASIA ranges drawn automatically
- Works for both Indices and Forex (just toggle Forex Mode)
- Customizable colors and labels for each range
**📈 Standard Deviation Levels**
- Shows key STDV levels from your ranges
- FLOUT: -6 to +6 from midpoint
- CBDR/ASIA: 0 to 7 from range low
- Helps identify expansion targets and reversal zones
**🎯 Highlight Zones**
- Zone 1 (default 3.5-4.0 STDV): Common reversal area
- Zone 2 (default 5.5-6.0 STDV): Extended targets
- Shaded boxes make them easy to spot
- Automatically extends forward into London session
**📐 Smart Trendlines**
- Connects the open prices at key times
- Switches to X-pattern on trending FLOUT days
- Helps identify directional bias
## Quick Setup
1. Add indicator to your 1-5 minute chart
2. Toggle **Forex Mode** if trading forex (otherwise leave off for indices)
3. Turn on STDV lines for the ranges you want to see
4. Adjust highlight zones if needed (defaults work great)
## Why Use This?
- **Save Time**: No more manual drawing of ranges and levels
- **Stay Consistent**: Same levels calculated every session
- **Better Entries**: Use STDV zones for high-probability setups
- **Cleaner Charts**: Toggle what you need, hide what you don't
## Pro Tips
💡 Watch for reactions at 3.5-4.0 STDV zones - these are prime reversal areas
💡 Combine multiple ranges for allignements setups
---
*All times in New York timezone. Best used on 1-5 minute charts.*
Cumulative Volume Delta (HA Option)# **📘 Ultimate Guide to Trading With CVD Heikin Ashi (CVD+)**
## **🔍 What This Indicator Shows**
This tool plots **Cumulative Volume Delta (CVD)** as candlesticks—optionally transformed into **Heikin Ashi CVD candles**.
Instead of price, each candle represents the *battle between buyers and sellers* within your chosen timeframe.
**Volume Delta = Buying Volume – Selling Volume**
CVD takes all deltas and stacks them cumulatively, showing who is controlling the auction *over time*.
With Heikin Ashi smoothing layered on top, trend detection becomes cleaner, letting you see the “true pressure” behind price moves.
---
# **💡 Why CVD Is a Game Changer**
Most traders only see price.
Serious traders watch **pressure**.
CVD exposes what price hides:
* Absorption
* Hidden accumulation
* Seller exhaustion
* Fake breakouts
* True reversals
* Momentum strength / weakness
* Smart money footprint
When combined with Heikin-Ashi smoothing, you get delta trends with way less noise and fewer fake flips.
---
# **📈 How to Actually Use It (The Edge)**
## **1. Spot True Trend vs. Fake Trend**
If **price goes up** but **CVD goes down**, that’s:
* Passive sellers absorbing
* A weak rally
* High probability of reversal
If **price pulls back** but **CVD keeps rising**, that’s:
* Secret accumulation
* A continuation setup
* Great dip-buy opportunity
**Rule of thumb:**
🔹 *Follow the CVD trend, not the price noise.*
---
## **2. Catch Reversals Early**
Watch for:
### **🔻 Bearish Reversal Signals**
* CVD makes a **lower high**
* Heikin Ashi CVD prints **red bodies with rising upper shadows**
* Price makes one final push up on low delta
This is classic distribution → the drop usually follows fast.
### **🔹 Bullish Reversal Signals**
* CVD forms a **higher low**
* HA CVD flips from red to green with full bodies
* Price still looks weak = bottom forming
This is exactly how pros catch bottoms early.
---
## **3. Identify Absorption Levels**
If price hits a level multiple times but CVD keeps climbing (or falling), that level is being defended.
Example:
* Price stalls at support
* CVD keeps rising
= **Buyers absorbing sells → high-probability bounce**
Opposite works for resistance.
---
## **4. Validate Breakouts**
A breakout with *weak or negative CVD* is usually a trap.
A breakout with **strong, rising HA CVD** is real.
If CVD diverges from the breakout direction → fade it.
If CVD confirms → ride it.
---
## **5. Use Heikin Ashi to Stay in Trends**
HA smoothing removes the nasty chop of raw delta data.
Look for:
* Consecutive **full-body teal candles = strong buying wave**
* Consecutive **full-body red candles = strong selling wave**
* Small-bodied candles after a trend = momentum dying
This keeps you in winners longer and cuts losers faster.
---
# **🎯 Practical Trading Playbook**
### **A) Long Setup**
1. Price pullback into support
2. CVD stays bullish or makes a higher low
3. HA CVD flips green or prints a strong body
4. Enter long
5. Stop under CVD structural low
### **B) Short Setup**
1. Price pushes into resistance
2. CVD forms bearish divergence
3. HA CVD prints red bodies
4. Enter short
5. Stop above CVD swing high
### **C) Chop Filter**
No clear HA CVD trend = avoid trading → stop donating money to the market.
---
# **🧠 Tips for Mastery**
* Use lower timeframe delta (1m–5m) for scalping entries
* Use a higher anchor timeframe (1D) to define direction
* When price trends but CVD is flat → expect a fakeout
* When CVD trends but price is flat → expect a breakout
* Trade WITH delta, fade AGAINST delta
---
# **⚠️ Important Notes**
* Crypto = full tick-by-tick volume → CVD is extremely accurate
* Stocks = depends on your broker/data vendor
* Futures = best signal-to-noise ratio
* If your symbol has no volume → indicator will warn you
---
# **📥 Recommended Settings**
* **Anchor timeframe**: 1D or 4H
* **Lower timeframe**: 1m, 3m, or 5m
* **Heikin Ashi**: ON for trend filtering, OFF for raw delta
---
# **🔥 Final Word**
Price can lie.
Delta usually doesn’t.
CVD + Heikin Ashi gives you the closest thing to reading the market’s heartbeat in real time.
Use it to confirm breakouts, detect reversals early, identify real trend strength, and avoid getting caught in manipulation.
If you learn to read CVD well…
you stop trading price, and start trading the **intent** behind the price.
Previous Day Candle [ApexFX]Previous Day Candle is a precision tool designed for intraday traders who rely on previous daily structures to find support and resistance.
While most indicators simply mark the previous high and low, this tool focuses on Session Continuity. It highlights the full 24-hour range of the previous day and extends those levels into the "Killzone" of the current trading day (up to 2:00 PM EST / 12:00 PM MST).
Why use this? Market reaction often occurs at the previous day's extremes. By extending these lines into the current session, you can easily spot:
Breakouts: Price pushing through yesterday's high.
Failed Auctions: Price sweeping yesterday's low and reversing.
Support/Resistance Flips: Old highs becoming new support.
Main Features:
Asset Class Presets: Don't worry about timezones. Simply select your market:
Forex: Aligns to the standard 5:00 PM EST New York Open.
Indices: Aligns to the 6:00 PM EST Globex Open.
Crypto: Aligns to UTC Midnight.
Custom: Full manual control for specific needs.
Visual "Boxing": Vertical dotted lines clearly demarcate the start and end of the previous trading day.
Dynamic History: Choose to show just yesterday's levels or look back at the last 5+ days.
Smart Color Coding: The indicator automatically cycles colors for each day (Blue = Yesterday, Green = 2 Days Ago, etc.), making it instant to read historical price action.
Best Used On: Intraday timeframes (5m, 15m, 1h).
Hash Momentum IndicatorHash Momentum Indicator
Overview
The Hash Momentum Indicator provides real-time momentum-based trading signals with visual entry/exit markers and automatic risk management levels. This is the indicator version of the popular Hash Momentum Strategy, designed for traders who want signal alerts without backtesting functionality.
Perfect for: Live trading, automation via alerts, multi-indicator setups, and clean chart visualization.
What Makes This Indicator Special
1. Pure Momentum-Based Signals
Captures price acceleration in real-time - not lagging moving average crossovers. Enters when momentum exceeds a dynamic ATR-based threshold, catching moves as they begin accelerating.
2. Automatic Risk Management Visualization
Every signal automatically displays:
Entry level (white dashed line)
Stop loss level (red line)
Take profit target (green line)
Partial TP levels (dotted green lines)
3. Smart Trade Management
Trade Cooldown: Prevents overtrading by enforcing waiting period between signals
EMA Trend Filter: Only trades with the trend (optional)
Session Filters: Trade only during Tokyo/London/New York sessions (optional)
Weekend Toggle: Avoid low-liquidity weekend periods (optional)
4. Clean Visual Design
🟢 Tiny green dot = Long entry signal
🔴 Tiny red dot = Short entry signal
🔵 Blue X = Long exit
🟠 Orange X = Short exit
No cluttered labels or dashboard - just clean signals
5. Professional Alerts Ready
Set up TradingView alerts for:
Long signals
Short signals
Long exits
Short exits
How It Works
Step 1: Calculate Momentum
Momentum = Current Price - Price
Normalized by standard deviation for consistency
Must exceed ATR × Threshold to trigger
Step 2: Confirm Acceleration
Momentum must be increasing (positive momentum change)
Price must be moving in signal direction
Step 3: Apply Filters
EMA Filter: Long only above EMA, short only below EMA (if enabled)
Session Filter: Check if in allowed trading session (if enabled)
Weekend Filter: Block signals on Sat/Sun (if enabled)
Cooldown: Ensure minimum bars passed since last signal
Step 4: Generate Signal
All conditions met = Entry signal fires
Lines automatically drawn for entry, stop, and targets
Step 5: Exit Detection
Opposite momentum detected = Exit signal
Stop loss or take profit hit = Exit signal
Lines removed from chart
⚙️ Settings Guide
Core Strategy
Momentum Length (Default: 13)
Number of bars for momentum calculation. Higher values = stronger signals but fewer trades.
Aggressive: 10
Balanced: 13
Conservative: 18-24
Momentum Threshold (Default: 2.25)
ATR multiplier for signal generation. Higher values = only trade the biggest momentum moves.
Aggressive: 2.0
Balanced: 2.25
Conservative: 2.5-3.0
Risk:Reward Ratio (Default: 2.5)
Your target profit as a multiple of your risk. With 2.2% stop and 2.5 R:R, your target is 5.5% profit.
Conservative: 3.0+ (need 25% win rate to profit)
Balanced: 2.5 (need 29% win rate to profit)
Aggressive: 2.0 (need 33% win rate to profit)
TICK & ADD Market Internals SuiteOverview: This is the ultimate Market Internals tool designed for professional SPX/ES and NQ intraday traders.
Traders often monitor both TICK (for short-term timing) and ADD (for daily trend context). However, displaying them on the same chart is usually problematic due to their different scales (TICK ±1000 vs. ADD ±2000), causing chart compression.
Market Internals Suite solves this with a smart "Visual Scaling" algorithm, perfectly fusing TICK Candles and the ADD Line into a single, coherent pane.
Key Features
1.Hybrid Visualization:
· TICK (Foreground): Displayed as OHLC Candles to capture instant liquidity sweeps and wicks.
· ADD (Background): Displayed as a clean Line to show the underlying market breadth trend without clutter.
2.Smart Visual Scaling:
· To prevent chart distortion, the ADD line is visually scaled down (Default Ratio: 1.5).
· This aligns the ADD trend volatility with the TICK range, allowing you to instantly spot divergences or resonance between sentiment and trend.
3.Real-Time Data Dashboard:
· Never lose track of the actual numbers. A dashboard in the top-right corner displays the TRUE values for both TICK and ADD (unscaled).
· Customizable Text Size: You can adjust the dashboard font size (Small/Normal/Large/Huge) in the settings to fit your screen.
4.TICK Extreme Alerts:
· Visual Highlight: The chart background highlights (Green/Red) only when TICK hits the extreme ±1000 levels.
· The ADD line remains clean and alert-free to serve as a stable reference.
Strategy: Context + Timing:
1.Trend Resonance
When the ADD line trends upward and TICK candles consistently maintain levels above zero, it indicates a healthy, strong trend. This is a signal to look for trend-following long setups.
2.Divergence Analysis (The "Holy Grail" Signal)
This combination view makes spotting internal divergences incredibly easy:
· Bearish Divergence: When Price makes a New High, but the ADD line or TICK peaks make a Lower High. This suggests buying exhaustion beneath the surface and often precedes a reversal down.
· Bullish Divergence: When Price makes a New Low, but the ADD line or TICK lows make a Higher Low. This suggests that selling pressure is being absorbed, signaling a potential bounce or reversal up.






















