Master Trend Strategy - by jake_thebossMaster Trend Strategy
This strategy combines multiple technical indicators to identify high-probability trend entries across all asset classes.
Core Signal Logic:
Entry triggered when EMA 4 crosses above/below EMA 5
Confirmation required from RSI (>50 for long, <50 for short)
Price must be above/below key moving averages: EMA 21, SMA 50, EMA 55, EMA 89, and EMA 750
Additional confirmation from Stochastic (>52 bullish, <48 bearish) or EMA 89 breakout or VWAP cross
Key Features:
VWAP filter: Only takes bullish signals above VWAP and bearish signals below VWAP
Optional pyramiding: Allows multiple entries in the same direction (up to 200 orders)
Individual stop loss and take profit management for each pyramid level
Time filter: Customizable trading hours with timezone offset
Risk management: Adjustable stop loss (default 0.3%) and take profit (default 0.6%)
Visualization:
Entry, stop loss, and take profit levels drawn as horizontal lines
Customizable signal markers (triangles) for bull/bear entries
Optional EMA overlay display
The strategy is designed for trend-following on lower timeframes, with strict multi-indicator confirmation to filter out false signals.
Search in scripts for "TAKE"
AlgoWay GRSIM🧭 What this strategy tries to do
This strategy detects when a market move is losing strength and prepares for a potential reversal, but it waits for fresh momentum confirmation before acting.
It combines:
• RSI-based divergence (to spot exhaustion and potential turning points),
• Impulse MACD (to verify that the new direction actually has force behind it).
________________________________________
⚙️ When it takes trades
Long (Buy):
• A bullish RSI divergence appears (a clue that selling pressure is fading);
• Within a short time window, the Impulse MACD turns strongly positive;
• Optionally, the impulse line itself must be rising (if the Impulse Direction Filter is
enabled).
Short (Sell):
• A bearish RSI divergence appears (buying pressure fading);
• Within a short time window, the Impulse MACD turns strongly negative;
• Optionally, the impulse line must be falling (if the Impulse Direction Filter is enabled).
If momentum confirmation happens too late, the divergence “expires” and the signal is ignored.
________________________________________
🧩 How entries work
1. Reversal clue:
The strategy detects disagreement between price and RSI (price makes a new high/low, RSI doesn’t).
That suggests a shift in underlying strength.
2. Momentum confirmation:
Before entering, the Impulse MACD must agree — showing real push in the same direction.
3. Impulse direction filter (optional):
When enabled, the impulse itself must accelerate (rise for longs, fall for shorts), avoiding fake signals where price diverges but momentum is still fading.
4. No stacking:
It opens only one position at a time.
________________________________________
🚪 How exits work
Two main exit styles:
Conservative (default):
Longs close when impulse crosses below its signal line.
Shorts close when impulse crosses above its signal line.
✅ Keeps trades as long as momentum agrees.
Color-change (fast):
Longs close immediately when impulse flips bearish.
Shorts close immediately when impulse flips bullish.
⚡ Faster and more defensive.
Plus:
Stop Loss (%) and Take Profit (%) act as fixed-distance protective exits (set to 0 to disable either one).
________________________________________
📊 What you’ll see on the chart
A thick Impulse MACD line and thin signal line (oscillator view).
Diamonds — detected bullish/bearish divergence points.
Circles — where impulse crosses its signal (momentum change).
A performance panel (top-right) showing Net Profit, Trades, Win Rate, Profit Factor, Pessimistic PF, and Max Drawdown.
________________________________________
🔧 What you can tune
Signal Lifetime (bars): how long a divergence remains valid.
Impulse Direction Filter: ensure the impulse itself is moving in the trade’s direction.
Stop Loss / Take Profit (%): risk and target in percent.
Exit Style: conservative cross or faster color-change.
RSI / MA / Signal Lengths: adjust responsiveness (defaults are balanced).
________________________________________
💪 Strengths
Confirms reversals using momentum direction, not just divergence.
Avoids “early” signals where momentum is still fading.
Works symmetrically for longs and shorts.
Built-in stop/target protection.
Clear, visual confirmation of all logic components.
________________________________________
⚠️ Things to keep in mind
In sideways markets, the impulse can flip often — prefer conservative exits.
Too small SL/TP → constant stop-outs.
Too wide SL/TP → deep drawdowns.
Always test with different timeframes and markets.
________________________________________
💡 Practical tips
Start with default settings.
Enable “Use Impulse Direction Filter” in trending markets, disable it in very choppy ones.
Focus on Profit Factor, Win Rate, and Max Drawdown after several dozen trades.
Keep SL/TP roughly aligned with typical swing size.
“AlgoWay GRSIM” is a reversal-with-confirmation strategy: it spots likely turns, demands real momentum alignment (optionally verified by impulse direction), and manages exits with clear momentum cues plus built-in protective limits.
50% Fib Trend Cloud + ATR BandsThis indicator plots two structural 50% fibonacci midpoints from recent confirmed 'left/right' swings that form a *cloud* of equilibrium, then adds a rolling 50% fibonacci range midpoint based on a lookback window that's wrapped in ATR bands. Importantly, it solves a specific trading problem:
Structural midpoints (macro context) are powerful but can lag when price escapes prior ranges. Enter rolling 50% fib + ATR ➡️ which restores real-time balance & tolerance (micro context). Together they show where price is balanced structurally, where it’s balanced right now, and how much volatility to tolerate before acting.
➖➖➖
🔑 Why this is different
Most tools either draw a single midpoint (ex., daily 50%) or ATR bands around a moving average. This script fuses dual swing-based 50% midpoints (structure) + a rolling 50% with ATR (flow), so you don’t lose context when price escapes prior ranges. The cloud tells you who’s in control (fast vs. slow structure). The rolling 50% + ATR tells you how far is “too far” now.
➖➖➖
🧠 What it does (at a glance)
🔸Structural Equilibrium × 2 (Fib1/Fib2)
Two independent 50% midpoints formed from swing pivots (configurable Left/Right bars + optional smoothing). Their gap is the Midpoint Cloud = structural “fair value” zone.
🔸Rolling 50% + ATR Bands
A rolling highest/lowest window computes an always-current 50% rolling midpoint plot; ±ATR × length envelopes define a soft value area and over-stretch boundaries.
🔸Actionable Visuals
Optional fill between Fib1/Fib2, labels, and candle-overlay modes to instantly read regime (above both / below both / between).
🔸Smart Defaults
Timeframe-aware presets for L/R pivots & smoothing; full manual overrides available.
➖➖➖
⚙️ Calculations (plain-English)
🔸Pivot midpoints (Fib1 & Fib2):
1) Detect a swing using `Left/Right` bars
2) Take the swing’s high/low → compute 50%
3) (Optional) Smooth the line (SMA) to stabilize on noisy TFs
4) Repeat with a different sensitivity to get two distinct midpoints
🔸Rolling midpoint:
Highest High / Lowest Low over the last *N* bars → (HH + LL) / 2
🔸ATR levels:
`Upper = Rolling50 + ATR × Mult`, `Lower = Rolling50 − ATR × Mult`
(Typical: ATR length 14–21; Multipliers 2.236 for L1, 5.382 for L2)
➖➖➖
🤖 Auto-Configured Presets (with Manual Override)
💡Goal: make the midpoints “just work” on common timeframes while still letting you dial them in.
💡How Auto Presets work
When Auto Presets = ON, the script picks sensible L/R/S (Left bars / Right bars / Smoothing) for Fib Trend 1 and Fib Trend 2 based on chart timeframe.
🔸Fib 1 (fast) emphasizes *micro-structure* for quicker bias shifts.
🔸Fib 2 (slow) emphasizes *macro-structure* for anchor/bias context.
These defaults keep Fib 1 responsive without jitter and Fib 2 stable without lag.
➡️ Turn Auto Presets = OFF to take full control with the manual inputs described below.
➖➖➖
🛠 Manual Fib Midpoint Settings (when Auto = OFF)
💡Each midpoint uses three knobs:
🔸Pivot Left (L): bars to the left that must be lower/higher to qualify a swing
🔸Pivot Right (R): bars to the right that must be lower/higher to confirm the swing
🔸Smoothing (S): SMA period applied to the raw 50% midpoint (stabilizes noise)
5-Minute optimized defaults
🔸Fib Trend 1: `L21 / R5 / S55` → responsive local structure (entries/exits, re-balancing zones)
🔸Fib Trend 2: `L55 / R13 / S89` → broader structure (trend context, anchors/stops)
Timeframe guidance
🔸1m–3m: may feel a touch laggy → consider ~`L13 / R3 / S34`
🔸15m–1h: defaults remain strong → optionally ~`L34 / R8 / S89`
🔸4h+ : increase span for stability → `L89–144 / R13–21 / S144–233`
➡️ Rule of thumb: shorter L/R = faster detection, longer S = smoother line. Tune until Fib 1 captures the “active swing” and Fib 2 captures the “dominant swing” without whipsaw.
➖➖➖
🎛 Inputs (quick reference)
🔸Fib Trend 1/2: Source (High/Low/Close), Left/Right bars, Smoothing length, Show/Hide, Cloud fill toggle
🔸Rolling 50%: Lookback length, Price basis (Wicks/Close/HLC3/OHLC4), Plot scope (Full / Last N / None)
🔸ATR Bands: ATR length, Multipliers (L1/L2), Plot scope, Line width/colors
🔸Overlay & Labels: Candle overlay mode, Label padding/size, 50% centerline toggle, Plot widths
➖➖➖
🖍️ Candle Coloring & Overlay Modes
💡Purpose: make trend instantly visible on the candles and ATR levels.
1) Color Logic (dropdown)
🔸 Fib Midpoints — Colors by position of price vs. Fib 1 & Fib 2
🔸ATR Zones — Colors by which ATR zone price is in relative to the Rolling 50%
➡️ Price Reference: Choose the input used for the decision (Close, HL2, OHLC3, OHLC4).
➡️Tip: Close is crisp; HL2/OHLC variants are smoother.
2) Overlay Style (dropdown)
🔸 None — No visual change to candles
🔸 Bar Color — Uses `barcolor()` to tint built-in candles (this takes into account your Trading View settings, for instance if you have wicks set to white, they will show up as white with this setting)
🔸 PlotCandles — Draws unified custom candles (body, wick, border) with the same color for maximum clarity
💡Practical use
🔸 Pick Fib Midpoints to read structural bias at a glance (above/below/between the cloud).
🔸 Pick ATR Zones to read value vs. stretch around the Rolling 50% (mean-reversion vs. trend extension).
➖➖➖
📘 How to use
A) Trend confirmation
- Strong bullish bias when price holds above both structural mids; strong bearish when below both.
- Use the Rolling 50% + ATR as a dynamic re-entry zone: pullbacks that respect ATR(L1) often continue the prevailing trend.
B) Transition / mean reversion
- Inside the Cloud (between Fib1 & Fib2) treat behavior as neutralization/re-balancing; range tactics tend to outperform momentum plays.
- In ranges, fades near ±ATR around the rolling 50% can mark short-term edges.
C) Breakout context
- When price leaves the Cloud, the Rolling 50% keeps you anchored so price never feels “floating.” A clean hold outside ATR(L1/L2) suggests regime strength; quick re-entries hint at traps.
➖➖➖
🖼 Chart examples
➡️ Each snapshot shows how the Cloud (structure) and the Rolling 50% + ATR (flow) work together.
1) 1-Minute Downtrend – Cloud as Dynamic Ceiling
- The Cloud slopes down; pullbacks repeatedly fail under the Cloud’s underside.
- Rolling 50% (dashed mid) + ATR(L1) act as a reversion band: rallies stall near upper ATR and rotate lower.
2) 15-Minute Persistent Drift – Structure Guides, Flow Times Entries
- Long drift lower with Cloud overhead.
- Consolidations near the rolling mid resolve in the trend direction; ATR bands frame risk on each attempt.
3) 15-Minute Uptrend (BTC) – From Cloud Escape to Value Stair-Step
- After escaping the prior Cloud, rolling 50% + ATR establish a new higher value area.
- Pullbacks into ATR(L1) produce orderly stair-steps; Cloud remains supportive on deeper dips
4) 5-Minute BTC – Pullback to Value then Rotate
- Strong leg up; retrace tags lower ATR band and rotates back toward the rolling mid.
- Labels (Fib1/Fib2) make the structural context explicit for decision-making.
➖➖➖
🧪 Starter presets
- Intraday (5–15m): Fib1 ~ L21/R5 (smooth 5), Fib2 ~ L55/R13 (smooth 9) • Rolling = 55 • ATR = 14 • L1 = 2.5x, L2 = 5.0x
- Scalping: Shorten lookbacks & smoothing; keep ATR multipliers similar, or tighten L1.
- Swing: Lengthen all lookbacks; consider ATR length 21–28.
➖➖➖
🏁Final Word
This script is not just a visual tool, it’s a complete trend and structure framework. Whether you're looking for clean trend alignment, dynamic support/resistance, or early warning signs of a reversal, this system is tuned to help you react with confidence — not hindsight.
Rembember, no single indicator should be used in isolation. For best results, combine it with price action analysis, higher-timeframe context, and complementary tools like trendlines, moving averages etc Use it as part of a well-rounded trading approach to confirm setups — not to define them alone.
---
💡Turn logic into clarity. Structure into trades. And uncertainty into confidence.
Algo Trading Signals - Buy/Sell System# 📊 Algo Trading Signals - Dynamic Buy/Sell System
## 🎯 Overview
**Algo Trading Signals** is a sophisticated intraday trading indicator designed for algorithmic traders and active day traders. This system generates precise buy and sell signals based on a dynamic box breakout strategy with intelligent position management, add-on entries, and automatic target adjustment.
The indicator creates a reference price box during a specified time window (default: 9:15 AM - 9:45 AM IST) and generates high-probability signals when price breaks out of this range with confirmation.
---
## ✨ Key Features
### 📍 **Smart Signal Generation**
- **Primary Entry Signals**: Clear buy/sell signals on confirmed breakouts above/below the reference box
- **Confirmation Bars**: Reduces false signals by requiring multiple bar confirmation before entry
- **Cooldown System**: Prevents overtrading with configurable cooldown periods between trades
- **Add-On Positions**: Automatically identifies optimal pullback entries for scaling into positions
### 📦 **Dynamic Reference Box**
- Creates a high/low range during your chosen time window
- Automatically updates after each successful trade
- Visual box display with color-coded boundaries (red=resistance, green=support)
- Mid-level reference line for market structure analysis
### 🎯 **Intelligent Position Management**
- **Automatic Target Calculation**: Sets profit targets based on average move distance
- **Add-On System**: Up to 3 additional entries on optimal pullbacks
- **Position Tracking**: Monitors active trades and remaining add-on capacity
- **Auto Box Shift**: Adjusts reference box after target hits for continued trading
### 📊 **Visual Clarity**
- **Color-Coded Labels**:
- 🟢 Green for BUY signals
- 🔴 Red for SELL signals
- 🔵 Blue for ADD-ON buys
- 🟠 Orange for ADD-ON sells
- ✓ Yellow for Target hits
- **TP Level Lines**: Dotted lines showing current profit targets
- **Hover Tooltips**: Detailed information on entry prices, targets, and add-on numbers
### 📈 **Real-Time Statistics**
Live performance dashboard showing:
- Total buy and sell signals generated
- Number of add-on positions taken
- Take profit hits achieved
- Current trade status (LONG/SHORT/None)
- Cooldown timer status
### 🔔 **Comprehensive Alerts**
Built-in alert conditions for:
- Primary buy entry signals
- Primary sell entry signals
- Add-on buy positions
- Add-on sell positions
- Buy take profit hits
- Sell take profit hits
---
## 🛠️ Configuration Options
### **Time Settings**
- **Box Start Hour/Minute**: Define when to begin tracking the reference range
- **Box End Hour/Minute**: Define when to lock the reference box
- **Default**: 9:15 AM - 9:45 AM (IST) - Perfect for Indian market opening range
### **Trade Settings**
- **Target Points (TP)**: Average move distance for profit targets (default: 40 points)
- **Breakout Confirmation Bars**: Number of bars to confirm breakout (default: 2)
- **Cooldown After Trade**: Bars to wait after closing position (default: 3)
- **Add-On Distance Points**: Minimum pullback for add-on entry (default: 40 points)
- **Max Add-On Positions**: Maximum additional positions allowed (default: 3)
### **Display Options**
- Toggle buy/sell signal labels
- Show/hide trading box visualization
- Show/hide TP level lines
- Show/hide statistics table
---
## 💡 How It Works
### **Phase 1: Box Formation (9:15 AM - 9:45 AM)**
The indicator tracks the high and low prices during your specified time window to create a reference box representing the opening range.
### **Phase 2: Breakout Detection**
After the box is locked, the system monitors for:
- **Bullish Breakout**: Price closes above box high for confirmation bars
- **Bearish Breakout**: Price closes below box low for confirmation bars
### **Phase 3: Signal Generation**
When confirmation requirements are met:
- Entry signal is generated with clear visual label
- Target price is calculated (Entry ± Target Points)
- Position tracking activates
- Cooldown timer starts
### **Phase 4: Position Management**
During active trade:
- **Add-On Logic**: If price pulls back by specified distance but stays within favorable range, additional entry signal fires
- **Target Monitoring**: Continuously checks if price reaches TP level
- **Box Adjustment**: After TP hit, box automatically shifts to new range for next opportunity
### **Phase 5: Trade Exit & Reset**
On target hit:
- Position closes with TP marker
- Statistics update
- Box repositions for next setup
- Cooldown activates
- System ready for next signal
---
## 📌 Best Use Cases
### **Ideal For:**
- ✅ Intraday breakout trading strategies
- ✅ Algorithmic trading systems (via alerts/webhooks)
- ✅ Opening range breakout (ORB) strategies
- ✅ Index futures (Nifty, Bank Nifty, Sensex)
- ✅ High-liquidity stocks with clear ranges
- ✅ Automated trading bots
- ✅ Scalping and day trading
### **Markets:**
- Indian Stock Market (NSE/BSE)
- Futures & Options
- Forex pairs
- Cryptocurrency (adjust timing for 24/7 markets)
- Global indices
---
## ⚙️ Integration with Algo Trading
This indicator is **algo-ready** and can be integrated with automated trading systems:
1. **TradingView Alerts**: Set up alert conditions for each signal type
2. **Webhook Integration**: Connect alerts to trading platforms via webhooks
3. **API Automation**: Use with brokers supporting TradingView integration (Zerodha, Upstox, Interactive Brokers, etc.)
4. **Signal Data Access**: All signals are plotted for external data retrieval
---
## 📖 Quick Start Guide
1. **Add Indicator**: Apply to your chart (works best on 1-5 minute timeframes)
2. **Configure Time Window**: Set your desired box formation period
3. **Adjust Parameters**: Tune confirmation bars, targets, and add-on settings to your trading style
4. **Set Alerts**: Create alert conditions for automated notifications
5. **Backtest**: Review historical signals to validate strategy performance
6. **Go Live**: Enable alerts and start receiving real-time trading signals
---
## ⚠️ Risk Disclaimer
This indicator is a **tool for analysis** and does not guarantee profits. Trading involves substantial risk of loss. Always:
- Use proper position sizing
- Implement stop losses (not included in this indicator)
- Test thoroughly before live trading
- Understand market conditions
- Never risk more than you can afford to lose
- Consider your risk tolerance and trading experience
**Past performance does not indicate future results.**
## 🔄 Version History
**v1.0** - Initial Release
- Dynamic box formation system
- Confirmed breakout signals
- Add-on position management
- Visual signal labels and statistics
- Comprehensive alert system
- Auto-adjusting target boxes
---
## 📞 Support & Feedback
If you find this indicator helpful:
- ⭐ Please leave a like/favorite
- 💬 Share your feedback in comments
- 📊 Share your results and improvements
- 🤝 Suggest features for future updates
---
## 🏷️ Tags
`breakout` `daytrading` `signals` `algo` `automated` `intraday` `ORB` `opening-range` `buy-sell` `scalping` `futures` `nifty` `banknifty` `algorithmic` `box-strategy`
*Remember: The best indicator is combined with proper risk management and trading discipline.* Use it at your own rist, not as financial advie
CarolTradeLibLibrary "CarolTradeLib"
f_generateSignalID(strategyName)
Parameters:
strategyName (string)
f_buildJSON(orderType, action, symbol, price, strategyName, apiKey, additionalFields, indicatorJSON)
Parameters:
orderType (string)
action (string)
symbol (string)
price (float)
strategyName (string)
apiKey (string)
additionalFields (string)
indicatorJSON (string)
sendSignal(action, symbol, price, strategyName, apiKey, indicatorJSON)
Parameters:
action (string)
symbol (string)
price (float)
strategyName (string)
apiKey (string)
indicatorJSON (string)
marketOrder(action, symbol, price, strategyName, apiKey, stopLoss, takeProfit, rrRatio, size, indicatorJSON)
Parameters:
action (string)
symbol (string)
price (float)
strategyName (string)
apiKey (string)
stopLoss (float)
takeProfit (float)
rrRatio (float)
size (float)
indicatorJSON (string)
limitOrder(action, symbol, price, strategyName, apiKey, limitPrice, size, indicatorJSON)
Parameters:
action (string)
symbol (string)
price (float)
strategyName (string)
apiKey (string)
limitPrice (float)
size (float)
indicatorJSON (string)
stopLimitOrder(action, symbol, price, strategyName, apiKey, stopPrice, limitPrice, size, indicatorJSON)
Parameters:
action (string)
symbol (string)
price (float)
strategyName (string)
apiKey (string)
stopPrice (float)
limitPrice (float)
size (float)
indicatorJSON (string)
BOCS Channel Scalper Indicator - Mean Reversion Alert System# BOCS Channel Scalper Indicator - Mean Reversion Alert System
## WHAT THIS INDICATOR DOES:
This is a mean reversion trading indicator that identifies consolidation channels through volatility analysis and generates alert signals when price enters entry zones near channel boundaries. **This indicator version is designed for manual trading with comprehensive alert functionality.** Unlike automated strategies, this tool sends notifications (via popup, email, SMS, or webhook) when trading opportunities occur, allowing you to manually review and execute trades. The system assumes price will revert to the channel mean, identifying scalp opportunities as price reaches extremes and preparing to bounce back toward center.
## INDICATOR VS STRATEGY - KEY DISTINCTION:
**This is an INDICATOR with alerts, not an automated strategy.** It does not execute trades automatically. Instead, it:
- Displays visual signals on your chart when entry conditions are met
- Sends customizable alerts to your device/email when opportunities arise
- Shows TP/SL levels for reference but does not place orders
- Requires you to manually enter and exit positions based on signals
- Works with all TradingView subscription levels (alerts included on all plans)
**For automated trading with backtesting**, use the strategy version. For manual control with notifications, use this indicator version.
## ALERT CAPABILITIES:
This indicator includes four distinct alert conditions that can be configured independently:
**1. New Channel Formation Alert**
- Triggers when a fresh BOCS channel is identified
- Message: "New BOCS channel formed - potential scalp setup ready"
- Use this to prepare for upcoming trading opportunities
**2. Long Scalp Entry Alert**
- Fires when price touches the long entry zone
- Message includes current price, calculated TP, and SL levels
- Notification example: "LONG scalp signal at 24731.75 | TP: 24743.2 | SL: 24716.5"
**3. Short Scalp Entry Alert**
- Fires when price touches the short entry zone
- Message includes current price, calculated TP, and SL levels
- Notification example: "SHORT scalp signal at 24747.50 | TP: 24735.0 | SL: 24762.75"
**4. Any Entry Signal Alert**
- Combined alert for both long and short entries
- Use this if you want a single alert stream for all opportunities
- Message: "BOCS Scalp Entry: at "
**Setting Up Alerts:**
1. Add indicator to chart and configure settings
2. Click the Alert (⏰) button in TradingView toolbar
3. Select "BOCS Channel Scalper" from condition dropdown
4. Choose desired alert type (Long, Short, Any, or Channel Formation)
5. Set "Once Per Bar Close" to avoid false signals during bar formation
6. Configure delivery method (popup, email, webhook for automation platforms)
7. Save alert - it will fire automatically when conditions are met
**Alert Message Placeholders:**
Alerts use TradingView's dynamic placeholder system:
- {{ticker}} = Symbol name (e.g., NQ1!)
- {{close}} = Current price at signal
- {{plot_1}} = Calculated take profit level
- {{plot_2}} = Calculated stop loss level
These placeholders populate automatically, creating detailed notification messages without manual configuration.
## KEY DIFFERENCE FROM ORIGINAL BOCS:
**This indicator is designed for traders seeking higher trade frequency.** The original BOCS indicator trades breakouts OUTSIDE channels, waiting for price to escape consolidation before entering. This scalper version trades mean reversion INSIDE channels, entering when price reaches channel extremes and betting on a bounce back to center. The result is significantly more trading opportunities:
- **Original BOCS**: 1-3 signals per channel (only on breakout)
- **Scalper Indicator**: 5-15+ signals per channel (every touch of entry zones)
- **Trade Style**: Mean reversion vs trend following
- **Hold Time**: Seconds to minutes vs minutes to hours
- **Best Markets**: Ranging/choppy conditions vs trending breakouts
This makes the indicator ideal for active day traders who want continuous alert opportunities within consolidation zones rather than waiting for breakout confirmation. However, increased signal frequency also means higher potential commission costs and requires disciplined trade selection when acting on alerts.
## TECHNICAL METHODOLOGY:
### Price Normalization Process:
The indicator normalizes price data to create consistent volatility measurements across different instruments and price levels. It calculates the highest high and lowest low over a user-defined lookback period (default 100 bars). Current close price is normalized using: (close - lowest_low) / (highest_high - lowest_low), producing values between 0 and 1 for standardized volatility analysis.
### Volatility Detection:
A 14-period standard deviation is applied to the normalized price series to measure price deviation from the mean. Higher standard deviation values indicate volatility expansion; lower values indicate consolidation. The indicator uses ta.highestbars() and ta.lowestbars() to identify when volatility peaks and troughs occur over the detection period (default 14 bars).
### Channel Formation Logic:
When volatility crosses from a high level to a low level (ta.crossover(upper, lower)), a consolidation phase begins. The indicator tracks the highest and lowest prices during this period, which become the channel boundaries. Minimum duration of 10+ bars is required to filter out brief volatility spikes. Channels are rendered as box objects with defined upper and lower boundaries, with colored zones indicating entry areas.
### Entry Signal Generation:
The indicator uses immediate touch-based entry logic. Entry zones are defined as a percentage from channel edges (default 20%):
- **Long Entry Zone**: Bottom 20% of channel (bottomBound + channelRange × 0.2)
- **Short Entry Zone**: Top 20% of channel (topBound - channelRange × 0.2)
Long signals trigger when candle low touches or enters the long entry zone. Short signals trigger when candle high touches or enters the short entry zone. Visual markers (arrows and labels) appear on chart, and configured alerts fire immediately.
### Cooldown Filter:
An optional cooldown period (measured in bars) prevents alert spam by enforcing minimum spacing between consecutive signals. If cooldown is set to 3 bars, no new long alert will fire until 3 bars after the previous long signal. Long and short cooldowns are tracked independently, allowing both directions to signal within the same period.
### ATR Volatility Filter:
The indicator includes a multi-timeframe ATR filter to avoid alerts during low-volatility conditions. Using request.security(), it fetches ATR values from a specified timeframe (e.g., 1-minute ATR while viewing 5-minute charts). The filter compares current ATR to a user-defined minimum threshold:
- If ATR ≥ threshold: Alerts enabled
- If ATR < threshold: No alerts fire
This prevents notifications during dead zones where mean reversion is unreliable due to insufficient price movement. The ATR status is displayed in the info table with visual confirmation (✓ or ✗).
### Take Profit Calculation:
Two TP methods are available:
**Fixed Points Mode**:
- Long TP = Entry + (TP_Ticks × syminfo.mintick)
- Short TP = Entry - (TP_Ticks × syminfo.mintick)
**Channel Percentage Mode**:
- Long TP = Entry + (ChannelRange × TP_Percent)
- Short TP = Entry - (ChannelRange × TP_Percent)
Default 50% targets the channel midline, a natural mean reversion target. These levels are displayed as visual lines with labels and included in alert messages for reference when manually placing orders.
### Stop Loss Placement:
Stop losses are calculated just outside the channel boundary by a user-defined tick offset:
- Long SL = ChannelBottom - (SL_Offset_Ticks × syminfo.mintick)
- Short SL = ChannelTop + (SL_Offset_Ticks × syminfo.mintick)
This logic assumes channel breaks invalidate the mean reversion thesis. SL levels are displayed on chart and included in alert notifications as suggested stop placement.
### Channel Breakout Management:
Channels are removed when price closes more than 10 ticks outside boundaries. This tolerance prevents premature channel deletion from minor breaks or wicks, allowing the mean reversion setup to persist through small boundary violations.
## INPUT PARAMETERS:
### Channel Settings:
- **Nested Channels**: Allow multiple overlapping channels vs single channel
- **Normalization Length**: Lookback for high/low calculation (1-500, default 100)
- **Box Detection Length**: Period for volatility detection (1-100, default 14)
### Scalping Settings:
- **Enable Long Scalps**: Toggle long alert generation on/off
- **Enable Short Scalps**: Toggle short alert generation on/off
- **Entry Zone % from Edge**: Size of entry zone (5-50%, default 20%)
- **SL Offset (Ticks)**: Distance beyond channel for stop (1+, default 5)
- **Cooldown Period (Bars)**: Minimum spacing between alerts (0 = no cooldown)
### ATR Filter:
- **Enable ATR Filter**: Toggle volatility filter on/off
- **ATR Timeframe**: Source timeframe for ATR (1, 5, 15, 60 min, etc.)
- **ATR Length**: Smoothing period (1-100, default 14)
- **Min ATR Value**: Threshold for alert enablement (0.1+, default 10.0)
### Take Profit Settings:
- **TP Method**: Choose Fixed Points or % of Channel
- **TP Fixed (Ticks)**: Static distance in ticks (1+, default 30)
- **TP % of Channel**: Dynamic target as channel percentage (10-100%, default 50%)
### Appearance:
- **Show Entry Zones**: Toggle zone labels on channels
- **Show Info Table**: Display real-time indicator status
- **Table Position**: Corner placement (Top Left/Right, Bottom Left/Right)
- **Long Color**: Customize long signal color (default: darker green for readability)
- **Short Color**: Customize short signal color (default: red)
- **TP/SL Colors**: Customize take profit and stop loss line colors
- **Line Length**: Visual length of TP/SL reference lines (5-200 bars)
## VISUAL INDICATORS:
- **Channel boxes** with semi-transparent fill showing consolidation zones
- **Colored entry zones** labeled "LONG ZONE ▲" and "SHORT ZONE ▼"
- **Entry signal arrows** below/above bars marking long/short alerts
- **TP/SL reference lines** with emoji labels (⊕ Entry, 🎯 TP, 🛑 SL)
- **Info table** showing channel status, last signal, entry/TP/SL prices, risk/reward ratio, and ATR filter status
- **Visual confirmation** when alerts fire via on-chart markers synchronized with notifications
## HOW TO USE:
### For 1-3 Minute Scalping with Alerts (NQ/ES):
- ATR Timeframe: "1" (1-minute)
- ATR Min Value: 10.0 (for NQ), adjust per instrument
- Entry Zone %: 20-25%
- TP Method: Fixed Points, 20-40 ticks
- SL Offset: 5-10 ticks
- Cooldown: 2-3 bars to reduce alert spam
- **Alert Setup**: Configure "Any Entry Signal" for combined long/short notifications
- **Execution**: When alert fires, verify chart visuals, then manually place limit order at entry zone with provided TP/SL levels
### For 5-15 Minute Day Trading with Alerts:
- ATR Timeframe: "5" or match chart
- ATR Min Value: Adjust to instrument (test 8-15 for NQ)
- Entry Zone %: 20-30%
- TP Method: % of Channel, 40-60%
- SL Offset: 5-10 ticks
- Cooldown: 3-5 bars
- **Alert Setup**: Configure separate "Long Scalp Entry" and "Short Scalp Entry" alerts if you trade directionally based on bias
- **Execution**: Review channel structure on alert, confirm ATR filter shows ✓, then enter manually
### For 30-60 Minute Swing Scalping with Alerts:
- ATR Timeframe: "15" or "30"
- ATR Min Value: Lower threshold for broader market
- Entry Zone %: 25-35%
- TP Method: % of Channel, 50-70%
- SL Offset: 10-15 ticks
- Cooldown: 5+ bars or disable
- **Alert Setup**: Use "New Channel Formation" to prepare for setups, then "Any Entry Signal" for execution alerts
- **Execution**: Larger timeframes allow more analysis time between alert and entry
### Webhook Integration for Semi-Automation:
- Configure alert webhook URL to connect with platforms like TradersPost, TradingView Paper Trading, or custom automation
- Alert message includes all necessary order parameters (direction, entry, TP, SL)
- Webhook receives structured data when signal fires
- External platform can auto-execute based on alert payload
- Still maintains manual oversight vs full strategy automation
## USAGE CONSIDERATIONS:
- **Manual Discipline Required**: Alerts provide opportunities but execution requires judgment. Not all alerts should be taken - consider market context, trend, and channel quality
- **Alert Timing**: Alerts fire on bar close by default. Ensure "Once Per Bar Close" is selected to avoid false signals during bar formation
- **Notification Delivery**: Mobile/email alerts may have 1-3 second delay. For immediate execution, use desktop popups or webhook automation
- **Cooldown Necessity**: Without cooldown, rapidly touching price action can generate excessive alerts. Start with 3-bar cooldown and adjust based on alert volume
- **ATR Filter Impact**: Enabling ATR filter dramatically reduces alert count but improves quality. Track filter status in info table to understand when you're receiving fewer alerts
- **Commission Awareness**: High alert frequency means high potential trade count. Calculate if your commission structure supports frequent scalping before acting on all alerts
## COMPATIBLE MARKETS:
Works on any instrument with price data including stock indices (NQ, ES, YM, RTY), individual stocks, forex pairs (EUR/USD, GBP/USD), cryptocurrency (BTC, ETH), and commodities. Volume-based features are not included in this indicator version. Multi-timeframe ATR requires higher-tier TradingView subscription for request.security() functionality on timeframes below chart timeframe.
## KNOWN LIMITATIONS:
- **Indicator does not execute trades** - alerts are informational only; you must manually place all orders
- **Alert delivery depends on TradingView infrastructure** - delays or failures possible during platform issues
- **No position tracking** - indicator doesn't know if you're in a trade; you must manage open positions independently
- **TP/SL levels are reference only** - you must manually set these on your broker platform; they are not live orders
- **Immediate touch entry can generate many alerts** in choppy zones without adequate cooldown
- **Channel deletion at 10-tick breaks** may be too aggressive or lenient depending on instrument tick size
- **ATR filter from lower timeframes** requires TradingView Premium/Pro+ for request.security()
- **Mean reversion logic fails** in strong breakout scenarios - alerts will fire but trades may hit stops
- **No partial closing capability** - full position management is manual; you determine scaling out
- **Alerts do not account for gaps** or overnight price changes; morning alerts may be stale
## RISK DISCLOSURE:
Trading involves substantial risk of loss. This indicator provides signals for educational and informational purposes only and does not constitute financial advice. Past performance does not guarantee future results. Mean reversion strategies can experience extended drawdowns during trending markets. Alerts are not guaranteed to be profitable and should be combined with your own analysis. Stop losses may not fill at intended levels during extreme volatility or gaps. Never trade with capital you cannot afford to lose. Consider consulting a licensed financial advisor before making trading decisions. Always verify alerts against current market conditions before executing trades manually.
## ACKNOWLEDGMENT & CREDITS:
This indicator is built upon the channel detection methodology created by **AlgoAlpha** in the "Smart Money Breakout Channels" indicator. Full credit and appreciation to AlgoAlpha for pioneering the normalized volatility approach to identifying consolidation patterns. The core channel formation logic using normalized price standard deviation is AlgoAlpha's original contribution to the TradingView community.
Enhancements to the original concept include: mean reversion entry logic (vs breakout), immediate touch-based alert generation, comprehensive alert condition system with customizable notifications, multi-timeframe ATR volatility filtering, cooldown period for alert management, dual TP methods (fixed points vs channel percentage), visual TP/SL reference lines, and real-time status monitoring table. This indicator version is specifically designed for manual traders who prefer alert-based decision making over automated execution.
MC WITH ALERTS DINESH SETHIYAManipulation Candle (MC): A candlestick that initially suggests price movement in one direction but then reverses, manipulating liquidity and closing in the opposite direction.
Types of MCs:
Bullish MC: Takes out the previous candle's low, reverses, takes out the previous candle's high, and closes above it.
Bearish MC: Takes out the previous candle's high, reverses, takes out the previous candle's low, and closes below it.
Ideal MC Characteristic: The rejection wick (bottom wick for bullish MC, top wick for bearish MC) should be larger than the directional wick.
Katz Calypso Indicator (Refactored)Overview
The Katz Calypso Indicator is a comprehensive momentum oscillator designed to identify potential entry and exit points in the market. At its core, it uses the True Strength Index (TSI) to gauge the strength and direction of a trend. To enhance signal accuracy and reduce false positives, the indicator integrates several optional filters, including the Waddah Attar Explosion, an EMA filter, and an ATR filter. It also provides an optional RVGI-based exit signal system.
This tool is designed to provide a clear, visual representation of market momentum, with customizable filters to adapt to various trading styles and market conditions.
How to Use the Indicator
The indicator is displayed in a separate pane below the main price chart.
TSI Line (Blue): This is the main oscillator line. Its position relative to the zero line indicates the overall trend bias (above 0 is bullish, below is bearish).
Signal Line (Red): A moving average of the TSI line. Crossovers between the TSI and Signal Line are the primary triggers for trade signals.
Zero Line: The centerline of the oscillator. A cross of the Zero Line can indicate a significant shift in momentum.
Overbought/Oversold Levels: These user-defined levels (defaulting to 65 and -65) help identify potential exhaustion points in a trend, which can be used for taking profits.
On-Chart Signals: The indicator plots shapes directly on the chart to make signals easy to spot:
Green Triangles (Up): Indicate long entry or continuation signals.
Red Triangles (Down): Indicate short entry or continuation signals.
Yellow Triangles: Suggest taking profits.
Maroon/Lime Triangles: Indicate an exit based on a signal cross (like RVGI or the Zero Line).
Trading Rules
Long Trade Rules
Entry: A long trade is signaled when ALL of the following conditions are met:
The blue TSI Line crosses above the red Signal Line.
The blue TSI Line is above the 0 Zero Line.
All enabled filters (Waddah Attar, EMA, ATR) confirm bullish conditions.
A green triangle labeled "Long" will appear below the price.
Exit (Take Profit): A take-profit signal for a long trade is generated when either of these occurs:
The TSI Line crosses below the Overbought level.
The TSI Line crosses back below the Signal Line while still above zero.
A yellow triangle labeled "TPL" (Take Profit Long) will appear above the price.
Exit (Stop/Reverse): A signal to exit a long trade is generated when either of these occurs:
The TSI Line crosses below the 0 Zero Line.
The RVGI Exit filter is enabled and generates a bearish crossover signal.
A maroon triangle labeled "Exit Long" will appear above the price.
Short Trade Rules
Entry: A short trade is signaled when ALL of the following conditions are met:
The blue TSI Line crosses below the red Signal Line.
The blue TSI Line is below the 0 Zero Line.
All enabled filters (Waddah Attar, EMA, ATR) confirm bearish conditions.
A red triangle labeled "Short" will appear above the price.
Exit (Take Profit): A take-profit signal for a short trade is generated when either of these occurs:
The TSI Line crosses above the Oversold level.
The TSI Line crosses back above the Signal Line while still below zero.
A yellow triangle labeled "TPS" (Take Profit Short) will appear below the price.
Exit (Stop/Reverse): A signal to exit a short trade is generated when either of these occurs:
The TSI Line crosses above the 0 Zero Line.
The RVGI Exit filter is enabled and generates a bullish crossover signal.
A lime green triangle labeled "Exit Short" will appear below the price.
Optional Filters
You can enable or disable these filters in the indicator's settings to fine-tune its sensitivity.
Waddah Attar Explosion Filter: This filter measures trend strength and volatility. When enabled, it ensures that entries are only taken during periods of strong, confirmed momentum, helping to avoid sideways or choppy markets.
EMA Price Filter: A classic trend filter. When enabled, it will only allow long entries if the price is above the specified Exponential Moving Average and short entries only if the price is below it.
ATR Filter: This acts as a volatility-based filter to prevent chasing a move. It helps ensure that you are not entering a long trade when the price has already moved too far above its EMA, or vice-versa for a short trade.
RVGI Exit Filter: The Relative Vigor Index (RVGI) is used here exclusively as an exit signal. When enabled, a crossover of the RVGI and its signal line can provide an earlier exit signal before the TSI crosses the zero line, potentially locking in profits sooner.
Disclaimer: This indicator is provided for educational and informational purposes only. It is not financial advice. Trading carries a high level of risk, and you can lose more than your initial investment. You should use this indicator at your own risk and discretion. Always conduct your own research and consider your risk tolerance before making any trading decisions.
The Best Strategy Template[LuciTech]Hello Traders,
This is a powerful and flexible strategy template designed to help you create, backtest, and deploy your own custom trading strategies. This template is not a ready-to-use strategy but a framework that simplifies the development process by providing a wide range of pre-built features and functionalities.
What It Does
The LuciTech Strategy Template provides a robust foundation for building your own automated trading strategies. It includes a comprehensive set of features that are essential for any serious trading strategy, allowing you to focus on your unique trading logic without having to code everything from scratch.
Key Features
The LuciTech Strategy Template integrates several powerful features to enhance your strategy development:
•
Advanced Risk Management: This includes robust controls for defining your Risk Percentage per Trade, setting a precise Risk-to-Reward Ratio, and implementing an intelligent Breakeven Stop-Loss mechanism that automatically adjusts your stop to the entry price once a specified profit threshold is reached. These elements are crucial for capital preservation and consistent profitability.
•
Flexible Stop-Loss Options: The template offers adaptable stop-loss calculation methods, allowing you to choose between ATR-Based Stop-Loss, which dynamically adjusts to market volatility, and Candle-Based Stop-Loss, which uses structural price points from previous candles. This flexibility ensures the stop-loss strategy aligns with diverse trading styles.
•
Time-Based Filtering: Optimize your strategy's performance by restricting trading activity to specific hours of the day. This feature allows you to avoid unfavorable market conditions or focus on periods of higher liquidity and volatility relevant to your strategy.
•
Customizable Webhook Alerts: Stay informed with advanced notification capabilities. The template supports sending detailed webhook alerts in various JSON formats (Standard, Telegram, Concise Telegram) to external platforms, facilitating real-time monitoring and potential integration with automated trading systems.
•
Comprehensive Visual Customization: Enhance your analytical clarity with extensive visual options. You can customize the colors of entry, stop-loss, and take-profit lines, and effectively visualize market inefficiencies by displaying and customizing Fair Value Gap (FVG) boxes directly on your chart.
How It Does It
The LuciTech Strategy Template is meticulously crafted using Pine Script, TradingView's powerful and expressive programming language. The underlying architecture is designed for clarity and modularity, allowing for straightforward integration of your unique trading signals. At its core, the template operates by taking user-defined entry and exit conditions and then applying a sophisticated layer of risk management, position sizing, and trade execution logic.
For instance, when a longCondition or shortCondition is met, the template dynamically calculates the appropriate position size. This calculation is based on your specified risk_percent of equity and the stop_distance (the distance between your entry price and the calculated stop-loss level). This ensures that each trade adheres to your predefined risk parameters, a critical component of disciplined trading.
The flexibility in stop-loss calculation is achieved through a switch statement that evaluates the sl_type input. Whether you choose an ATR-based stop, which adapts to market volatility, or a candle-based stop, which uses structural price points, the template seamlessly integrates these methods. The ATR calculation itself is further refined by allowing various smoothing methods (RMA, SMA, EMA, WMA), providing granular control over how volatility is measured.
Time-based filtering is implemented by comparing the current bar's time with user-defined start_hour, start_minute, end_hour, and end_minute inputs. This allows the strategy to activate or deactivate trading during specific market sessions or periods of the day, a valuable tool for optimizing performance and avoiding unfavorable conditions.
Furthermore, the template incorporates advanced webhook alert functionality. When a trade is executed, a customizable JSON message is formatted based on your webhook_format selection (Standard, Telegram, or Concise Telegram) and sent via alert function. This enables seamless integration with external services for real-time notifications or even automated trade execution through third-party platforms.
Visual feedback is paramount for understanding strategy behavior. The template utilizes plot and fill functions to clearly display entry prices, stop-loss levels, and take-profit targets directly on the chart. Customizable colors for these elements, along with dedicated options for Fair Value Gap (FVG) boxes, enhance the visual analysis during backtesting and live trading, making it easier to interpret the strategy's actions.
How It's Original
The LuciTech Strategy Template distinguishes itself in the crowded landscape of TradingView scripts through its unique combination of integrated, advanced risk management features, highly flexible stop-loss methodologies, and sophisticated alerting capabilities, all within a user-friendly and modular framework. While many templates offer basic entry/exit signal integration, LuciTech goes several steps further by providing a robust, ready-to-use infrastructure for managing the entire trade lifecycle once a signal is generated.
Unlike templates that might require users to piece together various risk management components or code complex stop-loss logic from scratch, LuciTech offers these critical functionalities out-of-the-box. The inclusion of dynamic position sizing based on a user-defined risk percentage, a configurable risk-to-reward ratio, and an intelligent breakeven mechanism significantly elevates its utility. This comprehensive approach to capital preservation and profit targeting is a cornerstone of professional trading and is often overlooked or simplified in generic templates.
Furthermore, the template's provision for multiple stop-loss calculation types—ATR-based for volatility adaptation, and candle-based for structural support/resistance—demonstrates a deep understanding of diverse trading strategies. The underlying code for these calculations is already implemented, saving developers considerable time and effort. The subtle yet powerful inclusion of FVG (Fair Value Gap) related inputs also hints at advanced price action concepts, offering a sophisticated layer of analysis and execution that is not commonly found in general-purpose templates.
The advanced webhook alerting system, with its support for various JSON formats tailored for platforms like Telegram, showcases an originality in catering to the needs of modern, automated trading setups. This moves beyond simple TradingView pop-up alerts, enabling seamless integration with external systems for real-time trade monitoring and execution. This level of external connectivity and customizable data output is a significant differentiator.
In essence, the LuciTech Strategy Template is original not just in its individual features, but in how these features are cohesively integrated to form a powerful, opinionated, yet highly adaptable system. It empowers traders to focus their creative energy on developing their core entry/exit signals, confident that the underlying framework will handle the complexities of risk management, trade execution, and external communication with precision and flexibility. It's a comprehensive solution designed to accelerate the development of robust and professional trading strategies.
How to Modify the Logic to Apply Your Strategy
The LuciTech Strategy Template is designed with modularity in mind, making it exceptionally straightforward to integrate your unique trading strategy logic. The template provides a clear separation between the core strategy management (risk, position sizing, exits) and the entry signal generation. This allows you to easily plug in your own buy and sell conditions without altering the robust underlying framework.
Here’s a step-by-step guide on how to adapt the template to your specific trading strategy:
1.
Locate the Strategy Logic Section:
Open the Pine Script editor in TradingView and navigate to the section clearly marked with the comment //Strategy Logic Example:. This is where the template’s placeholder entry conditions (a simple moving average crossover) are defined.
2.
Define Your Custom Entry Conditions:
Within this section, you will find variables such as longCondition and shortCondition. These are boolean variables that determine when a long or short trade should be initiated. Replace the existing example logic with your own custom buy and sell conditions. Your conditions can be based on any combination of indicators, price action patterns, candlestick formations, or other market analysis techniques. For example, if your strategy involves a combination of RSI and MACD, you would define longCondition as (rsi > 50 and macd_line > signal_line) and shortCondition as (rsi < 50 and macd_line < signal_line).
3.
Leverage the Template’s Built-in Features:
Once your longCondition and shortCondition are defined, the rest of the template automatically takes over. The integrated risk management module will calculate the appropriate position size based on your Risk % input and the chosen Stop Loss Type. The Risk:Reward ratio will determine your take-profit levels, and the Breakeven at R feature will manage your stop-loss dynamically. The time filter (Use Time Filter) will ensure your trades only occur within your specified hours, and the webhook alerts will notify you of trade executions.
RSI MA Cross + Divergence Signal (V2) Core Logic
RSI + Moving Average
The script calculates a standard RSI (default 14).
It then overlays a moving average (SMA/EMA/WMA, default 9).
When RSI crosses above its MA → bullish momentum.
When RSI crosses below its MA → bearish momentum.
Divergence Filter
Signals are only valid if there’s confirmed divergence:
Bullish divergence: Price makes a lower low, RSI makes a higher low.
Bearish divergence: Price makes a higher high, RSI makes a lower high.
Overbought / Oversold Filter
Optional extra:
Bullish signals only valid if RSI ≤ 30 (oversold).
Bearish signals only valid if RSI ≥ 70 (overbought).
This ensures signals happen in “stretched” conditions.
Risk & Trade Management
Entries taken only when all conditions align.
Exits can be managed with ATR stops, partial take-profits, breakeven moves, and trailing stops (we coded these in the strategy version).
Cooldown, session filters, and daily loss guard to keep risk tight.
🔹 Strengths
✅ High selectivity: Combining RSI cross + divergence + OB/OS means signals are rare but higher quality.
✅ Great at catching reversals: Divergence highlights where price may be running out of steam.
✅ Risk management baked in: ATR stops + partial exits smooth out equity curve.
✅ Works across markets: ES, FX, crypto — anywhere RSI divergences are respected.
✅ Flexible: You can loosen/tighten filters depending on aggressiveness.
🔹 Weaknesses
❌ Lag from pivots: Divergence only confirms after a few bars → you enter late sometimes.
❌ Choppy in ranges: In sideways markets, RSI divergences appear often and whipsaw.
❌ Filters reduce signals: With all filters ON (divergence + OB/OS + trend + session), signals can be very rare — may under-trade.
❌ Not standalone: Needs higher-timeframe context (trend, liquidity pools) to avoid counter-trend entries.
🔹 Best Ways to Trade It
Use Higher Timeframe Bias
Run the strategy on 15m/1H, but only trade in direction of higher timeframe trend (e.g., 4H EMA).
Example: If daily is bullish → only take bullish divergences.
Pair With Structure
Look for signals at key zones: HTF support/resistance, VWAP, or FVGs.
Divergence + RSI cross inside an FVG is a strong entry trigger.
Adjust OB/OS for Volatility
For crypto/FX: use 35/65 instead of 30/70 (markets trend harder).
For ES/S&P: 30/70 works fine.
Risk Management Is King
Use partial exits: take profit at 1R, trail rest.
Size by % of equity (we coded this into the strategy).
Avoid News Spikes
Divergences break down around CPI, NFP, Fed announcements — stay flat.
🔹 When It Shines
Trending markets that make extended pushes → clean divergences.
Reversal zones (oversold → bullish bounce, overbought → bearish fade).
Swing trading (15m–4H) — less noise than 1m/5m scalping.
🔹 When to Avoid
Low volatility chop → lots of false divergences.
During high-impact news → RSI swings wildly.
In strong one-way trends without pullbacks — divergence keeps calling tops/bottoms too early.
✅ Summary:
This is a reversal-focused RSI divergence strategy with strict filters. It’s powerful when combined with higher-timeframe bias + structure confluence, but weak if traded blindly in choppy or news-driven conditions. Best to treat it as a precision entry trigger, not a full system — layer it on top of your FVG/ORB framework for maximum edge.
FiniteStateMachine🟩 OVERVIEW
A flexible framework for creating, testing and implementing a Finite State Machine (FSM) in your script. FSMs use rules to control how states change in response to events.
This is the first Finite State Machine library on TradingView and it's quite a different way to think about your script's logic. Advantages of using this vs hardcoding all your logic include:
• Explicit logic : You can see all rules easily side-by-side.
• Validation : Tables show your rules and validation results right on the chart.
• Dual approach : Simple matrix for straightforward transitions; map implementation for concurrent scenarios. You can combine them for complex needs.
• Type safety : Shows how to use enums for robustness while maintaining string compatibility.
• Real-world examples : Includes both conceptual (traffic lights) and practical (trading strategy) demonstrations.
• Priority control : Explicit control over which rules take precedence when multiple conditions are met.
• Wildcard system : Flexible pattern matching for states and events.
The library seems complex, but it's not really. Your conditions, events, and their potential interactions are complex. The FSM makes them all explicit, which is some work. However, like all "good" pain in life, this is front-loaded, and *saves* pain later, in the form of unintended interactions and bugs that are very hard to find and fix.
🟩 SIMPLE FSM (MATRIX-BASED)
The simple FSM uses a matrix to define transition rules with the structure: state > event > state. We look up the current state, check if the event in that row matches, and if it does, output the resulting state.
Each row in the matrix defines one rule, and the first matching row, counting from the top down, is applied.
A limitation of this method is that you can supply only ONE event.
You can design layered rules using widlcards. Use an empty string "" or the special string "ANY" for any state or event wildcard.
The matrix FSM is foruse where you have clear, sequential state transitions triggered by single events. Think traffic lights, or any logic where only one thing can happen at a time.
The demo for this FSM is of traffic lights.
🟩 CONCURRENT FSM (MAP-BASED)
The map FSM uses a more complex structure where each state is a key in the map, and its value is an array of event rules. Each rule maps a named condition to an output (event or next state).
This FSM can handle multiple conditions simultaneously. Rules added first have higher priority.
Adding more rules to existing states combines the entries in the map (if you use the supplied helper function) rather than overwriting them.
This FSM is for more complex scenarios where multiple conditions can be true simultaneously, and you need to control which takes precedence. Like trading strategies, or any system with concurrent conditions.
The demo for this FSM is a trading strategy.
🟩 HOW TO USE
Pine Script libraries contain reusable code for importing into indicators. You do not need to copy any code out of here. Just import the library and call the function you want.
For example, for version 1 of this library, import it like this:
import SimpleCryptoLife/FiniteStateMachine/1
See the EXAMPLE USAGE sections within the library for examples of calling the functions.
For more information on libraries and incorporating them into your scripts, see the Libraries section of the Pine Script User Manual.
🟩 TECHNICAL IMPLEMENTATION
Both FSM implementations support wildcards using blank strings "" or the special string "ANY". Wildcards match in this priority order:
• Exact state + exact event match
• Exact state + empty event (event wildcard)
• Empty state + exact event (state wildcard)
• Empty state + empty event (full wildcard)
When multiple rules match the same state + event combination, the FIRST rule encountered takes priority. In the matrix FSM, this means row order determines priority. In the map FSM, it's the order you add rules to each state.
The library uses user-defined types for the map FSM:
• o_eventRule : Maps a condition name to an output
• o_eventRuleWrapper : Wraps an array of rules (since maps can't contain arrays directly)
Everything uses strings for maximum library compatibility, though the examples show how to use enums for type safety by converting them to strings.
Unlike normal maps where adding a duplicate key overwrites the value, this library's `m_addRuleToEventMap()` method *combines* rules, making it intuitive to build rule sets without breaking them.
🟩 VALIDATION & ERROR HANDLING
The library includes comprehensive validation functions that catch common FSM design errors:
Error detection:
• Empty next states
• Invalid states not in the states array
• Duplicate rules
• Conflicting transitions
• Unreachable states (no entry/exit rules)
Warning detection:
• Redundant wildcards
• Empty states/events (potential unintended wildcards)
• Duplicate conditions within states
You can display validation results in tables on the chart, with tooltips providing detailed explanations. The helper functions to display the tables are exported so you can call them from your own script.
🟩 PRACTICAL EXAMPLES
The library includes four comprehensive demos:
Traffic Light Demo (Simple FSM) : Uses the matrix FSM to cycle through traffic light states (red → red+amber → green → amber → red) with timer events. Includes pseudo-random "break" events and repair logic to demonstrate wildcards and priority handling.
Trading Strategy Demo (Concurrent FSM) : Implements a realistic long-only trading strategy using BOTH FSM types:
• Map FSM converts multiple technical conditions (EMA crosses, gaps, fractals, RSI) into prioritised events
• Matrix FSM handles state transitions (idle → setup → entry → position → exit → re-entry)
• Includes position management, stop losses, and re-entry logic
Error Demonstrations : Both FSM types include error demos with intentionally malformed rules to showcase the validation system's capabilities.
🟩 BRING ON THE FUNCTIONS
f_printFSMMatrix(_mat_rules, _a_states, _tablePosition)
Prints a table of states and rules to the specified position on the chart. Works only with the matrix-based FSM.
Parameters:
_mat_rules (matrix)
_a_states (array)
_tablePosition (simple string)
Returns: The table of states and rules.
method m_loadMatrixRulesFromText(_mat_rules, _rulesText)
Loads rules into a rules matrix from a multiline string where each line is of the form "current state | event | next state" (ignores empty lines and trims whitespace).
This is the most human-readable way to define rules because it's a visually aligned, table-like format.
Namespace types: matrix
Parameters:
_mat_rules (matrix)
_rulesText (string)
Returns: No explicit return. The matrix is modified as a side-effect.
method m_addRuleToMatrix(_mat_rules, _currentState, _event, _nextState)
Adds a single rule to the rules matrix. This can also be quite readble if you use short variable names and careful spacing.
Namespace types: matrix
Parameters:
_mat_rules (matrix)
_currentState (string)
_event (string)
_nextState (string)
Returns: No explicit return. The matrix is modified as a side-effect.
method m_validateRulesMatrix(_mat_rules, _a_states, _showTable, _tablePosition)
Validates a rules matrix and a states array to check that they are well formed. Works only with the matrix-based FSM.
Checks: matrix has exactly 3 columns; no empty next states; all states defined in array; no duplicate states; no duplicate rules; all states have entry/exit rules; no conflicting transitions; no redundant wildcards. To avoid slowing down the script unnecessarily, call this method once (perhaps using `barstate.isfirst`), when the rules and states are ready.
Namespace types: matrix
Parameters:
_mat_rules (matrix)
_a_states (array)
_showTable (bool)
_tablePosition (simple string)
Returns: `true` if the rules and states are valid; `false` if errors or warnings exist.
method m_getStateFromMatrix(_mat_rules, _currentState, _event, _strictInput, _strictTransitions)
Returns the next state based on the current state and event, or `na` if no matching transition is found. Empty (not na) entries are treated as wildcards if `strictInput` is false.
Priority: exact match > event wildcard > state wildcard > full wildcard.
Namespace types: matrix
Parameters:
_mat_rules (matrix)
_currentState (string)
_event (string)
_strictInput (bool)
_strictTransitions (bool)
Returns: The next state or `na`.
method m_addRuleToEventMap(_map_eventRules, _state, _condName, _output)
Adds a single event rule to the event rules map. If the state key already exists, appends the new rule to the existing array (if different). If the state key doesn't exist, creates a new entry.
Namespace types: map
Parameters:
_map_eventRules (map)
_state (string)
_condName (string)
_output (string)
Returns: No explicit return. The map is modified as a side-effect.
method m_addEventRulesToMapFromText(_map_eventRules, _configText)
Loads event rules from a multiline text string into a map structure.
Format: "state | condName > output | condName > output | ..." . Pairs are ordered by priority. You can have multiple rules on the same line for one state.
Supports wildcards: Use an empty string ("") or the special string "ANY" for state or condName to create wildcard rules.
Examples: " | condName > output" (state wildcard), "state | > output" (condition wildcard), " | > output" (full wildcard).
Splits lines by \n, extracts state as key, creates/appends to array with new o_eventRule(condName, output).
Call once, e.g., on barstate.isfirst for best performance.
Namespace types: map
Parameters:
_map_eventRules (map)
_configText (string)
Returns: No explicit return. The map is modified as a side-effect.
f_printFSMMap(_map_eventRules, _a_states, _tablePosition)
Prints a table of map-based event rules to the specified position on the chart.
Parameters:
_map_eventRules (map)
_a_states (array)
_tablePosition (simple string)
Returns: The table of map-based event rules.
method m_validateEventRulesMap(_map_eventRules, _a_states, _a_validEvents, _showTable, _tablePosition)
Validates an event rules map to check that it's well formed.
Checks: map is not empty; wrappers contain non-empty arrays; no duplicate condition names per state; no empty fields in o_eventRule objects; optionally validates outputs against matrix events.
NOTE: Both "" and "ANY" are treated identically as wildcards for both states and conditions.
To avoid slowing down the script unnecessarily, call this method once (perhaps using `barstate.isfirst`), when the map is ready.
Namespace types: map
Parameters:
_map_eventRules (map)
_a_states (array)
_a_validEvents (array)
_showTable (bool)
_tablePosition (simple string)
Returns: `true` if the event rules map is valid; `false` if errors or warnings exist.
method m_getEventFromConditionsMap(_currentState, _a_activeConditions, _map_eventRules)
Returns a single event or state string based on the current state and active conditions.
Uses a map of event rules where rules are pre-sorted by implicit priority via load order.
Supports wildcards using empty string ("") or "ANY" for flexible rule matching.
Priority: exact match > condition wildcard > state wildcard > full wildcard.
Namespace types: series string, simple string, input string, const string
Parameters:
_currentState (string)
_a_activeConditions (array)
_map_eventRules (map)
Returns: The output string (event or state) for the first matching condition, or na if no match found.
o_eventRule
o_eventRule defines a condition-to-output mapping for the concurrent FSM.
Fields:
condName (series string) : The name of the condition to check.
output (series string) : The output (event or state) when the condition is true.
o_eventRuleWrapper
o_eventRuleWrapper wraps an array of o_eventRule for use as map values (maps cannot contain collections directly).
Fields:
a_rules (array) : Array of o_eventRule objects for a specific state.
VWAP Trend Strategy (Intraday) [KedarArc Quant]Description:
An intraday strategy that anchors to VWAP and only trades when a local EMA trend gate and a volume participation gate are both open. It offers two entry templates—Cross and Cross-and-Retest—with an optional Momentum Exception for impulsive moves. Exits combine a TrendBreak (structure flips) with an ATR emergency stop (risk cap).
Updates will be published under this script.
Why this merits a new script
This is not a simple “VWAP + EMA + ATR” overlay. The components are sequenced as gates and branches that *change the trade set* in ways a visual mashup cannot:
1. Trend Gate first (EMA fast vs. slow on the entry timeframe)
Counter-trend VWAP crosses are suppressed. Many VWAP scripts fire on every cross; here, no entry logic even evaluates unless the trend gate is open.
2. Participation Gate second (Volume SMA × multiplier)
This gate filters thin liquidity moves around VWAP. Without it, the same visuals would produce materially more false triggers.
3. Branching entries with structure awareness
* Cross: Immediate VWAP cross in the trend direction.
* Cross-and-Retest: Requires a revisit to VWAP vicinity within a lookback window (recent low near VWAP for longs; recent high for shorts). This explicitly removes first-touch fakeouts that a plain cross takes.
* Momentum Exception (optional): A quantified body% + volume condition can bypass the retest when flow is impulsive—intentional risk-timing, not “just another indicator.”
4. Dual exits that reference both anchor and structure
* TrendBreak: Close only when price loses VWAP and EMA alignment flips.
* ATR stop: Placed at entry to cap tail risk.
These exits complement the entry structure rather than being generic stop/target add-ons.
What it does
* Trades the session’s fair value anchor (VWAP), but only with local-trend agreement (EMA fast vs. slow) and sufficient participation (volume filter).
* Lets you pick Cross or Cross-and-Retest entries; optionally allow a fast Momentum Exception when candles expand with volume.
* Manages positions with a structure exit (TrendBreak) and an emergency ATR stop from entry.
How it works (concepts & calculations)
* VWAP (session anchor):
Standard VWAP of the active session; entries reference the cross and the retest proximity to VWAP.
* Trend gate:
Long context only if `EMA(fast) > EMA(slow)`; short only if `EMA(fast) < EMA(slow)`.
A *gate*, not a trigger—entries aren’t considered unless this is true.
* Participation (volume) gate:
Require `volume > SMA(volume, volLen) × volMult`.
Screens out low-participation wiggles around VWAP.
Entries:
* Cross: Price crosses VWAP in the trend direction while volume gate is open.
* Cross-and-Retest: After crossing, price revisits VWAP vicinity within `lookback` (recent *low near VWAP* for longs; recent *high near VWAP* for shorts).
* Momentum Exception (optional): If body% (|close−open| / range) and volume exceed thresholds, enter without waiting for the retest.
Exits:
* TrendBreak (structure):
* Longs close when `price < VWAP` and `EMA(fast) < EMA(slow)` (mirror for shorts).
* ATR stop (risk):
* From entry: `stop = entry ± ATR(atrLen) × atrMult`.
How to use it ?
1. Select market & timeframe: Intraday on liquid symbols (equities, futures, crypto).
2. Pick entry mode:
* Start with Cross-and-Retest for fewer, more selective signals.
* Enable Momentum Exception if strong moves leave without retesting.
3. Tune guards:
* Raise `volMult` to ignore thin periods; lower it for more activity.
* Adjust `lookback` if retests come late/early on your symbol.
4. Risk:
* `atrLen` and `atrMult` set the emergency stop distance.
5. Read results per session: Optional panel (if enabled) summarizes Net-R, Win%, and PF for today’s session to evaluate
behavior regime by regime.
⚠️ Disclaimer
This script is provided for educational purposes only.
Past performance does not guarantee future results.
Trading involves risk, and users should exercise caution and use proper risk management when applying this strategy.
Information-Geometric Market DynamicsInformation-Geometric Market Dynamics
The Information Field: A Geometric Approach to Market Dynamics
By: DskyzInvestments
Foreword: Beyond the Shadows on the Wall
If you have traded for any length of time, you know " the feeling ." It is the frustration of a perfect setup that fails, the whipsaw that stops you out just before the real move, the nagging sense that the chart is telling you only half the story. For decades, technical analysis has relied on interpreting the shadows—the patterns left behind by price. We draw lines on these shadows, apply indicators to them, and hope they reveal the future.
But what if we could stop looking at the shadows and, instead, analyze the object casting them?
This script introduces a new paradigm for market analysis: Information-Geometric Market Dynamics (IGMD) . The core premise of IGMD is that the price chart is merely a one-dimensional projection of a much richer, higher-dimensional reality—an " information field " generated by the collective actions and beliefs of all market participants.
This is not just another collection of indicators. It is a unified framework for measuring the geometry of the market's information field—its memory, its complexity, its uncertainty, its causal flows—and making high-probability decisions based on that deeper reality. By fusing advanced mathematical and informational concepts, IGMD provides a multi-faceted lens through which to view market behavior, moving beyond simple price action into the very structure of market information itself.
Prepare to move beyond the flatland of the price chart. Welcome to the information field.
The IGMD Framework: A Multi-Kernel Approach
What is a Kernel? The Heart of Transformation
In mathematics and data science, a kernel is a powerful and elegant concept. At its core, a kernel is a function that takes complex, often inscrutable data and transforms it into a more useful format. Think of it as a specialized lens or a mathematical "probe." You cannot directly measure abstract concepts like "market memory" or "trend quality" by looking at a price number. First, you must process the raw price data through a specific mathematical machine—a kernel—that is designed to output a measurement of that specific property. Kernels operate by performing a sort of "similarity test," projecting data into a higher-dimensional space where hidden patterns and relationships become visible and measurable.
Why do creators use them? We use kernels to extract features —meaningful pieces of information—that are not explicitly present in the raw data. They are the essential tools for moving beyond surface-level analysis into the very DNA of market behavior. A simple moving average can tell you the average price; a suite of well-chosen kernels can tell you about the character of the price action itself.
The Alchemist's Challenge: The Art of Fusion
Using a single kernel is a challenge. Using five distinct, computationally demanding mathematical engines in unison is an immense undertaking. The true difficulty—and artistry—lies not just in using one kernel, but in fusing the outputs of many . Each kernel provides a different perspective, and they can often give conflicting signals. One kernel might detect a strong trend, while another signals rising chaos and uncertainty. The IGMD script's greatest strength is its ability to act as this alchemist, synthesizing these disparate viewpoints through a weighted fusion process to produce a single, coherent picture of the market's state. It required countless hours of testing and calibration to balance the influence of these five distinct analytical engines so they work in harmony rather than cacophony.
The Five Kernels of Market Dynamics
The IGMD script is built upon a foundation of five distinct kernels, each chosen to probe a unique and critical dimension of the market's information field.
1. The Wavelet Kernel (The "Microscope")
What it is: The Wavelet Kernel is a signal processing function designed to decompose a signal into different frequency scales. Unlike a Fourier Transform that analyzes the entire signal at once, the wavelet slides across the data, providing information about both what frequencies are present and when they occurred.
The Kernels I Use:
Haar Kernel: The simplest wavelet, a square-wave shape defined by the coefficients . It excels at detecting sharp, sudden changes.
Daubechies 2 (db2) Kernel: A more complex and smoother wavelet shape that provides a better balance for analyzing the nuanced ebb and flow of typical market trends.
How it Works in the Script: This kernel is applied iteratively. It first separates the finest "noise" (detail d1) from the first level of trend (approximation a1). It then takes the trend a1 and repeats the process, extracting the next level of cycle (d2) and trend (a2), and so on. This hierarchical decomposition allows us to separate short-term noise from the long-term market "thesis."
2. The Hurst Exponent Kernel (The "Memory Gauge")
What it is: The Hurst Exponent is derived from a statistical analysis kernel that measures the "long-term memory" or persistence of a time series. It is the definitive measure of whether a series is trending (H > 0.5), mean-reverting (H < 0.5), or random (H = 0.5).
How it Works in the Script: The script employs a method based on Rescaled Range (R/S) analysis. It calculates the average range of price movements over increasingly larger time lags (m1, m2, m4, m8...). The slope of the line plotting log(range) vs. log(lag) is the Hurst Exponent. Applying this complex statistical analysis not to the raw price, but to the clean, wavelet-decomposed trend lines, is a key innovation of IGMD.
3. The Fractal Dimension Kernel (The "Complexity Compass")
What it is: This kernel measures the geometric complexity or "jaggedness" of a price path, based on the principles of fractal geometry. A straight line has a dimension of 1; a chaotic, space-filling line approaches a dimension of 2.
How it Works in the Script: We use a version based on Ehlers' Fractal Dimension Index (FDI). It calculates the rate of price change over a full lookback period (N3) and compares it to the sum of the rates of change over the two halves of that period (N1 + N2). The formula d = (log(N1 + N2) - log(N3)) / log(2) quantifies how much "longer" and more convoluted the price path was than a simple straight line. This kernel is our primary filter for tradeable (low complexity) vs. untradeable (high complexity) conditions.
4. The Shannon Entropy Kernel (The "Uncertainty Meter")
What it is: This kernel comes from Information Theory and provides the purest mathematical measure of information, surprise, or uncertainty within a system. It is not a measure of volatility; a market moving predictably up by 10 points every bar has high volatility but zero entropy .
How it Works in the Script: The script normalizes price returns by the ATR, categorizes them into a discrete number of "bins" over a lookback window, and forms a probability distribution. The Shannon Entropy H = -Σ(p_i * log(p_i)) is calculated from this distribution. A low H means returns are predictable. A high H means returns are chaotic. This kernel is our ultimate gauge of market conviction.
5. The Transfer Entropy Kernel (The "Causality Probe")
What it is: This is by far the most advanced and computationally intensive kernel in the script. Transfer Entropy is a non-parametric measure of directed information flow between two time series. It moves beyond correlation to ask: "Does knowing the past of Volume genuinely reduce our uncertainty about the future of Price?"
How it Works in the Script: To make this work, the script discretizes both price returns and the chosen "driver" (e.g., OBV) into three states: "up," "down," or "neutral." It then builds complex conditional probability tables to measure the flow of information in both directions. The Net Transfer Entropy (TE Driver→Price minus TE Price→Driver) gives us a direct measure of causality . A positive score means the driver is leading price, confirming the validity of the move. This is a profound leap beyond traditional indicator analysis.
Chapter 3: Fusion & Interpretation - The Field Score & Dashboard
Each kernel is a specialist providing a piece of the puzzle. The Field Score is where they are fused into a single, comprehensive reading. It's a weighted sum of the normalized scores from all five kernels, producing a single number from -1 (maximum bearish information field) to +1 (maximum bullish information field). This is the ultimate "at-a-glance" metric for the market's net state, and it is interpreted through the dashboard.
The Dashboard: Your Mission Control
Field Score & Regime: The master metric and its plain-English interpretation ("Uptrend Field", "Downtrend Field", "Transitional").
Kernel Readouts (Wave Align, H(w), FDI, etc.): The live scores of each individual kernel. This allows you to see why the Field Score is what it is. A high Field Score with all components in agreement (all green or red) is a state of High Coherence and represents a high-quality setup.
Market Context: Standard metrics like RSI and Volume for additional confluence.
Signals: The raw and adjusted confluence counts and the final, calculated probability scores for potential long and short entries.
Pattern: Shows the dominant candlestick pattern detected within the currently forming APEX range box and its calculated confidence percentage.
Chapter 4: Mastering the Controls - The Inputs Menu
Every parameter is a lever to fine-tune the IGMD engine.
📊 Wavelet Transform: Kernel ( Haar for sharp moves, db2 for smooth trends) and Scales (depth of analysis) let you tune the script's core microscope to your asset's personality.
📈 Hurst Exponent: The Window determines if you're assessing short-term or long-term market memory.
🔍 Fractal Dimension & ⚡ Entropy Volatility: Adjust the lookback windows to make these kernels more or less sensitive to recent price action. Always keep "Normalize by ATR" enabled for Entropy for consistent results.
🔄 Transfer Entropy: Driver lets you choose what causal force to measure (e.g., OBV, Volume, or even an external symbol like VIX). The throttle setting is a crucial performance tool, allowing you to balance precision with script speed.
⚡ Field Fusion • Weights: This is where you can customize the model's "brain." Increase the weights for the kernels that best align with your trading philosophy (e.g., w_hurst for trend followers, w_fdi for chop avoiders).
📊 Signal Engine: Mode offers presets from Conservative to Aggressive . Min Confluence sets your evidence threshold. Dynamic Confluence is a powerful feature that automatically adapts this threshold to the market regime.
🎨 Visuals & 📏 Support/Resistance: These inputs give you full control over the chart's appearance, allowing you to toggle every visual element for a setup that is as clean or as data-rich as you desire.
Chapter 5: Reading the Battlefield - On-Chart Visuals
Pattern Boxes (The Large Rectangles): These are not simple range boxes. They appear when the Field Score crosses a significance threshold, signaling a potential ignition point.
Color: The color reflects the dominant candlestick pattern that has occurred within that box's duration (e.g., green for Bull Engulf).
Label: Displays the dominant pattern, its duration in bars, and a calculated Confidence % based on field strength and pattern clarity.
Bar Pattern Boxes (The Small Boxes): If enabled, these highlight individual, significant candlestick patterns ( BE for Bull Engulf, H for Hammer) on a bar-by-bar basis.
Signal Markers (▲ and ▼): These appear only when the Signal Engine's criteria are all met. The number is the calculated Probability Score .
RR Rails (Dashed Lines): When a signal appears, these lines automatically plot the Entry, Stop Loss (based on ATR), and two Take Profit targets (based on Risk/Reward ratios). They dynamically break and disappear as price touches each level.
Support & Resistance Lines: Plots of the highest high ( Resistance ) and lowest low ( Support ) over a lookback, providing key structural levels.
Chapter 6: Development Philosophy & A Final Word
One single question: " What is the market really doing? " It represents a triumph of complexity, blending concepts from signal processing, chaos theory, and information theory into a cohesive framework. It is offered for educational and analytical purposes and does not constitute financial advice. Its goal is to elevate your analysis from interpreting flat shadows to measuring the rich, geometric reality of the market's information field.
As the great mathematician Benoit Mandelbrot , father of fractal geometry, noted:
"Clouds are not spheres, mountains are not cones, coastlines are not circles, and bark is not smooth, nor does lightning travel in a straight line."
Neither does the market. IGMD is a tool designed to navigate that beautiful, complex, and fractal reality.
— Dskyz, Trade with insight. Trade with anticipation.
ABS Companion Oscillator — Trend / Exhaustion / New Trend (v1.1)
# ABS Companion Oscillator — Trend / Exhaustion / New Trend (v1.1)
## What it is (quick take)
**ABS CO** is a unified **–100…+100 trend oscillator** that fuses:
* **Regime**: EMA stack (fast/slow/long) + **HTF slope** (e.g., 60-minute)
* **Momentum**: **TSI** vs its signal
* **Stretch**: session-anchored **VWAP Z-score** for exhaustion and “fresh-trend” sanity checks
It paints the oscillator with **lime** in upstate, **red** in downstate, **gray** in neutral, and tags:
* **NEW↑ / NEW↓** when a **new trend** likely starts (zero-line cross with acceptable stretch)
* **EXH↑ / EXH↓** when an **existing trend looks exhausted** (large |Z| + momentum rollback)
> Use it as a **direction filter and context layer**. Works great in front of an entry engine and behind an exit tool.
---
## How to use it (operational workflow)
1. **Read the state**
* **Uptrend** when the oscillator is **≥ upThresh** (default +55) → prefer **long-side** plays.
* **Downtrend** when the oscillator is **≤ dnThresh** (default −55) → prefer **short-side** plays.
* **Neutral** between thresholds → be selective or flat; expect chop.
2. **Act on events**
* **NEW↑ / NEW↓**: zero-line cross with acceptable |Z| (not already overstretched). Treat as **trend start** cues.
* **EXH↑ / EXH↓**: trend state with **high |Z|** and TSI rollback versus its signal. Treat as **trend fatigue**; avoid fresh go-with entries and tighten risk.
3. **Practical pairing**
* Use **up/down state** (or above/below **neutralBand**) as your go/no-go filter for entries.
* Prioritize entries **with** NEW↑/NEW↓ and **without** nearby EXH tags.
* Keep holding while the oscillator stays in state and no EXH appears; consider scaling out on EXH or on your exit tool.
---
## Visual semantics & alerts
* **ABS CO line** (–100…+100): lime in upstate, red in downstate, gray in neutral.
* **Horizontal guides**: `Up` threshold, `Down` threshold, `Zero`, and optional **neutral band** lines.
* **Background heat** (optional): shaded when EXH conditions trigger (lime/red tint with intensity scaled by |Z|).
* **Tags**: `NEW↑`, `NEW↓`, `EXH↑`, `EXH↓`.
**Alerts (stable):**
* **ABS CO — New Uptrend** (NEW↑)
* **ABS CO — New Downtrend** (NEW↓)
* **ABS CO — Exhausted Up** (EXH↑)
* **ABS CO — Exhausted Down** (EXH↓)
Set alerts to **“Once per bar close”** for clean signals.
---
## Non-repainting behavior
* HTF queries use **lookahead\_off**.
* With **Strict NR = true**, the HTF slope is taken from the **prior completed** HTF bar; events evaluate on confirmed bars → **safer, fewer, cleaner**.
* NEW/EXH tags finalize at bar close. Disabling strictness yields earlier but noisier responses.
---
## Every input explained (and how it changes behavior)
### A) Trend & HTF structure
* **EMA Fast / Slow / Long (`emaFastLen`, `emaSlowLen`, `emaLongLen`)**
Control the baseline regime. Larger = smoother, fewer flips; smaller = snappier, more flips.
* **HTF EMA Len (`htfLen`)** & **HTF timeframe (`htfTF`)**
HTF slope filter. Longer len or higher TF = steadier bias (fewer state changes); shorter/ lower = more sensitive.
* **Strict NR (`strictNR`)**
`true` uses the **previous** HTF bar for slope and evaluates on confirmed bars → cleaner, slower.
### B) Momentum (TSI)
* **TSI Long / Short / Signal (`tsiLong`, `tsiShort`, `tsiSig`)**
Standard TSI. Larger values = smoother momentum, fewer EXH triggers; smaller = snappier, more EXH sensitivity.
### C) Stretch (VWAP Z-score)
* **VWAP Z-score length (`zLen`)**
Window for Z over session-anchored VWAP distance. Larger = smoother |Z|; smaller = more reactive stretch detection.
* **Exhaustion |Z| (`zHot`)**
Minimum |Z| to flag **EXH**. Raise to demand **bigger** stretch (fewer EXH); lower to catch milder excess.
* **Max |Z| for NEW (`zNewMax`)**
NEW requires |Z| **≤ zNewMax** (avoid “new trend” when already stretched). Lower = stricter; higher = more NEW tags.
### D) States & thresholds
* **Uptrend threshold (`upThresh`)** / **Downtrend threshold (`dnThresh`)**
Where the oscillator flips into trend states. Widen (e.g., +60/−60) to reduce false states; narrow to get earlier signals.
* **Neutral band (`neutralBand`)**
Visual buffer around zero for “meh” momentum. Larger band = fewer go/no-go flips near zero.
### E) Visuals & tags
* **Show New / Show Exhausted (`showNew`, `showExh`)**
Toggle the tag labels.
* **Shade exhaustion heat (`plotHeat`)**
On = color background when EXH fires. Helpful for scanning.
### F) Smoothing
* **Osc smoothing (`smoothLen`)**
EMA over the raw composite. Higher = steadier line (fewer whip flips); lower = faster turns.
---
## Tuning recipes
* **Trend-day bias (follow moves longer)**
* Raise **`upThresh`** to \~60 and **`dnThresh`** to \~−60
* Keep **`zNewMax`** low (1.0–1.2) to avoid “fresh trend” when stretched
* **`smoothLen`** 3–5 to reduce noise
* **Range-day bias (fade edges)**
* Keep thresholds closer (e.g., +50/−50) for quicker state changes
* Lower **`zHot`** slightly (1.6–1.7) to catch earlier exhaustion
* Consider slightly shorter TSI (e.g., 21/9/5) for faster EXH response
* **Scalping LTF (1–3m)**
* TSI 21/9/5, **`smoothLen`** 1–2
* Thresholds +/-50; **`zNewMax`** 1.0–1.2; **`zHot`** 1.6–1.8
* StrictNR **off** if you want earlier calls (accept more noise)
* **Swing / HTF (1h–D)**
* TSI 35/21/9, **`smoothLen`** 4–7
* Thresholds +/-60\~65; **`zNewMax`** 1.2; **`zHot`** 1.8–2.0
* StrictNR **on** for cleaner bias
---
## Playbooks (how to actually trade it)
* **Go/No-Go Filter**
* Only take **long entries** when the oscillator is **above the neutral band** (preferably ≥ `upThresh`).
* Only take **short entries** when **below** the neutral band (preferably ≤ `dnThresh`).
* Avoid fresh go-with entries if an **EXH** tag appears; let the next setup re-arm.
* **Trend Genesis**
* Treat **NEW↑ / NEW↓** as “green light” for **first pullback** entries in the new direction (ideally within acceptable |Z|).
* **Trend Maturity**
* When in a position and **EXH** prints **against** you, tighten stops, take partials, or lean on your exit tool to protect gains.
---
## Suggested starting points
* **Day trading (5–15m):**
* TSI 25/13/7, `smoothLen=3`, thresholds **+55 / −55**, `zNewMax = 1.2`, `zHot = 1.8`, **StrictNR = true**
* **Scalping (1–3m):**
* TSI 21/9/5, `smoothLen=1–2`, thresholds **+50 / −50**, `zNewMax = 1.1–1.2`, `zHot = 1.6–1.8`, **StrictNR = false** (optional)
* **Swing (1h–D):**
* TSI 35/21/9, `smoothLen=4–6`, thresholds **+60 / −60**, `zNewMax = 1.2`, `zHot = 1.9–2.0`, **StrictNR = true**
---
## Notes & best practices
* **Session anchoring**: Z-score is session-anchored (resets by trading date). If you trade outside standard sessions, verify your data session.
* **Instrument specificity**: Tune **`zHot`**, **`zNewMax`**, and thresholds per symbol and timeframe.
* **Bar-close discipline**: Evaluate tags at **bar close** to avoid intrabar flip-flop.
* This is a **context/confirmation tool**, not a broker or strategy. Combine with your entry/exit rules and position sizing.
---
**Tip:** Start with the suggested day-trading profile. Use this oscillator as your **gate** (only trade with it), let your entry engine time executions, and rely on your exit tool for standardized profit-taking.
13/48 EMA Trading Scalper (ATR TP/SL)13/48 EMA Trading Scalper (ATR TP/SL)
What it does:
This tool looks for price “touches” of the 13-EMA, only takes CALL entries when the 13 is above the 48 (uptrend) and PUT entries when the 13 is below the 48 (downtrend), and confirms with a simple candle pattern (green > red with expansion for calls, inverse for puts). Touch sensitivity is ATR-scaled, so signals adapt to volatility. Each trade gets auto-drawn entry, TP, and SL lines, colored labels with $ / % distance from entry, plus optional TP/SL hit alerts. A rotating color palette and per-bar label staggering help keep the chart readable. Old objects are auto-pruned via maxTracked.
How it works
Trend filter: 13-EMA vs 48-EMA.
Entry: ATR-scaled touch of the 13-EMA + candle confirmation.
Risk: TP/SL = ATR multiples you control.
Visuals: Entry/TP/SL lines (extend right), vertical entry marker (optional), multi-line labels.
Hygiene: maxTracked keeps only the last N trades’ objects; labels are staggered to reduce overlap.
Alerts: Buy Call, Buy Put, Take Profit Reached, Stop Loss Hit.
Key Inputs
Fast EMA (13), Trend EMA (48), ATR Length (14)
Touch Threshold (x ATR) – how close price must come to the EMA
Take Profit (x ATR), Stop Loss (x ATR)
maxTracked – number of recent trades to keep on chart
Tips
Start with Touch = 0.10–0.20 × ATR; TP=2×ATR, SL=1×ATR, then tune per symbol/timeframe.
Works on intraday and higher TFs; fewer, cleaner signals on higher TFs.
This is an indicator, not a broker—always backtest and manage risk.
ICT/SMC Liquidity Map V3 KyroowThe indicator is designed to map liquidity on the chart following the ICT/SMC logic, with the added feature of precise tracking of the Asian session.
It shows you:
PDH / PDL → Previous Day High & Low, automatically removed once taken out.
EQH / EQL → Equal Highs & Equal Lows (double tops/bottoms), with pip tolerance and a check to ensure no candle has already "cleared" the range.
ASH / ASL → Asian Session High & Low (the highs/lows of each closed Asian session).
Asian Session → Displayed as a box or shaded area, with visual history.
Dynamic tolerance management → EQH/EQL can have different tolerances depending on the timeframe.
Automatic removal → Levels are removed once the market takes them (via wick or body, configurable).
💡 In practice:
It helps you quickly identify likely liquidity grab zones, whether they come from the previous day, the Asian session, or equal highs/lows. This allows you to anticipate market reactions around these levels.
Quantum Dip Hunter | AlphaNattQuantum Dip Hunter | AlphaNatt
🎯 Overview
The Quantum Dip Hunter is an advanced technical indicator designed to identify high-probability buying opportunities when price temporarily dips below dynamic support levels. Unlike simple oversold indicators, this system uses a sophisticated quality scoring algorithm to filter out low-quality dips and highlight only the best entry points.
"Buy the dip" - but only the right dips. Not all dips are created equal.
⚡ Key Features
5 Detection Methods: Choose from Dynamic, Fibonacci, Volatility, Volume Profile, or Hybrid modes
Quality Scoring System: Each dip is scored from 0-100% based on multiple factors
Smart Filtering: Only signals above your quality threshold are displayed
Visual Effects: Glow, Pulse, and Wave animations for the support line
Risk Management: Automatic stop-loss and take-profit calculations
Real-time Statistics: Live dashboard showing current market conditions
📊 How It Works
The indicator calculates a dynamic support line using your selected method
When price dips below this line, it evaluates the dip quality
Quality score is calculated based on: trend alignment (30%), volume (20%), RSI (20%), momentum (15%), and dip depth (15%)
If the score exceeds your minimum threshold, a buy signal arrow appears
Stop-loss and take-profit levels are automatically calculated and displayed
🚀 Detection Methods Explained
Dynamic Support
Adapts to recent price action
Best for: Trending markets
Uses ATR-adjusted lowest points
Fibonacci Support
Based on 61.8% and 78.6% retracement levels
Best for: Pullbacks in strong trends
Automatically switches between fib levels
Volatility Support
Uses Bollinger Band methodology
Best for: Range-bound markets
Adapts to changing volatility
Volume Profile Support
Finds high-volume price levels
Best for: Identifying institutional support
Updates dynamically as volume accumulates
Hybrid Mode
Combines all methods for maximum accuracy
Best for: All market conditions
Takes the most conservative support level
⚙️ Key Settings
Dip Detection Engine
Detection Method: Choose your preferred support calculation
Sensitivity: Higher = more sensitive to price movements (0.5-3.0)
Lookback Period: How far back to analyze (20-200 bars)
Dip Depth %: Minimum dip size to consider (0.5-10%)
Quality Filters
Trend Filter: Only buy dips in uptrends when enabled
Minimum Dip Score: Quality threshold for signals (0-100%)
Trend Strength: Required trend score when filter is on
📈 Trading Strategies
Conservative Approach
Use Dynamic method with Trend Filter ON
Set minimum score to 80%
Risk:Reward ratio of 2:1 or higher
Best for: Swing trading
Aggressive Approach
Use Hybrid method with Trend Filter OFF
Set minimum score to 60%
Risk:Reward ratio of 1:1
Best for: Day trading
Scalping Setup
Use Volatility method
Set sensitivity to 2.0+
Focus on Target 1 only
Best for: Quick trades
🎨 Visual Customization
Color Themes:
Neon: Bright cyan/magenta for dark backgrounds
Ocean: Cool blues and teals
Solar: Warm yellows and oranges
Matrix: Classic green terminal look
Gradient: Smooth color transitions
Line Styles:
Solid: Clean, simple line
Glow: Adds depth with glow effect
Pulse: Animated breathing effect
Wave: Oscillating wave pattern
💡 Pro Tips
Start with the Trend Filter ON to avoid catching falling knives
Higher quality scores (80%+) have better win rates but fewer signals
Use Volume Profile method near major support/resistance levels
Combine with your favorite momentum indicator for confirmation
The pulse animation can help draw attention to key levels
⚠️ Important Notes
This indicator identifies potential entries, not guaranteed profits
Always use proper risk management
Works best on liquid instruments with good volume
Backtest your settings before live trading
Not financial advice - use at your own risk
📊 Statistics Panel
The live statistics panel shows:
Current detection method
Support level value
Trend direction
Distance from support
Current signal status
🤝 Support
Created by AlphaNatt
For questions or suggestions, please comment below!
Happy dip hunting! 🎯
Not financial advice, always do your own research
TZanalyserTZanalyser (Trend Zone Monitor With Trend Strength, Volume Focus And -Events Markers)
Before I used TrendZones to manage my portfolio I used Fibonacci Zone Oscillator as my favorite in the sub panel, accompanied with another subpanel indicator which I never published called IncliValue and also REVE Cohorts.
TZanalyser inherits Ideas and code from all three of them: The visual and the idea of using a channel as the basis for an oscillator depicted as a histogram, is taken from the FibZone Oscillator. The idea of providing a number to evaluate the trend is taken from IncliValue. The idea to create a horizontal line which indicates high and low volume focus completed with markers for volume events, is taken from REVE-cohorts.
These ideas are combined in one sleek visual called TZanalyser. TZ stand for TrendZones, because the histogram is based on it.
The histogram.
Depicted is the distance of the price from COG as percent. The distance between Upper Curve and Lower Curve is used as 100%. The values may reach between 300 and -300. The colors indicate in which zone the candle lives, blue in the blue zone, green in the green zone etc. Despite the absence of a gray zone, there are gray bars. These depict candles that wrap around COG. Because hl2 is used as price, some gray bars point up and others down. The orange and red bars point down because the orange and red downtrend zones are below COG.
Use of the histogram.
Sometimes I need to create a list of stocks which are in uptrend in monthly, weekly and daily charts from the stocks I follow in my universe. This job is done fast and easy by looking at the last bar of the histogram. The histogram also gives a quick evaluation of how the stock fared in the past.
The number.
Suppose I need to allocate some money to another stock, selected a few, looked into news and gurus and they look equally good. Then it is nice to be able to find out which has the best charts. Which one has the strongest uptrend. For this purpose this number can be consulted, because it indicates somehow the strength of the trend. It is an integer between 20 and -20, the closer to 20 the stronger the uptrend, closer to -20 indicates a stronger downtrend. The color of the background is the same as the last column of the histogram.
Volume focus and events
The horizontal lines depict volume focus, the line below the focus that comes with the uptrend columns pointing up, the one above the focus for the downtrend columns pointing down. Thes line have tree colors: maroon for high volume focus, green for normal volume and gray for low volume situations. Between the lines and the histogram triangles appear at volume events, a green triangle when the candle comes with high volume, i.e. 120-200 percent of normal, maroon when extreme volume, i.e. more than 200 percent of normal.
The direction of these triangles is that of the histogram, i.e. when the price is higher, direction is up and vice versa.
Take care and have fun.
NY HIGH LOW BREAKNY HIGH LOW BREAK: A New York Session Breakout Strategy
The "NY HIGH LOW BREAK" indicator is a powerful TradingView script designed to identify and capitalize on breakout opportunities during the New York trading session. This strategy focuses on the initial price action of the New York market open, looking for clear breaches of the high or low established within the first 30 minutes. It's particularly suited for intraday traders who seek to capture momentum-driven moves.
Strategy Logic
The core of the "NY HIGH LOW BREAK" strategy revolves around these key components:
New York Session Opening Range Identification:
The script first identifies the opening range of the New York session. This is defined by the high and low prices established during the first 30 minutes of the New York trading session (from 7:01 AM GMT-4 to 7:31 AM GMT-4).
These crucial levels are then extended forward on the chart as horizontal lines, serving as potential support and resistance zones.
Breakout Signal Generation:
Long Signal: A buy signal is generated when the price breaks above the high of the New York opening range. Specifically, it looks for a candle whose open and close are both above the highLinePrice, and importantly, the previous candle's open was below and close was above the highLinePrice. This indicates a strong upward momentum confirming the breakout.
Short Signal: Conversely, a sell signal is generated when the price breaks below the low of the New York opening range. It looks for a candle whose open and close are both below the lowLinePrice, and the previous candle's open was above and close was below the lowLinePrice. This suggests strong downward momentum confirming the breakdown.
Supertrend Filter (Implicit/Future Enhancement):
While the supertrend and direction variables are present in the code, they are not actively used in the current signal generation logic. This suggests a potential future enhancement where the Supertrend indicator could be incorporated as a trend filter to confirm breakout directions, adding an extra layer of confluence to the signals. For example, only taking long breakouts when Supertrend indicates an uptrend, and short breakouts when Supertrend indicates a downtrend.
Second Candle Confirmation (Possible Future Enhancement):
The close_sec_candle function and openSEC, closeSEC variables indicate an attempt to capture the open and close of a "second candle" (30 minutes after the initial New York open). Currently, closeSEC is used in a specific condition for signal_way but not directly in the primary longSignal or shortSignal logic. This also suggests a potential future refinement where the price action of this second candle could be used for further confirmation or specific entry criteria.
Time-Based Filtering:
Signals are only considered valid within a specific trading window from 8:00 AM GMT-4 to 8:00 AM GMT-4 + 16 * 30 minutes (which is 480 minutes, or 8 hours) on 1-minute and 5-minute timeframes. This ensures that trades are taken during the most active and volatile periods of the New York session, avoiding late-session chop.
The script also highlights the New York session and lunch hours using background colors, providing visual context to the trading day.
Key Features
Automated New York Open Range Detection: The script automatically identifies and plots the high and low of the first 30 minutes of the New York trading session.
Clear Breakout Signals: Visually distinct "BUY" and "SELL" labels appear on the chart when a breakout occurs, making it easy to spot trading opportunities.
Timeframe Adaptability: While optimized for 1-minute and 5-minute timeframes for signal generation, the opening range lines can be displayed on various timeframes.
Customizable Risk-to-Reward (RR): The rr input allows users to define their preferred risk-to-reward ratio for potential trades, although it's not directly implemented in the current signal or trade management logic. This could be used by traders for manual trade management.
Visual Session and Lunch Highlights: The script colors the background to clearly delineate the New York trading session and the lunch break, helping traders understand the market context.
How to Use
Apply the Indicator: Add the "NY HIGH LOW BREAK" indicator to your chart on TradingView.
Select a Relevant Timeframe: For optimal signal generation, use 1-minute or 5-minute timeframes.
Observe the Opening Range: The green and red lines represent the high and low of the first 30 minutes of the New York session.
Look for Breakouts: Wait for price to decisively break above the green line (for a buy) or below the red line (for a sell).
Confirm Signals: The "BUY" or "SELL" labels will appear on the chart when the breakout conditions are met within the active trading window.
Implement Your Risk Management: Use your preferred risk management techniques, including stop-loss and take-profit levels, in conjunction with the signals generated. The rr input can guide your manual risk-to-reward calculations.
Potential Enhancements & Considerations
Supertrend Confirmation: Integrating the supertrend variable to filter signals would significantly enhance the strategy's robustness by aligning trades with the prevailing trend.
Stop-Loss and Take-Profit Automation: The rr input currently serves as a manual guide. Future versions could integrate automated stop-loss and take-profit placement based on this ratio, potentially using ATR for dynamic sizing.
Volume Confirmation: Adding a volume filter to confirm breakouts would ensure that only high-conviction moves are traded.
Backtesting and Optimization: Thorough backtesting across various assets and market conditions is crucial to determine the optimal settings and profitability of this strategy.
Session Times: The current session times are hardcoded. Making these user-definable inputs would allow for greater flexibility across different time zones and trading preferences.
The "NY HIGH LOW BREAK" is a straightforward yet effective strategy for capturing initial New York session momentum. By focusing on clear breakout levels, it aims to provide timely and actionable trading signals for intraday traders.
Pullback Pro Dow Strategy v7 (ADX Filter)
### **Strategy Description (For TradingView)**
#### **Title:** Pullback Pro: Dow Theory & ADX Strategy
---
#### **1. Summary**
This strategy is designed to identify and trade pullbacks within an established trend, based on the core principles of Dow Theory. It uses market structure (pivot highs and lows) to determine the trend direction and an Exponential Moving Average (EMA) to pinpoint pullback entry opportunities.
To enhance trade quality and avoid ranging markets, an ADX (Average Directional Index) filter is integrated to ensure that entries are only taken when the trend has sufficient momentum.
---
#### **2. Core Logic: How It Works**
The strategy's logic is broken down into three main steps:
**Step 1: Trend Determination (Dow Theory)**
* The primary trend is identified by analyzing recent pivot points.
* An **Uptrend** is confirmed when the script detects a pattern of higher highs and higher lows (HH/HL).
* A **Downtrend** is confirmed by a pattern of lower highs and lower lows (LH/LL).
* If neither pattern is present, the strategy considers the market to be in a range and will not seek trades.
**Step 2: Entry Signal (Pullback to EMA)**
* Once a clear trend is established, the strategy waits for a price correction.
* **Long Entry:** In a confirmed uptrend, a long position is initiated when the price pulls back and crosses *under* the specified EMA.
* **Short Entry:** In a confirmed downtrend, a short position is initiated when the price rallies and crosses *over* the EMA.
**Step 3: Confirmation & Risk Management**
* **ADX Filter:** To ensure the trend is strong enough to trade, an entry signal is only validated if the ADX value is above a user-defined threshold (e.g., 25). This helps filter out weak signals during choppy or consolidating markets.
* **Stop Loss:** The initial Stop Loss is automatically and logically placed at the last market structure point:
* For long trades, it's placed at the `lastPivotLow`.
* For short trades, it's placed at the `lastPivotHigh`.
* **Take Profit:** Two Take Profit levels are calculated based on user-defined Risk-to-Reward (R:R) ratios. The strategy allows for partial profit-taking at the first target (TP1), moving the remainder of the position to the second target (TP2).
---
#### **3. Input Settings Explained**
**① Dow Theory Settings**
* **Pivot Lookback Period:** Determines the sensitivity for detecting pivot highs and lows. A smaller number makes it more sensitive to recent price swings; a larger number focuses on more significant, longer-term pivots.
**② Entry Logic (Pullback)**
* **Pullback EMA Length:** Sets the period for the Exponential Moving Average used to identify pullback entries.
**③ Risk & Exit Management**
* **Take Profit 1 R:R:** Sets the Risk-to-Reward ratio for the first take-profit target.
* **Take Profit 1 (%):** The percentage of the position to be closed when TP1 is hit.
* **Take Profit 2 R:R:** Sets the Risk-to-Reward ratio for the final take-profit target.
**④ Filters**
* **Use ADX Trend Filter:** A master switch to enable or disable the ADX filter.
* **ADX Length:** The lookback period for the ADX calculation.
* **ADX Threshold:** The minimum ADX value required to confirm a trade signal. Trades will only be placed if the ADX is above this level.
---
#### **4. Best Practices & Recommendations**
* This is a trend-following system. It is designed to perform best in markets that exhibit clear, sustained trending behavior.
* It may underperform in choppy, sideways, or strongly ranging markets. The ADX filter is designed to help mitigate this, but no filter is perfect.
* **Crucially, you must backtest this strategy thoroughly** on your preferred financial instrument and timeframe before considering any live application.
* Experiment with the `Pivot Lookback Period`, `Pullback EMA Length`, and `ADX Threshold` to optimize performance for a specific market's characteristics.
---
#### **DISCLAIMER**
This script is provided for educational and informational purposes only. It does not constitute financial advice. All trading involves a high level of risk, and past performance is not indicative of future results. You are solely responsible for your own trading decisions. The author assumes no liability for any financial losses you may incur from using this strategy. Always conduct your own research and due diligence.
VoVix DEVMA🌌 VoVix DEVMA: A Deep Dive into Second-Order Volatility Dynamics
Welcome to VoVix+, a sophisticated trading framework that transcends traditional price analysis. This is not merely another indicator; it is a complete system designed to dissect and interpret the very fabric of market volatility. VoVix+ operates on the principle that the most powerful signals are not found in price alone, but in the behavior of volatility itself. It analyzes the rate of change, the momentum, and the structure of market volatility to identify periods of expansion and contraction, providing a unique edge in anticipating major market moves.
This document will serve as your comprehensive guide, breaking down every mathematical component, every user input, and every visual element to empower you with a profound understanding of how to harness its capabilities.
🔬 THEORETICAL FOUNDATION: THE MATHEMATICS OF MARKET DYNAMICS
VoVix+ is built upon a multi-layered mathematical engine designed to measure what we call "second-order volatility." While standard indicators analyze price, and first-order volatility indicators (like ATR) analyze the range of price, VoVix+ analyzes the dynamics of the volatility itself. This provides insight into the market's underlying state of stability or chaos.
1. The VoVix Score: Measuring Volatility Thrust
The core of the system begins with the VoVix Score. This is a normalized measure of volatility acceleration or deceleration.
Mathematical Formula:
VoVix Score = (ATR(fast) - ATR(slow)) / (StDev(ATR(fast)) + ε)
Where:
ATR(fast) is the Average True Range over a short period, representing current, immediate volatility.
ATR(slow) is the Average True Range over a longer period, representing the baseline or established volatility.
StDev(ATR(fast)) is the Standard Deviation of the fast ATR, which measures the "noisiness" or consistency of recent volatility.
ε (epsilon) is a very small number to prevent division by zero.
Market Implementation:
Positive Score (Expansion): When the fast ATR is significantly higher than the slow ATR, it indicates a rapid increase in volatility. The market is "stretching" or expanding.
Negative Score (Contraction): When the fast ATR falls below the slow ATR, it indicates a decrease in volatility. The market is "coiling" or contracting.
Normalization: By dividing by the standard deviation, we normalize the score. This turns it into a standardized measure, allowing us to compare volatility thrust across different market conditions and timeframes. A score of 2.0 in a quiet market means the same, relatively, as a score of 2.0 in a volatile market.
2. Deviation Analysis (DEV): Gauging Volatility's Own Volatility
The script then takes the analysis a step further. It calculates the standard deviation of the VoVix Score itself.
Mathematical Formula:
DEV = StDev(VoVix Score, lookback_period)
Market Implementation:
This DEV value represents the magnitude of chaos or stability in the market's volatility dynamics. A high DEV value means the volatility thrust is erratic and unpredictable. A low DEV value suggests the change in volatility is smooth and directional.
3. The DEVMA Crossover: Identifying Regime Shifts
This is the primary signal generator. We take two moving averages of the DEV value.
Mathematical Formula:
fastDEVMA = SMA(DEV, fast_period)
slowDEVMA = SMA(DEV, slow_period)
The Core Signal:
The strategy triggers on the crossover and crossunder of these two DEVMA lines. This is a profound concept: we are not looking at a moving average of price or even of volatility, but a moving average of the standard deviation of the normalized rate of change of volatility.
Bullish Crossover (fastDEVMA > slowDEVMA): This signals that the short-term measure of volatility's chaos is increasing relative to the long-term measure. This often precedes a significant market expansion and is interpreted as a bullish volatility regime.
Bearish Crossunder (fastDEVMA < slowDEVMA): This signals that the short-term measure of volatility's chaos is decreasing. The market is settling down or contracting, often leading to trending moves or range consolidation.
⚙️ INPUTS MENU: CONFIGURING YOUR ANALYSIS ENGINE
Every input has been meticulously designed to give you full control over the strategy's behavior. Understanding these settings is key to adapting VoVix+ to your specific instrument, timeframe, and trading style.
🌀 VoVix DEVMA Configuration
🧬 Deviation Lookback: This sets the lookback period for calculating the DEV value. It defines the window for measuring the stability of the VoVix Score. A shorter value makes the system highly reactive to recent changes in volatility's character, ideal for scalping. A longer value provides a smoother, more stable reading, better for identifying major, long-term regime shifts.
⚡ Fast VoVix Length: This is the lookback period for the fastDEVMA. It represents the short-term trend of volatility's chaos. A smaller number will result in a faster, more sensitive signal line that reacts quickly to market shifts.
🐌 Slow VoVix Length: This is the lookback period for the slowDEVMA. It represents the long-term, baseline trend of volatility's chaos. A larger number creates a more stable, slower-moving anchor against which the fast line is compared.
How to Optimize: The relationship between the Fast and Slow lengths is crucial. A wider gap (e.g., 20 and 60) will result in fewer, but potentially more significant, signals. A narrower gap (e.g., 25 and 40) will generate more frequent signals, suitable for more active trading styles.
🧠 Adaptive Intelligence
🧠 Enable Adaptive Features: When enabled, this activates the strategy's performance tracking module. The script will analyze the outcome of its last 50 trades to calculate a dynamic win rate.
⏰ Adaptive Time-Based Exit: If Enable Adaptive Features is on, this allows the strategy to adjust its Maximum Bars in Trade setting based on performance. It learns from the average duration of winning trades. If winning trades tend to be short, it may shorten the time exit to lock in profits. If winners tend to run, it will extend the time exit, allowing trades more room to develop. This helps prevent the strategy from cutting winning trades short or holding losing trades for too long.
⚡ Intelligent Execution
📊 Trade Quantity: A straightforward input that defines the number of contracts or shares for each trade. This is a fixed value for consistent position sizing.
🛡️ Smart Stop Loss: Enables the dynamic stop-loss mechanism.
🎯 Stop Loss ATR Multiplier: Determines the distance of the stop loss from the entry price, calculated as a multiple of the current 14-period ATR. A higher multiplier gives the trade more room to breathe but increases risk per trade. A lower multiplier creates a tighter stop, reducing risk but increasing the chance of being stopped out by normal market noise.
💰 Take Profit ATR Multiplier: Sets the take profit target, also as a multiple of the ATR. A common practice is to set this higher than the Stop Loss multiplier (e.g., a 2:1 or 3:1 reward-to-risk ratio).
🏃 Use Trailing Stop: This is a powerful feature for trend-following. When enabled, instead of a fixed stop loss, the stop will trail behind the price as the trade moves into profit, helping to lock in gains while letting winners run.
🎯 Trail Points & 📏 Trail Offset ATR Multipliers: These control the trailing stop's behavior. Trail Points defines how much profit is needed before the trail activates. Trail Offset defines how far the stop will trail behind the current price. Both are based on ATR, making them fully adaptive to market volatility.
⏰ Maximum Bars in Trade: This is a time-based stop. It forces an exit if a trade has been open for a specified number of bars, preventing positions from being held indefinitely in stagnant markets.
⏰ Session Management
These inputs allow you to confine the strategy's trading activity to specific market hours, which is crucial for day trading instruments that have defined high-volume sessions (e.g., stock market open).
🎨 Visual Effects & Dashboard
These toggles give you complete control over the on-chart visuals and the dashboard. You can disable any element to declutter your chart or focus only on the information that matters most to you.
📊 THE DASHBOARD: YOUR AT-A-GLANCE COMMAND CENTER
The dashboard centralizes all critical information into one compact, easy-to-read panel. It provides a real-time summary of the market state and strategy performance.
🎯 VOVIX ANALYSIS
Fast & Slow: Displays the current numerical values of the fastDEVMA and slowDEVMA. The color indicates their direction: green for rising, red for falling. This lets you see the underlying momentum of each line.
Regime: This is your most important environmental cue. It tells you the market's current state based on the DEVMA relationship. 🚀 EXPANSION (Green) signifies a bullish volatility regime where explosive moves are more likely. ⚛️ CONTRACTION (Purple) signifies a bearish volatility regime, where the market may be consolidating or entering a smoother trend.
Quality: Measures the strength of the last signal based on the magnitude of the DEVMA difference. An ELITE or STRONG signal indicates a high-conviction setup where the crossover had significant force.
PERFORMANCE
Win Rate & Trades: Displays the historical win rate of the strategy from the backtest, along with the total number of closed trades. This provides immediate feedback on the strategy's historical effectiveness on the current chart.
EXECUTION
Trade Qty: Shows your configured position size per trade.
Session: Indicates whether trading is currently OPEN (allowed) or CLOSED based on your session management settings.
POSITION
Position & PnL: Displays your current position (LONG, SHORT, or FLAT) and the real-time Profit or Loss of the open trade.
🧠 ADAPTIVE STATUS
Stop/Profit Mult: In this simplified version, these are placeholders. The primary adaptive feature currently modifies the time-based exit, which is reflected in how long trades are held on the chart.
🎨 THE VISUAL UNIVERSE: DECIPHERING MARKET GEOMETRY
The visuals are not mere decorations; they are geometric representations of the underlying mathematical concepts, designed to give you an intuitive feel for the market's state.
The Core Lines:
FastDEVMA (Green/Maroon Line): The primary signal line. Green when rising, indicating an increase in short-term volatility chaos. Maroon when falling.
SlowDEVMA (Aqua/Orange Line): The baseline. Aqua when rising, indicating a long-term increase in volatility chaos. Orange when falling.
🌊 Morphism Flow (Flowing Lines with Circles):
What it represents: This visualizes the momentum and strength of the fastDEVMA. The width and intensity of the "beam" are proportional to the signal strength.
Interpretation: A thick, steep, and vibrant flow indicates powerful, committed momentum in the current volatility regime. The floating '●' particles represent kinetic energy; more particles suggest stronger underlying force.
📐 Homotopy Paths (Layered Transparent Boxes):
What it represents: These layered boxes are centered between the two DEVMA lines. Their height is determined by the DEV value.
Interpretation: This visualizes the overall "volatility of volatility." Wider boxes indicate a chaotic, unpredictable market. Narrower boxes suggest a more stable, predictable environment.
🧠 Consciousness Field (The Grid):
What it represents: This grid provides a historical lookback at the DEV range.
Interpretation: It maps the recent "consciousness" or character of the market's volatility. A consistently wide grid suggests a prolonged period of chaos, while a narrowing grid can signal a transition to a more stable state.
📏 Functorial Levels (Projected Horizontal Lines):
What it represents: These lines extend from the current fastDEVMA and slowDEVMA values into the future.
Interpretation: Think of these as dynamic support and resistance levels for the volatility structure itself. A crossover becomes more significant if it breaks cleanly through a prior established level.
🌊 Flow Boxes (Spaced Out Boxes):
What it represents: These are compact visual footprints of the current regime, colored green for Expansion and red for Contraction.
Interpretation: They provide a quick, at-a-glance confirmation of the dominant volatility flow, reinforcing the background color.
Background Color:
This provides an immediate, unmistakable indication of the current volatility regime. Light Green for Expansion and Light Aqua/Blue for Contraction, allowing you to assess the market environment in a split second.
📊 BACKTESTING PERFORMANCE REVIEW & ANALYSIS
The following is a factual, transparent review of a backtest conducted using the strategy's default settings on a specific instrument and timeframe. This information is presented for educational purposes to demonstrate how the strategy's mechanics performed over a historical period. It is crucial to understand that these results are historical, apply only to the specific conditions of this test, and are not a guarantee or promise of future performance. Market conditions are dynamic and constantly change.
Test Parameters & Conditions
To ensure the backtest reflects a degree of real-world conditions, the following parameters were used. The goal is to provide a transparent baseline, not an over-optimized or unrealistic scenario.
Instrument: CME E-mini Nasdaq 100 Futures (NQ1!)
Timeframe: 5-Minute Chart
Backtesting Range: March 24, 2024, to July 09, 2024
Initial Capital: $100,000
Commission: $0.62 per contract (A realistic cost for futures trading).
Slippage: 3 ticks per trade (A conservative setting to account for potential price discrepancies between order placement and execution).
Trade Size: 1 contract per trade.
Performance Overview (Historical Data)
The test period generated 465 total trades , providing a statistically significant sample size for analysis, which is well above the recommended minimum of 100 trades for a strategy evaluation.
Profit Factor: The historical Profit Factor was 2.663 . This metric represents the gross profit divided by the gross loss. In this test, it indicates that for every dollar lost, $2.663 was gained.
Percent Profitable: Across all 465 trades, the strategy had a historical win rate of 84.09% . While a high figure, this is a historical artifact of this specific data set and settings, and should not be the sole basis for future expectations.
Risk & Trade Characteristics
Beyond the headline numbers, the following metrics provide deeper insight into the strategy's historical behavior.
Sortino Ratio (Downside Risk): The Sortino Ratio was 6.828 . Unlike the Sharpe Ratio, this metric only measures the volatility of negative returns. A higher value, such as this one, suggests that during this test period, the strategy was highly efficient at managing downside volatility and large losing trades relative to the profits it generated.
Average Trade Duration: A critical characteristic to understand is the strategy's holding period. With an average of only 2 bars per trade , this configuration operates as a very short-term, or scalping-style, system. Winning trades averaged 2 bars, while losing trades averaged 4 bars. This indicates the strategy's logic is designed to capture quick, high-probability moves and exit rapidly, either at a profit target or a stop loss.
Conclusion and Final Disclaimer
This backtest demonstrates one specific application of the VoVix+ framework. It highlights the strategy's behavior as a short-term system that, in this historical test on NQ1!, exhibited a high win rate and effective management of downside risk. Users are strongly encouraged to conduct their own backtests on different instruments, timeframes, and date ranges to understand how the strategy adapts to varying market structures. Past performance is not indicative of future results, and all trading involves significant risk.
🔧 THE DEVELOPMENT PHILOSOPHY: FROM VOLATILITY TO CLARITY
The journey to create VoVix+ began with a simple question: "What drives major market moves?" The answer is often not a change in price direction, but a fundamental shift in market volatility. Standard indicators are reactive to price. We wanted to create a system that was predictive of market state. VoVix+ was designed to go one level deeper—to analyze the behavior, character, and momentum of volatility itself.
The challenge was twofold. First, to create a robust mathematical model to quantify these abstract concepts. This led to the multi-layered analysis of ATR differentials and standard deviations. Second, to make this complex data intuitive and actionable. This drove the creation of the "Visual Universe," where abstract mathematical values are translated into geometric shapes, flows, and fields. The adaptive system was intentionally kept simple and transparent, focusing on a single, impactful parameter (time-based exits) to provide performance feedback without becoming an inscrutable "black box." The result is a tool that is both profoundly deep in its analysis and remarkably clear in its presentation.
⚠️ RISK DISCLAIMER AND BEST PRACTICES
VoVix+ is an advanced analytical tool, not a guarantee of future profits. All financial markets carry inherent risk. The backtesting results shown by the strategy are historical and do not guarantee future performance. This strategy incorporates realistic commission and slippage settings by default, but market conditions can vary. Always practice sound risk management, use position sizes appropriate for your account equity, and never risk more than you can afford to lose. It is recommended to use this strategy as part of a comprehensive trading plan. This was developed specifically for Futures
"The prevailing wisdom is that markets are always right. I take the opposite view. I assume that markets are always wrong. Even if my assumption is occasionally wrong, I use it as a working hypothesis."
— George Soros
— Dskyz, Trade with insight. Trade with anticipation.
TradePlanner ProPlan smarter. Trade with precision.
TradePlanner Pro is a professional-grade overlay tool designed to streamline your trading decisions by visually organizing your trade plans directly on the chart. Built for traders who value preparation and clarity, this script enables precise entry planning, risk management, and target visualization—all tailored per symbol.
Core Purpose
TradePlanner Pro helps you map out potential trades using pre-defined symbol-based presets. It dynamically calculates position sizes based on your account size or fixed risk, then visualizes key trade levels (Entry, Take Profits, Stop Loss) with profit/loss metrics in both dollar and percentage terms. It's the perfect companion for traders who prepare their setups in advance and want their plans clearly represented on the chart.
Key Features
🔹 Per-Symbol Presets: Define entries, up to 3 take-profit levels, and stop-losses for each ticker.
🔹 Dynamic Risk Sizing: Choose between percentage-based risk or fixed dollar risk per trade.
🔹 Visual Trade Mapping: Automatically plots Entry, TP1–TP3, and SL lines on your chart.
🔹 Real-Time P&L Labels: Displays profit/loss amounts and percentages, with optional R/R ratios.
🔹 Custom Investment Display: Shows how much capital is allocated per trade.
🔹 Clean, Configurable UI: Adjust label positions, font sizes, opacity, and label visibility to match your style.
Whether you're swing trading or day trading, TradePlanner Pro helps you stay disciplined, organized, and confident in your execution.
How to Use TradePlanner Pro – Step-by-Step Guide
TradePlanner Pro is designed to be easy to set up while giving you full control over how your trades are visualized and calculated. Here’s how to get started:
1. Start with Default Settings
By default, the script assumes:
Account Size: $10,000
Max Money per Trade (%): 1.0%
Max Risk (USD): 0 (disabled; only percentage risk is used)
This means the script will size each trade to risk 1% of your account balance per trade unless you override it with a fixed USD risk amount.
2. Set Up Your Symbol Presets
The "Symbol Presets" input is a flexible text area where you define trade setups for each ticker.
Format (one per line):
SYMBOL:Entry,TP1 ,SL
Example:
AAPL:250,260,270,240
MSFT:100,110,90
TSLA:180,200,170
You can include 1 to 3 take-profit levels.
The script will only activate for the current chart’s symbol, matching what's listed.
3. Customize Risk Parameters
You can use:
Account % Risk – Based on account size and % risk.
Fixed USD Risk – When a dollar amount is entered (>0), it takes priority and calculates share size based on the risk per share.
There's also an option to round share quantities down to whole units, which is useful for stock or crypto trading platforms that only allow whole-number units.
4. Choose What to Display
Toggle on/off these elements as needed:
Show Entry/TP/SL Lines
Show P&L Labels – Profit/loss amounts at each target and SL.
Show Amount Invested – Includes total dollar value in the quantity label.
Show Percentages – Adds % gain/loss to each label.
Show Risk/Reward Ratios – Optionally displayed beside or below TP labels.
You can further adjust:
Font size and label opacity
Label position offset – In percent of price range, so they don’t overlap the actual levels.
5. Read the Visual Outputs
Once the preset matches the current chart symbol:
Lines will appear for Entry, TP1-TP3, and Stop Loss.
Labels will display your:
Trade quantity (and invested amount)
Dollar and % profit at each target
Total loss at stop loss
Optional R/R ratios
Everything updates dynamically and adjusts to your current chart scale and bar availabilit
light_logLight Log - A Defensive Programming Library for Pine Script
Overview
The Light Log library transforms Pine Script development by introducing structured logging and defensive programming patterns typically found in enterprise languages like C#. This library addresses a fundamental challenge in Pine Script: the lack of sophisticated error handling and debugging tools that developers expect when building complex trading systems.
At its core, Light Log provides three transformative capabilities that work together to create more reliable and maintainable code. First, it wraps all native Pine Script types in error-aware containers, allowing values to carry validation state alongside their data. Second, it offers a comprehensive logging system with severity levels and conditional rendering. Third, it includes defensive programming utilities that catch errors early and make code self-documenting.
The Philosophy of Errors as Values
Traditional Pine Script error handling relies on runtime errors that halt execution, making it difficult to build resilient systems that can gracefully handle edge cases. Light Log introduces a paradigm shift by treating errors as first-class values that flow through your program alongside regular data.
When you wrap a value using Light Log's type system, you're not just storing data – you're creating a container that can carry both the value and its validation state. For example, when you call myNumber.INT() , you receive an INT object that contains both the integer value and a Log object that can describe any issues with that value. This approach, inspired by functional programming languages, allows errors to propagate through calculations without causing immediate failures.
Consider how this changes error handling in practice. Instead of a calculation failing catastrophically when it encounters invalid input, it can produce a result object that contains both the computed value (which might be na) and a detailed log explaining what went wrong. Subsequent operations can check has_error() to decide whether to proceed or handle the error condition gracefully.
The Typed Wrapper System
Light Log provides typed wrappers for every native Pine Script type: INT, FLOAT, BOOL, STRING, COLOR, LINE, LABEL, BOX, TABLE, CHART_POINT, POLYLINE, and LINEFILL. These wrappers serve multiple purposes beyond simple value storage.
Each wrapper type contains two fields: the value field v holds the actual data, while the error field e contains a Log object that tracks the value's validation state. This dual nature enables powerful programming patterns. You can perform operations on wrapped values and accumulate error information along the way, creating an audit trail of how values were processed.
The wrapper system includes convenient methods for converting between wrapped and unwrapped values. The extension methods like INT() , FLOAT() , etc., make it easy to wrap existing values, while the from_INT() , from_FLOAT() methods extract the underlying values when needed. The has_error() method provides a consistent interface for checking whether any wrapped value has encountered issues during processing.
The Log Object: Your Debugging Companion
The Log object represents the heart of Light Log's debugging capabilities. Unlike simple string concatenation for error messages, the Log object provides a structured approach to building, modifying, and rendering diagnostic information.
Each Log object carries three essential pieces of information: an error type (info, warning, error, or runtime_error), a message string that can be built incrementally, and an active flag that controls conditional rendering. This structure enables sophisticated logging patterns where you can build up detailed diagnostic information throughout your script's execution and decide later whether and how to display it.
The Log object's methods support fluent chaining, allowing you to build complex messages in a readable way. The write() and write_line() methods append text to the log, while new_line() adds formatting. The clear() method resets the log for reuse, and the rendering methods ( render_now() , render_condition() , and the general render() ) control when and how messages appear.
Defensive Programming Made Easy
Light Log's argument validation functions transform how you write defensive code. Instead of cluttering your functions with verbose validation logic, you can use concise, self-documenting calls that make your intentions clear.
The argument_error() function provides strict validation that halts execution when conditions aren't met – perfect for catching programming errors early. For less critical issues, argument_log_warning() and argument_log_error() record problems without stopping execution, while argument_log_info() provides debug visibility into your function's behavior.
These functions follow a consistent pattern: they take a condition to check, the function name, the argument name, and a descriptive message. This consistency makes error messages predictable and helpful, automatically formatting them to show exactly where problems occurred.
Building Modular, Reusable Code
Light Log encourages a modular approach to Pine Script development by providing tools that make functions more self-contained and reliable. When functions validate their inputs and return wrapped values with error information, they become true black boxes that can be safely composed into larger systems.
The void_return() function addresses Pine Script's requirement that all code paths return a value, even in error handling branches. This utility function provides a clean way to satisfy the compiler while making it clear that a particular code path should never execute.
The static log pattern, initialized with init_static_log() , enables module-wide error tracking. You can create a persistent Log object that accumulates information across multiple function calls, building a comprehensive diagnostic report that helps you understand complex behaviors in your indicators and strategies.
Real-World Applications
In practice, Light Log shines when building sophisticated trading systems. Imagine developing a complex indicator that processes multiple data streams, performs statistical calculations, and generates trading signals. With Light Log, each processing stage can validate its inputs, perform calculations, and pass along both results and diagnostic information.
For example, a moving average calculation might check that the period is positive, that sufficient data exists, and that the input series contains valid values. Instead of failing silently or throwing runtime errors, it can return a FLOAT object that contains either the calculated average or a detailed explanation of why the calculation couldn't be performed.
Strategy developers benefit even more from Light Log's capabilities. Complex entry and exit logic often involves multiple conditions that must all be satisfied. With Light Log, each condition check can contribute to a comprehensive log that explains exactly why a trade was or wasn't taken, making strategy debugging and optimization much more straightforward.
Performance Considerations
While Light Log adds a layer of abstraction over raw Pine Script values, its design minimizes performance impact. The wrapper objects are lightweight, containing only two fields. The logging operations only consume resources when actually rendered, and the conditional rendering system ensures that production code can run with logging disabled for maximum performance.
The library follows Pine Script best practices for performance, using appropriate data structures and avoiding unnecessary operations. The var keyword in init_static_log() ensures that persistent logs don't create new objects on every bar, maintaining efficiency even in real-time calculations.
Getting Started
Adopting Light Log in your Pine Script projects is straightforward. Import the library, wrap your critical values, add validation to your functions, and use Log objects to track important events. Start small by adding logging to a single function, then expand as you see the benefits of better error visibility and code organization.
Remember that Light Log is designed to grow with your needs. You can use as much or as little of its functionality as makes sense for your project. Even simple uses, like adding argument validation to key functions, can significantly improve code reliability and debugging ease.
Transform your Pine Script development experience with Light Log – because professional trading systems deserve professional development tools.
Light Log Technical Deep Dive: Advanced Patterns and Architecture
Understanding Errors as Values
The concept of "errors as values" represents a fundamental shift in how we think about error handling in Pine Script. In traditional Pine Script development, errors are events – they happen at a specific moment in time and immediately interrupt program flow. Light Log transforms errors into data – they become information that flows through your program just like any other value.
This transformation has profound implications. When errors are values, they can be stored, passed between functions, accumulated, transformed, and inspected. They become part of your program's data flow rather than exceptions to it. This approach, popularized by languages like Rust with its Result type and Haskell with its Either monad, brings functional programming's elegance to Pine Script.
Consider a practical example. Traditional Pine Script might calculate a momentum indicator like this:
momentum = close - close
If period is invalid or if there isn't enough historical data, this calculation might produce na or cause subtle bugs. With Light Log's approach:
calculate_momentum(src, period)=>
result = src.FLOAT()
if period <= 0
result.e.write("Invalid period: must be positive", true, ErrorType.error)
result.v := na
else if bar_index < period
result.e.write("Insufficient data: need " + str.tostring(period) + " bars", true, ErrorType.warning)
result.v := na
else
result.v := src - src
result.e.write("Momentum calculated successfully", false, ErrorType.info)
result
Now the function returns not just a value but a complete computational result that includes diagnostic information. Calling code can make intelligent decisions based on both the value and its associated metadata.
The Monad Pattern in Pine Script
While Pine Script lacks the type system features to implement true monads, Light Log brings monadic thinking to Pine Script development. The wrapped types (INT, FLOAT, etc.) act as computational contexts that carry both values and metadata through a series of transformations.
The key insight of monadic programming is that you can chain operations while automatically propagating context. In Light Log, this context is the error state. When you have a FLOAT that contains an error, operations on that FLOAT can check the error state and decide whether to proceed or propagate the error.
This pattern enables what functional programmers call "railway-oriented programming" – your code follows a success track when all is well but can switch to an error track when problems occur. Both tracks lead to the same destination (a result with error information), but they take different paths based on the validity of intermediate values.
Composable Error Handling
Light Log's design encourages composition – building complex functionality from simpler, well-tested components. Each component can validate its inputs, perform its calculation, and return a result with appropriate error information. Higher-level functions can then combine these results intelligently.
Consider building a complex trading signal from multiple indicators:
generate_signal(src, fast_period, slow_period, signal_period) =>
log = init_static_log(ErrorType.info)
// Calculate components with error tracking
fast_ma = calculate_ma(src, fast_period)
slow_ma = calculate_ma(src, slow_period)
// Check for errors in components
if fast_ma.has_error()
log.write_line("Fast MA error: " + fast_ma.e.message, true)
if slow_ma.has_error()
log.write_line("Slow MA error: " + slow_ma.e.message, true)
// Proceed with calculation if no errors
signal = 0.0.FLOAT()
if not (fast_ma.has_error() or slow_ma.has_error())
macd_line = fast_ma.v - slow_ma.v
signal_line = calculate_ma(macd_line, signal_period)
if signal_line.has_error()
log.write_line("Signal line error: " + signal_line.e.message, true)
signal.e := log
else
signal.v := macd_line - signal_line.v
log.write("Signal generated successfully")
else
signal.e := log
signal.v := na
signal
This composable approach makes complex calculations more reliable and easier to debug. Each component is responsible for its own validation and error reporting, and the composite function orchestrates these components while maintaining comprehensive error tracking.
The Static Log Pattern
The init_static_log() function introduces a powerful pattern for maintaining state across function calls. In Pine Script, the var keyword creates variables that persist across bars but are initialized only once. Light Log leverages this to create logging objects that can accumulate information throughout a script's execution.
This pattern is particularly valuable for debugging complex strategies where you need to understand behavior across multiple bars. You can create module-level logs that track important events:
// Module-level diagnostic log
diagnostics = init_static_log(ErrorType.info)
// Track strategy decisions across bars
check_entry_conditions() =>
diagnostics.clear() // Start fresh each bar
diagnostics.write_line("Bar " + str.tostring(bar_index) + " analysis:")
if close > sma(close, 20)
diagnostics.write_line("Price above SMA20", false)
else
diagnostics.write_line("Price below SMA20 - no entry", true, ErrorType.warning)
if volume > sma(volume, 20) * 1.5
diagnostics.write_line("Volume surge detected", false)
else
diagnostics.write_line("Normal volume", false)
// Render diagnostics based on verbosity setting
if debug_mode
diagnostics.render_now()
Advanced Validation Patterns
Light Log's argument validation functions enable sophisticated precondition checking that goes beyond simple null checks. You can implement complex validation logic while keeping your code readable:
validate_price_data(open_val, high_val, low_val, close_val) =>
argument_error(na(open_val) or na(high_val) or na(low_val) or na(close_val),
"validate_price_data", "OHLC values", "contain na values")
argument_error(high_val < low_val,
"validate_price_data", "high/low", "high is less than low")
argument_error(close_val > high_val or close_val < low_val,
"validate_price_data", "close", "is outside high/low range")
argument_log_warning(high_val == low_val,
"validate_price_data", "high/low", "are equal (no range)")
This validation function documents its requirements clearly and fails fast with helpful error messages when assumptions are violated. The mix of errors (which halt execution) and warnings (which allow continuation) provides fine-grained control over how strict your validation should be.
Performance Optimization Strategies
While Light Log adds abstraction, careful design minimizes overhead. Understanding Pine Script's execution model helps you use Light Log efficiently.
Pine Script executes once per bar, so operations that seem expensive in traditional programming might have negligible impact. However, when building real-time systems, every optimization matters. Light Log provides several patterns for efficient use:
Lazy Evaluation: Log messages are only built when they'll be rendered. Use conditional logging to avoid string concatenation in production:
if debug_mode
log.write_line("Calculated value: " + str.tostring(complex_calculation))
Selective Wrapping: Not every value needs error tracking. Wrap values at API boundaries and critical calculation points, but use raw values for simple operations:
// Wrap at boundaries
input_price = close.FLOAT()
validated_period = validate_period(input_period).INT()
// Use raw values internally
sum = 0.0
for i = 0 to validated_period.v - 1
sum += close
Error Propagation: When errors occur early, avoid expensive calculations:
process_data(input) =>
validated = validate_input(input)
if validated.has_error()
validated // Return early with error
else
// Expensive processing only if valid
perform_complex_calculation(validated)
Integration Patterns
Light Log integrates smoothly with existing Pine Script code. You can adopt it incrementally, starting with critical functions and expanding coverage as needed.
Boundary Validation: Add Light Log at the boundaries of your system – where user input enters and where final outputs are produced. This catches most errors while minimizing changes to existing code.
Progressive Enhancement: Start by adding argument validation to existing functions. Then wrap return values. Finally, add comprehensive logging. Each step improves reliability without requiring a complete rewrite.
Testing and Debugging: Use Light Log's conditional rendering to create debug modes for your scripts. Production users see clean output while developers get detailed diagnostics:
// User input for debug mode
debug = input.bool(false, "Enable debug logging")
// Conditional diagnostic output
if debug
diagnostics.render_now()
else
diagnostics.render_condition() // Only shows errors/warnings
Future-Proofing Your Code
Light Log's patterns prepare your code for Pine Script's evolution. As Pine Script adds more sophisticated features, code that uses structured error handling and defensive programming will adapt more easily than code that relies on implicit assumptions.
The type wrapper system, in particular, positions your code to take advantage of potential future features or more sophisticated type inference. By thinking in terms of wrapped values and error propagation today, you're building code that will remain maintainable and extensible tomorrow.
Light Log doesn't just make your Pine Script better today – it prepares it for the trading systems you'll need to build tomorrow.
Library "light_log"
A lightweight logging and defensive programming library for Pine Script.
Designed for modular and extensible scripts, this utility provides structured runtime validation,
conditional logging, and reusable `Log` objects for centralized error propagation.
It also introduces a typed wrapping system for all native Pine values (e.g., `INT`, `FLOAT`, `LABEL`),
allowing values to carry errors alongside data. This enables functional-style flows with built-in
validation tracking, error detection (`has_error()`), and fluent chaining.
Inspired by structured logging patterns found in systems like C#, it reduces boilerplate,
enforces argument safety, and encourages clean, maintainable code architecture.
method INT(self, error_type)
Wraps an `int` value into an `INT` struct with an optional log severity.
Namespace types: series int, simple int, input int, const int
Parameters:
self (int) : The raw `int` value to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: An `INT` object containing the value and a default Log instance.
method FLOAT(self, error_type)
Wraps a `float` value into a `FLOAT` struct with an optional log severity.
Namespace types: series float, simple float, input float, const float
Parameters:
self (float) : The raw `float` value to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `FLOAT` object containing the value and a default Log instance.
method BOOL(self, error_type)
Wraps a `bool` value into a `BOOL` struct with an optional log severity.
Namespace types: series bool, simple bool, input bool, const bool
Parameters:
self (bool) : The raw `bool` value to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `BOOL` object containing the value and a default Log instance.
method STRING(self, error_type)
Wraps a `string` value into a `STRING` struct with an optional log severity.
Namespace types: series string, simple string, input string, const string
Parameters:
self (string) : The raw `string` value to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `STRING` object containing the value and a default Log instance.
method COLOR(self, error_type)
Wraps a `color` value into a `COLOR` struct with an optional log severity.
Namespace types: series color, simple color, input color, const color
Parameters:
self (color) : The raw `color` value to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `COLOR` object containing the value and a default Log instance.
method LINE(self, error_type)
Wraps a `line` object into a `LINE` struct with an optional log severity.
Namespace types: series line
Parameters:
self (line) : The raw `line` object to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `LINE` object containing the value and a default Log instance.
method LABEL(self, error_type)
Wraps a `label` object into a `LABEL` struct with an optional log severity.
Namespace types: series label
Parameters:
self (label) : The raw `label` object to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `LABEL` object containing the value and a default Log instance.
method BOX(self, error_type)
Wraps a `box` object into a `BOX` struct with an optional log severity.
Namespace types: series box
Parameters:
self (box) : The raw `box` object to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `BOX` object containing the value and a default Log instance.
method TABLE(self, error_type)
Wraps a `table` object into a `TABLE` struct with an optional log severity.
Namespace types: series table
Parameters:
self (table) : The raw `table` object to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `TABLE` object containing the value and a default Log instance.
method CHART_POINT(self, error_type)
Wraps a `chart.point` value into a `CHART_POINT` struct with an optional log severity.
Namespace types: chart.point
Parameters:
self (chart.point) : The raw `chart.point` value to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `CHART_POINT` object containing the value and a default Log instance.
method POLYLINE(self, error_type)
Wraps a `polyline` object into a `POLYLINE` struct with an optional log severity.
Namespace types: series polyline, series polyline, series polyline, series polyline
Parameters:
self (polyline) : The raw `polyline` object to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `POLYLINE` object containing the value and a default Log instance.
method LINEFILL(self, error_type)
Wraps a `linefill` object into a `LINEFILL` struct with an optional log severity.
Namespace types: series linefill
Parameters:
self (linefill) : The raw `linefill` object to wrap.
error_type (series ErrorType) : Optional severity level to associate with the log. Default is `ErrorType.error`.
Returns: A `LINEFILL` object containing the value and a default Log instance.
method from_INT(self)
Extracts the integer value from an INT wrapper.
Namespace types: INT
Parameters:
self (INT) : The wrapped INT instance.
Returns: The underlying `int` value.
method from_FLOAT(self)
Extracts the float value from a FLOAT wrapper.
Namespace types: FLOAT
Parameters:
self (FLOAT) : The wrapped FLOAT instance.
Returns: The underlying `float` value.
method from_BOOL(self)
Extracts the boolean value from a BOOL wrapper.
Namespace types: BOOL
Parameters:
self (BOOL) : The wrapped BOOL instance.
Returns: The underlying `bool` value.
method from_STRING(self)
Extracts the string value from a STRING wrapper.
Namespace types: STRING
Parameters:
self (STRING) : The wrapped STRING instance.
Returns: The underlying `string` value.
method from_COLOR(self)
Extracts the color value from a COLOR wrapper.
Namespace types: COLOR
Parameters:
self (COLOR) : The wrapped COLOR instance.
Returns: The underlying `color` value.
method from_LINE(self)
Extracts the line object from a LINE wrapper.
Namespace types: LINE
Parameters:
self (LINE) : The wrapped LINE instance.
Returns: The underlying `line` object.
method from_LABEL(self)
Extracts the label object from a LABEL wrapper.
Namespace types: LABEL
Parameters:
self (LABEL) : The wrapped LABEL instance.
Returns: The underlying `label` object.
method from_BOX(self)
Extracts the box object from a BOX wrapper.
Namespace types: BOX
Parameters:
self (BOX) : The wrapped BOX instance.
Returns: The underlying `box` object.
method from_TABLE(self)
Extracts the table object from a TABLE wrapper.
Namespace types: TABLE
Parameters:
self (TABLE) : The wrapped TABLE instance.
Returns: The underlying `table` object.
method from_CHART_POINT(self)
Extracts the chart.point from a CHART_POINT wrapper.
Namespace types: CHART_POINT
Parameters:
self (CHART_POINT) : The wrapped CHART_POINT instance.
Returns: The underlying `chart.point` value.
method from_POLYLINE(self)
Extracts the polyline object from a POLYLINE wrapper.
Namespace types: POLYLINE
Parameters:
self (POLYLINE) : The wrapped POLYLINE instance.
Returns: The underlying `polyline` object.
method from_LINEFILL(self)
Extracts the linefill object from a LINEFILL wrapper.
Namespace types: LINEFILL
Parameters:
self (LINEFILL) : The wrapped LINEFILL instance.
Returns: The underlying `linefill` object.
method has_error(self)
Returns true if the INT wrapper has an active log entry.
Namespace types: INT
Parameters:
self (INT) : The INT instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the FLOAT wrapper has an active log entry.
Namespace types: FLOAT
Parameters:
self (FLOAT) : The FLOAT instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the BOOL wrapper has an active log entry.
Namespace types: BOOL
Parameters:
self (BOOL) : The BOOL instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the STRING wrapper has an active log entry.
Namespace types: STRING
Parameters:
self (STRING) : The STRING instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the COLOR wrapper has an active log entry.
Namespace types: COLOR
Parameters:
self (COLOR) : The COLOR instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the LINE wrapper has an active log entry.
Namespace types: LINE
Parameters:
self (LINE) : The LINE instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the LABEL wrapper has an active log entry.
Namespace types: LABEL
Parameters:
self (LABEL) : The LABEL instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the BOX wrapper has an active log entry.
Namespace types: BOX
Parameters:
self (BOX) : The BOX instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the TABLE wrapper has an active log entry.
Namespace types: TABLE
Parameters:
self (TABLE) : The TABLE instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the CHART_POINT wrapper has an active log entry.
Namespace types: CHART_POINT
Parameters:
self (CHART_POINT) : The CHART_POINT instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the POLYLINE wrapper has an active log entry.
Namespace types: POLYLINE
Parameters:
self (POLYLINE) : The POLYLINE instance to check.
Returns: True if an error or message is active in the log.
method has_error(self)
Returns true if the LINEFILL wrapper has an active log entry.
Namespace types: LINEFILL
Parameters:
self (LINEFILL) : The LINEFILL instance to check.
Returns: True if an error or message is active in the log.
void_return()
Utility function used when a return is syntactically required but functionally unnecessary.
Returns: Nothing. Function never executes its body.
argument_error(condition, function, argument, message)
Throws a runtime error when a condition is met. Used for strict argument validation.
Parameters:
condition (bool) : Boolean expression that triggers the runtime error.
function (string) : Name of the calling function (for formatting).
argument (string) : Name of the problematic argument.
message (string) : Description of the error cause.
Returns: Never returns. Halts execution if the condition is true.
argument_log_info(condition, function, argument, message)
Logs an informational message when a condition is met. Used for optional debug visibility.
Parameters:
condition (bool) : Boolean expression that triggers the log.
function (string) : Name of the calling function.
argument (string) : Argument name being referenced.
message (string) : Informational message to log.
Returns: Nothing. Logs if the condition is true.
argument_log_warning(condition, function, argument, message)
Logs a warning when a condition is met. Non-fatal but highlights potential issues.
Parameters:
condition (bool) : Boolean expression that triggers the warning.
function (string) : Name of the calling function.
argument (string) : Argument name being referenced.
message (string) : Warning message to log.
Returns: Nothing. Logs if the condition is true.
argument_log_error(condition, function, argument, message)
Logs an error message when a condition is met. Does not halt execution.
Parameters:
condition (bool) : Boolean expression that triggers the error log.
function (string) : Name of the calling function.
argument (string) : Argument name being referenced.
message (string) : Error message to log.
Returns: Nothing. Logs if the condition is true.
init_static_log(error_type, message, active)
Initializes a persistent (var) Log object. Ideal for global logging in scripts or modules.
Parameters:
error_type (series ErrorType) : Initial severity level (required).
message (string) : Optional starting message string. Default value of ("").
active (bool) : Whether the log should be flagged active on initialization. Default value of (false).
Returns: A static Log object with the given parameters.
method new_line(self)
Appends a newline character to the Log message. Useful for separating entries during chained writes.
Namespace types: Log
Parameters:
self (Log) : The Log instance to modify.
Returns: The updated Log object with a newline appended.
method write(self, message, flag_active, error_type)
Appends a message to a Log object without a newline. Updates severity and active state if specified.
Namespace types: Log
Parameters:
self (Log) : The Log instance being modified.
message (string) : The text to append to the log.
flag_active (bool) : Whether to activate the log for conditional rendering. Default value of (false).
error_type (series ErrorType) : Optional override for the severity level. Default value of (na).
Returns: The updated Log object.
method write_line(self, message, flag_active, error_type)
Appends a message to a Log object, prefixed with a newline for clarity.
Namespace types: Log
Parameters:
self (Log) : The Log instance being modified.
message (string) : The text to append to the log.
flag_active (bool) : Whether to activate the log for conditional rendering. Default value of (false).
error_type (series ErrorType) : Optional override for the severity level. Default value of (na).
Returns: The updated Log object.
method clear(self, flag_active, error_type)
Clears a Log object’s message and optionally reactivates it. Can also update the error type.
Namespace types: Log
Parameters:
self (Log) : The Log instance being cleared.
flag_active (bool) : Whether to activate the log after clearing. Default value of (false).
error_type (series ErrorType) : Optional new error type to assign. If not provided, the previous type is retained. Default value of (na).
Returns: The cleared Log object.
method render_condition(self, flag_active, error_type)
Conditionally renders the log if it is active. Allows overriding error type and controlling active state afterward.
Namespace types: Log
Parameters:
self (Log) : The Log instance to evaluate and render.
flag_active (bool) : Whether to activate the log after rendering. Default value of (false).
error_type (series ErrorType) : Optional error type override. Useful for contextual formatting just before rendering. Default value of (na).
Returns: The updated Log object.
method render_now(self, flag_active, error_type)
Immediately renders the log regardless of `active` state. Allows overriding error type and active flag.
Namespace types: Log
Parameters:
self (Log) : The Log instance to render.
flag_active (bool) : Whether to activate the log after rendering. Default value of (false).
error_type (series ErrorType) : Optional error type override. Allows dynamic severity adjustment at render time. Default value of (na).
Returns: The updated Log object.
render(self, condition, flag_active, error_type)
Renders the log conditionally or unconditionally. Allows full control over render behavior.
Parameters:
self (Log) : The Log instance to render.
condition (bool) : If true, renders only if the log is active. If false, always renders. Default value of (false).
flag_active (bool) : Whether to activate the log after rendering. Default value of (false).
error_type (series ErrorType) : Optional error type override passed to the render methods. Default value of (na).
Returns: The updated Log object.
Log
A structured object used to store and render logging messages.
Fields:
error_type (series ErrorType) : The severity level of the message (from the ErrorType enum).
message (series string) : The text of the log message.
active (series bool) : Whether the log should trigger rendering when conditionally evaluated.
INT
A wrapped integer type with attached logging for validation or tracing.
Fields:
v (series int) : The underlying `int` value.
e (Log) : Optional log object describing validation status or error context.
FLOAT
A wrapped float type with attached logging for validation or tracing.
Fields:
v (series float) : The underlying `float` value.
e (Log) : Optional log object describing validation status or error context.
BOOL
A wrapped boolean type with attached logging for validation or tracing.
Fields:
v (series bool) : The underlying `bool` value.
e (Log) : Optional log object describing validation status or error context.
STRING
A wrapped string type with attached logging for validation or tracing.
Fields:
v (series string) : The underlying `string` value.
e (Log) : Optional log object describing validation status or error context.
COLOR
A wrapped color type with attached logging for validation or tracing.
Fields:
v (series color) : The underlying `color` value.
e (Log) : Optional log object describing validation status or error context.
LINE
A wrapped line object with attached logging for validation or tracing.
Fields:
v (series line) : The underlying `line` value.
e (Log) : Optional log object describing validation status or error context.
LABEL
A wrapped label object with attached logging for validation or tracing.
Fields:
v (series label) : The underlying `label` value.
e (Log) : Optional log object describing validation status or error context.
BOX
A wrapped box object with attached logging for validation or tracing.
Fields:
v (series box) : The underlying `box` value.
e (Log) : Optional log object describing validation status or error context.
TABLE
A wrapped table object with attached logging for validation or tracing.
Fields:
v (series table) : The underlying `table` value.
e (Log) : Optional log object describing validation status or error context.
CHART_POINT
A wrapped chart point with attached logging for validation or tracing.
Fields:
v (chart.point) : The underlying `chart.point` value.
e (Log) : Optional log object describing validation status or error context.
POLYLINE
A wrapped polyline object with attached logging for validation or tracing.
Fields:
v (series polyline) : The underlying `polyline` value.
e (Log) : Optional log object describing validation status or error context.
LINEFILL
A wrapped linefill object with attached logging for validation or tracing.
Fields:
v (series linefill) : The underlying `linefill` value.
e (Log) : Optional log object describing validation status or error context.






















