Market State Engine V2# Market State Engine
**Deterministic Confidence-Scoring System for TradingView**
A professional-grade PineScript v5 indicator that scores market conditions from 0-100, helping traders identify high-quality trading opportunities through systematic structure analysis, VWAP positioning, order flow dynamics, and time-based context.
---
## 🎯 Overview
The **Market State Engine** is not a trading bot—it's a **noise-reduction and opportunity-ranking system** designed to filter market conditions and surface only the highest-quality setups.
Instead of blindly taking every signal, this indicator:
- ✅ **Scores** market conditions objectively (0-100 scale)
- ✅ **Filters** out low-probability setups automatically
- ✅ **Classifies** opportunities into A, A+, and A++ grades
- ✅ **Alerts** only on confirmed structure shifts with supporting context
- ✅ **Keeps the human in control** - provides intelligence, not automation
### Philosophy: Reduce Noise. Enforce Discipline. Surface Quality.
---
## 🚀 Key Features
- **Deterministic Scoring** - No black boxes, fully explainable logic
- **Multi-Factor Analysis** - Combines 4 independent market state components
- **Structure-First Approach** - Only alerts on confirmed pivot breaks
- **VWAP Mean Reversion Logic** - Directional filtering based on VWAP zones
- **Order Flow Proxy** - CVD divergence and confirmation detection
- **Session-Aware Scoring** - Prioritizes high-volume New York sessions
- **Alert De-Duplication** - One alert per unique structure shift
- **Zero Repainting** - Uses confirmed pivots only (left=2, right=2)
- **Fully Configurable** - All parameters exposed as inputs
- **Visual Feedback** - VWAP bands, setup labels, and real-time score panel
---
## 📊 Scoring System (0-100)
The Market State Engine evaluates **four independent components**, each contributing up to **25 points** for a maximum total score of **100**.
### 🎯 Component Breakdown
| Component | Max Points | Description |
|-----------|------------|-------------|
| **VWAP Context** | 25 | Measures price deviation from session VWAP |
| **Structure Shift** | 25 | Confirms pivot breakout (HARD GATE) |
| **CVD Alignment** | 25 | Detects order flow divergence/confirmation |
| **Time-of-Day** | 25 | Identifies high-probability trading sessions |
---
### 1️⃣ VWAP Context (Max 25 Points)
**Purpose:** Identifies extreme price deviations from fair value for mean-reversion opportunities.
VWAP (Volume-Weighted Average Price) is calculated session-anchored to New York market time, with standard deviation bands creating zones of opportunity.
#### Band Structure:
- **1st Band**: ±1σ from VWAP (fair value zone)
- **2nd Band**: ±2σ from VWAP (moderate deviation)
- **3rd Band**: ±3σ from VWAP (extreme deviation)
#### Scoring Logic (Exclusive):
```
Price in 3rd VWAP Band (>2σ and ≤3σ) → +25 points
Price in 2nd VWAP Band (>1σ and ≤2σ) → +15 points
Otherwise (inside 1σ or beyond 3σ) → 0 points
```
**Key Insight:** The further price stretches from VWAP, the higher the probability of mean reversion.
---
### 2️⃣ Structure Shift (Max 25 Points) — **HARD GATE**
**Purpose:** Confirms momentum shift through confirmed pivot breakouts.
⚠️ **CRITICAL:** Structure shift is **mandatory**. If no valid structure shift occurs, the **total score becomes 0** regardless of other factors.
#### Detection Method:
Uses TradingView's `ta.pivothigh()` and `ta.pivotlow()` functions with **locked parameters**:
- **Left bars**: 2
- **Right bars**: 2
- **Source**: Configurable (Wick or Body)
- **Break confirmation**: Candle close only
#### Bullish Structure Shift:
- ✅ Prior swing high exists (confirmed pivot)
- ✅ Current candle **closes above** swing high + tick buffer
- ✅ Must occur in VWAP 2nd or 3rd band
- ✅ **VWAP Filter**: Price must be **at or below VWAP** (lower bands)
#### Bearish Structure Shift:
- ✅ Prior swing low exists (confirmed pivot)
- ✅ Current candle **closes below** swing low - tick buffer
- ✅ Must occur in VWAP 2nd or 3rd band
- ✅ **VWAP Filter**: Price must be **at or above VWAP** (upper bands)
#### Scoring:
```
Valid structure shift → +25 points
No structure shift → Total score = 0
```
**Tick Buffer:** Default 5 ticks (configurable) - prevents false breaks from minor price noise.
---
### 3️⃣ CVD Alignment (Max 25 Points)
**Purpose:** Detects institutional order flow through volume delta analysis.
CVD (Cumulative Volume Delta) is a proxy for order flow:
```
Close > Open → +Volume (buying pressure)
Close < Open → -Volume (selling pressure)
```
#### Scoring Logic:
| Condition | Points | Description |
|-----------|--------|-------------|
| **Divergence** | +25 | Price makes higher high + CVD makes lower high (bearish)Price makes lower low + CVD makes higher low (bullish) |
| **Confirmation** | +20 | Price and CVD both make higher highs or lower lows |
| **Neutral** | 0 | No clear divergence or confirmation |
**Lookback Window:** Last 20 bars (configurable) - prevents stale divergences.
**Key Insight:** Divergences suggest weakening momentum, while confirmations validate the trend.
---
### 4️⃣ Time-of-Day Context (Max 25 Points)
**Purpose:** Prioritizes high-volume, high-volatility New York sessions.
#### Scored Sessions (America/New_York timezone):
| Session | Time Range (NY) | Points | Description |
|---------|-----------------|--------|-------------|
| **Pre-Market** | 03:00 - 04:00 | +25 | Early liquidity injection |
| **Market Open** | 09:30 - 11:30 | +25 | Highest volume period |
| **Off-Hours** | All other times | 0 | Lower probability setups |
**Key Insight:** Structure shifts during active sessions have higher follow-through probability.
---
## 🏆 Setup Classification
Setups are graded based on total score thresholds (configurable):
| Grade | Score Range | Typical Components | Quality Level |
|-------|-------------|-------------------|---------------|
| **A++ Setup** | ≥90 | All 4 factors aligned(VWAP 3rd band + Structure + CVD + Session) | Premium - Rare |
| **A+ Setup** | ≥75 | Structure + VWAP + CVD or Session(3 of 4 factors) | High - Select |
| **A Setup** | ≥60 | Structure + VWAP + Session(Minimum viable setup) | Good - Regular |
| **No Grade** | <60 | Insufficient confluence | Filtered out |
**Default Thresholds:**
- A Setup: 60 points
- A+ Setup: 75 points
- A++ Setup: 90 points
---
## 📥 Installation
### Step 1: Download the Indicator
Download the `market_state_engine.pine` file from this repository.
### Step 2: Add to TradingView
1. Open (www.tradingview.com)
2. Open the **Pine Editor** (bottom panel)
3. Click **"New"** → **"Blank indicator"**
4. Delete all default code
5. Paste the contents of `market_state_engine.pine`
6. Click **"Add to Chart"**
### Step 3: Configure for Your Symbol
1. Click the **gear icon** next to the indicator name
2. Adjust **Tick Size** for your instrument:
- ES futures: `0.25`
- NQ futures: `0.25`
- Stocks: `0.01`
3. Save settings
---
## ⚙️ Configuration
### Symbol Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| **Tick Size** | 0.25 | Minimum price movement for your symbol |
| **Tick Buffer Count** | 5 | Ticks beyond swing for valid break |
### VWAP Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| **VWAP Band 1 (σ)** | 1.0 | 1st standard deviation multiplier |
| **VWAP Band 2 (σ)** | 2.0 | 2nd standard deviation multiplier |
| **VWAP Band 3 (σ)** | 3.0 | 3rd standard deviation multiplier |
### Session Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| **Session 1** | 0300-0400 | Pre-market window (NY time) |
| **Session 2** | 0930-1130 | Market open window (NY time) |
### Score Thresholds
| Parameter | Default | Description |
|-----------|---------|-------------|
| **A Setup Threshold** | 60 | Minimum score for A grade |
| **A+ Setup Threshold** | 75 | Minimum score for A+ grade |
| **A++ Setup Threshold** | 90 | Minimum score for A++ grade |
### CVD Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| **CVD Divergence Lookback** | 20 | Maximum bars for divergence detection |
### Swing Settings
| Parameter | Default | Options | Description |
|-----------|---------|---------|-------------|
| **Swing Detection Method** | Wick | Wick / Body | Use high/low or open/close for pivots |
### Visual Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| **Show VWAP Bands** | ✅ | Display VWAP and standard deviation bands |
| **Show Setup Labels** | ✅ | Display setup markers on chart |
| **Show Score Panel** | ✅ | Display real-time score breakdown |
---
## 📖 How to Use
### Step 1: Apply to 1-Minute Chart
⚠️ **The indicator is locked to 1-minute timeframe** - do not use on other timeframes.
### Step 2: Understand the Visual Signals
#### Setup Labels
- **Green Triangle (▲)** - Bullish (Long) setup detected
- **Red Triangle (▼)** - Bearish (Short) setup detected
- Label shows **Grade** (A/A+/A++) and **Total Score**
#### VWAP Bands
- **Yellow Line** - Session VWAP (fair value)
- **Blue Bands** - ±1σ (fair value zone)
- **Purple Bands** - ±2σ (moderate deviation)
- **Red Bands** - ±3σ (extreme deviation)
#### Score Panel (Top Right)
Real-time breakdown of all four components:
```
Component Score
VWAP Zone 15/25
Structure 25/25
CVD 20/25
Session 25/25
TOTAL 85/100 (A+)
```
### Step 3: Interpret Signals
#### Valid Long Setup:
✅ Green triangle below candle
✅ Price in **lower VWAP bands** (below VWAP)
✅ Structure shift breaks swing high
✅ Score ≥60
#### Valid Short Setup:
✅ Red triangle above candle
✅ Price in **upper VWAP bands** (above VWAP)
✅ Structure shift breaks swing low
✅ Score ≥60
### Step 4: Set Up Alerts (See Alert Conditions section)
---
## 🚦 Signal Filters (VWAP Zone Logic)
The indicator uses **directional VWAP filtering** to prevent counter-trend signals:
### Long Signals (Green)
**Only allowed when price is AT or BELOW VWAP**
- ✅ Lower 2nd band (-2σ to -1σ)
- ✅ Lower 3rd band (-3σ to -2σ)
- ✅ At VWAP exactly
- ❌ **BLOCKED** in upper bands (above VWAP)
**Logic:** Longs when price is stretched below fair value (mean reversion)
### Short Signals (Red)
**Only allowed when price is AT or ABOVE VWAP**
- ✅ Upper 2nd band (+1σ to +2σ)
- ✅ Upper 3rd band (+2σ to +3σ)
- ✅ At VWAP exactly
- ❌ **BLOCKED** in lower bands (below VWAP)
**Logic:** Shorts when price is stretched above fair value (mean reversion)
---
## 🎨 Visual Elements
### Chart Overlays
| Element | Color | Description |
|---------|-------|-------------|
| **VWAP Line** | Yellow | Session-anchored fair value |
| **±1σ Bands** | Blue | Fair value zone (no score) |
| **±2σ Bands** | Purple | Moderate deviation (15 pts) |
| **±3σ Bands** | Red | Extreme deviation (25 pts) |
| **Swing Highs** | Red ▼ | Confirmed pivot highs |
| **Swing Lows** | Green ▲ | Confirmed pivot lows |
| **Session Background** | Light Green | Active high-value session |
### Setup Labels
**Bullish Setup:**
```
A+
▲ 75
```
Green label below candle, shows grade and score
**Bearish Setup:**
```
A++
▼ 90
```
Red label above candle, shows grade and score
### Score Panel
Real-time table in top-right corner:
- Individual component scores (0-25 each)
- Total score (0-100)
- Current setup grade (A/A+/A++)
- Updates in real-time as market conditions change
---
## 🔔 Alert Conditions
### Setting Up Alerts
#### Method 1: Built-in Alert Conditions
1. Click **"Create Alert"** in TradingView
2. Select **Market State Engine** as condition
3. Choose alert type:
- **Bullish Setup** - Long signals only
- **Bearish Setup** - Short signals only
- **Any Setup** - All signals
4. Set to **"Once Per Bar Close"**
5. Configure notification method (app, email, webhook)
#### Method 2: Custom Alert Message
Alert messages include full breakdown:
```
A+ Setup Detected (Score: 85)
Components: VWAP(25) + Structure(25) + CVD(20) + Time(15)
CVD State: Confirmation
Direction: Long
Timeframe: 1m
```
### Alert Behavior
✅ **One alert per unique pivot break** - no spam
✅ **Fires on candle close only** - no repainting
✅ **Minimum score filter** - only A grade or higher (≥60)
✅ **Direction-specific** - separate bullish/bearish conditions
⚠️ **No cooldown between different pivots** - multiple alerts per session allowed if different swing levels break
---
## 🔧 Technical Details
### Timeframe Lock
- **Required**: 1-minute chart only
- **Reason**: Scoring model calibrated for 1m micro-structure
- **Future**: Multi-timeframe support planned for v2
### Timezone Configuration
- **Hard-coded**: `America/New_York`
- **Session Detection**: Uses TradingView's native session functions
- **Consistency**: All time-based logic uses NY timezone
### Swing Detection Parameters
**Locked to specification:**
- `ta.pivothigh(source, left=2, right=2)`
- `ta.pivotlow(source, left=2, right=2)`
**Implications:**
- Pivots confirmed 2 bars after formation
- No repainting - historical pivots don't move
- 4-bar minimum swing structure (2 left + pivot + 2 right)
### VWAP Calculation
- **Type**: Session-anchored (resets daily)
- **Source**: Typical price `(high + low + close) / 3`
- **Weighting**: Volume-weighted
- **Standard Deviation**: True population standard deviation
### CVD Proxy Formula
```pine
barDelta = close > open ? volume : close < open ? -volume : 0
CVD = cumulative sum of barDelta (session-reset)
```
### Performance Limits
- **Max Labels**: 500 (TradingView limit)
- **Max Bars Back**: 500
- **Memory**: Lightweight - uses only essential variables
---
## 💡 Best Practices
### 1. **Use as a Filter, Not a Strategy**
❌ Don't: Blindly take every signal
✅ Do: Use score as confluence for your existing analysis
### 2. **Higher Grades = Better Probability**
- **A Setups (60-74)**: Regular opportunities, still require discretion
- **A+ Setups (75-89)**: High-quality, multiple factors aligned
- **A++ Setups (90-100)**: Rare premium opportunities, strongest edge
### 3. **Respect the VWAP Zone Filter**
The indicator **automatically blocks**:
- Longs in upper VWAP bands (counter-trend)
- Shorts in lower VWAP bands (counter-trend)
Trust this logic - it enforces mean reversion discipline.
### 4. **Monitor the Score Panel**
Watch which components are scoring to understand **why** a setup formed:
- Missing CVD score? → No order flow confirmation
- Missing Time score? → Outside high-volume sessions
- Low VWAP score? → Weak deviation from fair value
### 5. **Combine with Risk Management**
The indicator provides **opportunity scoring**, not position sizing:
- Use stop losses based on swing structure
- Scale position size with setup grade (larger on A++, smaller on A)
- Set profit targets at VWAP or opposing band
### 6. **Session Awareness**
Prioritize signals during **active sessions**:
- **03:00-04:00 NY**: Pre-market momentum
- **09:30-11:30 NY**: Highest volume, tightest spreads
Off-hours signals (0 time score) are lower probability but still valid if other factors strong.
### 7. **Understand the Hard Gate**
If **no structure shift** occurs:
- Total score = 0
- No alerts fire
- Other components irrelevant
**Why?** Structure shift confirms momentum change - without it, there's no tradable opportunity.
### 8. **Avoid Over-Optimization**
Default settings are well-calibrated:
- Don't chase "perfect" parameters
- Test changes on historical data before live use
- Document any modifications
### 9. **Leverage Alert De-Duplication**
The indicator prevents spam automatically:
- One alert per unique swing break
- New swing levels = new alerts
- No need to manually filter notifications
### 10. **Supplement with Price Action**
Use the indicator alongside:
- Support/resistance levels
- Order flow footprint charts
- Volume profile
- Market internals (breadth, TICK, etc.)
---
## 📚 Example Scenarios
### Example 1: A++ Premium Setup (Score: 95)
```
Price: In lower 3rd VWAP band (-2.8σ) → VWAP: 25 pts
Structure: Close breaks swing high → Structure: 25 pts
CVD: Price LL + CVD HL (bullish div) → CVD: 25 pts
Time: 10:15 AM NY (market open) → Time: 25 pts
Direction: LONG (price below VWAP) → Valid
Grade: A++ (95/100)
```
**Interpretation:** All factors aligned - premium mean-reversion long opportunity.
---
### Example 2: A+ Strong Setup (Score: 80)
```
Price: In upper 2nd VWAP band (+1.5σ) → VWAP: 15 pts
Structure: Close breaks swing low → Structure: 25 pts
CVD: Price HH + CVD LH (bearish div) → CVD: 25 pts
Time: 2:00 PM NY (off-hours) → Time: 0 pts
Direction: SHORT (price above VWAP) → Valid
Grade: A+ (65/100)
```
**Interpretation:** Strong setup despite off-hours, bearish divergence adds confidence.
---
### Example 3: Filtered Setup (Score: 0)
```
Price: In upper 3rd VWAP band (+2.5σ) → VWAP: 25 pts (if allowed)
Structure: Close breaks swing high → Structure: BLOCKED
CVD: Price HH + CVD HH (confirmation) → CVD: 20 pts (if allowed)
Time: 10:00 AM NY → Time: 25 pts (if allowed)
Direction: LONG (price ABOVE VWAP) → ❌ INVALID ZONE
Grade: None (0/100) - NO ALERT
```
**Interpretation:** VWAP filter blocked long signal in upper band - prevents counter-trend trade.
---
## 🛠️ Troubleshooting
### No Signals Appearing
- ✅ Verify you're on **1-minute chart**
- ✅ Check **Tick Size** matches your symbol
- ✅ Ensure **VWAP Bands** are visible
- ✅ Wait for confirmed pivots (requires at least 5 bars of history)
### Alerts Not Firing
- ✅ Confirm alert is set to **"Once Per Bar Close"**
- ✅ Check score threshold (must be ≥60 by default)
- ✅ Verify VWAP zone filter isn't blocking signals
- ✅ Check that structure shift is actually occurring
### Score Always Zero
- ✅ No structure shift detected (hard gate active)
- ✅ Price may not be in valid VWAP zone (2nd or 3rd band)
- ✅ Insufficient swing history (wait for pivots to form)
### Too Many/Too Few Signals
**Too many signals:**
- Increase **A Setup Threshold** (e.g., 70 instead of 60)
- Increase **Tick Buffer Count** (reduces false breaks)
**Too few signals:**
- Decrease **A Setup Threshold** (e.g., 50 instead of 60)
- Decrease **Tick Buffer Count** (more sensitive to breaks)
---
## 📜 License
This indicator is provided under the **Mozilla Public License 2.0**.
---
## 🤝 Credits
Developed as a professional trading tool for systematic opportunity identification.
**Philosophy:** Reduce noise. Enforce discipline. Keep the human in control.
---
## 📞 Support
For questions, issues, or feature requests, please consult:
1. This README documentation
2. The specification document (`pinescript_market_state_engine_spec.docx`)
3. Inline code comments in `market_state_engine.pine`
---
## 🔄 Version History
**v1.0** (Current)
- Initial release
- 4-component scoring model (VWAP + Structure + CVD + Time)
- VWAP zone directional filtering
- Alert de-duplication
- Configurable inputs
- Real-time score panel
- Session-aware logic
---
## 🎓 Understanding the Numbers
### Quick Reference Card
| Score Range | Grade | Quality | Typical Use |
|-------------|-------|---------|-------------|
| 90-100 | A++ | Premium | Highest conviction trades |
| 75-89 | A+ | High | Strong probability setups |
| 60-74 | A | Good | Acceptable with discretion |
| 0-59 | None | Filtered | Skip or wait for confluence |
### Component Contribution Examples
**Minimum A Setup (60 points):**
- Structure (25) + VWAP 3rd band (25) + Time (25) = 75 ✅
**Typical A+ Setup (75 points):**
- Structure (25) + VWAP 2nd band (15) + CVD confirm (20) + Time (25) = 85 ✅
**Maximum A++ Setup (100 points):**
- Structure (25) + VWAP 3rd band (25) + CVD divergence (25) + Time (25) = 100 ✅
---
## 🎯 Final Reminder
**This is NOT a trading bot.**
**This is NOT financial advice.**
**This is a decision-support tool.**
Always:
- ✅ Use proper risk management
- ✅ Understand the logic before trading
- ✅ Backtest on your symbols
- ✅ Keep the human in control
**Happy Trading! 📈**
ค้นหาในสคริปต์สำหรับ "Futures"
TRIZONACCI_Mean reversal_signalsMarket State Engine
Deterministic Confidence-Scoring System for TradingView
A professional-grade PineScript v5 indicator that scores market conditions from 0-100, helping traders identify high-quality trading opportunities through systematic structure analysis, VWAP positioning, order flow dynamics, and time-based context.
🎯 Overview
The Market State Engine is not a trading bot—it's a noise-reduction and opportunity-ranking system designed to filter market conditions and surface only the highest-quality setups.
Instead of blindly taking every signal, this indicator:
✅ Scores market conditions objectively (0-100 scale)
✅ Filters out low-probability setups automatically
✅ Classifies opportunities into A, A+, and A++ grades
✅ Alerts only on confirmed structure shifts with supporting context
✅ Keeps the human in control - provides intelligence, not automation
Philosophy: Reduce Noise. Enforce Discipline. Surface Quality.
🚀 Key Features
Deterministic Scoring - No black boxes, fully explainable logic
Multi-Factor Analysis - Combines 4 independent market state components
Structure-First Approach - Only alerts on confirmed pivot breaks
VWAP Mean Reversion Logic - Directional filtering based on VWAP zones
Order Flow Proxy - CVD divergence and confirmation detection
Session-Aware Scoring - Prioritizes high-volume New York sessions
Alert De-Duplication - One alert per unique structure shift
Zero Repainting - Uses confirmed pivots only (left=2, right=2)
Fully Configurable - All parameters exposed as inputs
Visual Feedback - VWAP bands, setup labels, and real-time score panel
📊 Scoring System (0-100)
The Market State Engine evaluates four independent components, each contributing up to 25 points for a maximum total score of 100.
🎯 Component Breakdown
Component Max Points Description
VWAP Context 25 Measures price deviation from session VWAP
Structure Shift 25 Confirms pivot breakout (HARD GATE)
CVD Alignment 25 Detects order flow divergence/confirmation
Time-of-Day 25 Identifies high-probability trading sessions
1️⃣ VWAP Context (Max 25 Points)
Purpose: Identifies extreme price deviations from fair value for mean-reversion opportunities.
VWAP (Volume-Weighted Average Price) is calculated session-anchored to New York market time, with standard deviation bands creating zones of opportunity.
Band Structure:
1st Band: ±1σ from VWAP (fair value zone)
2nd Band: ±2σ from VWAP (moderate deviation)
3rd Band: ±3σ from VWAP (extreme deviation)
Scoring Logic (Exclusive):
Price in 3rd VWAP Band (>2σ and ≤3σ) → +25 points
Price in 2nd VWAP Band (>1σ and ≤2σ) → +15 points
Otherwise (inside 1σ or beyond 3σ) → 0 points
Key Insight: The further price stretches from VWAP, the higher the probability of mean reversion.
2️⃣ Structure Shift (Max 25 Points) — HARD GATE
Purpose: Confirms momentum shift through confirmed pivot breakouts.
⚠️ CRITICAL: Structure shift is mandatory. If no valid structure shift occurs, the total score becomes 0 regardless of other factors.
Detection Method:
Uses TradingView's ta.pivothigh() and ta.pivotlow() functions with locked parameters:
Left bars: 2
Right bars: 2
Source: Configurable (Wick or Body)
Break confirmation: Candle close only
Bullish Structure Shift:
✅ Prior swing high exists (confirmed pivot)
✅ Current candle closes above swing high + tick buffer
✅ Must occur in VWAP 2nd or 3rd band
✅ VWAP Filter: Price must be at or below VWAP (lower bands)
Bearish Structure Shift:
✅ Prior swing low exists (confirmed pivot)
✅ Current candle closes below swing low - tick buffer
✅ Must occur in VWAP 2nd or 3rd band
✅ VWAP Filter: Price must be at or above VWAP (upper bands)
Scoring:
Valid structure shift → +25 points
No structure shift → Total score = 0
Tick Buffer: Default 5 ticks (configurable) - prevents false breaks from minor price noise.
3️⃣ CVD Alignment (Max 25 Points)
Purpose: Detects institutional order flow through volume delta analysis.
CVD (Cumulative Volume Delta) is a proxy for order flow:
Close > Open → +Volume (buying pressure)
Close < Open → -Volume (selling pressure)
Scoring Logic:
Condition Points Description
Divergence +25 Price makes higher high + CVD makes lower high (bearish)
Price makes lower low + CVD makes higher low (bullish)
Confirmation +20 Price and CVD both make higher highs or lower lows
Neutral 0 No clear divergence or confirmation
Lookback Window: Last 20 bars (configurable) - prevents stale divergences.
Key Insight: Divergences suggest weakening momentum, while confirmations validate the trend.
4️⃣ Time-of-Day Context (Max 25 Points)
Purpose: Prioritizes high-volume, high-volatility New York sessions.
Scored Sessions (America/New_York timezone):
Session Time Range (NY) Points Description
Pre-Market 03:00 - 04:00 +25 Early liquidity injection
Market Open 09:30 - 11:30 +25 Highest volume period
Off-Hours All other times 0 Lower probability setups
Key Insight: Structure shifts during active sessions have higher follow-through probability.
🏆 Setup Classification
Setups are graded based on total score thresholds (configurable):
Grade Score Range Typical Components Quality Level
A++ Setup ≥90 All 4 factors aligned
(VWAP 3rd band + Structure + CVD + Session) Premium - Rare
A+ Setup ≥75 Structure + VWAP + CVD or Session
(3 of 4 factors) High - Select
A Setup ≥60 Structure + VWAP + Session
(Minimum viable setup) Good - Regular
No Grade <60 Insufficient confluence Filtered out
Default Thresholds:
A Setup: 60 points
A+ Setup: 75 points
A++ Setup: 90 points
📥 Installation
Step 1: Download the Indicator
Download the market_state_engine.pine file from this repository.
Step 2: Add to TradingView
Open TradingView
Open the Pine Editor (bottom panel)
Click "New" → "Blank indicator"
Delete all default code
Paste the contents of market_state_engine.pine
Click "Add to Chart"
Step 3: Configure for Your Symbol
Click the gear icon next to the indicator name
Adjust Tick Size for your instrument:
ES futures: 0.25
NQ futures: 0.25
Stocks: 0.01
Save settings
⚙️ Configuration
Symbol Settings
Parameter Default Description
Tick Size 0.25 Minimum price movement for your symbol
Tick Buffer Count 5 Ticks beyond swing for valid break
VWAP Settings
Parameter Default Description
VWAP Band 1 (σ) 1.0 1st standard deviation multiplier
VWAP Band 2 (σ) 2.0 2nd standard deviation multiplier
VWAP Band 3 (σ) 3.0 3rd standard deviation multiplier
Session Settings
Parameter Default Description
Session 1 0300-0400 Pre-market window (NY time)
Session 2 0930-1130 Market open window (NY time)
Score Thresholds
Parameter Default Description
A Setup Threshold 60 Minimum score for A grade
A+ Setup Threshold 75 Minimum score for A+ grade
A++ Setup Threshold 90 Minimum score for A++ grade
CVD Settings
Parameter Default Description
CVD Divergence Lookback 20 Maximum bars for divergence detection
Swing Settings
Parameter Default Options Description
Swing Detection Method Wick Wick / Body Use high/low or open/close for pivots
Visual Settings
Parameter Default Description
Show VWAP Bands ✅ Display VWAP and standard deviation bands
Show Setup Labels ✅ Display setup markers on chart
Show Score Panel ✅ Display real-time score breakdown
📖 How to Use
Step 1: Apply to 1-Minute Chart
⚠️ The indicator is locked to 1-minute timeframe - do not use on other timeframes.
Step 2: Understand the Visual Signals
Setup Labels
Green Triangle (▲) - Bullish (Long) setup detected
Red Triangle (▼) - Bearish (Short) setup detected
Label shows Grade (A/A+/A++) and Total Score
VWAP Bands
Yellow Line - Session VWAP (fair value)
Blue Bands - ±1σ (fair value zone)
Purple Bands - ±2σ (moderate deviation)
Red Bands - ±3σ (extreme deviation)
Score Panel (Top Right)
Real-time breakdown of all four components:
Component Score
VWAP Zone 15/25
Structure 25/25
CVD 20/25
Session 25/25
TOTAL 85/100 (A+)
Step 3: Interpret Signals
Valid Long Setup:
✅ Green triangle below candle
✅ Price in lower VWAP bands (below VWAP)
✅ Structure shift breaks swing high
✅ Score ≥60
Valid Short Setup:
✅ Red triangle above candle
✅ Price in upper VWAP bands (above VWAP)
✅ Structure shift breaks swing low
✅ Score ≥60
Step 4: Set Up Alerts (See Alert Conditions section)
🚦 Signal Filters (VWAP Zone Logic)
The indicator uses directional VWAP filtering to prevent counter-trend signals:
Long Signals (Green)
Only allowed when price is AT or BELOW VWAP
✅ Lower 2nd band (-2σ to -1σ)
✅ Lower 3rd band (-3σ to -2σ)
✅ At VWAP exactly
❌ BLOCKED in upper bands (above VWAP)
Logic: Longs when price is stretched below fair value (mean reversion)
Short Signals (Red)
Only allowed when price is AT or ABOVE VWAP
✅ Upper 2nd band (+1σ to +2σ)
✅ Upper 3rd band (+2σ to +3σ)
✅ At VWAP exactly
❌ BLOCKED in lower bands (below VWAP)
Logic: Shorts when price is stretched above fair value (mean reversion)
🎨 Visual Elements
Chart Overlays
Element Color Description
VWAP Line Yellow Session-anchored fair value
±1σ Bands Blue Fair value zone (no score)
±2σ Bands Purple Moderate deviation (15 pts)
±3σ Bands Red Extreme deviation (25 pts)
Swing Highs Red ▼ Confirmed pivot highs
Swing Lows Green ▲ Confirmed pivot lows
Session Background Light Green Active high-value session
Setup Labels
Bullish Setup:
A+
▲ 75
Green label below candle, shows grade and score
Bearish Setup:
A++
▼ 90
Red label above candle, shows grade and score
Score Panel
Real-time table in top-right corner:
Individual component scores (0-25 each)
Total score (0-100)
Current setup grade (A/A+/A++)
Updates in real-time as market conditions change
🔔 Alert Conditions
Setting Up Alerts
Method 1: Built-in Alert Conditions
Click "Create Alert" in TradingView
Select Market State Engine as condition
Choose alert type:
Bullish Setup - Long signals only
Bearish Setup - Short signals only
Any Setup - All signals
Set to "Once Per Bar Close"
Configure notification method (app, email, webhook)
Method 2: Custom Alert Message
Alert messages include full breakdown:
A+ Setup Detected (Score: 85)
Components: VWAP(25) + Structure(25) + CVD(20) + Time(15)
CVD State: Confirmation
Direction: Long
Timeframe: 1m
Alert Behavior
✅ One alert per unique pivot break - no spam
✅ Fires on candle close only - no repainting
✅ Minimum score filter - only A grade or higher (≥60)
✅ Direction-specific - separate bullish/bearish conditions
⚠️ No cooldown between different pivots - multiple alerts per session allowed if different swing levels break
🔧 Technical Details
Timeframe Lock
Required: 1-minute chart only
Reason: Scoring model calibrated for 1m micro-structure
Future: Multi-timeframe support planned for v2
Timezone Configuration
Hard-coded: America/New_York
Session Detection: Uses TradingView's native session functions
Consistency: All time-based logic uses NY timezone
Swing Detection Parameters
Locked to specification:
ta.pivothigh(source, left=2, right=2)
ta.pivotlow(source, left=2, right=2)
Implications:
Pivots confirmed 2 bars after formation
No repainting - historical pivots don't move
4-bar minimum swing structure (2 left + pivot + 2 right)
VWAP Calculation
Type: Session-anchored (resets daily)
Source: Typical price (high + low + close) / 3
Weighting: Volume-weighted
Standard Deviation: True population standard deviation
CVD Proxy Formula
barDelta = close > open ? volume : close < open ? -volume : 0
CVD = cumulative sum of barDelta (session-reset)
Performance Limits
Max Labels: 500 (TradingView limit)
Max Bars Back: 500
Memory: Lightweight - uses only essential variables
💡 Best Practices
1. Use as a Filter, Not a Strategy
❌ Don't: Blindly take every signal
✅ Do: Use score as confluence for your existing analysis
2. Higher Grades = Better Probability
A Setups (60-74): Regular opportunities, still require discretion
A+ Setups (75-89): High-quality, multiple factors aligned
A++ Setups (90-100): Rare premium opportunities, strongest edge
3. Respect the VWAP Zone Filter
The indicator automatically blocks:
Longs in upper VWAP bands (counter-trend)
Shorts in lower VWAP bands (counter-trend)
Trust this logic - it enforces mean reversion discipline.
4. Monitor the Score Panel
Watch which components are scoring to understand why a setup formed:
Missing CVD score? → No order flow confirmation
Missing Time score? → Outside high-volume sessions
Low VWAP score? → Weak deviation from fair value
5. Combine with Risk Management
The indicator provides opportunity scoring, not position sizing:
Use stop losses based on swing structure
Scale position size with setup grade (larger on A++, smaller on A)
Set profit targets at VWAP or opposing band
6. Session Awareness
Prioritize signals during active sessions:
03:00-04:00 NY: Pre-market momentum
09:30-11:30 NY: Highest volume, tightest spreads
Off-hours signals (0 time score) are lower probability but still valid if other factors strong.
7. Understand the Hard Gate
If no structure shift occurs:
Total score = 0
No alerts fire
Other components irrelevant
Why? Structure shift confirms momentum change - without it, there's no tradable opportunity.
8. Avoid Over-Optimization
Default settings are well-calibrated:
Don't chase "perfect" parameters
Test changes on historical data before live use
Document any modifications
9. Leverage Alert De-Duplication
The indicator prevents spam automatically:
One alert per unique swing break
New swing levels = new alerts
No need to manually filter notifications
10. Supplement with Price Action
Use the indicator alongside:
Support/resistance levels
Order flow footprint charts
Volume profile
Market internals (breadth, TICK, etc.)
📚 Example Scenarios
Example 1: A++ Premium Setup (Score: 95)
Price: In lower 3rd VWAP band (-2.8σ) → VWAP: 25 pts
Structure: Close breaks swing high → Structure: 25 pts
CVD: Price LL + CVD HL (bullish div) → CVD: 25 pts
Time: 10:15 AM NY (market open) → Time: 25 pts
Direction: LONG (price below VWAP) → Valid
Grade: A++ (95/100)
Interpretation: All factors aligned - premium mean-reversion long opportunity.
Example 2: A+ Strong Setup (Score: 80)
Price: In upper 2nd VWAP band (+1.5σ) → VWAP: 15 pts
Structure: Close breaks swing low → Structure: 25 pts
CVD: Price HH + CVD LH (bearish div) → CVD: 25 pts
Time: 2:00 PM NY (off-hours) → Time: 0 pts
Direction: SHORT (price above VWAP) → Valid
Grade: A+ (65/100)
Interpretation: Strong setup despite off-hours, bearish divergence adds confidence.
Example 3: Filtered Setup (Score: 0)
Price: In upper 3rd VWAP band (+2.5σ) → VWAP: 25 pts (if allowed)
Structure: Close breaks swing high → Structure: BLOCKED
CVD: Price HH + CVD HH (confirmation) → CVD: 20 pts (if allowed)
Time: 10:00 AM NY → Time: 25 pts (if allowed)
Direction: LONG (price ABOVE VWAP) → ❌ INVALID ZONE
Grade: None (0/100) - NO ALERT
Interpretation: VWAP filter blocked long signal in upper band - prevents counter-trend trade.
🛠️ Troubleshooting
No Signals Appearing
✅ Verify you're on 1-minute chart
✅ Check Tick Size matches your symbol
✅ Ensure VWAP Bands are visible
✅ Wait for confirmed pivots (requires at least 5 bars of history)
Alerts Not Firing
✅ Confirm alert is set to "Once Per Bar Close"
✅ Check score threshold (must be ≥60 by default)
✅ Verify VWAP zone filter isn't blocking signals
✅ Check that structure shift is actually occurring
Score Always Zero
✅ No structure shift detected (hard gate active)
✅ Price may not be in valid VWAP zone (2nd or 3rd band)
✅ Insufficient swing history (wait for pivots to form)
Too Many/Too Few Signals
Too many signals:
Increase A Setup Threshold (e.g., 70 instead of 60)
Increase Tick Buffer Count (reduces false breaks)
Too few signals:
Decrease A Setup Threshold (e.g., 50 instead of 60)
Decrease Tick Buffer Count (more sensitive to breaks)
📜 License
This indicator is provided under the Mozilla Public License 2.0.
🤝 Credits
Developed as a professional trading tool for systematic opportunity identification.
Philosophy: Reduce noise. Enforce discipline. Keep the human in control.
📞 Support
For questions, issues, or feature requests, please consult:
This README documentation
The specification document (pinescript_market_state_engine_spec.docx)
Inline code comments in market_state_engine.pine
🔄 Version History
v1.0 (Current)
Initial release
4-component scoring model (VWAP + Structure + CVD + Time)
VWAP zone directional filtering
Alert de-duplication
Configurable inputs
Real-time score panel
Session-aware logic
🎓 Understanding the Numbers
Quick Reference Card
Score Range Grade Quality Typical Use
90-100 A++ Premium Highest conviction trades
75-89 A+ High Strong probability setups
60-74 A Good Acceptable with discretion
0-59 None Filtered Skip or wait for confluence
Component Contribution Examples
Minimum A Setup (60 points):
Structure (25) + VWAP 3rd band (25) + Time (25) = 75 ✅
Typical A+ Setup (75 points):
Structure (25) + VWAP 2nd band (15) + CVD confirm (20) + Time (25) = 85 ✅
Maximum A++ Setup (100 points):
Structure (25) + VWAP 3rd band (25) + CVD divergence (25) + Time (25) = 100 ✅
🎯 Final Reminder
This is NOT a trading bot.
This is NOT financial advice.
This is a decision-support tool.
Always:
✅ Use proper risk management
✅ Understand the logic before trading
✅ Backtest on your symbols
✅ Keep the human in control
Happy Trading! 📈
AssetCorrelationUtils
- Open source Library Used for Indicators that utilize correlation between assets for divergence calculations. It has no drawing elements.
ASSET CORRELATION UTILS
PineScript library for automatic detection of correlated asset pairs and triads for multi-asset analysis.
WHAT IT DOES
This library automatically identifies correlated assets based on the current chart symbol. It returns properly configured asset pairings for use in SMT divergence detection, inter-market analysis, and multi-asset comparison tools.
HOW IT WORKS
The library matches your chart symbol against known correlation groups:
Index Futures: NQ/ES/YM/RTY triads (including micros)
Metals: Gold/Silver/Copper triads (futures and CFD)
Forex: EUR/GBP/DXY and USD/JPY/CHF triads
Energy: Crude/Gasoline/Heating Oil triads
Treasury: ZB/ZF/ZN bond triads
Crypto: BTC/ETH/TOTAL3 and major altcoin pairings
Inversion flags are automatically computed for assets that move inversely (e.g., DXY vs EUR pairs).
HOW TO USE
import fstarcapital/AssetCorrelationUtils/1 as acu
// Simple: auto-detect from current chart
config = acu.resolveCurrentChart()
// Access resolved assets
primary = config.primary
secondary = config.secondary
tertiary = config.tertiary
EXPORTED FUNCTIONS
resolveCurrentChart(): One-call auto-detection using chart syminfo
resolveAssets(): Full detection with custom parameters
resolveTriad() / resolveDyad(): Manual resolution with inversion logic
detect*() functions: Category-specific detectors for custom workflows
TYPES
AssetPairing: Core structure for primary/secondary/tertiary tickers with inversion flags
AssetConfig: Full resolution result with detection status and asset category
DISCLAIMER
This library is a utility for building multi-asset indicators. Asset correlations are not guaranteed and may change over time. Always validate pairings for your specific trading context.
Full Default Function @type and @field descriptions below.
Library "AssetCorrelationUtils"
detectIndicesFutures(ticker)
Detects Index Futures (NQ/ES/YM/RTY + micro variants)
Parameters:
ticker (string) : The ticker string to check (typically syminfo.ticker)
Returns: AssetPairing with secondary and tertiary assets configured
detectMetalsFutures(ticker)
Detects Metal Futures (GC/SI/HG + micro variants)
Parameters:
ticker (string) : The ticker string to check
Returns: AssetPairing with secondary and tertiary assets configured
detectForexFutures(ticker)
Detects Forex Futures (6E/6B + micro variants)
Parameters:
ticker (string) : The ticker string to check
Returns: AssetPairing with secondary and tertiary assets configured
detectEnergyFutures(ticker)
Detects Energy Futures (CL/RB/HO + micro variants)
Parameters:
ticker (string) : The ticker string to check
Returns: AssetPairing with secondary and tertiary assets configured
detectTreasuryFutures(ticker)
Detects Treasury Futures (ZB/ZF/ZN)
Parameters:
ticker (string) : The ticker string to check
Returns: AssetPairing with secondary and tertiary assets configured
detectCryptoFutures(ticker)
Detects CME Crypto Futures (BTC/ETH + micro variants)
Parameters:
ticker (string) : The ticker string to check
Returns: AssetPairing with secondary and tertiary assets configured
detectCADFutures(ticker)
Detects CAD Forex Futures (6C + micro variants)
Parameters:
ticker (string) : The ticker string to check
Returns: AssetPairing with secondary and tertiary assets configured
detectForexCFD(ticker, tickerId)
Detects Forex CFD pairs (EUR/GBP/DXY, USD/JPY/CHF triads)
Parameters:
ticker (string) : The ticker string to check
tickerId (string) : The full ticker ID (syminfo.tickerid) for primary asset
Returns: AssetPairing with secondary and tertiary assets configured
detectCrypto(ticker, tickerId)
Detects major Crypto assets (BTC, ETH, SOL, XRP, alts)
Parameters:
ticker (string) : The ticker string to check
tickerId (string) : The full ticker ID for primary asset
Returns: AssetPairing with secondary and tertiary assets configured
detectMetalsCFD(ticker, tickerId)
Detects Metals CFD (XAU/XAG/Copper)
Parameters:
ticker (string) : The ticker string to check
tickerId (string) : The full ticker ID for primary asset
Returns: AssetPairing with secondary and tertiary assets configured
detectIndicesCFD(ticker, tickerId)
Detects Indices CFD (NAS100/SP500/DJ30)
Parameters:
ticker (string) : The ticker string to check
tickerId (string) : The full ticker ID for primary asset
Returns: AssetPairing with secondary and tertiary assets configured
detectEUStocks(ticker, tickerId)
Detects EU Stock Indices (GER40/EU50) - Dyad only
Parameters:
ticker (string) : The ticker string to check
tickerId (string) : The full ticker ID for primary asset
Returns: AssetPairing with secondary asset configured (tertiary empty for dyad)
getDefaultFallback(tickerId)
Returns default fallback assets (chart ticker only, no correlation)
Parameters:
tickerId (string) : The full ticker ID for primary asset
Returns: AssetPairing with chart ticker as primary, empty secondary/tertiary (no correlation)
applySessionModifierWithBackadjust(tickerStr, sessionType)
Applies futures session modifier to ticker WITH back adjustment
Parameters:
tickerStr (string) : The ticker to modify
sessionType (string) : The session type (syminfo.session)
Returns: Modified ticker string with session and backadjustment.on applied
applySessionModifierNoBackadjust(tickerStr, sessionType)
Applies futures session modifier to ticker WITHOUT back adjustment
Parameters:
tickerStr (string) : The ticker to modify
sessionType (string) : The session type (syminfo.session)
Returns: Modified ticker string with session and backadjustment.off applied
isTriadMode(pairing)
Checks if a pairing represents a valid triad (3 assets)
Parameters:
pairing (AssetPairing) : The AssetPairing to check
Returns: True if tertiary is non-empty (triad mode), false for dyad
getAssetTicker(tickerId)
Extracts clean ticker string from full ticker ID
Parameters:
tickerId (string) : The full ticker ID (e.g., "BITGET:BTCUSDT.P")
Returns: Clean ticker string (e.g., "BTCUSDT.P")
resolveTriad(chartTickerId, pairing)
Resolves triad asset assignments with proper inversion flags
Parameters:
chartTickerId (string) : The current chart's ticker ID (syminfo.tickerid)
pairing (AssetPairing) : The detected AssetPairing
Returns: Tuple
resolveDyad(chartTickerId, pairing)
Resolves dyad asset assignment with proper inversion flag
Parameters:
chartTickerId (string) : The current chart's ticker ID
pairing (AssetPairing) : The detected AssetPairing (dyad: tertiary is empty)
Returns: Tuple
resolveAssets(ticker, tickerId, assetType, sessionType, useBackadjust)
Main auto-detection entry point. Detects asset category and returns fully resolved config.
Parameters:
ticker (string) : The ticker string to check (typically syminfo.ticker)
tickerId (string) : The full ticker ID (typically syminfo.tickerid)
assetType (string) : The asset type (typically syminfo.type)
sessionType (string) : The session type for futures (typically syminfo.session)
useBackadjust (bool) : Whether to apply back adjustment for futures session alignment
Returns: AssetConfig with fully resolved assets, inversion flags, and detection status
resolveCurrentChart()
Simplified auto-detection using current chart's syminfo values
Returns: AssetConfig with fully resolved assets, inversion flags, and detection status
AssetPairing
Core asset pairing structure for triad/dyad configurations
Fields:
primary (series string) : The primary (chart) asset ticker ID
secondary (series string) : The secondary correlated asset ticker ID
tertiary (series string) : The tertiary correlated asset ticker ID (empty for dyad)
invertSecondary (series bool) : Whether secondary asset should be inverted for divergence calc
invertTertiary (series bool) : Whether tertiary asset should be inverted for divergence calc
AssetConfig
Full asset resolution result with mode detection and computed values
Fields:
detected (series bool) : Whether auto-detection succeeded
isTriadMode (series bool) : True if triad (3 assets), false if dyad (2 assets)
primary (series string) : The resolved primary asset ticker ID
secondary (series string) : The resolved secondary asset ticker ID
tertiary (series string) : The resolved tertiary asset ticker ID (empty for dyad)
invertSecondary (series bool) : Computed inversion flag for secondary asset
invertTertiary (series bool) : Computed inversion flag for tertiary asset
assetCategory (series string) : String describing the detected asset category
Lot Size + Margin InfoThis indicator is designed to give Futures & Options traders instant access to lot size and estimated margin requirements for the instrument they are viewing — directly on their TradingView chart. It combines real-time symbol detection with a built-in, regularly updated margin lookup table (sourced from Kotak Securities’ published margin requirements), while also handling fallback logic for unknown or unsupported symbols.
---
### What It Does
* Automatically Detects the Instrument Type
Identifies whether the current chart’s symbol is a futures contract, option, or a cash/spot instrument.
* Shows Accurate Lot Size
For supported F\&O symbols, it fetches the correct lot size directly from exchange data.
For options, it retrieves the lot size from the option’s point value.
For cash/spot symbols with linked futures, it uses the futures lot size.
* Calculates Estimated Margin
* For futures: `Lot Size × Current Price × Margin%` (Margin% sourced from the internal lookup table).
* For options: `Lot Size × Current Price` (simple multiplication, as options margin ≈ premium cost).
* For unsupported or non-FnO symbols: Displays "No FnO".
* Fallback Margin Logic
If a symbol is missing from the margin lookup table, the script applies a user-defined default margin percentage and highlights the data in orange to indicate it’s using fallback values.
* Debug Mode for Transparency
A toggle to display the exact symbol string used for fetching lot size and margin, so traders can verify the data source.
---
### How It Works
1. Symbol Normalization
The script standardizes symbol names to match the margin table format (e.g., converting `"NIFTY1!"` to `"NIFTY"`).
2. Type-Based Handling
* Futures – Uses point value for lot size, applies specific margin % from the table.
* Options – Uses option point value for lot size, margin is simply premium × lot size.
* Cash Symbols with Linked Futures – Attempts to find and use the associated futures contract for lot/margin data.
* Unsupported Symbols – Displays `"No FnO"`.
3. Margin Table Integration
The margin % table is manually updated from a reliable broker’s margin sheet (Kotak Securities) — ensuring alignment with real trading conditions.
4. Customizable Display
* Position (Top Right / Bottom Left / Bottom Right)
* Table background color, text color, font size, border width
* Editable label text for lot size and margin display
* Toggleable lot size and margin sections
---
### How to Use
1. Add the Indicator to Your Chart – Works on any NSE Futures, Options, or Cash symbol with linked F\&O.
2. Configure Display Settings – Choose whether to show lot size, margin, or both, and place the info table where you prefer.
3. Adjust Fallback Margin % – If you trade less common contracts, set your default margin % to reflect your broker’s requirement.
4. Enable Debug Mode (Optional) – To see the exact symbol source the script is using.
---
### Best For
* Intraday & Positional F\&O Traders who need instant clarity on lot size and margin before entering trades.
* Options Sellers & Buyers who want quick cost estimates.
* Traders Switching Symbols Quickly — saves time by removing the need to check the broker’s margin sheet manually.
---
💡 Pro Tip: Since margin requirements can change, keep the script updated whenever your broker revises margin data. This version’s margin table is updated as of 13-08-2025.
BTC Future Gamma-Weighted Momentum Model (BGMM)The BTC Future Gamma-Weighted Momentum Model (BGMM) is a quantitative trading strategy that utilizes the Gamma-weighted average price (GWAP) in conjunction with a momentum-based approach to predict price movements in the Bitcoin futures market. The model combines the concept of weighted price movements with trend identification, where the Gamma factor amplifies the weight assigned to recent prices. It leverages the idea that historical price trends and weighting mechanisms can be utilized to forecast future price behavior.
Theoretical Background:
1. Momentum in Financial Markets:
Momentum is a well-established concept in financial market theory, referring to the tendency of assets to continue moving in the same direction after initiating a trend. Any observed market return over a given time period is likely to continue in the same direction, a phenomenon known as the “momentum effect.” Deviations from a mean or trend provide potential trading opportunities, particularly in highly volatile assets like Bitcoin.
Numerous empirical studies have demonstrated that momentum strategies, based on price movements, especially those correlating long-term and short-term trends, can yield significant returns (Jegadeesh & Titman, 1993). Given Bitcoin’s volatile nature, it is an ideal candidate for momentum-based strategies.
2. Gamma-Weighted Price Strategies:
Gamma weighting is an advanced method of applying weights to price data, where past price movements are weighted by a Gamma factor. This weighting allows for the reinforcement or reduction of the influence of historical prices based on an exponential function. The Gamma factor (ranging from 0.5 to 1.5) controls how much emphasis is placed on recent data: a value closer to 1 applies an even weighting across periods, while a value closer to 0 diminishes the influence of past prices.
Gamma-based models are used in financial analysis and modeling to enhance a model’s adaptability to changing market dynamics. This weighting mechanism is particularly advantageous in volatile markets such as Bitcoin futures, as it facilitates quick adaptation to changing market conditions (Black-Scholes, 1973).
Strategy Mechanism:
The BTC Future Gamma-Weighted Momentum Model (BGMM) utilizes an adaptive weighting strategy, where the Bitcoin futures prices are weighted according to the Gamma factor to calculate the Gamma-Weighted Average Price (GWAP). The GWAP is derived as a weighted average of prices over a specific number of periods, with more weight assigned to recent periods. The calculated GWAP serves as a reference value, and trading decisions are based on whether the current market price is above or below this level.
1. Long Position Conditions:
A long position is initiated when the Bitcoin price is above the GWAP and a positive price movement is observed over the last three periods. This indicates that an upward trend is in place, and the market is likely to continue in the direction of the momentum.
2. Short Position Conditions:
A short position is initiated when the Bitcoin price is below the GWAP and a negative price movement is observed over the last three periods. This suggests that a downtrend is occurring, and a continuation of the negative price movement is expected.
Backtesting and Application to Bitcoin Futures:
The model has been tested exclusively on the Bitcoin futures market due to Bitcoin’s high volatility and strong trend behavior. These characteristics make the market particularly suitable for momentum strategies, as strong upward or downward movements are often followed by persistent trends that can be captured by a momentum-based approach.
Backtests of the BGMM on the Bitcoin futures market indicate that the model achieves above-average returns during periods of strong momentum, especially when the Gamma factor is optimized to suit the specific dynamics of the Bitcoin market. The high volatility of Bitcoin, combined with adaptive weighting, allows the model to respond quickly to price changes and maximize trading opportunities.
Scientific Citations and Sources:
• Jegadeesh, N., & Titman, S. (1993). Returns to Buying Winners and Selling Losers: Implications for Stock Market Efficiency. The Journal of Finance, 48(1), 65–91.
• Black, F., & Scholes, M. (1973). The Pricing of Options and Corporate Liabilities. Journal of Political Economy, 81(3), 637–654.
• Fama, E. F., & French, K. R. (1992). The Cross-Section of Expected Stock Returns. The Journal of Finance, 47(2), 427–465.
Intrabar Volume Delta — RealTime + History (Stocks/Crypto/Forex)Intrabar Volume Delta Grid — RealTime + History (Stocks/Crypto/Forex)
# Short Description
Shows intrabar Up/Down volume, Delta (absolute/relative) and UpShare% in a compact grid for both real-time and historical bars. Includes an MTF (M1…D1) dashboard, contextual coloring, density controls, and alerts on Δ and UpShare%. Smart historical splitting (“History Mode”) for Crypto/Futures/FX.
---
# What it does (Quick)
* **UpVol / DownVol / Δ / UpShare%** — visualizes order-flow inside each candle.
* **Real-time** — accumulates intrabar volume live by tick-direction.
* **History Mode** — splits Up/Down on closed bars via simple or range-aware logic.
* **MTF Dashboard** — one table view across M1, M5, M15, M30, H1, H4, D1 (Vol, Up/Down, Δ%, Share, Trend).
* **Contextual opacity** — stronger signals appear bolder.
* **Label density** — draw every N-th bar and limit to last X bars for performance.
* **Alerts** — thresholds for |Δ|, Δ%, and UpShare%.
---
# How it works (Real-Time vs History)
* **Real-time (open bar):** volume increments into **UpVolRT** or **DownVolRT** depending on last price move (↑ goes to Up, ↓ to Down). This approximates live order-flow even when full tick history isn’t available.
* **History (closed bars):**
* **None** — no split (Up/Down = 0/0). Safest for equities/indices with unreliable tick history.
* **Approx (Close vs Open)** — all volume goes to candle direction (green → Up 100%, red → Down 100%). Fast but yields many 0/100% bars.
* **Price Action Based** — splits by Close position within High-Low range; strength = |Close−mid|/(High−Low). Above mid → more Up; below mid → more Down. Falls back to direction if High==Low.
* **Auto** — **Stocks/Index → None**, **Crypto/Futures/FX → Approx**. If you see too many 0/100 bars, switch to **Price Action Based**.
---
# Rows & Meaning
* **Volume** — total bar volume (no split).
* **UpVol / DownVol** — directional intrabar volume.
* **Delta (Δ)** — UpVol − DownVol.
* **Absolute**: raw units
* **Relative (Δ%)**: Δ / (Up+Down) × 100
* **Both**: shows both formats
* **UpShare%** — UpVol / (Up+Down) × 100. >50% bullish, <50% bearish.
* Helpful icons: ▲ (>65%), ▼ (<35%).
---
# MTF Dashboard (🔧 Enable Dashboard)
A single table with **Vol, Up, Down, Δ%, Share, Trend (🔼/🔽/⏭️)** for selected timeframes (M1…D1). Great for a fast “panorama” read of flow alignment across horizons.
---
# Inputs (Grouped)
## Display
* Toggle rows: **Volume / Up / Down / Delta / UpShare**
* **Delta Display**: Absolute / Relative / Both
## Realtime & History
* **History Mode**: Auto / None / Approx / Price Action Based
* **Compact Numbers**: 1.2k, 1.25M, 3.4B…
## Theme & UI
* **Theme Mode**: Auto / Light / Dark
* **Row Spacing**: vertical spacing between rows
* **Top Row Y**: moves the whole grid vertically
* **Draw Guide Lines**: faint dotted guides
* **Text Size**: Tiny / Small / Normal / Large
## 🔧 Dashboard Settings
* **Enable Dashboard**
* **📏 Table Text Size**: Tiny…Huge
* **🦓 Zebra Rows**
* **🔲 Table Border**
## ⏰ Timeframes (for Dashboard)
* **M1…D1** toggles
## Contextual Coloring
* **Enable Contextual Coloring**: opacity by signal strength
* **Δ% cap / Share offset cap**: saturation caps
* **Min/Max transparency**: solid vs faint extremes
## Label Density & Size
* **Show every N-th bar**: draw labels only every Nth bar
* **Limit to last X bars**: keep labels only in the most recent X bars
## Colors
* Up / Down / Text / Guide
## Alerts
* **Delta Threshold (abs)** — |Δ| in volume units
* **UpShare > / <** — bullish/bearish thresholds
* **Enable Δ% Alert**, **Δ% > +**, **Δ% < −** — relative delta levels
---
# How to use (Quick Start)
1. Add the indicator to your chart (overlay=false → separate pane).
2. **History Mode**:
* Crypto/Futures/FX → keep **Auto** or switch to **Price Action Based** for richer history.
* Stocks/Index → prefer **None** or **Price Action Based** for safer splits.
3. **Label Density**: start with **Limit to last X bars = 30–150** and **Show every N-th bar = 2–4**.
4. **Contextual Coloring**: keep on to emphasize strong Δ% / Share moves.
5. **Dashboard**: enable and pick only the TFs you actually use.
6. **Alerts**: set thresholds (ideas below).
---
# Alerts (in TradingView)
Add alert → pick this indicator → choose any of:
* **Delta exceeds threshold** (|Δ| > X)
* **UpShare above threshold** (UpShare% > X)
* **UpShare below threshold** (UpShare% < X)
* **Relative Delta above +X%**
* **Relative Delta below −X%**
**Starter thresholds (tune per symbol & TF):**
* **Crypto M1/M5**: Δ% > +25…35 (bullish), Δ% < −25…−35 (bearish)
* **FX (tick volume)**: UpShare > 60–65% or < 40–35%
* **Stocks (liquid)**: set **Absolute Δ** by typical volume scale (e.g., 50k / 100k / 500k)
---
# Notes by Market Type
* **Crypto/Futures**: 24/7 and high liquidity — **Price Action Based** often gives nicer history splits than Approx.
* **Forex (FX)**: TradingView volume is typically **tick volume** (not true exchange volume). Treat Δ/Share as tick-based flow, still very useful intraday.
* **Stocks/Index**: historical tick detail can be limited. **None** or **Price Action Based** is a safer default. If you see too many 0/100% shares, switch away from Approx.
---
# “All Timeframes” accuracy
* Works on **any TF** (M1 → D1/W1).
* **Real-time accuracy** is strong for the open bar (live accumulation).
* **Historical accuracy** depends on your **History Mode** (None = safest, Approx = fastest/simplest, Price Action Based = more nuanced).
* The MTF dashboard uses `request.security` and therefore follows the same logic per TF.
---
# Trade Ideas (Use-Cases)
* **Scalping (M1–M5)**: a spike in Δ% + UpShare>65% + rising total Vol → momentum entries.
* **Intraday (M5–M30–H1)**: when multiple TFs show aligned Δ%/Share (e.g., M5 & M15 bullish), join the trend.
* **Swing (H4–D1)**: persistent Δ% > 0 and UpShare > 55–60% → structural accumulation bias.
---
# Advantages
* **True-feeling live flow** on the open bar.
* **Adaptable history** (three modes) to match data quality.
* **Clean visual layout** with guides, compact numbers, contextual opacity.
* **MTF snapshot** for quick bias read.
* **Performance controls** (last X bars, every N-th bar).
---
# Limitations & Care
* **FX uses tick volume** — interpret Δ/Share accordingly.
* **History Mode is an approximation** — confirm with trend/structure/liquidity context.
* **Illiquid symbols** can produce noisy or contradictory signals.
* **Too many labels** can slow charts → raise N, lower X, or disable guides.
---
# Best Practices (Checklist)
* Crypto/Futures: prefer **Price Action Based** for history.
* Stocks: **None** or **Price Action Based**; be cautious with **Approx**.
* FX: pair Δ% & UpShare% with session context (London/NY) and volatility.
* If labels overlap: tweak **Row Spacing** and **Text Size**.
* In the dashboard, keep only the TFs you actually act on.
* Alerts: start around **Δ% 25–35** for “punchy” moves, then refine per asset.
---
# FAQ
**1) Why do some closed bars show 0%/100% UpShare?**
You’re on **Approx** history mode. Switch to **Price Action Based** for smoother splits.
**2) Δ% looks strong but price doesn’t move — why?**
Δ% is an **order-flow** measure. Price also depends on liquidity pockets, sessions, news, higher-timeframe structure. Use confirmations.
**3) Performance slowdown — what to do?**
Lower **Limit to last X bars** (e.g., 30–100), increase **Show every N-th bar** (2–6), or disable **Draw Guide Lines**.
**4) Dashboard values don’t “match” the grid exactly?**
Dashboard is multi-TF via `request.security` and follows the history logic per TF. Differences are normal.
---
# Short “Store” Marketing Blurb
Intrabar Volume Delta Grid reveals the order-flow inside every candle (Up/Down, Δ, UpShare%) — live and on history. With smart history splitting, an MTF dashboard, contextual emphasis, and flexible alerts, it helps you spot momentum and bias across Crypto, Forex (tick volume), and Stocks. Tidy labels and compact numbers keep the panel readable and fast.
Clean Multi-Indicator Alignment System
Overview
A sophisticated multi-indicator alignment system designed for 24/7 trading across all markets, with pure signal-based exits and no time restrictions. Perfect for futures, forex, and crypto markets that operate around the clock.
Key Features
🎯 Multi-Indicator Confluence System
EMA Cross Strategy: Fast EMA (5) and Slow EMA (10) for precise trend direction
VWAP Integration: Institution-level price positioning analysis
RSI Momentum: 7-period RSI for momentum confirmation and reversal detection
MACD Signals: Optimized 8/17/5 configuration for scalping responsiveness
Volume Confirmation: Customizable volume multiplier (default 1.6x) for signal validation
🚀 Advanced Entry Logic
Initial Full Alignment: Requires all 5 indicators + volume confirmation
Smart Continuation Entries: EMA9 pullback entries when trend momentum remains intact
Flexible Time Controls: Optional session filtering or 24/7 operation
🎪 Pure Signal-Based Exits
No Forced Closes: Positions exit only on technical signal reversals
Dual Exit Conditions: EMA9 breakdown + RSI flip OR MACD cross + EMA20 breakdown
Trend Following: Allows profitable trends to run their full course
Perfect for Swing Scalping: Ideal for multi-session position holding
📊 Visual Interface
Real-Time Status Dashboard: Live alignment monitoring for all indicators
Color-Coded Candles: Instant visual confirmation of entry/exit signals
Clean Chart Display: Toggle-able EMAs and VWAP with professional styling
Signal Differentiation: Clear labels for entries, X-crosses for exits
🔔 Alert System
Entry Notifications: Separate alerts for buy/sell signals
Exit Warnings: Technical breakdown alerts for position management
Mobile Ready: Push notifications to TradingView mobile app
Market Applications
Perfect For:
Gold Futures (GC): 24-hour precious metals trading
NASDAQ Futures (NQ): High-volatility index scalping
Forex Markets: Currency pairs with continuous operation
Crypto Trading: 24/7 cryptocurrency momentum plays
Energy Futures: Oil, gas, and commodity swing trades
Optimal Timeframes:
1-5 Minutes: Ultra-fast scalping during high volatility
5-15 Minutes: Balanced approach for most markets
15-30 Minutes: Swing scalping for trend following
🧠 Smart Position Management
Tracks implied position direction
Prevents conflicting signals
Allows trend continuation entries
State-aware exit logic
⚡ Scalping Optimized
Fast-reacting indicators with shorter periods
Volume-based confirmation reduces false signals
Clean entry/exit visualization
Minimal lag for time-sensitive trades
Configuration Options
All parameters fully customizable:
EMA Lengths: Adjustable from 1-30 periods
RSI Period: 1-14 range for different market conditions
MACD Settings: Fast (1-15), Slow (1-30), Signal (1-10)
Volume Confirmation: 0.5-5.0x multiplier range
Visual Preferences: Colors, displays, and table options
Risk Management Features
Clear visual exit signals prevent emotion-based decisions
Volume confirmation reduces false breakouts
Multi-indicator confluence improves signal quality
Optional time filtering for session-specific strategies
Best Use Cases
Futures Scalping: NQ, ES, GC during active sessions
Forex Swing Trading: Major pairs during overlap periods
Crypto Momentum: Bitcoin, Ethereum trend following
24/7 Automated Systems: Algorithmic trading implementation
Multi-Market Scanning: Portfolio-wide signal monitoring
SA Trump Volatility Pattern Wick + Volume Shock ReversalDisclaimer (read first)
Educational use only — not financial advice. This script does not provide entries/exits, targets, position sizing, or profit guarantees. Trading (especially options/futures) involves substantial risk and can result in loss of principal (and more for leveraged products). Use at your own discretion.
Best use cases on the 2-Hour timeframe
On 2H, this script becomes a high-signal-quality “shock reversal” detector instead of a noisy candle toy. You’re essentially filtering for:
Large wick rejection
Small real body
Statistically unusual volume (Z-score > threshold)
Context alignment (trend filter + prior bar direction + optional RSI)
What 2H is best for
1) Detecting “event shock” reversals
2H bars often capture:
Macro headlines
Fed commentary
earnings reactions (for equities)
sudden volatility expansions
When the script fires on 2H, it often means:
“Aggressive push happened, liquidity got rejected, and participation was unusually high.”
That’s a structural clue, not a trade instruction.
2) Filtering false breakouts / breakdowns
The wick requirement is basically “failed continuation.”
On 2H, this is powerful around:
prior day highs/lows
weekly pivots
obvious consolidation edges
key moving averages (fast SMA / slow SMA gate)
Bull pattern = flush + reclaim behavior.
Bear pattern = pop + rejection behavior.
3) Options traders: timing “premium exposure windows”
On 2H, this is great for options traders who want to avoid buying premium into a fake move.
BullTrump on 2H can be used as a “don’t chase puts / be cautious short” context shift.
BearTrump on 2H can be used as a “don’t chase calls / be cautious long” context shift.
It’s a “regime hint” for the next few sessions, not a one-bar command.
4) Futures traders: rotation vs continuation framework
A 2H “Trump Candle” often marks:
the end of a liquidation leg
a stop-run / squeeze peak
a pivot moment where the market shifts from impulse to balance
Use it to decide whether you’re in:
continuation mode (trend carries)
or rotation mode (mean-reversion / two-way)
How to use it (2H workflow)
Step A — Keep it strict at first
Recommended defaults for 2H:
wickFracThreshold: 0.40–0.55
bodyMaxFrac: 0.35–0.45
volZThresh: 1.0–1.5
useRSIFilter: ON
RSI bull min / bear max: 45 / 55 (good baseline)
Step B — Treat triggers as “context events”
When it prints, ask 3 questions:
Where did it happen? (key level or random spot)
Was it aligned with trend gate? (SMA fast/slow)
Did volume Z-score spike? (true shock vs normal wick)
Higher quality triggers happen when:
the wick pierces a known level (prior swing / range edge)
and the close re-enters the range
and volume Z-score is meaningfully positive
Step C — Confirm with the next 1–2 candles (optional)
On 2H, it’s reasonable to wait for:
a follow-through close
or a hold above/below fast SMA
or a second “acceptance” candle
You can do this manually without changing code.
Other recommended timeframes (best to worst)
✅ 4H (even cleaner, fewer signals)
Use for:
swing context
multi-day pivots
big reversal points
✅ 1H (more signals, still structured)
Use for:
intraday + overnight context
day-trade bias shifts
✅ 30m (for active traders)
Use for:
tighter responsiveness
more setups
But requires more discretion; noise increases.
⚠️ 15m and below (only if you increase strictness)
If you want to run it on 5m/15m:
raise volZThresh (ex: 1.5–2.0)
raise wickFracThreshold (ex: 0.50–0.65)
lower bodyMaxFrac (ex: 0.25–0.35)
Otherwise it will trigger too often.
Best markets for this script
Works best on:
Index futures: /NQ, /ES (big volume makes Z-score meaningful)
Liquid ETFs: SPY, QQQ
High-volume large caps (AAPL, MSFT, NVDA etc.)
Less reliable on:
thin small caps (volume Z-score gets weird)
low-volume premarket candles
illiquid options underlyings
Signal Inside the Script ✅ SA ZoneEngine Bias Filtered is a market-structure bias and confirmation tool designed for futures To request access: 👉 Purchase here: trianchor.gumroad.com
Best GBT for this indicator
chatgpt.com
chatgpt.com
chatgpt.com
Market Regime IndexThe Market Regime Index is a top-down macro regime nowcasting tool that offers a consolidated view of the market’s risk appetite. It tracks 32 of the world’s most influential markets across asset classes to determine investor sentiment by applying trend-following signals to each independent asset. It features adjustable parameters and a built-in alert system that notifies investors when conditions transition between Risk-On and Risk-Off regimes. The selected markets are grouped into equities (7), fixed income (9), currencies (7), commodities (5), and derivatives (4):
Equities = S&P 500 E-mini Index Futures, Nasdaq-100 E-mini Index Futures, Russell 2000 E-mini Index Futures, STOXX Europe 600 Index Futures, Nikkei 225 Index Futures, MSCI Emerging Markets Index Futures, and S&P 500 High Beta (SPHB)/Low Beta (SPLV) Ratio.
Fixed Income = US 10Y Treasury Yield, US 2Y Treasury Yield, US 10Y-02Y Yield Spread, German 10Y Bund Yield, UK 10Y Gilt Yield, US 10Y Breakeven Inflation Rate, US 10Y TIPS Yield, US High Yield Option-Adjusted Spread, and US Corporate Option-Adjusted Spread.
Currencies = US Dollar Index (DXY), Australian Dollar/US Dollar, Euro/US Dollar, Chinese Yuan/US Dollar, Pound Sterling/US Dollar, Japanese Yen/US Dollar, and Bitcoin/US Dollar.
Commodities = ICE Brent Crude Oil Futures, COMEX Gold Futures, COMEX Silver Futures, COMEX Copper Futures, and S&P Goldman Sachs Commodity Index (GSCI) Futures.
Derivatives = CBOE S&P 500 Volatility Index (VIX), ICE US Bond Market Volatility Index (MOVE), CBOE 3M Implied Correlation Index, and CBOE VIX Volatility Index (VVIX)/VIX.
All assets are directionally aligned with their historical correlation to the S&P 500. Each asset contributes equally based on its individual bullish or bearish signal. The overall market regime is calculated as the difference between the number of Risk-On and Risk-Off signals divided by the total number of assets, displayed as the percentage of markets confirming each regime. Green indicates Risk-On and occurs when the number of Risk-On signals exceeds Risk-Off signals, while red indicates Risk-Off and occurs when the number of Risk-Off signals exceeds Risk-On signals.
Bullish Signal = (Fast MA – Slow MA) > (ATR × ATR Margin)
Bearish Signal = (Fast MA – Slow MA) < –(ATR × ATR Margin)
Market Regime = (Risk-On signals – Risk-Off signals) ÷ Total assets
This indicator is designed with flexibility in mind, allowing users to include or exclude individual assets that contribute to the market regime and adjust the input parameters used for trend signal detection. These parameters apply to each independent asset, and the overall regime signal is smoothed by the signal length to reduce noise and enhance reliability. Investors can position according to the prevailing market regime by selecting factors that have historically outperformed under each regime environment to minimise downside risk and maximise upside potential:
Risk-On Equity Factors = High Beta > Cyclicals > Low Volatility > Defensives.
Risk-Off Equity Factors = Defensives > Low Volatility > Cyclicals > High Beta.
Risk-On Fixed Income Factors = High Yield > Investment Grade > Treasuries.
Risk-Off Fixed Income Factors = Treasuries > Investment Grade > High Yield.
Risk-On Commodity Factors = Industrial Metals > Energy > Agriculture > Gold.
Risk-Off Commodity Factors = Gold > Agriculture > Energy > Industrial Metals.
Risk-On Currency Factors = Cryptocurrencies > Foreign Currencies > US Dollar.
Risk-Off Currency Factors = US Dollar > Foreign Currencies > Cryptocurrencies.
In summary, the Market Regime Index is a comprehensive macro risk-management tool that identifies the current market regime and helps investors align portfolio risk with the market’s underlying risk appetite. Its intuitive, color-coded design makes it an indispensable resource for investors seeking to navigate shifting market conditions and enhance risk-adjusted performance by selecting factors that have historically outperformed. While it has proven historically valuable, asset-specific characteristics and correlations evolve over time as market dynamics change.
Synthetic Implied APROverview
The Synthetic Implied APR is an artificial implied APR, designed to imitate the implied APR seen when trading cryptocurrency funding rates. It combines real-time funding rates with premium data to calculate an artificial market expectation of the annualized funding rate.
The (actual) implied APR is the market's expectation of the annualized funding rate. This is dependent on bid/ask impacts of the implied APR, something which is currently unavailable to fetch with TradingView. In essence, an implied APR of X% means traders believe that asset's funding fees to average X% when annualized.
What's important to understand, is that the actual value of the synthetic implied APR is not relevant. We only simply use its relative changes when we trade (i.e if it crosses above/below its MA for a given weight). Even for the same asset, the implied APRs will change depending on days to maturity.
How it calculates
The synthetic implied APR is calculated with these steps:
Collects premium data from perpetual futures markets using optimized lower timeframe requests (check my 'Predicted Funding Rates' indicator)
Calculates the funding rate by adding the premium to an interest rate component (clamped within exchange limits)
Derives the underlying APR from the 8-hour funding rate (funding rate × 3 × 365)
Apply a weighed formula that imitates both the direction (underlying APR) with the volatility of prices (from the premium index and funding)
premium_component = (prem_avg / 50 ) * 365
weighedprem = (weight * fr) + ((1 - weight) * apr) + (premium_component * 0.3)
impliedAPR = math.avg(weighedprem, ta.sma(apr, maLength))
How to use it: Generally
Preface: Funding rates are an indication of market sentiment
If funding is positive, generally the market is bullish as longs are willing to pay shorts funding
If funding is negative, generally the market is bearish as shorts are willing to pay longs funding
So, this script can be used like a typical oscillator:
Bullish: If implied APR > MA OR if implied APR MA is green
Bearish: If implied APR < MA OR if implied APR MA is red
The components:
Synthetic Implied APR: The main metric. At current setting of 0.7, it imitates volatility
Weight: The higher the value, the smoother the synthetic implied APR is (and MA too). This value is very important to the imitation. At 0.7, it imitates the actual volatility of the implied APR. At weight = 1, it becomes very smooth. Perfect for trading
Synthetic Implied APR Moving Average: A moving average of the Synthetic implied APR. Can choose from multiple selections, (SMA, EMA, WMA, HMA, VWMA, RMA)
How to use it: Trading Funding
When trading funding there're multiple ways to use it with different settings
Trade funding rates with trend changes
Settings: Weight = 1
Method 1: When the implied APR MA turns green, long funding rates (or short if red)
Method 2: When the implied APR crosses above the MA, long funding rates (or short when crosses below)
Trade funding rates with MA pullbacks
Settings: Weight = 0.7, timeframe 15m
In an uptrend: When implied APR crosses below then above the script, long funding opportunity
In an downtrend: When implied APR crosses above then below the script, shortfunding opportunity
You can determine the trend with the method before, using a weight of 1
To trade funding rates, it's best to have these 3 scripts at these settings:
Predicted Funding Rates: This allows you to see the predicted funding rates and see if they've maxxed out for added confluence too (+/-0.01% usually for Binance BTC futures)
Synthetic implied APR: At weight 1, the MA provides a good trend (whether close above/below or colour change)
Synthetic implied APR: At weight 0.7, it provides a good imitation of volatility
How to use it: Trading Futures
When trading futures:
You can determine roughly what the trend is, if the assumption is made that funding rates can help identify trends if used as a sentiment indicator. It should be supplemented with traditional trend trading methods
To prevent whipsaws, weight should remain high
Long trend: When the implied APR MA turns green OR when it crosses above its MA
Short trend: When the implied APR MA turns red OR when it below above its MA
Why it's original
This indicator introduces a unique synthetic weighting system that combines funding rates, underlying APR, and premium components in a way not found in existing TradingView scripts. Trading funding rates is a niche area, there aren't that many scripts currently available. And to my knowledge, there's no synthetic implied APR scripts available on TradingView either. So I believe this script to be original in that sense.
Notes
Because it depends on my triangular weighting algos, optimal accuracy is found on timeframes that are 4H or less. On higher timeframes, the accuracy drops off. Best timeframes for intraday trading using this are 15m or 1 hour
The higher the timeframe, the lower the MA one should use. At 1 hour, 200 or higher is best. At say, 4h, length of 50 is best
Only works for coins that have a Binance premium index
Inputs
Funding Period - Select between "1 Hour" or "8 Hour" funding cycles. 8 hours is standard for Binance
Table - Toggle the information dashboard on/off to show or hide real-time metrics including funding rate, premium, and APR value
Weight - Controls the balance between funding rate (higher values = smoother) and APR (lower values = more responsive) in the calculation, ranging from 0.0 to 1.0. Default is 0.7, this imitates the volatility
Auto Timeframe Implied Length - Automatically calculates optimal smoothing length based on your chart timeframe for consistent behavior across different time periods
Manual Implied Length - Sets a fixed smoothing length (in bars) when auto mode is disabled, with lower values being more responsive and higher values being smoother
Show Implied APR MA - Displays an additional moving average line of the Synthetic Implied APR to help identify trend direction and crossover signals
MA Type for Implied APR - Selects the calculation method (SMA, EMA, WMA, HMA, VWMA, or RMA) for the moving average, each offering different responsiveness and lag characteristics
MA Length for Implied APR - Sets the lookback period (1-500 bars) for the moving average, with shorter lengths providing more signals and longer lengths filtering noise
Show Underlying APR - Displays the raw APR calculation (without synthetic weighting) as a reference line to compare against the main indicator
Bullish Color - Sets the color for positive values in the table and rising MA line
Bearish Color - Sets the color for negative values in the table and falling MA line
Table Background - Customizes the background color and transparency of the information dashboard
Table Text Color - Sets the color for label text in the left column of the information table
Table Text Size - Controls the font size of table text with options from Tiny to Huge
VWAP Momentum Oscillator How It Works
Core Calculation Method
The oscillator combines four key market measurements into a single, normalized reading:
1. Price-VWAP Deviation: `(Close - VWAP) / VWAP × 100`
2. VWAP-MA Momentum: `(VWAP - MovingAverage) / MovingAverage × 100`
3. Anchored VWAP Strength: Average of high/low anchor deviations from rolling VWAP
4. Range Position: `(Close - PeriodLow) / (PeriodHigh - PeriodLow) × 100 - 50`
Dynamic Signal Line
The signal line uses an EMA that automatically adjusts its length based on your chart timeframe:
- Futures: Always covers 23 hours of trading (1,380 minutes)
- Stocks: Always covers 6.5 hours of trading (390 minutes)
- Examples: 276 periods on 5-min futures chart, 1,380 periods on 1-min futures chart
Trading Signals
🟢 Buy Signals
- Condition: Main oscillator crosses above signal line while below zero
- Logic: Momentum turning bullish from oversold conditions
- Visual: Green "BUY" label below price action
🔴 Sell Signals
- Condition: Main oscillator crosses below signal line while above zero
- Logic: Momentum turning bearish from overbought conditions
- Visual: Red "SELL" label above price action
⚠️ Extreme Warnings
- Extreme Overbought: Red triangle when oscillator crosses above +4.0
- Extreme Oversold: Green triangle when oscillator crosses below -4.0
- Purpose: Risk management alerts, not entry/exit signals
Oscillator Zones
Interpretation Guide
- Above +2.0: Strong bullish momentum zone (green background)
- 0 to +2.0: Mild bullish territory
- 0 to -2.0: Mild bearish territory
- Below -2.0: Strong bearish momentum zone (red background)
- Above +4.0: Extreme overbought (caution advised)
- Below -4.0: Extreme oversold (potential reversal zone)
Customization Options
Moving Average Settings
- EMA/SMA Toggle: Choose between exponential or simple moving average
- Color Customization: Adjust MA line color and width
Visual Controls
- Bullish/Bearish Colors: Customize momentum zone colors
- Signal Line: Toggle visibility and adjust color
- Line Widths: Control thickness of all plot lines
Anchor Modes
- NY Session Only: Anchors reset at NY market open (9:30 AM ET)
- 24H NY Day: Anchors reset at NY calendar day change (midnight ET)
Best Practices
Timeframe Selection
- Scalping: 1-5 minute charts for quick momentum changes
- Day Trading: 5-15 minute charts for clearer trend signals
- Swing Trading: 1-4 hour charts for major momentum shifts
Signal Confirmation
- Wait for crossovers: Don't trade on oscillator position alone
- Respect extreme levels: Exercise caution above +4 or below -4
- Use with price action: Combine with support/resistance levels
Risk Management
- Extreme zones: Reduce position size when oscillator is extended
- Failed signals: Exit quickly if momentum doesn't follow through
- Market context: Consider overall trend direction and market volatility
Technical Specifications
Calculation Components
- Base Length: 1,380 periods (futures) / 390 periods (stocks)
- Signal Line: Dynamic EMA covering one full trading day
- Smoothing: 3-period SMA on raw oscillator (adjustable)
- Update Frequency: Real-time on every price tick
Performance Notes
- Resource Efficient: Optimized calculations minimize CPU usage
- Memory Friendly: Uses incremental VWAP calculations
- Fast Loading: Minimal historical data requirements
Version History & Development
This oscillator evolved from advanced VWAP overlay strategies, transforming complex multi-line analysis into a single, actionable momentum gauge. The indicator maintains the sophistication of institutional VWAP analysis while providing the clarity needed for retail trading decisions.
Core Philosophy
Traditional VWAP indicators show where price is relative to volume-weighted averages, but they don't quantify momentum or provide clear entry/exit signals. This oscillator solves that problem by normalizing all VWAP relationships into a single, bounded indicator that works consistently across all timeframes and asset classes.
---
Open Source License: This indicator is provided free for the TradingView community. Feel free to modify and enhance according to your trading needs.
Commitment of Traders: Legacy Metrics█ OVERVIEW
This indicator displays the Commitment of Traders (COT) legacy data for futures markets.
█ CONCEPTS
Commitment of Traders (COT) data is tallied by the Commodity Futures Trading Commission (CFTC) , a US federal agency that oversees the trading of derivative markets such as futures in the US. It is weekly data that provides traders with information about open interest for an asset. The CFTC oversees derivative markets traded on different exchanges, so COT data is available for assets that can be traded on CBOT, CME, NYMEX, COMEX, and ICEUS.
A detailed description of the COT report can be found on the CFTC's website .
COT data is separated into three notable reports: Legacy, Disaggregated, and Financial. This indicator presents data from the legacy report, which is broken down by exchange. Legacy reports break down the reportable open interest positions into two classifications: non-commercial and commercial traders.
Our other COT indicators are:
• Commitment of Traders: Disaggregated Metrics
• Commitment of Traders: Financial Metrics
• Commitment of Traders: Total
█ HOW TO USE IT
Load the indicator on an active chart (see here if you don't know how).
By default, the indicator uses the chart's symbol to derive the COT data it displays. You can also specify a CFTC code in the "CFTC code" field of the script's inputs to display COT data from a symbol different than the chart's.
The rest of this section documents the script's input fields.
Metric
Each metric represents a different column of the Commitment of Traders report. Details are available in the explanatory notes on the CFTC's website .
Here is a summary of the metrics:
• "Open Interest" is the total of all futures and/or option contracts entered into and not yet offset by a transaction, by delivery, by exercise, etc.
The aggregate of all long open interest is equal to the aggregate of all short open interest.
• "Traders Total" is the number of all unique reportable traders, regardless of the trading direction.
• "Traders Total Reportable/Traders Noncommercial/Traders Commercial" are the quantities of traders reported to hold any position with the specified direction.
All of a trader's reported futures positions in a commodity are classified as commercial if the trader uses futures contracts in that particular commodity for hedging.
To determine the total number of reportable traders in a market, a trader is counted only once, whether or not the trader appears in more than one category.
• "Total Reportable/Noncommercial/Commercial Positions" are all positions held by all reportable/non-commercial/commercial traders.
• "Non-reportable Positions" is derived by subtracting total long and short "Reportable Positions" from the total open interest.
Accordingly, the number of traders involved and the commercial/non-commercial classification of each trader are unknown.
• "Concentration Gross/Net LT 4/8 TDR" is the percentage of open interest held by 4/8 of the largest traders, by gross/net positions,
without regard to whether they are classified as commercial or non-commercial. The Net position ratios are computed after offsetting each trader’s equal long and short positions.
A reportable trader with relatively large, balanced long and short positions in a single market, therefore,
may be among the four and eight largest traders in both the gross long and gross short categories, but will probably not be included among the four and eight largest traders on a net basis.
Direction
Each metric is available for a particular set of directions. Valid directions for each metric are specified with its name in the "Metric" field's dropdown menu.
Type
Possible values are: All, Old, Other. When commodities have a well-defined marketing season or crop year (e.g. Wheat or Lean Hogs futures), this determines how the data is aggregated. Detailed explanation can be found in the "Old and Other Futures" section of the CTFC Explanatory Notes linked above. The "Major Markets for Which the COT Data Is Shown by Crop Year" table in the Explanatory Notes specifies the commodities that this distinction applies to; selecting "Old" for any of the commodities not in that list will return the same data as in "All", while selecting "Other" will return 0.
COT Selection Mode
This field's value determines how the script determines which COT data to return from the chart's symbol:
- "Root" uses the root of a futures symbol ("ES" for "ESH2020").
- "Base currency" uses the base currency in a forex pair ("EUR" for "EURUSD").
- "Currency" uses the quote currency, i.e., the currency the symbol is traded in ("JPY" for "TSE:9984" or "USDJPY").
- "Auto" tries all modes, in turn.
If no COT data can be found, a runtime error is generated.
Note that if the "CTFC Code" input field contains a code, it will override this input.
Futures/Options
Specifies the type of Commitment of Traders data to display: data concerning only Futures, only Options, or both.
CTFC Code
Instead of letting the script generate the CFTC COT code from the chart and the "COT Selection Mode" input when this field is empty, you can specify an unrelated CFTC COT code here, e.g., 001602 for wheat futures.
Look first. Then leap.
Commitment of Traders: Disaggregated Metrics█ OVERVIEW
This indicator displays the Commitment of Traders (COT) Disaggregated data for futures markets.
█ CONCEPTS
Commitment of Traders (COT) data is tallied by the Commodity Futures Trading Commission (CFTC) , a US federal agency that oversees the trading of derivative markets such as futures in the US. It is weekly data that provides traders with information about open interest for an asset. The CFTC oversees derivative markets traded on different exchanges, so COT data is available for assets that can be traded on CBOT, CME, NYMEX, COMEX, and ICEUS.
A detailed description of the COT report can be found on the CFTC's website .
COT data is separated into three notable reports: Legacy, Disaggregated, and Financial. This indicator presents data from the Disaggregated report. The disaggregated reports are broken down by agriculture, petroleum and products, natural gas and products, electricity and metals and other physical contracts. The Disaggregated reports break down the reportable open interest positions into four classifications: Producer/Merchant/Processor/User, Swap Dealers, Managed Money, and Other Reportables.
Our other COT indicators are:
• Commitment of Traders: Legacy Metrics
• Commitment of Traders: Financial Metrics
• Commitment of Traders: Total
█ HOW TO USE IT
Load the indicator on an active chart (see here if you don't know how).
By default, the indicator uses the chart's symbol to derive the COT data it displays. You can also specify a CFTC code in the "CFTC code" field of the script's inputs to display COT data from a symbol different than the chart's.
The rest of this section documents the script's input fields.
Metric
Each metric represents a different column of the Commitment of Traders report. Details are available in the explanatory notes on the CFTC's website .
Here is a summary of the metrics:
• "Open Interest" is the total of all futures and/or option contracts entered into and not yet offset by a transaction, by delivery, by exercise, etc.
The aggregate of all long open interest is equal to the aggregate of all short open interest.
• "Traders Total" is the quantity of all unique reportable traders, regardless of the trading direction.
• "Traders Producer Merchant" is the number of traders classified as a "producer/merchant/processor/user" reported holding any position with the specified direction.
A "producer/merchant/processor/user" is an entity that predominantly engages in the production, processing, packing or handling of a physical commodity and
uses the futures markets to manage or hedge risks associated with those activities.
• "Traders Swap" is the number of traders classified as "swap dealers" reported holding any position with the specified direction.
A "swap dealer" is an entity that deals primarily in swaps for a commodity and uses the futures markets to manage or hedge the risk associated with those swaps transactions.
The swap dealer’s counterparties may be speculative traders, like hedge funds, or traditional commercial clients that are managing risk arising from their dealings in the physical commodity.
• "Traders Managed Money" is the number of traders classified as "money managers" reported holding any position with the specified direction.
A "money manager" is a registered trader that is engaged in managing and conducting organized futures trading on behalf of clients.
• "Traders Other Reportable" is the number of reportable traders that are not placed in any of the three categories specified above.
• "Traders Total Reportable" is the number of traders reported holding any position with the specified direction.
To determine the total number of reportable traders in a market, a trader is counted only once whether or not the trader appears in more than one category.
As a result, the sum of the numbers of traders in each separate category typically exceeds the total number of reportable traders.
• "Producer Merchant/Swap/Managed Money/Total Reportable/Other Reportable Positions" is all positions held by the traders of the specified category.
• "Nonreportable Positions" is the long and short open interest derived by subtracting the total long and short reportable positions from the total open interest.
Accordingly, the number of traders involved and the classification of each trader are unknown.
• "Concentration Gross/Net LE 4/8 TDR" is the percentage of open interest held by 4/8 of the largest traders (entities), by Gross/Net positions, without regard to how they are classified.
The Net position ratios are computed after offsetting each trader’s equal long and short positions.
A reportable trader with relatively large, balanced long and short positions in a single market,
therefore, may be among the four and eight largest traders in both the gross long and gross short categories,
but will probably not be included among the four and eight largest traders on a net basis.
Direction
Each metric is available for a particular set of directions. Valid directions for each metric are specified with its name in the "Metric" field's dropdown menu.
Type
Possible values are: All, Old, Other. When commodities have a well-defined marketing season or crop year (e.g. Wheat or Lean Hogs futures), this determines how the data is aggregated. Detailed explanation can be found in the "Old and Other Futures" section of the CTFC Explanatory Notes linked above. The "Major Markets for Which the COT Data Is Shown by Crop Year" table in the Explanatory Notes specifies the commodities that this distinction applies to; selecting "Old" for any of the commodities not in that list will return the same data as in "All", while selecting "Other" will return 0.
Futures/Options
Specifies the type of Commitment of Traders data to display: data concerning only Futures, only Options, or both.
CTFC Code
Instead of letting the script generate the CFTC COT code from the chart and the "COT Selection Mode" input when this field is empty, you can specify an unrelated CFTC COT code here, e.g., 001602 for wheat futures.
Look first. Then leap.
Commitment of Traders: Financial Metrics█ OVERVIEW
This indicator displays the Commitment of Traders (COT) financial data for futures markets.
█ CONCEPTS
Commitment of Traders (COT) data is tallied by the Commodity Futures Trading Commission (CFTC) , a US federal agency that oversees the trading of derivative markets such as futures in the US. It is weekly data that provides traders with information about open interest for an asset. The CFTC oversees derivative markets traded on different exchanges, so COT data is available for assets that can be traded on CBOT, CME, NYMEX, COMEX, and ICEUS.
A detailed description of the COT report can be found on the CFTC's website .
COT data is separated into three notable reports: Legacy, Disaggregated, and Financial. This indicator presents data from the COT Financial (Traders in Financial Futures) report. The Financial report includes financial contracts, such as currencies, US Treasury securities, Eurodollars, stocks, VIX and Bloomberg commodity index. As such, the TFF data is limited to financial-related tickers. The TFF report breaks down the reportable open interest positions into four classifications: Dealer/Intermediary, Asset Manager/Institutional, Leveraged Funds, and Other Reportables.
Our other COT indicators are:
• Commitment of Traders: Legacy Metrics
• Commitment of Traders: Disaggregated Metrics
• Commitment of Traders: Total
█ HOW TO USE IT
Load the indicator on an active chart (see here if you don't know how).
By default, the indicator uses the chart's symbol to derive the COT data it displays. You can also specify a CFTC code in the "CFTC code" field of the script's inputs to display COT data from a symbol different than the chart's.
The rest of this section documents the script's input fields.
Metric
Each metric represents a different column of the Commitment of Traders report. Details are available in the explanatory notes on the CFTC's website .
Here is a summary of the metrics:
• "Open Interest" is the total of all futures and/or option contracts entered into and not yet offset by a transaction, by delivery, by exercise, etc.
The aggregate of all long open interest is equal to the aggregate of all short open interest.
• "Traders Total" is the number of all unique reportable traders, regardless of the trading direction.
• "Traders Dealer" is the number of traders classified as a "Dealer/Intermediary" reported holding any position with the specified direction.
A "producer/merchant/processor/user" is an entity typically described as the “sell side” of the market.
Though they may not predominately sell futures, they do design and sell various financial assets to clients.
They tend to have matched books or offset their risk across markets and clients.
Futures contracts are part of the pricing and balancing of risk associated with the products they sell and their activities.
• "Traders Asset Manager" is the number of traders classified as "Asset Manager/Institutional" reported holding any position with the specified direction.
These are institutional investors, including pension funds, endowments, insurance companies,
mutual funds and those portfolio/investment managers whose clients are predominantly institutional.
• "Traders Leveraged Funds" is the number of traders classified as "Leveraged Funds" reported holding any position with the specified direction.
These are typically hedge funds and various types of money managers. The traders may be engaged in managing and
conducting proprietary futures trading and trading on behalf of speculative clients.
• "Traders Other Reportable" is the number of reportable traders that are not placed in any of the three categories specified above.
The traders in this category mostly are using markets to hedge business risk, whether that risk is related to foreign exchange, equities or interest rates.
This category includes corporate treasuries, central banks, smaller banks, mortgage originators, credit unions and any other reportable traders not assigned to the other three categories.
• "Traders Total Reportable" is the number of all traders reported holding any position with the specified direction.
To determine the total number of reportable traders in a market, a trader is counted only once whether or not the trader appears in more than one category.
As a result, the sum of the numbers of traders in each separate category typically exceeds the total number of reportable traders.
• "Dealer/Asset Manager/Leveraged Funds/Total Reportable/Other Reportable Positions -- all positions held by the traders of the specified category.
• "Nonreportable Positions" is the long and short open interest derived by subtracting the total long and short reportable positions from the total open interest.
Accordingly, the number of traders involved and the commercial/non-commercial classification of each trader are unknown.
• "Concentration Gross/Net LT 4/8 TDR" is the percentage of open interest held by 4/8 of the largest traders, by gross/net positions,
without regard to whether they are classified as commercial or non-commercial. The Net position ratios are computed after offsetting each trader’s equal long and short positions.
A reportable trader with relatively large, balanced long and short positions in a single market, therefore,
may be among the four and eight largest traders in both the gross long and gross short categories, but will probably not be included among the four and eight largest traders on a net basis.
Direction
Each metric is available for a particular set of directions. Valid directions for each metric are specified with its name in the "Metric" field's dropdown menu.
COT Selection Mode
This field's value determines how the script determines which COT data to return from the chart's symbol:
- "Root" uses the root of a futures symbol ("ES" for "ESH2020").
- "Base currency" uses the base currency in a forex pair ("EUR" for "EURUSD").
- "Currency" uses the quote currency, i.e., the currency the symbol is traded in ("JPY" for "TSE:9984" or "USDJPY").
- "Auto" tries all modes, in turn.
If no COT data can be found, a runtime error is generated.
Note that if the "CTFC Code" input field contains a code, it will override this input.
Futures/Options
Specifies the type of Commitment of Traders data to display: data concerning only Futures, only Options, or both.
CTFC Code
Instead of letting the script generate the CFTC COT code from the chart and the "COT Selection Mode" input when this field is empty, you can specify an unrelated CFTC COT code here, e.g., 001602 for wheat futures.
Look first. Then leap.
Binance TRX & BTTShows TRX with BTT, subtracted or added to. Subtracting makes it in line with BitMEX futures. The option to add is considered for 'true value'. Airdrops, like new coin forks, can split value: a good example being BCHABC and BCHSV.
Getting TRX futures to match TRX on Binance is likely tied to the monthly airdrop rate as defined here: support.binance.com
I'm guessing it has something to do with (spot price * estimated airdrop rate) trading too far from futures. Maybe even too close. Or because futures are trading above spot near a monthly airdrop snapshot. Much complicate. Such guess. Wow.
Binance is chosen as pricing source for its liquidity and earliest open date.
Etherium CME gaps multi-timeframe auto finderThis indicator is a powerful tool that automatically detects and visualizes price gaps (Gaps) in the Ethereum CME futures market across multiple timeframes and also provides alert functionality. Price gaps occur when the futures market is inactive for a certain period, often acting as potential support or resistance zones.
What is an Ethereum CME Gap?
CME (Chicago Mercantile Exchange) is one of the largest derivatives exchanges globally. The Ethereum CME futures market is closed on weekends and certain holidays. When the market reopens, a price difference may occur between the previous closing price and the new opening price, referred to as a "CME Gap."
Key Features of the Indicator
Multi-timeframe gap detection: Detects and displays gaps across 5m, 15m, 30m, 1h, 4h, 1d timeframes simultaneously.
Customizable CME Symbol: You can specify Ethereum CME futures symbols, such as ETH1!.
Two gap price display methods:
CME_price: Displays the gap based on the actual price levels in the CME futures market.
Chart_price: Adjusts the gap to match the price levels on the chart being viewed (e.g., spot market). This helps visualize the impact of futures gaps on the spot market.
Visual customization:
Individual color settings for bullish/bearish gap boxes for each timeframe.
Adjust the extension (display length) of gap boxes in bars.
Configure label display, position, text size, background, and text color.
Highlight significant gaps: Emphasize gaps above a specified percentage with a unique color and border thickness.
Alert functionality: Receive notifications when a gap is detected, with options to enable alerts only for specific timeframes.
Why CME Gaps Matter
Traders often consider CME gaps as significant price zones.
Gap Fill: Historical data shows that many gaps tend to get "filled" over time, meaning the price returns to the gap area, reaching the start or end point of the gap.
Support/Resistance: Unfilled gaps can serve as potential support (Bullish Gap) or resistance (Bearish Gap) zones.
Bullish Gap: Occurs when the current opening price is higher than the previous closing price. Typically leaves an unfilled gap below (previous high), which can act as potential support.
Bearish Gap: Occurs when the current opening price is lower than the previous closing price. Typically leaves an unfilled gap above (previous low), which can act as potential resistance.
How to Use the Indicator
Add Indicator on TradingView: Click the "Indicators" button on the TradingView chart.
Find the indicator in "My Scripts" or "Invite-Only Scripts" and add it to the chart.
Adjust Settings: Once the indicator is added, click the settings (gear) icon to adjust inputs.
CME Symbol (ETH): ETH1! is typically the default symbol for Ethereum CME futures. Confirm based on your broker or data feed.
Min gap %: Set the minimum gap size in percentage; smaller gaps will not be displayed.
Select Exchanges to Display gap price: Choose between "CME_price" or "Chart_price." For viewing futures gaps on a spot chart, "Chart_price" is recommended.
Show Xm/h/d gap boxes: Select which timeframe gap boxes to display.
Color, Extension, Label settings: Customize the visual aspects of gap boxes and labels.
Highlight gap % (>=): Set the minimum percentage for highlighting significant gaps.
Enable Alerts: Choose whether to receive alerts when a gap is detected.
Alert Timeframe: Select whether alerts apply to all timeframes or specific ones only.
Chart Analysis
Once the indicator is applied, gap boxes for the selected timeframes appear on the chart.
Green shades indicate Bullish Gaps, and red shades indicate Bearish Gaps (default green can be customized, and bearish gap color can be set separately).
Highlighted gaps may carry higher significance and should be monitored carefully.
Potential trading opportunities can be explored when the price approaches or attempts to fill a gap.
Usage Strategies (Examples)
Support/Resistance Confirmation: The lower boundary of a bullish gap can act as potential support, while the upper boundary of a bearish gap can act as potential resistance. Observe for reversals or breakouts when price reaches these areas.
Retracement Trading: Trade when the price returns to fill a gap after leaving it through a sharp move up or down.
Multi-timeframe Analysis: Gaps overlapping across multiple timeframes can form stronger support/resistance zones.
Considerations
* "Gap Filled" Condition: The indicator does not draw a gap if it determines that the gap has already been filled by the current bar’s low (bullish gap) or high (bearish gap).
* Tool Only: This indicator is a gap detection tool and should not be used alone for trading decisions. Always combine with other technical analysis tools and your trading strategy.
* Past Data ≠ Future Guarantee: Historical gap fill trends do not guarantee future occurrences.
This indicator allows effective tracking of Ethereum CME futures gaps and provides valuable insights for enhancing your trading strategy.
MACD StrategyOverview
The "MACD Strategy" is a straightforward trading strategy tested for BTCUSDT Futures on the 1-minute timeframe, leveraging the Moving Average Convergence Divergence (MACD) indicator to identify momentum-based buy and sell opportunities. Developed with input from expert trading analyst insights, this strategy combines technical precision with risk management, making it suitable for traders of all levels on platforms like TradingView. It focuses on capturing trend reversals and momentum shifts, with clear visual cues and automated alerts for seamless integration with trading bots (e.g., Bitget webhooks).
#### How It Works
This strategy uses the MACD indicator to generate trading signals based on momentum and trend direction:
- **Buy Signal**: Triggered when the MACD line crosses above the signal line, and the MACD histogram turns positive (above zero). This suggests increasing bullish momentum.
- **Sell Signal**: Triggered when the MACD line crosses below the signal line, and the MACD histogram turns negative (below zero), indicating growing bearish momentum.
Once a signal is detected, the strategy opens a position (long for buy, short for sell) with a position size calculated based on your risk tolerance. It includes a stop-loss to limit losses and a take-profit to lock in gains, both dynamically adjusted using the Average True Range (ATR) for adaptability to market volatility.
#### Key Features
- **MACD-Based Signals**: Relies solely on MACD for entry points, plotted in a separate pane for clear momentum analysis.
- **Risk Management**: Automatically calculates position size based on a percentage of your account balance and sets stop-loss and take-profit levels using ATR multipliers and a risk:reward ratio.
- **Visual Feedback**: Plots entry, stop-loss, and take-profit lines on the chart with labeled markers for easy tracking.
- **Alerts**: Includes Bitget webhook-compatible alerts for automated trading, notifying you of buy and sell signals in real-time.
#### Input Parameters
- **Account Balance**: Default 10000 – Set your initial trading capital to determine position sizing.
- **MACD Fast Length**: Default 12 – The short-term EMA period for MACD sensitivity.
- **MACD Slow Length**: Default 26 – The long-term EMA period for MACD calculation.
- **MACD Signal Length**: Default 9 – The smoothing period for the signal line.
- **Risk Per Trade (%)**: Default 3.0 – The percentage of your account balance risked per trade (e.g., 3% of 10000 = 300).
- **Risk:Reward Ratio**: Default 3.0 – The ratio of potential profit to risk (e.g., 3:1 means risking 1 to gain 3).
- **SL Multiplier**: Default 1.0 – Multiplies ATR to set the stop-loss distance (e.g., 1.0 x ATR).
- **TP Multiplier**: Default 3.0 – Multiplies ATR to set the take-profit distance, adjusted by the risk:reward ratio.
- **Line Length (bars)**: Default 25 – Duration in bars for displaying trade lines on the chart.
- **Label Position**: Default 'left' – Position of text labels (left or right) relative to trade lines.
- **ATR Period**: Default 14 – The number of periods for calculating ATR to measure volatility.
#### How to Use
1. **Add to Chart**: Load the "MACD Strategy" as a strategy and the "MACD Indicator" as a separate indicator on your TradingView chart (recommended for BTCUSDT Futures on the 1-minute timeframe).
2. **Customize Settings**: Adjust the input parameters based on your risk tolerance and market conditions. For BTCUSDT Futures, consider reducing `Risk Per Trade (%)` during high volatility (e.g., 1%) or increasing `SL Multiplier` for wider stops.
3. **Visual Analysis**: Watch the main chart for trade entry lines (green for buy, red for sell), stop-loss (red), and take-profit (green) lines with labels. Use the MACD pane below to confirm momentum shifts.
4. **Set Alerts**: Create alerts in TradingView for "Buy Signal" and "Sell Signal" to automate trades via Bitget webhooks.
5. **Backtest and Optimize**: Test the strategy on historical BTCUSDT Futures 1-minute data to fine-tune parameters. The short timeframe requires quick execution, so monitor closely for slippage or latency.
#### Tips for Success
- **Market Conditions**: This strategy performs best in trending markets on the 1-minute timeframe. Avoid choppy conditions where MACD crossovers may produce false signals.
- **Risk Management**: Start with the default 3% risk per trade and adjust downward (e.g., 1%) during volatile periods like BTCUSDT news events. The 3:1 risk:reward ratio targets consistent profitability.
- **Timeframe**: Optimized for 1-minute charts; switch to 5-minute or 15-minute for less noise if needed.
- **Confirmation**: Cross-check MACD signals with price action or support/resistance levels for higher accuracy on BTCUSDT Futures.
#### Limitations
- This strategy relies solely on MACD, so it may lag in fast-moving or sideways markets. Consider adding a secondary filter (e.g., RSI) if needed.
- Stop-loss and take-profit are ATR-based and may need adjustment for BTCUSDT Futures’ high volatility, especially during leverage trading.
#### Conclusion
The "MACD Strategy" offers a simple yet effective way to trade momentum shifts using the MACD indicator, tested for BTCUSDT Futures on the 1-minute timeframe, with robust risk management and visual tools. Whether you’re scalping crypto futures or exploring short-term trends, this strategy provides a solid foundation for automated or manual trading. Share your feedback or customizations in the comments, and happy trading!
HL2 Moving Average with BandsThis indicator is designed to assist traders in identifying potential trade entries and exits for S&P 500 (ES) and Nasdaq-100 (NQ) futures. It calculates a Simple Moving Average (SMA) based on the HL2 value (average of high and low prices) of the current candle over a user-defined lookback period (default: 200 periods). The indicator plots this SMA as a blue line, providing a smoothed reference for price trends.
Additionally, it includes upper and lower bands calculated as a percentage (default: 0.5%) above and below the SMA, plotted as green and red lines, respectively. These bands act as dynamic thresholds to identify overbought or oversold conditions. The indicator generates trade signals based on price action relative to these bands:
Long Entry: A green upward triangle is plotted below the candle when the close crosses above the upper band, signaling a potential buy.
Close Long: A red square is plotted above the candle when the close crosses back below the upper band, indicating an exit for the long position.
Short Entry: A red downward triangle is plotted above the candle when the close crosses below the lower band, signaling a potential sell.
Close Short: A green square is plotted below the candle when the close crosses back above the lower band, indicating an exit for the short position.
The script is customizable, allowing users to adjust the SMA length and band percentage to suit their trading style or market conditions. It is plotted as an overlay on the price chart for easy integration with other technical analysis tools.
Recommended Time Frame and Settings for Trading S&P 500 and Nasdaq-100 Futures
Based on research and market dynamics for S&P 500 (ES) and Nasdaq-100 (NQ) futures, the 5-minute chart is recommended as the optimal time frame for day trading with this indicator. This time frame strikes a balance between capturing intraday trends and filtering out excessive noise, which is critical for futures trading due to their high volatility and leverage. The 5-minute chart aligns well with periods of high liquidity and volatility, such as the U.S. market open (9:30 AM–11:00 AM EST) and the afternoon session (2:00 PM–4:00 PM EST), when institutional traders are most active.
Why 5-minute? It allows traders to react to short-term price movements while avoiding the rapid fluctuations of 1-minute charts, which can be prone to false signals in choppy markets. It also provides enough data points to make the SMA and bands meaningful without the lag associated with longer time frames like 15-minute or hourly charts.
Recommended Settings
SMA Length: Set to 200 periods. This longer lookback period smooths the HL2 data, reducing noise and providing a reliable trend reference for the 5-minute chart. A 200-period SMA helps identify significant trend shifts without being overly sensitive to minor price fluctuations.
Band Percentage: 0.5% is more suitable for the volatility of ES and NQ futures on a 5-minute chart, as it generates fewer but higher-probability signals. Wider bands (e.g., 1%) may miss short-term opportunities, while narrower bands (e.g., 0.1%) may produce excessive false signals.
Trading Session Recommendations
Futures markets for ES and NQ are open nearly 24 hours (Sunday 6:00 PM EST to Friday 5:00 PM EST, with a daily break from 4:00 PM–5:00 PM EST), but not all hours are equally optimal due to varying liquidity and volatility. The best times to trade with this indicator are:
U.S. Market Open (9:30 AM–11:00 AM EST): This period is characterized by high volume and volatility, driven by the opening of U.S. equity markets and economic data releases (e.g., 8:30 AM EST reports like CPI or GDP). The indicator’s signals are more reliable during this window due to strong order flow and price momentum.
Afternoon Session (2:00 PM–4:00 PM EST): After the lunchtime lull, volume picks up as institutional traders return, and news or FOMC announcements often drive price action. The indicator can capture breakout moves as prices test the upper or lower bands.
Pre-Market (7:30 AM–9:30 AM EST): For traders comfortable with lower liquidity, this period can offer opportunities, especially around 8:30 AM EST economic releases. However, use tighter risk management due to wider spreads and potential volatility spikes.
Additional Tips
Avoid Low-Volume Periods: Steer clear of trading during low-liquidity hours, such as the overnight session (11:00 PM–3:00 AM EST), when spreads widen and price movements can be erratic, leading to false signals from the indicator.
Combine with Other Tools: Enhance the indicator’s effectiveness by pairing it with support/resistance levels, Fibonacci retracements, or volume analysis to confirm signals. For example, a long entry signal above the upper band is stronger if it coincides with a breakout above a key resistance level.
Risk Management: Given the leverage in futures (e.g., Micro E-mini contracts require ~$1,200 margin for ES), use tight stop-losses (e.g., below the lower band for longs or above the upper band for shorts) to manage risk. Aim for a risk-reward ratio of at least 1:2.
Test Settings: Backtest the indicator on a demo account to optimize the SMA length and band percentage for your specific trading style and risk tolerance. Micro E-mini contracts (MES for S&P 500, MNQ for Nasdaq-100) are ideal for testing due to their lower capital requirements.
Why These Settings and Time Frame?
The 5-minute chart with a 200-period SMA and 0.5% bands is tailored for the volatility and liquidity of ES and NQ futures during peak trading hours. The longer SMA period ensures the indicator captures meaningful trends, while the 0.5% bands are tight enough to signal actionable breakouts but wide enough to avoid excessive whipsaws. Trading during high-volume sessions maximizes the likelihood of valid signals, as institutional participation drives clearer price action.
By focusing on these settings and time frames, traders can leverage the indicator to capitalize on the dynamic price movements of S&P 500 and Nasdaq-100 futures while managing the inherent risks of these markets.
Request█ OVERVIEW
This library is a tool for Pine Script™ programmers that consolidates access to a wide range of lesser-known data feeds available on TradingView, including metrics from the FRED database, FINRA short sale volume, open interest, and COT data. The functions in this library simplify requests for these data feeds, making them easier to retrieve and use in custom scripts.
█ CONCEPTS
Federal Reserve Economic Data (FRED)
FRED (Federal Reserve Economic Data) is a comprehensive online database curated by the Federal Reserve Bank of St. Louis. It provides free access to extensive economic and financial data from U.S. and international sources. FRED includes numerous economic indicators such as GDP, inflation, employment, and interest rates. Additionally, it provides financial market data, regional statistics, and international metrics such as exchange rates and trade balances.
Sourced from reputable organizations, including U.S. government agencies, international institutions, and other public and private entities, FRED enables users to analyze over 825,000 time series, download their data in various formats, and integrate their information into analytical tools and programming workflows.
On TradingView, FRED data is available from ticker identifiers with the "FRED:" prefix. Users can search for FRED symbols in the "Symbol Search" window, and Pine scripts can retrieve data for these symbols via `request.*()` function calls.
FINRA Short Sale Volume
FINRA (the Financial Industry Regulatory Authority) is a non-governmental organization that supervises and regulates U.S. broker-dealers and securities professionals. Its primary aim is to protect investors and ensure integrity and transparency in financial markets.
FINRA's Short Sale Volume data provides detailed information about daily short-selling activity across U.S. equity markets. This data tracks the volume of short sales reported to FINRA's trade reporting facilities (TRFs), including shares sold on FINRA-regulated Alternative Trading Systems (ATSs) and over-the-counter (OTC) markets, offering transparent access to short-selling information not typically available from exchanges. This data helps market participants, researchers, and regulators monitor trends in short-selling and gain insights into bearish sentiment, hedging strategies, and potential market manipulation. Investors often use this data alongside other metrics to assess stock performance, liquidity, and overall trading activity.
It is important to note that FINRA's Short Sale Volume data does not consolidate short sale information from public exchanges and excludes trading activity that is not publicly disseminated.
TradingView provides ticker identifiers for requesting Short Sale Volume data with the format "FINRA:_SHORT_VOLUME", where "" is a supported U.S. equities symbol (e.g., "AAPL").
Open Interest (OI)
Open interest is a cornerstone indicator of market activity and sentiment in derivatives markets such as options or futures. In contrast to volume, which measures the number of contracts opened or closed within a period, OI measures the number of outstanding contracts that are not yet settled. This distinction makes OI a more robust indicator of how money flows through derivatives, offering meaningful insights into liquidity, market interest, and trends. Many traders and investors analyze OI alongside volume and price action to gain an enhanced perspective on market dynamics and reinforce trading decisions.
TradingView offers many ticker identifiers for requesting OI data with the format "_OI", where "" represents a derivative instrument's ticker ID (e.g., "COMEX:GC1!").
Commitment of Traders (COT)
Commitment of Traders data provides an informative weekly breakdown of the aggregate positions held by various market participants, including commercial hedgers, non-commercial speculators, and small traders, in the U.S. derivative markets. Tallied and managed by the Commodity Futures Trading Commission (CFTC) , these reports provide traders and analysts with detailed insight into an asset's open interest and help them assess the actions of various market players. COT data is valuable for gaining a deeper understanding of market dynamics, sentiment, trends, and liquidity, which helps traders develop informed trading strategies.
TradingView has numerous ticker identifiers that provide access to time series containing data for various COT metrics. To learn about COT ticker IDs and how they work, see our LibraryCOT publication.
█ USING THE LIBRARY
Common function characteristics
• This library's functions construct ticker IDs with valid formats based on their specified parameters, then use them as the `symbol` argument in request.security() to retrieve data from the specified context.
• Most of these functions automatically select the timeframe of a data request because the data feeds are not available for all timeframes.
• All the functions have two overloads. The first overload of each function uses values with the "simple" qualifier to define the requested context, meaning the context does not change after the first script execution. The second accepts "series" values, meaning it can request data from different contexts across executions.
• The `gaps` parameter in most of these functions specifies whether the returned data is `na` when a new value is unavailable for request. By default, its value is `false`, meaning the call returns the last retrieved data when no new data is available.
• The `repaint` parameter in applicable functions determines whether the request can fetch the latest unconfirmed values from a higher timeframe on realtime bars, which might repaint after the script restarts. If `false`, the function only returns confirmed higher-timeframe values to avoid repainting. The default value is `true`.
`fred()`
The `fred()` function retrieves the most recent value of a specified series from the Federal Reserve Economic Data (FRED) database. With this function, programmers can easily fetch macroeconomic indicators, such as GDP and unemployment rates, and use them directly in their scripts.
How it works
The function's `fredCode` parameter accepts a "string" representing the unique identifier of a specific FRED series. Examples include "GDP" for the "Gross Domestic Product" series and "UNRATE" for the "Unemployment Rate" series. Over 825,000 codes are available. To access codes for available series, search the FRED website .
The function adds the "FRED:" prefix to the specified `fredCode` to construct a valid FRED ticker ID (e.g., "FRED:GDP"), which it uses in request.security() to retrieve the series data.
Example Usage
This line of code requests the latest value from the Gross Domestic Product series and assigns the returned value to a `gdpValue` variable:
float gdpValue = fred("GDP")
`finraShortSaleVolume()`
The `finraShortSaleVolume()` function retrieves EOD data from a FINRA Short Sale Volume series. Programmers can call this function to retrieve short-selling information for equities listed on supported exchanges, namely NASDAQ, NYSE, and NYSE ARCA.
How it works
The `symbol` parameter determines which symbol's short sale volume information is retrieved by the function. If the value is na , the function requests short sale volume data for the chart's symbol. The argument can be the name of the symbol from a supported exchange (e.g., "AAPL") or a ticker ID with an exchange prefix ("NASDAQ:AAPL"). If the `symbol` contains an exchange prefix, it must be one of the following: "NASDAQ", "NYSE", "AMEX", or "BATS".
The function constructs a ticker ID in the format "FINRA:ticker_SHORT_VOLUME", where "ticker" is the symbol name without the exchange prefix (e.g., "AAPL"). It then uses the ticker ID in request.security() to retrieve the available data.
Example Usage
This line of code retrieves short sale volume for the chart's symbol and assigns the result to a `shortVolume` variable:
float shortVolume = finraShortSaleVolume(syminfo.tickerid)
This example requests short sale volume for the "NASDAQ:AAPL" symbol, irrespective of the current chart:
float shortVolume = finraShortSaleVolume("NASDAQ:AAPL")
`openInterestFutures()` and `openInterestCrypto()`
The `openInterestFutures()` function retrieves EOD open interest (OI) data for futures contracts. The `openInterestCrypto()` function provides more granular OI data for cryptocurrency contracts.
How they work
The `openInterestFutures()` function retrieves EOD closing OI information. Its design is focused primarily on retrieving OI data for futures, as only EOD OI data is available for these instruments. If the chart uses an intraday timeframe, the function requests data from the "1D" timeframe. Otherwise, it uses the chart's timeframe.
The `openInterestCrypto()` function retrieves opening, high, low, and closing OI data for a cryptocurrency contract on a specified timeframe. Unlike `openInterest()`, this function can also retrieve granular data from intraday timeframes.
Both functions contain a `symbol` parameter that determines the symbol for which the calls request OI data. The functions construct a valid OI ticker ID from the chosen symbol by appending "_OI" to the end (e.g., "CME:ES1!_OI").
The `openInterestFutures()` function requests and returns a two-element tuple containing the futures instrument's EOD closing OI and a "bool" condition indicating whether OI is rising.
The `openInterestCrypto()` function requests and returns a five-element tuple containing the cryptocurrency contract's opening, high, low, and closing OI, and a "bool" condition indicating whether OI is rising.
Example usage
This code line calls `openInterest()` to retrieve EOD OI and the OI rising condition for a futures symbol on the chart, assigning the values to two variables in a tuple:
= openInterestFutures(syminfo.tickerid)
This line retrieves the EOD OI data for "CME:ES1!", irrespective of the current chart's symbol:
= openInterestFutures("CME:ES1!")
This example uses `openInterestCrypto()` to retrieve OHLC OI data and the OI rising condition for a cryptocurrency contract on the chart, sampled at the chart's timeframe. It assigns the returned values to five variables in a tuple:
= openInterestCrypto(syminfo.tickerid, timeframe.period)
This call retrieves OI OHLC and rising information for "BINANCE:BTCUSDT.P" on the "1D" timeframe:
= openInterestCrypto("BINANCE:BTCUSDT.P", "1D")
`commitmentOfTraders()`
The `commitmentOfTraders()` function retrieves data from the Commitment of Traders (COT) reports published by the Commodity Futures Trading Commission (CFTC). This function significantly simplifies the COT request process, making it easier for programmers to access and utilize the available data.
How It Works
This function's parameters determine different parts of a valid ticker ID for retrieving COT data, offering a streamlined alternative to constructing complex COT ticker IDs manually. The `metricName`, `metricDirection`, and `includeOptions` parameters are required. They specify the name of the reported metric, the direction, and whether it includes information from options contracts.
The function also includes several optional parameters. The `CFTCCode` parameter allows programmers to request data for a specific report code. If unspecified, the function requests data based on the chart symbol's root prefix, base currency, or quoted currency, depending on the `mode` argument. The call can specify the report type ("Legacy", "Disaggregated", or "Financial") and metric type ("All", "Old", or "Other") with the `typeCOT` and `metricType` parameters.
Explore the CFTC website to find valid report codes for specific assets. To find detailed information about the metrics included in the reports and their meanings, see the CFTC's Explanatory Notes .
View the function's documentation below for detailed explanations of its parameters. For in-depth information about COT ticker IDs and more advanced functionality, refer to our previously published COT library .
Available metrics
Different COT report types provide different metrics . The tables below list all available metrics for each type and their applicable directions:
+------------------------------+------------------------+
| Legacy (COT) Metric Names | Directions |
+------------------------------+------------------------+
| Open Interest | No direction |
| Noncommercial Positions | Long, Short, Spreading |
| Commercial Positions | Long, Short |
| Total Reportable Positions | Long, Short |
| Nonreportable Positions | Long, Short |
| Traders Total | No direction |
| Traders Noncommercial | Long, Short, Spreading |
| Traders Commercial | Long, Short |
| Traders Total Reportable | Long, Short |
| Concentration Gross LT 4 TDR | Long, Short |
| Concentration Gross LT 8 TDR | Long, Short |
| Concentration Net LT 4 TDR | Long, Short |
| Concentration Net LT 8 TDR | Long, Short |
+------------------------------+------------------------+
+-----------------------------------+------------------------+
| Disaggregated (COT2) Metric Names | Directions |
+-----------------------------------+------------------------+
| Open Interest | No Direction |
| Producer Merchant Positions | Long, Short |
| Swap Positions | Long, Short, Spreading |
| Managed Money Positions | Long, Short, Spreading |
| Other Reportable Positions | Long, Short, Spreading |
| Total Reportable Positions | Long, Short |
| Nonreportable Positions | Long, Short |
| Traders Total | No Direction |
| Traders Producer Merchant | Long, Short |
| Traders Swap | Long, Short, Spreading |
| Traders Managed Money | Long, Short, Spreading |
| Traders Other Reportable | Long, Short, Spreading |
| Traders Total Reportable | Long, Short |
| Concentration Gross LE 4 TDR | Long, Short |
| Concentration Gross LE 8 TDR | Long, Short |
| Concentration Net LE 4 TDR | Long, Short |
| Concentration Net LE 8 TDR | Long, Short |
+-----------------------------------+------------------------+
+-------------------------------+------------------------+
| Financial (COT3) Metric Names | Directions |
+-------------------------------+------------------------+
| Open Interest | No Direction |
| Dealer Positions | Long, Short, Spreading |
| Asset Manager Positions | Long, Short, Spreading |
| Leveraged Funds Positions | Long, Short, Spreading |
| Other Reportable Positions | Long, Short, Spreading |
| Total Reportable Positions | Long, Short |
| Nonreportable Positions | Long, Short |
| Traders Total | No Direction |
| Traders Dealer | Long, Short, Spreading |
| Traders Asset Manager | Long, Short, Spreading |
| Traders Leveraged Funds | Long, Short, Spreading |
| Traders Other Reportable | Long, Short, Spreading |
| Traders Total Reportable | Long, Short |
| Concentration Gross LE 4 TDR | Long, Short |
| Concentration Gross LE 8 TDR | Long, Short |
| Concentration Net LE 4 TDR | Long, Short |
| Concentration Net LE 8 TDR | Long, Short |
+-------------------------------+------------------------+
Example usage
This code line retrieves "Noncommercial Positions (Long)" data, without options information, from the "Legacy" report for the chart symbol's root, base currency, or quote currency:
float nonCommercialLong = commitmentOfTraders("Noncommercial Positions", "Long", false)
This example retrieves "Managed Money Positions (Short)" data, with options included, from the "Disaggregated" report:
float disaggregatedData = commitmentOfTraders("Managed Money Positions", "Short", true, "", "Disaggregated")
█ NOTES
• This library uses dynamic requests , allowing dynamic ("series") arguments for the parameters defining the context (ticker ID, timeframe, etc.) of a `request.*()` function call. With this feature, a single `request.*()` call instance can flexibly retrieve data from different feeds across historical executions. Additionally, scripts can use such calls in the local scopes of loops, conditional structures, and even exported library functions, as demonstrated in this script. All scripts coded in Pine Script™ v6 have dynamic requests enabled by default. To learn more about the behaviors and limitations of this feature, see the Dynamic requests section of the Pine Script™ User Manual.
• The library's example code offers a simple demonstration of the exported functions. The script retrieves available data using the function specified by the "Series type" input. The code requests a FRED series or COT (Legacy), FINRA Short Sale Volume, or Open Interest series for the chart's symbol with specific parameters, then plots the retrieved data as a step-line with diamond markers.
Look first. Then leap.
█ EXPORTED FUNCTIONS
This library exports the following functions:
fred(fredCode, gaps)
Requests a value from a specified Federal Reserve Economic Data (FRED) series. FRED is a comprehensive source that hosts numerous U.S. economic datasets. To explore available FRED datasets and codes, search for specific categories or keywords at fred.stlouisfed.org Calls to this function count toward a script's `request.*()` call limit.
Parameters:
fredCode (series string) : The unique identifier of the FRED series. The function uses the value to create a valid ticker ID for retrieving FRED data in the format `"FRED:fredCode"`. For example, `"GDP"` refers to the "Gross Domestic Product" series ("FRED:GDP"), and `"GFDEBTN"` refers to the "Federal Debt: Total Public Debt" series ("FRED:GFDEBTN").
gaps (simple bool) : Optional. If `true`, the function returns a non-na value only when a new value is available from the requested context. If `false`, the function returns the latest retrieved value when new data is unavailable. The default is `false`.
Returns: (float) The value from the requested FRED series.
finraShortSaleVolume(symbol, gaps, repaint)
Requests FINRA daily short sale volume data for a specified symbol from one of the following exchanges: NASDAQ, NYSE, NYSE ARCA. If the chart uses an intraday timeframe, the function requests data from the "1D" timeframe. Otherwise, it uses the chart's timeframe. Calls to this function count toward a script's `request.*()` call limit.
Parameters:
symbol (series string) : The symbol for which to request short sale volume data. If the specified value contains an exchange prefix, it must be one of the following: "NASDAQ", "NYSE", "AMEX", "BATS".
gaps (simple bool) : Optional. If `true`, the function returns a non-na value only when a new value is available from the requested context. If `false`, the function returns the latest retrieved value when new data is unavailable. The default is `false`.
repaint (simple bool) : Optional. If `true` and the chart's timeframe is intraday, the value requested on realtime bars may change its time offset after the script restarts its executions. If `false`, the function returns the last confirmed period's values to avoid repainting. The default is `true`.
Returns: (float) The short sale volume for the specified symbol or the chart's symbol.
openInterestFutures(symbol, gaps, repaint)
Requests EOD open interest (OI) and OI rising information for a valid futures symbol. If the chart uses an intraday timeframe, the function requests data from the "1D" timeframe. Otherwise, it uses the chart's timeframe. Calls to this function count toward a script's `request.*()` call limit.
Parameters:
symbol (series string) : The symbol for which to request open interest data.
gaps (simple bool) : Optional. If `true`, the function returns non-na values only when new values are available from the requested context. If `false`, the function returns the latest retrieved values when new data is unavailable. The default is `false`.
repaint (simple bool) : Optional. If `true` and the chart's timeframe is intraday, the value requested on realtime bars may change its time offset after the script restarts its executions. If `false`, the function returns the last confirmed period's values to avoid repainting. The default is `true`.
Returns: ( ) A tuple containing the following values:
- The closing OI value for the symbol.
- `true` if the closing OI is above the previous period's value, `false` otherwise.
openInterestCrypto(symbol, timeframe, gaps, repaint)
Requests opening, high, low, and closing open interest (OI) data and OI rising information for a valid cryptocurrency contract on a specified timeframe. Calls to this function count toward a script's `request.*()` call limit.
Parameters:
symbol (series string) : The symbol for which to request open interest data.
timeframe (series string) : The timeframe of the data request. If the timeframe is lower than the chart's timeframe, it causes a runtime error.
gaps (simple bool) : Optional. If `true`, the function returns non-na values only when new values are available from the requested context. If `false`, the function returns the latest retrieved values when new data is unavailable. The default is `false`.
repaint (simple bool) : Optional. If `true` and the `timeframe` represents a higher timeframe, the function returns unconfirmed values from the timeframe on realtime bars, which repaint when the script restarts its executions. If `false`, it returns only confirmed higher-timeframe values to avoid repainting. The default is `true`.
Returns: ( ) A tuple containing the following values:
- The opening, high, low, and closing OI values for the symbol, respectively.
- `true` if the closing OI is above the previous period's value, `false` otherwise.
commitmentOfTraders(metricName, metricDirection, includeOptions, CFTCCode, typeCOT, mode, metricType)
Requests Commitment of Traders (COT) data with specified parameters. This function provides a simplified way to access CFTC COT data available on TradingView. Calls to this function count toward a script's `request.*()` call limit. For more advanced tools and detailed information about COT data, see TradingView's LibraryCOT library.
Parameters:
metricName (series string) : One of the valid metric names listed in the library's documentation and source code.
metricDirection (series string) : Metric direction. Possible values are: "Long", "Short", "Spreading", and "No direction". Consult the library's documentation or code to see which direction values apply to the specified metric.
includeOptions (series bool) : If `true`, the COT symbol includes options information. Otherwise, it does not.
CFTCCode (series string) : Optional. The CFTC code for the asset. For example, wheat futures (root "ZW") have the code "001602". If one is not specified, the function will attempt to get a valid code for the chart symbol's root, base currency, or main currency.
typeCOT (series string) : Optional. The type of report to request. Possible values are: "Legacy", "Disaggregated", "Financial". The default is "Legacy".
mode (series string) : Optional. Specifies the information the function extracts from a symbol. Possible modes are:
- "Root": The function extracts the futures symbol's root prefix information (e.g., "ES" for "ESH2020").
- "Base currency": The function extracts the first currency from a currency pair (e.g., "EUR" for "EURUSD").
- "Currency": The function extracts the currency of the symbol's quoted values (e.g., "JPY" for "TSE:9984" or "USDJPY").
- "Auto": The function tries the first three modes (Root -> Base currency -> Currency) until it finds a match.
The default is "Auto". If the specified mode is not available for the symbol, it causes a runtime error.
metricType (series string) : Optional. The metric type. Possible values are: "All", "Old", "Other". The default is "All".
Returns: (float) The specified Commitment of Traders data series. If no data is available, it causes a runtime error.
MM Day Trader LevelsAs an intraday trader, there are certain key levels that I care about for short-term price action on every single chart. When I first began day trading, each morning I would painstakingly mark those key levels off on the charts I planned to trade each day. Depending on the number of charts I was watching, this would take up quite a bit of my time that I felt would have been much better spent doing other things. It also meant that those levels would often be left behind, and on later days I might be trading a symbol and get confused when a line appeared and I'd be paying attention to it only to later discover that it wasn't from prior day, but from some other day in the past when I had marked it off.
I looked all over TradingView to find indicators that did this automatically for me, and I found a lot of them. One by one I tried them, and inevitably I would always find that something was wrong with them. Often they didn't have all of the levels I wanted (so I would have to combine multiple indicators), but more often I found that the levels would be incorrect, or they would be buggy and not appear consistently, or they would not appear at the right time, or they would not work on futures! The list of problems went on and on. And the biggest issue I found was that nobody knew how to get session volume profile in an indicator.
So, over the course of a few years I figured out how to solve all of those problems and now I'm thrilled to present this free indicator for everyone like me who trades intraday and wants a clean consistent way to see the prior day levels that they care about automatically on every single chart (even futures). The levels the indicator provides are:
Yesterday High & Low
Value Area High & Low & Point of Control
Today's Open
Yesterday's Close (aka "Settlement" on futures)
Premarket High & Low (non-futures only)
Overnight High & Low (futures only)
These levels are extremely important, and I expect price to be reactive to them, so each level has a shaded background behind it so that the levels stand out against other lines you may have on your chart. I try to keep configuration as simple as possible, but there are configuration options that allow you to:
Hide any of the levels
Change the color for the levels
Shade the value area (or not)
Change the label text, size, type (basic label or plain text) and location (how far to the right of last candle to place the label
Adjust session volume profile value area volume & number of rows
The biggest advantage to this indicator over others on TradingView is how it handles session volume profile. When it comes to futures, TradingView does differentiate between regular trading hours and "electronic" trading hours on the charts, but their timeframes for those sessions are unusual, and they do not provide any programmatic way to differentiate between them. So, I created a whole new library for dealing with futures sessions that is fully integrated into both my Session Volume Profile library and this indicator, allowing me to bring you the best and only custom indicator available on TradingView that provides you with true regular session volume profile information across every type of symbol, including futures.
I'm incredibly proud of everything I've been able to provide with this indicator, and even more thrilled to say that I'm proud of how the indicator has been implemented. Once again releasing this indicator and all associated code for free and open source. I encourage you to take a look at the source code to see how it all works, take advantage of the free underlying libraries I created to make all of this possible: Session Library and Session Volume Profile Library.
Commitment of Traders: Total█ OVERVIEW
This indicator displays the Commitment of Traders (COT) totals data for futures markets.
█ CONCEPTS
Commitment of Traders (COT) data is tallied by the Commodity Futures Trading Commission (CFTC) , a US federal agency that oversees the trading of derivative markets such as futures in the US. It is weekly data that provides traders with information about open interest for an asset. The CFTC oversees derivative markets traded on different exchanges, so COT data is available for assets that can be traded on CBOT, CME, NYMEX, COMEX, and ICEUS.
A detailed description of the COT report can be found on the CFTC's website .
COT data is separated into three notable reports: Legacy, Disaggregated, and Financial. This indicator presents specific data from the COT Legacy report. The Total data details the positions held by various traders: Commercial Hedgers (traders registered with CFTC that use futures contracts in that particular commodity for hedging), Large Traders (traders registered with CFTC that do not hedge that particular commodity) and Small Traders (not registered with CFTC).
Our other COT indicators are:
• Commitment of Traders: Legacy Metrics
• Commitment of Traders: Disaggregated Metrics
• Commitment of Traders: Financial Metrics
█ HOW TO USE IT
Load the indicator on an active chart (see here if you don't know how).
By default, the indicator uses the chart's symbol to derive the COT data it displays. You can also specify a CFTC code in the "CFTC code" field of the script's inputs to display COT data from a symbol different than the chart's.
The rest of this section documents the script's input fields.
COT Selection Mode
This field's value determines how the script determines which COT data to return from the chart's symbol:
- "Root" uses the root of a futures symbol ("ES" for "ESH2020").
- "Base currency" uses the base currency in a forex pair ("EUR" for "EURUSD").
- "Currency" uses the quote currency, i.e., the currency the symbol is traded in ("JPY" for "TSE:9984" or "USDJPY").
- "Auto" tries all modes, in turn.
If no COT data can be found, a runtime error is generated.
Note that if the "CTFC Code" input field contains a code, it will override this input.
Futures/Options
Specifies the type of Commitment of Traders data to display: data concerning only Futures, only Options, or both.
Display
Determines the direction of the metrics requested from the CTFC report.
CTFC Code
Instead of letting the script generate the CFTC COT code from the chart and the "COT Selection Mode" input when this field is empty, you can specify an unrelated CFTC COT code here, e.g., 001602 for wheat futures.
Look first. Then leap.
Al Brooks_BarCount_Start from Opening🔹 Key Features
Counts from the RTH open every trading day
Stocks: 09:30–16:00 (New York Time)
Futures: 08:30–15:15 (Chicago Time)
Automatically detects stocks vs futures
Always displays the first bar of the session
Optional display every N bars to reduce chart clutter
Custom highlight rules
Highlight specific bar numbers (e.g. bar 18)
Highlight bar multiples (e.g. every 12 bars)
Fully customizable label size and colors
🔹 Why count from the open?
In Al Brooks’ Price Action framework:
The first 30–60 bars after the open often define the day’s structure
Trends, failed breakouts, and trading ranges frequently align with specific bar counts
Counting across overnight or pre-market sessions can distort intraday analysis
👉 This indicator resets precisely at the RTH open, keeping the count aligned with real trading decisions.
🔹 Inputs Overview
Display at every X bars
Show bar numbers at fixed intervals (bar 1 is always shown)
Count From RTH Open (Session Filter)
Limits counting strictly to regular trading hours (recommended ON)
Special Color Multiple
Highlights every N-th bar
Special Number 1 / 2
Highlights specific bar numbers
Label Size / Colors
Visual customization options
🔹 Markets Supported
✅ US index futures (ES, MES, NQ, MNQ, GC, CL – RTH)
✅ US stocks and indices (NYSE / NASDAQ)
❗ Not intended for 24h markets (e.g. crypto)
🔹 Usage Tips (Al Brooks Style)
Observe price behavior around early session bars (5–10)
Watch key counts like 12, 18, 24 for acceleration or failure
Combine with EMAs, trend lines, and trading-range highs/lows
Dynamic 5DMA/EMA with Color for Multiple Products🔹 Dynamic 5DMA/EMA with Slope-Based Coloring (All Timeframes)
This indicator plots a dynamic 5-period moving average that adapts intelligently to your chart's timeframe and product type — giving you a clean, slope-sensitive visual edge across intraday, daily, and weekly views.
✅ Key Features:
📈 Dynamic MA Length Scaling:
On intraday timeframes, the MA adjusts for your selected market session (RTH, ETH, VIX, or Futures), calculating a true 5-day average based on actual session length — not just a flat bar count.
🔄 Automatic Timeframe Detection:
Daily Chart: Uses standard 5DMA or 5EMA.
Weekly Chart: Applies a true 5-week MA.
Intraday Charts: Converts 5 days into bar-length equivalent dynamically.
🎨 Color-Coded Slope Logic:
Green = Rising MA (bullish slope)
Red = Falling MA (bearish slope)
Neutral slope = previous color held for visual continuity
No more guessing — direction is instantly clear.
⚠️ Built-In Slope Flip Alerts:
Set alerts when the slope of the MA turns up or down. Ideal for timing pullback entries or exits across any product.
⚙️ Session Settings for Proper Scaling:
Choose your product's market structure to ensure accurate 5-day conversion on intraday charts:
Stocks - RTH: 390 mins/day
Stocks - ETH: 780 mins/day
VIX: 855 mins/day
Futures: 1440 mins/day
This ensures the MA reflects 5 full trading days, regardless of session irregularities or bar interval.
📌 Why Use This Indicator?
Most MAs misrepresent trend direction on intraday charts because they assume static daily bar counts. This tool corrects that, then adds slope-based coloring to give you a fast, visual read on short-term momentum. Whether you’re swing trading SPY, scalping VIX, or position trading futures, this indicator keeps your view aligned with how institutions see moving averages across timeframes.
🔧 Best For:
VIX & volatility traders
Short-term SPY/SPX traders
Swing traders who value clean setups
Anyone wanting a true 5-day trend anchor on any chart






















