Continuous Accumulation Strategy [DCA] v9🇬🇧 English: Continuous Accumulation Strategy v9.4
This script is a full-featured strategy designed to backtest the "Buy the Dip" or "Dollar Cost Averaging" (DCA) philosophy. Its core feature is the Dynamic Peak Detection logic, which solves the "lock-in" problem of previous versions. Instead of getting stuck on an old high, the strategy constantly adapts to the market by referencing the most recent peak.
Key Features
* Dynamic Peak Detection: You define the "Peak Lookback Period." For example, on a Daily chart, setting it to `5` references the peak of the last business week.
* Stable Order Management: The strategy consistently uses a fixed cash amount (e.g., $100) for each entry, which prevents any runtime errors related to negative equity.
* Publishing-Ready: To meet TradingView's requirement for a backtest report, this strategy executes a symbolic, one-time "dummy trade" (one buy and one sell) at the very beginning of the test period. This first trade should be ignored when analyzing performance , as its only purpose is to enable publication.
How It Works
The main logic follows an adaptive cycle: Find Dynamic Peak -> Wait for a Drop -> Buy on Crossover -> Repeat.
1. Finds the Dynamic Peak: On every bar, it identifies the highest price within your defined lookback period.
2. Calculates the Drop: It constantly calculates the percentage drop from this moving peak.
3. Executes an Entry: The moment the price crosses below a target drop percentage, it executes a buy order.
4. Continuously Adapts: As the price moves, the dynamic peak is constantly updated, meaning the strategy never gets locked and is always ready for the next opportunity.
How to Use This Strategy
* Focus on the Strategy Tester: After adding it to the chart, analyze the Equity Curve, Net Profit, and Max Drawdown to see how this accumulation philosophy would have performed on your favorite asset.
* Optimize Parameters: Adjust the "Peak Lookback Period" and "Drop Percentages" to fit the volatility of the asset you are testing.
This is a tool for testing and analyzing a "buy and accumulate" philosophy. Its main logic does not generate sell signals.
ابحث في النصوص البرمجية عن "curve"
عكفة الماكد المتقدمة - أبو فارس ©// 🔒 Advanced MACD Curve © 2025
// 💡 Idea & Creativity: Engineer Abu Elias
// 🛠️ Development & Implementation: Abu Fares
// 📜 All intellectual rights reserved - Copying, modifying, or redistributing is not permitted
// 🚫 Any attempt to tamper with this code or violate intellectual property rights is legally prohibited
// 📧 For inquiries and licensing: Please contact the developer, Abu Fares
عكفة الماكد المتقدمة - أبو فارس ©// 🔒 عكفة الماكد المتقدمة © 2025
// 💡 فكرة وإبداع: المهندس أبو الياس
// 🛠️ تطوير وتنفيذ: أبو فارس
// 📜 جميع الحقوق الفكرية محفوظة - لا يُسمح بالنسخ أو التعديل أو إعادة التوزيع
// 🚫 أي محاولة للعبث بهذا الكود أو انتهاك الحقوق الفكرية مرفوضة قانونياً
// 📧 للاستفسارات والتراخيص: يرجى التواصل مع المطور أبو فارس
// 🔒 Advanced MACD Curve © 2025
// 💡 Idea & Creativity: Engineer Abu Elias
// 🛠️ Development & Implementation: Abu Fares
// 📜 All intellectual rights reserved - Copying, modifying, or redistributing is not permitted
// 🚫 Any attempt to tamper with this code or violate intellectual property rights is legally prohibited
// 📧 For inquiries and licensing: Please contact the developer, Abu Fares
Hilly's Advanced Crypto Scalping Strategy - 5 Min ChartTo determine the "best" input parameters for the Advanced Crypto Scalping Strategy on a 5-minute chart, we need to consider the goals of optimizing for profitability, minimizing false signals, and adapting to the volatile nature of cryptocurrencies. The default parameters in the script are a starting point, but the optimal values depend on the specific cryptocurrency pair, market conditions, and your risk tolerance. Below, I'll provide recommended input values based on common practices in crypto scalping, along with reasoning for each parameter. I’ll also suggest how to fine-tune them using TradingView’s backtesting and optimization tools.
Recommended Input Parameters
These values are tailored for a 5-minute chart for liquid cryptocurrencies like BTC/USD or ETH/USD on exchanges like Binance or Coinbase. They aim to balance signal frequency and accuracy for day trading.
Fast EMA Length (emaFastLen): 9
Reasoning: A 9-period EMA is commonly used in scalping to capture short-term price movements while remaining sensitive to recent price action. It reacts faster than the default 10, aligning with the 5-minute timeframe.
Slow EMA Length (emaSlowLen): 21
Reasoning: A 21-period EMA provides a good balance for identifying the broader trend on a 5-minute chart. It’s slightly longer than the default 20 to reduce noise while confirming the trend direction.
RSI Length (rsiLen): 14
Reasoning: The default 14-period RSI is a standard choice for momentum analysis. It works well for detecting overbought/oversold conditions without being too sensitive on short timeframes.
RSI Overbought (rsiOverbought): 75
Reasoning: Raising the overbought threshold to 75 (from 70) reduces false sell signals in strong bullish trends, which are common in crypto markets.
RSI Oversold (rsiOversold): 25
Reasoning: Lowering the oversold threshold to 25 (from 30) filters out weaker buy signals, ensuring entries occur during stronger reversals.
MACD Fast Length (macdFast): 12
Reasoning: The default 12-period fast EMA for MACD is effective for capturing short-term momentum shifts in crypto, aligning with scalping goals.
MACD Slow Length (macdSlow): 26
Reasoning: The default 26-period slow EMA is a standard setting that works well for confirming momentum trends without lagging too much.
MACD Signal Smoothing (macdSignal): 9
Reasoning: The default 9-period signal line is widely used and provides a good balance for smoothing MACD crossovers on a 5-minute chart.
Bollinger Bands Length (bbLen): 20
Reasoning: The default 20-period Bollinger Bands are effective for identifying volatility breakouts, which are key for scalping in crypto markets.
Bollinger Bands Multiplier (bbMult): 2.0
Reasoning: A 2.0 multiplier is standard and captures most price action within the bands. Increasing it to 2.5 could reduce signals but improve accuracy in highly volatile markets.
Stop Loss % (slPerc): 0.8%
Reasoning: A tighter stop loss of 0.8% (from 1.0%) suits the high volatility of crypto, helping to limit losses on false breakouts while keeping risk manageable.
Take Profit % (tpPerc): 1.5%
Reasoning: A 1.5% take-profit target (from 2.0%) aligns with scalping’s goal of capturing small, frequent gains. Crypto markets often see quick reversals, so a smaller target increases the likelihood of hitting profits.
Use Candlestick Patterns (useCandlePatterns): True
Reasoning: Enabling candlestick patterns (e.g., engulfing, hammer) adds confirmation to signals, reducing false entries in choppy markets.
Use Volume Filter (useVolumeFilter): True
Reasoning: The volume filter ensures signals occur during high-volume breakouts, which are more likely to sustain in crypto markets.
Signal Arrow Size (signalSize): 2.0
Reasoning: Increasing the arrow size to 2.0 (from 1.5) makes buy/sell signals more visible on the chart, especially on smaller screens or volatile price action.
Background Highlight Transparency (bgTransparency): 85
Reasoning: A slightly higher transparency (85 from 80) keeps the background highlights subtle but visible, avoiding chart clutter.
How to Apply These Parameters
Copy the Script: Use the Pine Script provided in the previous response.
Paste in TradingView: Open TradingView, go to the Pine Editor, paste the code, and click "Add to Chart."
Set Parameters: In the strategy settings, manually input the recommended values above or adjust them via the input fields.
Test on a 5-Minute Chart: Apply the strategy to a liquid crypto pair (e.g., BTC/USDT, ETH/USDT) on a 5-minute chart.
Fine-Tuning for Optimal Performance
To find the absolute best parameters for your specific trading pair and market conditions, use TradingView’s Strategy Tester and optimization features:
Backtesting:
Run the strategy on historical data for your chosen pair (e.g., BTC/USDT on Binance).
Check metrics like Net Profit, Profit Factor, Win Rate, and Max Drawdown in the Strategy Tester.
Focus on a sample period of at least 1–3 months to capture various market conditions (bull, bear, sideways).
Parameter Optimization:
In the Strategy Tester, click the settings gear next to the strategy name.
Enable optimization for key inputs like emaFastLen (test range: 7–12), emaSlowLen (15–25), slPerc (0.5–1.5), and tpPerc (1.0–3.0).
Run the optimization to find the combination with the highest net profit or best Sharpe ratio, but avoid over-optimization (curve-fitting) by testing on out-of-sample data.
Market-Specific Adjustments:
Volatile Pairs (e.g., DOGE/USDT): Use tighter stop losses (e.g., 0.5–0.7%) and smaller take-profit targets (e.g., 1.0–1.2%) to account for rapid price swings.
Stable Pairs (e.g., BTC/USDT): Slightly wider stop losses (e.g., 1.0–1.2%) and take-profit targets (e.g., 1.8–2.5%) may work better.
Trending Markets: Increase emaSlowLen (e.g., to 25–30) to follow stronger trends.
Choppy Markets: Tighten bbMult (e.g., to 1.8) and lower rsiOverbought/rsiOversold (e.g., to 70/30) to filter noise.
Forward Testing:
After backtesting, run the strategy in real-time on a demo account for 1–2 weeks to validate performance under current market conditions.
Important Notes
No Universal "Best" Numbers: Optimal parameters vary by crypto pair, exchange, and market conditions (e.g., bull vs. bear market). The suggested values are a starting point based on common scalping practices.
Risk Management: Never risk more than 1–2% of your account per trade. Adjust position sizing in TradingView’s strategy settings to align with your risk tolerance.
Market Volatility: Crypto markets are highly volatile. Test the strategy on your specific pair and adjust parameters if signals are too frequent or too rare.
Not Financial Advice: This is an educational tool. Backtest thoroughly and use a demo account before trading with real funds.
If you want me to generate a chart showing backtest performance for specific parameters or to tweak the script further (e.g., adding more indicators or adjusting signal logic), let me know!can you add clear buy ans sell signs above the candles in this codeTo add clear buy and sell signals above the candles in the provided Pine Script, I'll modify the existing code to include prominent text labels directly above (for sell signals) and below (for buy signals) the candles. These labels will be larger, color-coded, and positioned to avoid clutter, ensuring they are easily visible on the chart. The core strategy logic (EMA, RSI, MACD, Bollinger Bands, candlestick patterns, and volume filter) will remain unchanged, and I'll reuse the same artifact_id since this is an update to the previous script.AdvancedCryptoScalpingStrategy.pinex-pine
Composite Sentiment Indicator (SPY/QQQ/SOXX + VixFix)# Multi-Index Composite Sentiment Indicator
A comprehensive sentiment indicator that works across SPY, QQQ, SOXX, and custom symbols. Combines volatility, options flow, macro factors, technicals, and seasonality into a single z-score composite.
## What It Does
Takes multiple market sentiment inputs (VIX, put/call ratios, breadth, yields, etc.) and smooshes them into one normalized line. When the composite is high = markets getting spooked. When it's low = markets getting complacent.
## Key Features
- **Multi-Index Support**: Automatically adapts for SPY (uses VIX), QQQ (uses VXN), SOXX (uses VixFix), or custom symbols
- **VixFix Integration**: Larry Williams' VixFix for indices without dedicated VIX measures
- **Signal MA**: Choose from SMA/EMA/WMA/HMA/TEMA/DEMA with color coding (red above MA = risk-on, green below = risk-off)
- **September Focus**: Built-in seasonality weighting for September weakness patterns
- **Comprehensive Components**: Volatility, options sentiment, macro factors, technicals, and sector-specific metrics
## How to Use
**Basic Setup:**
1. Pick your index (SPY/QQQ/SOXX)
2. Choose signal MA type and length (EMA 21 is a good start)
3. Watch for extreme readings and MA crossovers
**Color Signals:**
- Red composite = above signal MA = bearish sentiment
- Green composite = below signal MA = bullish sentiment
- Extreme high readings (red background) = potential tops
- Extreme low readings (green background) = potential bottoms
**For Different Indices:**
- **QQQ**: Uses NASDAQ VIX (VXN) when available, falls back to VixFix
- **SOXX**: Includes semiconductor cycle indicators, uses VixFix for volatility
- **Custom**: Adapts automatically, relies on VixFix and general market metrics
## Components Included
**Volatility**: VIX/VXN/VixFix, term structure, historical vol
**Options**: Put/call ratios, SKEW index
**Macro**: DXY, 10Y yields, yield curve, TIPS spreads
**Technical**: RSI deviation, momentum
**Seasonality**: September effects, quad witching, month-end patterns
**Breadth**: S&P 500 and NASDAQ breadth measures
## Pro Tips
- Works well on Daily Timeframe
- September gets extra weight automatically - watch for August setup signals
- Keltner envelope breaks often mark sentiment exhaustion points
- Use alerts for extreme readings and MA crossovers
Works best when you understand that sentiment extremes often mark turning points, not continuation signals. High readings don't mean "keep shorting" - they mean "start looking for reversal setups."
## Settings Worth Tweaking
- Signal MA type/length for your timeframe
- Component weights based on what matters for your index
- Envelope multipliers for your risk tolerance
- VixFix parameters if default doesn't fit your symbol's volatility
The table shows all current component readings so you can see what's driving the signal. Good for context and debugging weird readings.
COT-App//the COT-App generates potential trading signals for commodities and currencies futures based on the weekly COT data of the CFTC
//the COT data commercial netto, commercial short, non commercial short, non commercial long, a commercial netto oscillator, the ratio of commercial short tot he open interest and the open interest (types of COT data) can be shown as chart
//for each type of COT data you can define and set an extreme long and short level
//the COT types commercial netto, commercial short and commercial netto generate potential trading signals if the curve of type of COT data runs into the defined long or short extreme area
//a potential trading signal will be stronger if in additon further types of COT data runs in the same extreme area long or short
//
Top and Bottom Probability
The top and bottom probability oscillator is an educational indicator that estimates the probability of a local top or bottom using four ingredients:
price extension since the last RSI overbought/oversold,
time since that OB/OS event,
RSI divergence strength,
Directional Momentum Velocity (DMV) — a normalized, signed trend velocity.
It plots RSI, two probability histograms (Top %, Bottom %), and an optional 0–100 velocity gauge.
How to read it
RSI & Levels: Standard RSI with OB/OS lines (70/30 by default).
Prob Top (%): Red histogram, 0–100. Higher values suggest increasing risk of a local top after an RSI overbought anchor.
Prob Bottom (%): Green histogram, 0–100. Higher values suggest increasing chance of a local bottom after an RSI oversold anchor.
Velocity (0–100): Optional line. Above 50 = positive/upward DMV; below 50 = negative/downward DMV. DMV pushes Top risk when trending down and Bottom chance when trending up.
These are composite, scale-free scores, not certainties or trade signals.
What the probabilities consider
Price Delta: How far price has moved beyond the last OB (for tops) or below the last OS (for bottoms). More extension → higher probability.
Time Since OB/OS: Longer time since the anchor → higher probability (until capped by the “Time Normalization (bars)” input).
Oscillator Divergence: RSI pulling away from its last OB/OS reading in the opposite direction implies weakening momentum and increases probability.
Directional Momentum Velocity (DMV):
Computes a regression slope of hlc3 vs. bar index, normalized by ATR, then squashed with tanh.
Downward DMV boosts Top probability; upward DMV boosts Bottom probability.
Toggle the velocity plot and adjust its sensitivity with Velocity Lookback, ATR Length, and Velocity Gain.
All four terms are blended with user-set weights. If Normalize Weights is ON, weights are rescaled to sum to 1.
Inputs (most useful)
RSI Length / OB / OS: Core RSI setup.
Time Normalization (bars): Sets how quickly the “time since OB/OS” term ramps from 0→1.
Weights:
Price Delta, Time Since OB/OS, Osc Divergence, Directional Velocity.
Turn Normalize Weights ON to keep the blend consistent when you experiment.
Settings:
Velocity Lookback: Window for slope estimation (shorter = more reactive).
ATR Length: Normalizes slope so symbols/timeframes are comparable.
Velocity Gain: Steepens or softens the tanh curve (higher = punchier extremes).
Show Velocity (0–100): Toggles the DMV display.
Tip: If you prefer momentum measured on RSI rather than price, in the DMV block replace hlc3 with rsi (concept stays identical).
Practical tips
Use Top/Bottom % as context, not triggers. Combine with structure (S/R), trend filters, and risk management.
On strong trends, expect the opposite probability (e.g., Top % during an uptrend) to stay suppressed longer.
Calibrate weights: e.g., raise Osc Divergence on mean-reversion symbols; raise Velocity in trending markets.
For lower noise: lengthen Velocity Lookback and ATR Length, or reduce Velocity Gain.
MACD Aspray Hybrid Bars (teal/red) = raw momentum (Aspray Histogram).
Teal line = smooth curve of the histogram (Aspray Line).
Orange line = 9-EMA of that line (new signal).
Zero line for reference.
ConeWave MACoRa Wave is a custom-weighted moving average designed to adapt intelligently to market dynamics. It builds upon the foundational logic of the Comp_Ratio_MA by @redktrader, incorporating a compound ratio-based weighting curve that emphasizes recent price action while preserving smoothness and structure with pinescript version 6.
This version introduces modular enhancements, including:
A Comp Ratio Multiplier for fine-tuned responsiveness
Optional Auto Smoothing based on wave length
Streamlined plotting for clarity and performance
Whether you're confirming market structure, identifying trend shifts, or seeking a cleaner alternative to noisy indicators, CoRa Wave offers a visually intuitive and mathematically elegant solution.
🛠 Reimagined by @atulgalande75 — optimized for traders who value precision, adaptability, and clean charting. Original concept by @redktrader.
Triple EMA Trend TP Strategy (Filtered Entries + Dynamic Exit)Overview
The Triple EMA Trend TP Strategy is a robust trend-following approach designed for clear, disciplined entries and exits. It leverages a triple EMA crossover for entry signals, combined with a long‑term SMA trend filter, a fixed take‑profit percentage, and a dynamic dual‑EMA exit mechanism to optimize performance and risk management.
Key Features
Triple EMA Crossover Entry
Detects momentum shifts by waiting for the fast EMA to cross above the slow EMA, signaling bullish momentum buildup.
Trend Filter (SMA)
Ensures trades are only taken when price is above the long-term trend (SMA), filtering out low-probability setups.
Take Profit (TP)
Applies a customizable fixed TP, e.g., defaulting to 9.8%, allowing disciplined profit-taking.
Dual EMA Exit
Uses two EMAs on a separate exit logic—if the short exit EMA undercuts the mid exit EMA, the strategy closes the position.
Adjustable Parameters
All key lengths—including fast, mid, slow entry EMAs, trend SMA, exit EMAs, and TP percentage—are user-configurable to suit different assets and timeframes.
Date Range Control
Users can define a backtest window with start and end dates, preventing misleading performance outside intended periods.
Flexible Position Management
Supports full‑equity position sizing, pyramiding up to 10 entries, and runs every tick for high precision.
Setup & Inputs
fastLen: Entry Fast EMA
midLen: Entry Mid EMA
slowLen: Entry Slow EMA
trendLen: Trend Filter SMA
tpPercent: Take Profit Percentage
exitFastLen: Exit Fast EMA
exitMidLen: Exit Mid EMA
startDate / endDate: Backtest time range
Why This Strategy Stands Out
This strategy marries classic trend-following principles with modern risk-control tactics, making it both intuitive and advanced. It balances aggressive entry signals with safety checks via trend validation and layered exit logic. The inclusion of a TP ensures profits are locked in, while the dual EMA exit adds adaptive flexibility to close positions when momentum fades.
How to Use & Customize
Configure Inputs
Adjust EMAs, trend length, and TP percentage to fit your asset and timeframe. For example, shorter EMAs suit intraday trading; longer ones work well for swing strategies.
Set Backtest Range
Use the start/end date fields to limit your testing to the most relevant data, reducing noise from irrelevant market periods.
Backtest & Optimize
Review the Strategy Tester’s performance metrics—Equity curve, drawdown, profit factor, trade list—to assess effectiveness.
Fine‑Tune
Tweak TP, EMAs, or trend length to optimize drawdowns, win rate, or return profile.
CVD Polarity Indicator (With Rolling Smoothed)📊 CVD Polarity Indicator (with Rolling Smoothing)
Purpose
The CVD Polarity Indicator combines Cumulative Volume Delta (CVD) with price bar direction to measure whether buying or selling pressure is in agreement with price action. It then smooths that signal over time, making it easier to see underlying volume-driven market trends.
This indicator is essentially a volume–price agreement oscillator:
- It compares price direction with volume delta (CVD).
- Translates that into per-bar polarity.
- Smooths it into a rolling sum for clarity.
- Adds a short EMA to highlight turning points.
The end result: a tool that helps you see when price action is backed by real volume flows versus when it’s running on weak participation.
__________________________________________________________________________________
1. Cumulative Volume Delta (CVD)
What it is:
CVD is the cumulative sum of buying vs. selling pressure measured by volume.
- If a bar closes higher than it opens → that bar’s volume is treated as buying pressure (+volume).
- If a bar closes lower than it opens → that bar’s volume is treated as selling pressure (–volume).
Rolling version:
Instead of accumulating indefinitely (which just creates a line that trends forever), this indicator uses a rolling sum over a user-defined number of bars (cumulation_length, default 14).
- This shows the net delta in recent bars, making the CVD more responsive and localized.
2. Bar Direction vs. CVD Change
Each bar has two pieces of directional information:
1. Bar direction: Whether the candle closed above or below its open (close - open).
2. CVD change: Whether cumulative delta increased or decreased from the prior bar (cvd - cvd ).
By comparing these two:
- Agreement (both up or both down):
→ Polarity = +volume (if bullish) or –volume (if bearish).
- Disagreement (bar up but CVD down, or bar down but CVD up):
→ Polarity flips sign, signaling divergence between price and volume.
Thus, raw polarity = a per-bar measure of whether price action and volume delta are in sync.
3. Polarity Smoothing (Rolling Polarity)
- Problem with raw polarity:
It flips bar-to-bar and looks very jagged — not great for seeing trends.
- Solution:
The indicator applies a rolling sum over the past polarity_length bars (default 14).
- This creates a smoother curve, representing the net polarity over time.
- Positive values = net bullish alignment (buyers stronger).
- Negative values = net bearish alignment (sellers stronger).
Think of it like an oscillator showing whether buyers or sellers have had control recently.
4. EMA Smoothing
Finally, a 10-period EMA is applied on top of the rolling polarity line:
- This further reduces noise.
- It helps highlight shifts in the underlying polarity trend.
- Crossovers of the polarity line and its EMA can serve as trade signals (bullish/bearish inflection points).
________________________________________________________________________________
How to Read It
1. Polarity above zero → Recent bars show more bullish agreement between price and volume.
2. Polarity below zero → Recent bars show more bearish agreement.
3. Polarity diverging from price → If price goes up but polarity trends down, it signals weakening buying pressure (potential reversal).
4. EMA crossovers →
- Polarity crossing above its EMA = bullish momentum shift.
- Polarity crossing below its EMA = bearish momentum shift.
Practical Use Cases
- Trend Confirmation
Use polarity to confirm whether a price move is supported by volume. If price rallies but
polarity stays negative, the move is weak.
- Divergence Signals
Watch for divergences between price trend and polarity trend (e.g., higher highs in price but
lower highs in polarity).
- Momentum Shifts
Use EMA crossovers as signals that the underlying balance of buying/selling has flipped.
Markov Chain [3D] | FractalystWhat exactly is a Markov Chain?
This indicator uses a Markov Chain model to analyze, quantify, and visualize the transitions between market regimes (Bull, Bear, Neutral) on your chart. It dynamically detects these regimes in real-time, calculates transition probabilities, and displays them as animated 3D spheres and arrows, giving traders intuitive insight into current and future market conditions.
How does a Markov Chain work, and how should I read this spheres-and-arrows diagram?
Think of three weather modes: Sunny, Rainy, Cloudy.
Each sphere is one mode. The loop on a sphere means “stay the same next step” (e.g., Sunny again tomorrow).
The arrows leaving a sphere show where things usually go next if they change (e.g., Sunny moving to Cloudy).
Some paths matter more than others. A more prominent loop means the current mode tends to persist. A more prominent outgoing arrow means a change to that destination is the usual next step.
Direction isn’t symmetric: moving Sunny→Cloudy can behave differently than Cloudy→Sunny.
Now relabel the spheres to markets: Bull, Bear, Neutral.
Spheres: market regimes (uptrend, downtrend, range).
Self‑loop: tendency for the current regime to continue on the next bar.
Arrows: the most common next regime if a switch happens.
How to read: Start at the sphere that matches current bar state. If the loop stands out, expect continuation. If one outgoing path stands out, that switch is the typical next step. Opposite directions can differ (Bear→Neutral doesn’t have to match Neutral→Bear).
What states and transitions are shown?
The three market states visualized are:
Bullish (Bull): Upward or strong-market regime.
Bearish (Bear): Downward or weak-market regime.
Neutral: Sideways or range-bound regime.
Bidirectional animated arrows and probability labels show how likely the market is to move from one regime to another (e.g., Bull → Bear or Neutral → Bull).
How does the regime detection system work?
You can use either built-in price returns (based on adaptive Z-score normalization) or supply three custom indicators (such as volume, oscillators, etc.).
Values are statistically normalized (Z-scored) over a configurable lookback period.
The normalized outputs are classified into Bull, Bear, or Neutral zones.
If using three indicators, their regime signals are averaged and smoothed for robustness.
How are transition probabilities calculated?
On every confirmed bar, the algorithm tracks the sequence of detected market states, then builds a rolling window of transitions.
The code maintains a transition count matrix for all regime pairs (e.g., Bull → Bear).
Transition probabilities are extracted for each possible state change using Laplace smoothing for numerical stability, and frequently updated in real-time.
What is unique about the visualization?
3D animated spheres represent each regime and change visually when active.
Animated, bidirectional arrows reveal transition probabilities and allow you to see both dominant and less likely regime flows.
Particles (moving dots) animate along the arrows, enhancing the perception of regime flow direction and speed.
All elements dynamically update with each new price bar, providing a live market map in an intuitive, engaging format.
Can I use custom indicators for regime classification?
Yes! Enable the "Custom Indicators" switch and select any three chart series as inputs. These will be normalized and combined (each with equal weight), broadening the regime classification beyond just price-based movement.
What does the “Lookback Period” control?
Lookback Period (default: 100) sets how much historical data builds the probability matrix. Shorter periods adapt faster to regime changes but may be noisier. Longer periods are more stable but slower to adapt.
How is this different from a Hidden Markov Model (HMM)?
It sets the window for both regime detection and probability calculations. Lower values make the system more reactive, but potentially noisier. Higher values smooth estimates and make the system more robust.
How is this Markov Chain different from a Hidden Markov Model (HMM)?
Markov Chain (as here): All market regimes (Bull, Bear, Neutral) are directly observable on the chart. The transition matrix is built from actual detected regimes, keeping the model simple and interpretable.
Hidden Markov Model: The actual regimes are unobservable ("hidden") and must be inferred from market output or indicator "emissions" using statistical learning algorithms. HMMs are more complex, can capture more subtle structure, but are harder to visualize and require additional machine learning steps for training.
A standard Markov Chain models transitions between observable states using a simple transition matrix, while a Hidden Markov Model assumes the true states are hidden (latent) and must be inferred from observable “emissions” like price or volume data. In practical terms, a Markov Chain is transparent and easier to implement and interpret; an HMM is more expressive but requires statistical inference to estimate hidden states from data.
Markov Chain: states are observable; you directly count or estimate transition probabilities between visible states. This makes it simpler, faster, and easier to validate and tune.
HMM: states are hidden; you only observe emissions generated by those latent states. Learning involves machine learning/statistical algorithms (commonly Baum–Welch/EM for training and Viterbi for decoding) to infer both the transition dynamics and the most likely hidden state sequence from data.
How does the indicator avoid “repainting” or look-ahead bias?
All regime changes and matrix updates happen only on confirmed (closed) bars, so no future data is leaked, ensuring reliable real-time operation.
Are there practical tuning tips?
Tune the Lookback Period for your asset/timeframe: shorter for fast markets, longer for stability.
Use custom indicators if your asset has unique regime drivers.
Watch for rapid changes in transition probabilities as early warning of a possible regime shift.
Who is this indicator for?
Quants and quantitative researchers exploring probabilistic market modeling, especially those interested in regime-switching dynamics and Markov models.
Programmers and system developers who need a probabilistic regime filter for systematic and algorithmic backtesting:
The Markov Chain indicator is ideally suited for programmatic integration via its bias output (1 = Bull, 0 = Neutral, -1 = Bear).
Although the visualization is engaging, the core output is designed for automated, rules-based workflows—not for discretionary/manual trading decisions.
Developers can connect the indicator’s output directly to their Pine Script logic (using input.source()), allowing rapid and robust backtesting of regime-based strategies.
It acts as a plug-and-play regime filter: simply plug the bias output into your entry/exit logic, and you have a scientifically robust, probabilistically-derived signal for filtering, timing, position sizing, or risk regimes.
The MC's output is intentionally "trinary" (1/0/-1), focusing on clear regime states for unambiguous decision-making in code. If you require nuanced, multi-probability or soft-label state vectors, consider expanding the indicator or stacking it with a probability-weighted logic layer in your scripting.
Because it avoids subjectivity, this approach is optimal for systematic quants, algo developers building backtested, repeatable strategies based on probabilistic regime analysis.
What's the mathematical foundation behind this?
The mathematical foundation behind this Markov Chain indicator—and probabilistic regime detection in finance—draws from two principal models: the (standard) Markov Chain and the Hidden Markov Model (HMM).
How to use this indicator programmatically?
The Markov Chain indicator automatically exports a bias value (+1 for Bullish, -1 for Bearish, 0 for Neutral) as a plot visible in the Data Window. This allows you to integrate its regime signal into your own scripts and strategies for backtesting, automation, or live trading.
Step-by-Step Integration with Pine Script (input.source)
Add the Markov Chain indicator to your chart.
This must be done first, since your custom script will "pull" the bias signal from the indicator's plot.
In your strategy, create an input using input.source()
Example:
//@version=5
strategy("MC Bias Strategy Example")
mcBias = input.source(close, "MC Bias Source")
After saving, go to your script’s settings. For the “MC Bias Source” input, select the plot/output of the Markov Chain indicator (typically its bias plot).
Use the bias in your trading logic
Example (long only on Bull, flat otherwise):
if mcBias == 1
strategy.entry("Long", strategy.long)
else
strategy.close("Long")
For more advanced workflows, combine mcBias with additional filters or trailing stops.
How does this work behind-the-scenes?
TradingView’s input.source() lets you use any plot from another indicator as a real-time, “live” data feed in your own script (source).
The selected bias signal is available to your Pine code as a variable, enabling logical decisions based on regime (trend-following, mean-reversion, etc.).
This enables powerful strategy modularity : decouple regime detection from entry/exit logic, allowing fast experimentation without rewriting core signal code.
Integrating 45+ Indicators with Your Markov Chain — How & Why
The Enhanced Custom Indicators Export script exports a massive suite of over 45 technical indicators—ranging from classic momentum (RSI, MACD, Stochastic, etc.) to trend, volume, volatility, and oscillator tools—all pre-calculated, centered/scaled, and available as plots.
// Enhanced Custom Indicators Export - 45 Technical Indicators
// Comprehensive technical analysis suite for advanced market regime detection
//@version=6
indicator('Enhanced Custom Indicators Export | Fractalyst', shorttitle='Enhanced CI Export', overlay=false, scale=scale.right, max_labels_count=500, max_lines_count=500)
// |----- Input Parameters -----| //
momentum_group = "Momentum Indicators"
trend_group = "Trend Indicators"
volume_group = "Volume Indicators"
volatility_group = "Volatility Indicators"
oscillator_group = "Oscillator Indicators"
display_group = "Display Settings"
// Common lengths
length_14 = input.int(14, "Standard Length (14)", minval=1, maxval=100, group=momentum_group)
length_20 = input.int(20, "Medium Length (20)", minval=1, maxval=200, group=trend_group)
length_50 = input.int(50, "Long Length (50)", minval=1, maxval=200, group=trend_group)
// Display options
show_table = input.bool(true, "Show Values Table", group=display_group)
table_size = input.string("Small", "Table Size", options= , group=display_group)
// |----- MOMENTUM INDICATORS (15 indicators) -----| //
// 1. RSI (Relative Strength Index)
rsi_14 = ta.rsi(close, length_14)
rsi_centered = rsi_14 - 50
// 2. Stochastic Oscillator
stoch_k = ta.stoch(close, high, low, length_14)
stoch_d = ta.sma(stoch_k, 3)
stoch_centered = stoch_k - 50
// 3. Williams %R
williams_r = ta.stoch(close, high, low, length_14) - 100
// 4. MACD (Moving Average Convergence Divergence)
= ta.macd(close, 12, 26, 9)
// 5. Momentum (Rate of Change)
momentum = ta.mom(close, length_14)
momentum_pct = (momentum / close ) * 100
// 6. Rate of Change (ROC)
roc = ta.roc(close, length_14)
// 7. Commodity Channel Index (CCI)
cci = ta.cci(close, length_20)
// 8. Money Flow Index (MFI)
mfi = ta.mfi(close, length_14)
mfi_centered = mfi - 50
// 9. Awesome Oscillator (AO)
ao = ta.sma(hl2, 5) - ta.sma(hl2, 34)
// 10. Accelerator Oscillator (AC)
ac = ao - ta.sma(ao, 5)
// 11. Chande Momentum Oscillator (CMO)
cmo = ta.cmo(close, length_14)
// 12. Detrended Price Oscillator (DPO)
dpo = close - ta.sma(close, length_20)
// 13. Price Oscillator (PPO)
ppo = ta.sma(close, 12) - ta.sma(close, 26)
ppo_pct = (ppo / ta.sma(close, 26)) * 100
// 14. TRIX
trix_ema1 = ta.ema(close, length_14)
trix_ema2 = ta.ema(trix_ema1, length_14)
trix_ema3 = ta.ema(trix_ema2, length_14)
trix = ta.roc(trix_ema3, 1) * 10000
// 15. Klinger Oscillator
klinger = ta.ema(volume * (high + low + close) / 3, 34) - ta.ema(volume * (high + low + close) / 3, 55)
// 16. Fisher Transform
fisher_hl2 = 0.5 * (hl2 - ta.lowest(hl2, 10)) / (ta.highest(hl2, 10) - ta.lowest(hl2, 10)) - 0.25
fisher = 0.5 * math.log((1 + fisher_hl2) / (1 - fisher_hl2))
// 17. Stochastic RSI
stoch_rsi = ta.stoch(rsi_14, rsi_14, rsi_14, length_14)
stoch_rsi_centered = stoch_rsi - 50
// 18. Relative Vigor Index (RVI)
rvi_num = ta.swma(close - open)
rvi_den = ta.swma(high - low)
rvi = rvi_den != 0 ? rvi_num / rvi_den : 0
// 19. Balance of Power (BOP)
bop = (close - open) / (high - low)
// |----- TREND INDICATORS (10 indicators) -----| //
// 20. Simple Moving Average Momentum
sma_20 = ta.sma(close, length_20)
sma_momentum = ((close - sma_20) / sma_20) * 100
// 21. Exponential Moving Average Momentum
ema_20 = ta.ema(close, length_20)
ema_momentum = ((close - ema_20) / ema_20) * 100
// 22. Parabolic SAR
sar = ta.sar(0.02, 0.02, 0.2)
sar_trend = close > sar ? 1 : -1
// 23. Linear Regression Slope
lr_slope = ta.linreg(close, length_20, 0) - ta.linreg(close, length_20, 1)
// 24. Moving Average Convergence (MAC)
mac = ta.sma(close, 10) - ta.sma(close, 30)
// 25. Trend Intensity Index (TII)
tii_sum = 0.0
for i = 1 to length_20
tii_sum += close > close ? 1 : 0
tii = (tii_sum / length_20) * 100
// 26. Ichimoku Cloud Components
ichimoku_tenkan = (ta.highest(high, 9) + ta.lowest(low, 9)) / 2
ichimoku_kijun = (ta.highest(high, 26) + ta.lowest(low, 26)) / 2
ichimoku_signal = ichimoku_tenkan > ichimoku_kijun ? 1 : -1
// 27. MESA Adaptive Moving Average (MAMA)
mama_alpha = 2.0 / (length_20 + 1)
mama = ta.ema(close, length_20)
mama_momentum = ((close - mama) / mama) * 100
// 28. Zero Lag Exponential Moving Average (ZLEMA)
zlema_lag = math.round((length_20 - 1) / 2)
zlema_data = close + (close - close )
zlema = ta.ema(zlema_data, length_20)
zlema_momentum = ((close - zlema) / zlema) * 100
// |----- VOLUME INDICATORS (6 indicators) -----| //
// 29. On-Balance Volume (OBV)
obv = ta.obv
// 30. Volume Rate of Change (VROC)
vroc = ta.roc(volume, length_14)
// 31. Price Volume Trend (PVT)
pvt = ta.pvt
// 32. Negative Volume Index (NVI)
nvi = 0.0
nvi := volume < volume ? nvi + ((close - close ) / close ) * nvi : nvi
// 33. Positive Volume Index (PVI)
pvi = 0.0
pvi := volume > volume ? pvi + ((close - close ) / close ) * pvi : pvi
// 34. Volume Oscillator
vol_osc = ta.sma(volume, 5) - ta.sma(volume, 10)
// 35. Ease of Movement (EOM)
eom_distance = high - low
eom_box_height = volume / 1000000
eom = eom_box_height != 0 ? eom_distance / eom_box_height : 0
eom_sma = ta.sma(eom, length_14)
// 36. Force Index
force_index = volume * (close - close )
force_index_sma = ta.sma(force_index, length_14)
// |----- VOLATILITY INDICATORS (10 indicators) -----| //
// 37. Average True Range (ATR)
atr = ta.atr(length_14)
atr_pct = (atr / close) * 100
// 38. Bollinger Bands Position
bb_basis = ta.sma(close, length_20)
bb_dev = 2.0 * ta.stdev(close, length_20)
bb_upper = bb_basis + bb_dev
bb_lower = bb_basis - bb_dev
bb_position = bb_dev != 0 ? (close - bb_basis) / bb_dev : 0
bb_width = bb_dev != 0 ? (bb_upper - bb_lower) / bb_basis * 100 : 0
// 39. Keltner Channels Position
kc_basis = ta.ema(close, length_20)
kc_range = ta.ema(ta.tr, length_20)
kc_upper = kc_basis + (2.0 * kc_range)
kc_lower = kc_basis - (2.0 * kc_range)
kc_position = kc_range != 0 ? (close - kc_basis) / kc_range : 0
// 40. Donchian Channels Position
dc_upper = ta.highest(high, length_20)
dc_lower = ta.lowest(low, length_20)
dc_basis = (dc_upper + dc_lower) / 2
dc_position = (dc_upper - dc_lower) != 0 ? (close - dc_basis) / (dc_upper - dc_lower) : 0
// 41. Standard Deviation
std_dev = ta.stdev(close, length_20)
std_dev_pct = (std_dev / close) * 100
// 42. Relative Volatility Index (RVI)
rvi_up = ta.stdev(close > close ? close : 0, length_14)
rvi_down = ta.stdev(close < close ? close : 0, length_14)
rvi_total = rvi_up + rvi_down
rvi_volatility = rvi_total != 0 ? (rvi_up / rvi_total) * 100 : 50
// 43. Historical Volatility
hv_returns = math.log(close / close )
hv = ta.stdev(hv_returns, length_20) * math.sqrt(252) * 100
// 44. Garman-Klass Volatility
gk_vol = math.log(high/low) * math.log(high/low) - (2*math.log(2)-1) * math.log(close/open) * math.log(close/open)
gk_volatility = math.sqrt(ta.sma(gk_vol, length_20)) * 100
// 45. Parkinson Volatility
park_vol = math.log(high/low) * math.log(high/low)
parkinson = math.sqrt(ta.sma(park_vol, length_20) / (4 * math.log(2))) * 100
// 46. Rogers-Satchell Volatility
rs_vol = math.log(high/close) * math.log(high/open) + math.log(low/close) * math.log(low/open)
rogers_satchell = math.sqrt(ta.sma(rs_vol, length_20)) * 100
// |----- OSCILLATOR INDICATORS (5 indicators) -----| //
// 47. Elder Ray Index
elder_bull = high - ta.ema(close, 13)
elder_bear = low - ta.ema(close, 13)
elder_power = elder_bull + elder_bear
// 48. Schaff Trend Cycle (STC)
stc_macd = ta.ema(close, 23) - ta.ema(close, 50)
stc_k = ta.stoch(stc_macd, stc_macd, stc_macd, 10)
stc_d = ta.ema(stc_k, 3)
stc = ta.stoch(stc_d, stc_d, stc_d, 10)
// 49. Coppock Curve
coppock_roc1 = ta.roc(close, 14)
coppock_roc2 = ta.roc(close, 11)
coppock = ta.wma(coppock_roc1 + coppock_roc2, 10)
// 50. Know Sure Thing (KST)
kst_roc1 = ta.roc(close, 10)
kst_roc2 = ta.roc(close, 15)
kst_roc3 = ta.roc(close, 20)
kst_roc4 = ta.roc(close, 30)
kst = ta.sma(kst_roc1, 10) + 2*ta.sma(kst_roc2, 10) + 3*ta.sma(kst_roc3, 10) + 4*ta.sma(kst_roc4, 15)
// 51. Percentage Price Oscillator (PPO)
ppo_line = ((ta.ema(close, 12) - ta.ema(close, 26)) / ta.ema(close, 26)) * 100
ppo_signal = ta.ema(ppo_line, 9)
ppo_histogram = ppo_line - ppo_signal
// |----- PLOT MAIN INDICATORS -----| //
// Plot key momentum indicators
plot(rsi_centered, title="01_RSI_Centered", color=color.purple, linewidth=1)
plot(stoch_centered, title="02_Stoch_Centered", color=color.blue, linewidth=1)
plot(williams_r, title="03_Williams_R", color=color.red, linewidth=1)
plot(macd_histogram, title="04_MACD_Histogram", color=color.orange, linewidth=1)
plot(cci, title="05_CCI", color=color.green, linewidth=1)
// Plot trend indicators
plot(sma_momentum, title="06_SMA_Momentum", color=color.navy, linewidth=1)
plot(ema_momentum, title="07_EMA_Momentum", color=color.maroon, linewidth=1)
plot(sar_trend, title="08_SAR_Trend", color=color.teal, linewidth=1)
plot(lr_slope, title="09_LR_Slope", color=color.lime, linewidth=1)
plot(mac, title="10_MAC", color=color.fuchsia, linewidth=1)
// Plot volatility indicators
plot(atr_pct, title="11_ATR_Pct", color=color.yellow, linewidth=1)
plot(bb_position, title="12_BB_Position", color=color.aqua, linewidth=1)
plot(kc_position, title="13_KC_Position", color=color.olive, linewidth=1)
plot(std_dev_pct, title="14_StdDev_Pct", color=color.silver, linewidth=1)
plot(bb_width, title="15_BB_Width", color=color.gray, linewidth=1)
// Plot volume indicators
plot(vroc, title="16_VROC", color=color.blue, linewidth=1)
plot(eom_sma, title="17_EOM", color=color.red, linewidth=1)
plot(vol_osc, title="18_Vol_Osc", color=color.green, linewidth=1)
plot(force_index_sma, title="19_Force_Index", color=color.orange, linewidth=1)
plot(obv, title="20_OBV", color=color.purple, linewidth=1)
// Plot additional oscillators
plot(ao, title="21_Awesome_Osc", color=color.navy, linewidth=1)
plot(cmo, title="22_CMO", color=color.maroon, linewidth=1)
plot(dpo, title="23_DPO", color=color.teal, linewidth=1)
plot(trix, title="24_TRIX", color=color.lime, linewidth=1)
plot(fisher, title="25_Fisher", color=color.fuchsia, linewidth=1)
// Plot more momentum indicators
plot(mfi_centered, title="26_MFI_Centered", color=color.yellow, linewidth=1)
plot(ac, title="27_AC", color=color.aqua, linewidth=1)
plot(ppo_pct, title="28_PPO_Pct", color=color.olive, linewidth=1)
plot(stoch_rsi_centered, title="29_StochRSI_Centered", color=color.silver, linewidth=1)
plot(klinger, title="30_Klinger", color=color.gray, linewidth=1)
// Plot trend continuation
plot(tii, title="31_TII", color=color.blue, linewidth=1)
plot(ichimoku_signal, title="32_Ichimoku_Signal", color=color.red, linewidth=1)
plot(mama_momentum, title="33_MAMA_Momentum", color=color.green, linewidth=1)
plot(zlema_momentum, title="34_ZLEMA_Momentum", color=color.orange, linewidth=1)
plot(bop, title="35_BOP", color=color.purple, linewidth=1)
// Plot volume continuation
plot(nvi, title="36_NVI", color=color.navy, linewidth=1)
plot(pvi, title="37_PVI", color=color.maroon, linewidth=1)
plot(momentum_pct, title="38_Momentum_Pct", color=color.teal, linewidth=1)
plot(roc, title="39_ROC", color=color.lime, linewidth=1)
plot(rvi, title="40_RVI", color=color.fuchsia, linewidth=1)
// Plot volatility continuation
plot(dc_position, title="41_DC_Position", color=color.yellow, linewidth=1)
plot(rvi_volatility, title="42_RVI_Volatility", color=color.aqua, linewidth=1)
plot(hv, title="43_Historical_Vol", color=color.olive, linewidth=1)
plot(gk_volatility, title="44_GK_Volatility", color=color.silver, linewidth=1)
plot(parkinson, title="45_Parkinson_Vol", color=color.gray, linewidth=1)
// Plot final oscillators
plot(rogers_satchell, title="46_RS_Volatility", color=color.blue, linewidth=1)
plot(elder_power, title="47_Elder_Power", color=color.red, linewidth=1)
plot(stc, title="48_STC", color=color.green, linewidth=1)
plot(coppock, title="49_Coppock", color=color.orange, linewidth=1)
plot(kst, title="50_KST", color=color.purple, linewidth=1)
// Plot final indicators
plot(ppo_histogram, title="51_PPO_Histogram", color=color.navy, linewidth=1)
plot(pvt, title="52_PVT", color=color.maroon, linewidth=1)
// |----- Reference Lines -----| //
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dashed, linewidth=1)
hline(50, "Midline", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(-50, "Lower Midline", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(25, "Upper Threshold", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(-25, "Lower Threshold", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
// |----- Enhanced Information Table -----| //
if show_table and barstate.islast
table_position = position.top_right
table_text_size = table_size == "Tiny" ? size.tiny : table_size == "Small" ? size.small : size.normal
var table info_table = table.new(table_position, 3, 18, bgcolor=color.new(color.white, 85), border_width=1, border_color=color.gray)
// Headers
table.cell(info_table, 0, 0, 'Category', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
table.cell(info_table, 1, 0, 'Indicator', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
table.cell(info_table, 2, 0, 'Value', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
// Key Momentum Indicators
table.cell(info_table, 0, 1, 'MOMENTUM', text_color=color.purple, text_size=table_text_size, bgcolor=color.new(color.purple, 90))
table.cell(info_table, 1, 1, 'RSI Centered', text_color=color.purple, text_size=table_text_size)
table.cell(info_table, 2, 1, str.tostring(rsi_centered, '0.00'), text_color=color.purple, text_size=table_text_size)
table.cell(info_table, 0, 2, '', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 1, 2, 'Stoch Centered', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 2, str.tostring(stoch_centered, '0.00'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 3, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 3, 'Williams %R', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 3, str.tostring(williams_r, '0.00'), text_color=color.red, text_size=table_text_size)
table.cell(info_table, 0, 4, '', text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 1, 4, 'MACD Histogram', text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 2, 4, str.tostring(macd_histogram, '0.000'), text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 0, 5, '', text_color=color.green, text_size=table_text_size)
table.cell(info_table, 1, 5, 'CCI', text_color=color.green, text_size=table_text_size)
table.cell(info_table, 2, 5, str.tostring(cci, '0.00'), text_color=color.green, text_size=table_text_size)
// Key Trend Indicators
table.cell(info_table, 0, 6, 'TREND', text_color=color.navy, text_size=table_text_size, bgcolor=color.new(color.navy, 90))
table.cell(info_table, 1, 6, 'SMA Momentum %', text_color=color.navy, text_size=table_text_size)
table.cell(info_table, 2, 6, str.tostring(sma_momentum, '0.00'), text_color=color.navy, text_size=table_text_size)
table.cell(info_table, 0, 7, '', text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 1, 7, 'EMA Momentum %', text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 2, 7, str.tostring(ema_momentum, '0.00'), text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 0, 8, '', text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 1, 8, 'SAR Trend', text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 2, 8, str.tostring(sar_trend, '0'), text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 0, 9, '', text_color=color.lime, text_size=table_text_size)
table.cell(info_table, 1, 9, 'Linear Regression', text_color=color.lime, text_size=table_text_size)
table.cell(info_table, 2, 9, str.tostring(lr_slope, '0.000'), text_color=color.lime, text_size=table_text_size)
// Key Volatility Indicators
table.cell(info_table, 0, 10, 'VOLATILITY', text_color=color.yellow, text_size=table_text_size, bgcolor=color.new(color.yellow, 90))
table.cell(info_table, 1, 10, 'ATR %', text_color=color.yellow, text_size=table_text_size)
table.cell(info_table, 2, 10, str.tostring(atr_pct, '0.00'), text_color=color.yellow, text_size=table_text_size)
table.cell(info_table, 0, 11, '', text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 1, 11, 'BB Position', text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 2, 11, str.tostring(bb_position, '0.00'), text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 0, 12, '', text_color=color.olive, text_size=table_text_size)
table.cell(info_table, 1, 12, 'KC Position', text_color=color.olive, text_size=table_text_size)
table.cell(info_table, 2, 12, str.tostring(kc_position, '0.00'), text_color=color.olive, text_size=table_text_size)
// Key Volume Indicators
table.cell(info_table, 0, 13, 'VOLUME', text_color=color.blue, text_size=table_text_size, bgcolor=color.new(color.blue, 90))
table.cell(info_table, 1, 13, 'Volume ROC', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 13, str.tostring(vroc, '0.00'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 14, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 14, 'EOM', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 14, str.tostring(eom_sma, '0.000'), text_color=color.red, text_size=table_text_size)
// Key Oscillators
table.cell(info_table, 0, 15, 'OSCILLATORS', text_color=color.purple, text_size=table_text_size, bgcolor=color.new(color.purple, 90))
table.cell(info_table, 1, 15, 'Awesome Osc', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 15, str.tostring(ao, '0.000'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 16, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 16, 'Fisher Transform', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 16, str.tostring(fisher, '0.000'), text_color=color.red, text_size=table_text_size)
// Summary Statistics
table.cell(info_table, 0, 17, 'SUMMARY', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 17, 'Total Indicators: 52', text_color=color.black, text_size=table_text_size)
regime_color = rsi_centered > 10 ? color.green : rsi_centered < -10 ? color.red : color.gray
regime_text = rsi_centered > 10 ? "BULLISH" : rsi_centered < -10 ? "BEARISH" : "NEUTRAL"
table.cell(info_table, 2, 17, regime_text, text_color=regime_color, text_size=table_text_size)
This makes it the perfect “indicator backbone” for quantitative and systematic traders who want to prototype, combine, and test new regime detection models—especially in combination with the Markov Chain indicator.
How to use this script with the Markov Chain for research and backtesting:
Add the Enhanced Indicator Export to your chart.
Every calculated indicator is available as an individual data stream.
Connect the indicator(s) you want as custom input(s) to the Markov Chain’s “Custom Indicators” option.
In the Markov Chain indicator’s settings, turn ON the custom indicator mode.
For each of the three custom indicator inputs, select the exported plot from the Enhanced Export script—the menu lists all 45+ signals by name.
This creates a powerful, modular regime-detection engine where you can mix-and-match momentum, trend, volume, or custom combinations for advanced filtering.
Backtest regime logic directly.
Once you’ve connected your chosen indicators, the Markov Chain script performs regime detection (Bull/Neutral/Bear) based on your selected features—not just price returns.
The regime detection is robust, automatically normalized (using Z-score), and outputs bias (1, -1, 0) for plug-and-play integration.
Export the regime bias for programmatic use.
As described above, use input.source() in your Pine Script strategy or system and link the bias output.
You can now filter signals, control trade direction/size, or design pairs-trading that respect true, indicator-driven market regimes.
With this framework, you’re not limited to static or simplistic regime filters. You can rigorously define, test, and refine what “market regime” means for your strategies—using the technical features that matter most to you.
Optimize your signal generation by backtesting across a universe of meaningful indicator blends.
Enhance risk management with objective, real-time regime boundaries.
Accelerate your research: iterate quickly, swap indicator components, and see results with minimal code changes.
Automate multi-asset or pairs-trading by integrating regime context directly into strategy logic.
Add both scripts to your chart, connect your preferred features, and start investigating your best regime-based trades—entirely within the TradingView ecosystem.
References & Further Reading
Ang, A., & Bekaert, G. (2002). “Regime Switches in Interest Rates.” Journal of Business & Economic Statistics, 20(2), 163–182.
Hamilton, J. D. (1989). “A New Approach to the Economic Analysis of Nonstationary Time Series and the Business Cycle.” Econometrica, 57(2), 357–384.
Markov, A. A. (1906). "Extension of the Limit Theorems of Probability Theory to a Sum of Variables Connected in a Chain." The Notes of the Imperial Academy of Sciences of St. Petersburg.
Guidolin, M., & Timmermann, A. (2007). “Asset Allocation under Multivariate Regime Switching.” Journal of Economic Dynamics and Control, 31(11), 3503–3544.
Murphy, J. J. (1999). Technical Analysis of the Financial Markets. New York Institute of Finance.
Brock, W., Lakonishok, J., & LeBaron, B. (1992). “Simple Technical Trading Rules and the Stochastic Properties of Stock Returns.” Journal of Finance, 47(5), 1731–1764.
Zucchini, W., MacDonald, I. L., & Langrock, R. (2017). Hidden Markov Models for Time Series: An Introduction Using R (2nd ed.). Chapman and Hall/CRC.
On Quantitative Finance and Markov Models:
Lo, A. W., & Hasanhodzic, J. (2009). The Heretics of Finance: Conversations with Leading Practitioners of Technical Analysis. Bloomberg Press.
Patterson, S. (2016). The Man Who Solved the Market: How Jim Simons Launched the Quant Revolution. Penguin Press.
TradingView Pine Script Documentation: www.tradingview.com
TradingView Blog: “Use an Input From Another Indicator With Your Strategy” www.tradingview.com
GeeksforGeeks: “What is the Difference Between Markov Chains and Hidden Markov Models?” www.geeksforgeeks.org
What makes this indicator original and unique?
- On‑chart, real‑time Markov. The chain is drawn directly on your chart. You see the current regime, its tendency to stay (self‑loop), and the usual next step (arrows) as bars confirm.
- Source‑agnostic by design. The engine runs on any series you select via input.source() — price, your own oscillator, a composite score, anything you compute in the script.
- Automatic normalization + regime mapping. Different inputs live on different scales. The script standardizes your chosen source and maps it into clear regimes (e.g., Bull / Bear / Neutral) without you micromanaging thresholds each time.
- Rolling, bar‑by‑bar learning. Transition tendencies are computed from a rolling window of confirmed bars. What you see is exactly what the market did in that window.
- Fast experimentation. Switch the source, adjust the window, and the Markov view updates instantly. It’s a rapid way to test ideas and feel regime persistence/switch behavior.
Integrate your own signals (using input.source())
- In settings, choose the Source . This is powered by input.source() .
- Feed it price, an indicator you compute inside the script, or a custom composite series.
- The script will automatically normalize that series and process it through the Markov engine, mapping it to regimes and updating the on‑chart spheres/arrows in real time.
Credits:
Deep gratitude to @RicardoSantos for both the foundational Markov chain processing engine and inspiring open-source contributions, which made advanced probabilistic market modeling accessible to the TradingView community.
Special thanks to @Alien_Algorithms for the innovative and visually stunning 3D sphere logic that powers the indicator’s animated, regime-based visualization.
Disclaimer
This tool summarizes recent behavior. It is not financial advice and not a guarantee of future results.
EMA with Adaptive Straight SegmentsThis script transforms a traditional Exponential Moving Average (EMA) into a series of straight-line segments, making trend direction clearer and easier to follow. Instead of plotting every curve of the EMA, it connects key points with angled steps, giving a trend-line style look that removes noise and highlights slope.
What makes this version special is its adaptive segmentation:
Segment length automatically adjusts based on market volatility (ATR%).
In low volatility, segments stretch longer to smooth things out.
In high volatility, segments shorten to stay responsive to price swings.
Features:
Clean, step-style EMA representation.
Adjustable minimum/maximum segment lengths.
Customisable number of historical segments.
Optional display of the original EMA for comparison.
HUD label showing current ATR%, segment length, and segment count.
This tool is especially useful if, like me, you prefer structural analysis over noisy indicators. It keeps your chart tidy while still reflecting the true slope of the EMA. I find 50 and 200 are the most useful.
US Macro Cycle (Z-Score Model)US Macro Cycle (Z-Score Model)
This indicator tracks the US economic cycle in real time using a weighted composite of seven macro and market-based indicators, each converted into a rolling Z-score for comparability. The model identifies the current phase of the cycle — Expansion, Peak, Contraction, or Recovery — and suggests sector tilts based on historical performance in each phase.
Core Components:
Yield Curve (10y–2y): Positive & steepening = growth; inverted = slowdown risk.
Credit Spreads (HYG/LQD): Tightening = risk-on; widening = risk-off.
Sector Leadership (Cyclicals vs. Defensives): Measures market leadership regime.
Copper/Gold Ratio: Higher copper = growth signal; higher gold = defensive.
SPY vs. 200-day MA: Equity trend strength.
SPY/IEF Ratio: Stocks vs. bonds relative strength.
VIX (Inverted): Low/falling volatility = supportive; high/rising = risk-off.
Methodology:
Each series is transformed into a rolling Z-score over the selected lookback period (optionally using median/MAD for robustness and winsorization to clip outliers).
Z-scores are combined using user-defined weights and normalized.
The smoothed composite is compared against phase thresholds to classify the macro environment.
Features:
Customizable Weights: Emphasize the indicators most relevant to your strategy.
Adjustable Thresholds: Fine-tune cycle phase definitions.
Background Coloring: Visual cue for the current phase.
Summary Table: Displays composite Z, confidence %, and individual Z-scores.
Alerts: Trigger when the phase changes, with details on the composite score and recommended tilt.
Use Cases:
Align sector rotation or relative strength strategies with the macro backdrop.
Identify favorable or defensive phases for tactical allocation.
Monitor macro turning points to manage portfolio risk.
It's doesn't fill nan gaps so there is quite a bit of zeroes, non-repainting.
CTA-min D1 — Donchian 55/20 Trend Breakout (ATR Risk)What it is
A clean, daily trend-following breakout inspired by classic CTA/Turtle logic. It buys strength and sells weakness, then lets winners run with a channel-based trailing stop. No curve-fitting, no clutter—just rules.
How it trades
Timeframe: Daily (D1)
Entry: Close breaks the previous 55-bar Donchian channel (above for longs, below for shorts).
Exit/Trail: Trailing stop at the 20-bar Donchian channel on the opposite side (no fixed TP).
Risk: Initial stop = ATR(N) × stopMult (ATR is smoothed). Position size risks riskPct% of equity based on stop distance.
Labels: “BUY/SELL” only on the entry bar; “STOP BUY/STOP SELL” only on the exit bar.
Pyramiding: Off (one position at a time).
Regime Alignment with EMAs (recommended filter, not enforced by code)
Add EMA 50 and EMA 200 to the D1 chart.
Long bias: take BUY signals only when EMA50 > EMA200 (bullish regime).
Short bias: take SELL signals only when EMA50 < EMA200 (bearish regime).
Optional: for extra selectivity, require the H4 EMAs (50/200) to align with D1 before acting on a signal.
Inputs
entryN (55), exitN (20), atrLen (20), atrSmooth (10), stopMult (2.0), riskPct (0.5%–1.0% recommended).
Works well on (tested by user)
BTCUSD (Bitcoin), EURUSD, GBPJPY, NAS100/US100, USDJPY, AUDUSD, XAGUSD (Silver), US30 (Dow), JP225 (Nikkei), EURGBP, NZDUSD, EURCHF, USDCHF.
How to use
Apply to D1 charts. Review once per day after the daily close and execute next session open to mirror backtest assumptions. Best used as a portfolio strategy across multiple uncorrelated markets. Use the EMA alignment above as a discretionary regime filter to reduce false breakouts.
Notes
For educational use. Markets involve risk; past performance does not guarantee future results. Use responsible position sizing.
Supertrend EMA Vol Strategy V5### Supertrend EMA Strategy V5
**Overview**
This is a trend-following strategy designed for cryptocurrency markets like BTC/USD on daily timeframes, combining the Supertrend indicator for dynamic trailing stops with an EMA filter for trend confirmation. It aims to capture strong uptrends while avoiding counter-trend trades, with optional volume filtering for high-conviction entries and ATR-based stop-loss to manage risk. Ideal for long-only setups in bullish assets, it visually highlights trends with green/red bands and fills for easy interpretation. Backtested on BTC from 2024-2025, it shows potential for outperforming buy-and-hold in trending markets, but always use with proper risk management—past performance isn't indicative of future results.
**Key Features**
- **Supertrend Core**: Uses ATR to plot adaptive uptrend (green) and downtrend (red) lines, flipping on closes beyond prior bands for buy/sell signals.
- **EMA Trend Filter**: Entries require price above the EMA (default 21-period) for longs, ensuring alignment with the broader trend.
- **Volume Confirmation**: Optional filter only allows entries when volume exceeds its EMA (default 20-period), reducing false signals in low-activity periods.
- **Risk Controls**: Built-in ATR-multiplier stop-loss (default 2x) to cap losses; exits on Supertrend flips for trailing profits.
- **Visuals**: Green/red lines and highlighter fills for up/down trends, plus buy/sell labels and circles for signals.
- **Customizable Inputs**: Tweak ATR period (default 10), multiplier (default 3), EMA length, start date, long/short toggles, SL, and volume filter.
- **Alerts**: Built-in for buy/sell and direction changes.
**How to Use**
1. Add to your TradingView chart (e.g., BTC/USD 1D).
2. Adjust inputs: Start with defaults for trend-following; increase multiplier for fewer trades/higher win rate. Enable volume filter for volatile assets.
3. Monitor signals: Green "Buy" for long entries (if close > EMA and conditions met); red "Sell" for exits.
4. Backtest in Strategy Tester: Focus on equity curve, win rate (~50-60% in tests), and drawdown (<15% with SL).
5. Live Trading: Use small position sizes (1-2% risk per trade); combine with your analysis. Shorts disabled by default for bull-biased markets.
MACD-V (Volatility-Normalised Momentum) — Spiroglou, 2022Volatility-normalized MACD per Alex Spiroglou (2022):
MACD-V = (EMA12 − EMA26) / ATR26 × 100, so momentum is expressed in ATR units and stays comparable across assets/timeframes.
What you get
• Trend-colored line: green when price ≥ EMA200, red otherwise.
• Guides: ±50 / ±100 / 0; Extremes: ±140 (editable).
• Regime shading: OB ≥ +140 shaded red; OS ≤ −140 shaded green.
• Clean, on-curve markers: small circles on the MACD-V line at the four edge events — OB (enter ≥ +threshold), OBX (cross back down), OS (enter ≤ −threshold), OSX (cross back up).
• Text labels are off by default; optional toggle only for OB/OBX.
• Signal & histogram: EMA(9) of MACD-V and (MACD-V − Signal) columns.
• Alerts: OB/OS entries & exits included.
How to use
• Favor longs when MACD-V > 0 (ideally > +50); respect OB for possible exhaustion.
• Favor shorts when MACD-V < 0 (ideally < −50); respect OS for possible exhaustion.
• Because it’s ATR-normalized, thresholds transfer well across symbols and timeframes.
Keltner Channel Based Grid Strategy # KC Grid Strategy - Keltner Channel Based Grid Trading System
## Strategy Overview
KC Grid Strategy is an innovative grid trading system that combines the power of Keltner Channels with dynamic position sizing to create a mean-reversion trading approach. This strategy automatically adjusts position sizes based on price deviation from the Keltner Channel center line, implementing a systematic grid-based approach that capitalizes on market volatility and price oscillations.
## Core Principles
### Keltner Channel Foundation
The strategy builds upon the Keltner Channel indicator, which consists of:
- **Center Line**: Moving average (EMA or SMA) of the price
- **Upper Band**: Center line + (ATR/TR/Range × Multiplier)
- **Lower Band**: Center line - (ATR/TR/Range × Multiplier)
### Grid Trading Logic
The strategy implements a sophisticated grid system where:
1. **Position Direction**: Inversely correlated to price position within the channel
- When price is above center line → Short positions
- When price is below center line → Long positions
2. **Position Size**: Proportional to distance from center line
- Greater deviation = Larger position size
3. **Grid Activation**: Positions are adjusted only when the difference exceeds a predefined grid threshold
### Mathematical Foundation
The core calculation uses the KC Rate formula:
```
kcRate = (close - ma) / bandWidth
targetPosition = kcRate × maxAmount × (-1)
```
This creates a mean-reversion system where positions increase as price moves further from the mean, expecting eventual return to equilibrium.
## Parameter Guide
### Time Range Settings
- **Start Date**: Beginning of strategy execution period
- **End Date**: End of strategy execution period
### Core Parameters
1. **Number of Grids (NumGrid)**: Default 12
- Controls grid sensitivity and position adjustment frequency
- Higher values = More frequent but smaller adjustments
- Lower values = Less frequent but larger adjustments
2. **Length**: Default 10
- Period for moving average and volatility calculations
- Shorter periods = More responsive to recent price action
- Longer periods = Smoother, less noisy signals
3. **Grid Coefficient (kcRateMult)**: Default 1.33
- Multiplier for channel width calculation
- Higher values = Wider channels, less frequent trades
- Lower values = Narrower channels, more frequent trades
4. **Source**: Default Close
- Price source for calculations (Close, Open, High, Low, etc.)
- Close price typically provides most reliable signals
5. **Use Exponential MA**: Default True
- True = Uses EMA (more responsive to recent prices)
- False = Uses SMA (equal weight to all periods)
6. **Bands Style**: Default "Average True Range"
- **Average True Range**: Smoothed volatility measure (recommended)
- **True Range**: Current bar's volatility only
- **Range**: Simple high-low difference
## How to Use
### Setup Instructions
1. **Apply to Chart**: Add the strategy to your desired timeframe and instrument
2. **Configure Parameters**: Adjust settings based on market characteristics:
- Volatile markets: Increase Grid Coefficient, reduce Number of Grids
- Stable markets: Decrease Grid Coefficient, increase Number of Grids
3. **Set Time Range**: Define your backtesting or live trading period
4. **Monitor Performance**: Watch strategy performance metrics and adjust as needed
### Optimal Market Conditions
- **Range-bound markets**: Strategy performs best in sideways trending markets
- **High volatility**: Benefits from frequent price oscillations around the mean
- **Liquid instruments**: Ensures efficient order execution and minimal slippage
### Position Management
The strategy automatically:
- Calculates optimal position sizes based on account equity
- Adjusts positions incrementally as price moves through grid levels
- Maintains risk control through maximum position limits
- Executes trades only during specified time periods
## Risk Warnings
### ⚠️ Important Risk Considerations
1. **Trending Market Risk**:
- Strategy may underperform or generate losses in strong trending markets
- Mean-reversion assumption may fail during sustained directional moves
- Consider market regime analysis before deployment
2. **Leverage and Position Size Risk**:
- Strategy uses pyramiding (up to 20 positions)
- Large positions may accumulate during extended moves
- Monitor account equity and margin requirements closely
3. **Volatility Risk**:
- Sudden volatility spikes may trigger multiple rapid position adjustments
- Consider volatility filters during high-impact news events
- Backtest across different volatility regimes
4. **Execution Risk**:
- Strategy calculates on every tick (calc_on_every_tick = true)
- May generate frequent orders in volatile conditions
- Ensure adequate execution infrastructure and consider transaction costs
5. **Parameter Sensitivity**:
- Performance highly dependent on parameter optimization
- Over-optimization may lead to curve-fitting
- Regular parameter review and adjustment may be necessary
## Suitable Scenarios
### Ideal Market Conditions
- **Sideways/Range-bound markets**: Primary use case
- **Mean-reverting instruments**: Forex pairs, some commodities
- **Stable volatility environments**: Consistent ATR patterns
- **Liquid markets**: Major currency pairs, popular stocks/indices
## Important Notes
### Strategy Limitations
1. **No Stop Loss**: Strategy relies on mean reversion without traditional stop losses
2. **Capital Requirements**: Requires sufficient capital for grid-based position sizing
3. **Market Regime Dependency**: Performance varies significantly across different market conditions
## Disclaimer
This strategy is provided for educational and research purposes only. Past performance does not guarantee future results. Trading involves substantial risk of loss and is not suitable for all investors. Users should thoroughly test the strategy and understand its mechanics before risking real capital. The author assumes no responsibility for trading losses incurred through the use of this strategy.
---
# KC网格策略 - 基于肯特纳通道的网格交易系统
## 策略概述
KC网格策略是一个创新的网格交易系统,它将肯特纳通道的力量与动态仓位调整相结合,创建了一个均值回归交易方法。该策略根据价格偏离肯特纳通道中心线的程度自动调整仓位大小,实施系统化的网格方法,利用市场波动和价格振荡获利。
## 核心原理
### 肯特纳通道基础
该策略建立在肯特纳通道指标之上,包含:
- **中心线**: 价格的移动平均线(EMA或SMA)
- **上轨**: 中心线 + (ATR/TR/Range × 乘数)
- **下轨**: 中心线 - (ATR/TR/Range × 乘数)
### 网格交易逻辑
该策略实施复杂的网格系统:
1. **仓位方向**: 与价格在通道中的位置呈反向关系
- 当价格高于中心线时 → 空头仓位
- 当价格低于中心线时 → 多头仓位
2. **仓位大小**: 与距离中心线的距离成正比
- 偏离越大 = 仓位越大
3. **网格激活**: 只有当差异超过预定义的网格阈值时才调整仓位
### 数学基础
核心计算使用KC比率公式:
```
kcRate = (close - ma) / bandWidth
targetPosition = kcRate × maxAmount × (-1)
```
这创建了一个均值回归系统,当价格偏离均值越远时仓位越大,期望最终回归均衡。
## 参数说明
### 时间范围设置
- **开始日期**: 策略执行期间的开始时间
- **结束日期**: 策略执行期间的结束时间
### 核心参数
1. **网格数量 (NumGrid)**: 默认12
- 控制网格敏感度和仓位调整频率
- 较高值 = 更频繁但较小的调整
- 较低值 = 较少频繁但较大的调整
2. **长度**: 默认10
- 移动平均线和波动率计算的周期
- 较短周期 = 对近期价格行为更敏感
- 较长周期 = 更平滑,噪音更少的信号
3. **网格系数 (kcRateMult)**: 默认1.33
- 通道宽度计算的乘数
- 较高值 = 更宽的通道,较少频繁的交易
- 较低值 = 更窄的通道,更频繁的交易
4. **数据源**: 默认收盘价
- 计算的价格来源(收盘价、开盘价、最高价、最低价等)
- 收盘价通常提供最可靠的信号
5. **使用指数移动平均**: 默认True
- True = 使用EMA(对近期价格更敏感)
- False = 使用SMA(对所有周期等权重)
6. **通道样式**: 默认"平均真实范围"
- **平均真实范围**: 平滑的波动率测量(推荐)
- **真实范围**: 仅当前K线的波动率
- **范围**: 简单的高低价差
## 使用方法
### 设置说明
1. **应用到图表**: 将策略添加到您所需的时间框架和交易品种
2. **配置参数**: 根据市场特征调整设置:
- 波动市场:增加网格系数,减少网格数量
- 稳定市场:减少网格系数,增加网格数量
3. **设置时间范围**: 定义您的回测或实盘交易期间
4. **监控表现**: 观察策略表现指标并根据需要调整
### 最佳市场条件
- **区间震荡市场**: 策略在横盘趋势市场中表现最佳
- **高波动性**: 受益于围绕均值的频繁价格振荡
- **流动性强的品种**: 确保高效的订单执行和最小滑点
### 仓位管理
策略自动:
- 根据账户权益计算最优仓位大小
- 随着价格在网格水平移动逐步调整仓位
- 通过最大仓位限制维持风险控制
- 仅在指定时间段内执行交易
## 风险警示
### ⚠️ 重要风险考虑
1. **趋势市场风险**:
- 策略在强趋势市场中可能表现不佳或产生损失
- 在持续方向性移动期间均值回归假设可能失效
- 部署前考虑市场制度分析
2. **杠杆和仓位大小风险**:
- 策略使用金字塔加仓(最多20个仓位)
- 在延长移动期间可能积累大仓位
- 密切监控账户权益和保证金要求
3. **波动性风险**:
- 突然的波动性激增可能触发多次快速仓位调整
- 在高影响新闻事件期间考虑波动性过滤器
- 在不同波动性制度下进行回测
4. **执行风险**:
- 策略在每个tick上计算(calc_on_every_tick = true)
- 在波动条件下可能产生频繁订单
- 确保充足的执行基础设施并考虑交易成本
5. **参数敏感性**:
- 表现高度依赖于参数优化
- 过度优化可能导致曲线拟合
- 可能需要定期参数审查和调整
## 适用场景
### 理想市场条件
- **横盘/区间震荡市场**: 主要用例
- **均值回归品种**: 外汇对,某些商品
- **稳定波动性环境**: 一致的ATR模式
- **流动性市场**: 主要货币对,热门股票/指数
## 注意事项
### 策略限制
1. **无止损**: 策略依赖均值回归而无传统止损
2. **资金要求**: 需要充足资金进行基于网格的仓位调整
3. **市场制度依赖性**: 在不同市场条件下表现差异显著
## 免责声明
该策略仅供教育和研究目的。过往表现不保证未来结果。交易涉及重大损失风险,并非适合所有投资者。用户应在投入真实资金前彻底测试策略并理解其机制。作者对使用此策略产生的交易损失不承担任何责任。
---
**Strategy Version**: Pine Script v6
**Author**: Signal2Trade
**Last Updated**: 2025-8-9
**License**: Open Source (Mozilla Public License 2.0)
SPX 0DTE Forecast Indicator by Alpha CrunchingSPX 0DTE Forecast Indicator
This indicator is designed specifically for the SPX 5-minute chart and plots a forward-looking price projection for the current trading day.
🔹 Forecast Model Overview:
The forecast is built by analyzing SPX price action over the past month. The trading day is broken into 5-minute intervals, and the average net price movement (delta) is calculated for each interval. These deltas are then reassembled and accumulated to generate a full-day projection for each day of the week.
🔹 Usage:
Before the market opens, users can paste that day’s forecast data into the indicator input. Once the session begins, the forecast curve will be visible alongside live price action.
📌 Note:
This indicator is only compatible with the SPX 5-minute chart.
Forecast data must be entered manually each day.
No trading signals or automation are included.
COG-10 + Deviation BandsClassic Center of Gravity, COG
«Center of Gravity»
COG is a weighted moving average, in which new bars have more weight, and old ones have less.
Formula (Pine equivalent):
COG = – Σ (price × (i+1)) / Σ price
• i = 0 – the most recent bar
• i = length-1 – the oldest bar
The minus sign simply flips the curve so that the extremes coincide with the price reversals.
Bars: | 9 | 8| 7 | 6| 5| 4| 3 | 2 | 1 | 0 |
Weight: |1 | 2 | 3 | 4| 5| 6| 7| 8 | 9| 10|
Where COG is used
Reversal zones
– when the price moves far from the COG, it is considered «overbought/oversold»; return to COG – potential reversal.
Dynamic support/resistance
– in a sideways trend, the price often bounces off the COG.
Trend filter
– if COG grows → uptrend, falls → downtrend.
Strategy pairs
• COG + deviation bands (analogous to Bollinger) is given in lines
• COG + RSI – confirmation of divergences
• COG + volume (weighted by volume) is given in yellow lines
Перевод для русской аудитории
Classic Center of Gravity, COG
«Центр тяжести»
COG – это взвешенное скользящее среднее, в котором новые бары имеют больший вес, а старые – меньший.
Формула (Pine-эквивалент):
COG = – Σ (price × (i+1)) / Σ price
• i = 0 – самый свежий бар
• i = length-1 – самый старый бар
Знак «минус» просто переворачивает кривую, чтобы экстремумы совпадали с разворотами цены.
Бары: | 9 | 8| 7 | 6| 5| 4| 3 | 2 | 1 | 0 |
Вес: |1 | 2 | 3 | 4| 5| 6| 7| 8 | 9| 10|
Где применяют COG
Разворотные зоны
– когда цена отходит далеко от COG, считается «перекупленностью/перепроданностью»; возврат к COG – потенциальный разворот.
Динамическая опора/сопротивление
– в боковике цена часто отталкивается от COG.
Фильтр тренда
– если COG растёт → восходящий тренд, падает → нисходящий.
Пары стратегий
• COG + полосы отклонения (аналог Bollinger) приводится в линиях
• COG + RSI – подтверждение дивергенций
• COG + объём (взвешивать по volume) приводится в желтых линиях
VWAP-RSI Scalper FINAL v1Description
This script implements a robust, battle-tested intraday scalping strategy designed for prop firm challenges, funded trader programs, and serious futures scalpers.
It combines VWAP, RSI, EMA trend, and ATR-based risk management to capture high-probability mean reversion and momentum moves during the most liquid hours of the trading day.
Core Logic
RSI (Relative Strength Index):
Trades are triggered when the RSI is either oversold or overbought using a short lookback (default: 3). This ensures only the strongest intraday reversals or exhaustion moves are considered.
VWAP Filter:
Longs are only taken above VWAP, shorts only below VWAP, aligning trades with the session’s dominant bias.
EMA Filter:
Additional trend quality filter—longs require price above EMA, shorts below EMA.
Session Control:
Only trades between user-defined session hours (default: US cash session), eliminating overnight/illiquid action.
ATR-based Dynamic Stops & Targets:
Every trade uses a stop loss at 1x ATR and a take profit at 2x ATR for a positive risk/reward ratio.
Max Trades Per Day:
Prevents overtrading and controls risk exposure (default: 3).
Performance (Sample Backtest)
Profit Factor: 1.37+ (prop-firm quality)
Drawdown: <1% (very conservative risk)
Win Rate: 37–48% (RR > 1, so high edge)
Consistency: Smooth, steady equity curve over hundreds of trades.
Best For:
ES/NQ/CL/GC intraday traders
Prop firm evaluation challenges (Tradeify, Topstep, Apex, etc.)
Anyone needing robust, no-nonsense systematic edge for futures or indices.
How to Use & Tune
Apply to 3min, 5min, or 15min charts of liquid futures or indices.
Change parameters in the settings panel to suit your asset, volatility, or session hours.
Use “Strategy Tester” to validate P&L, win rate, and drawdown.
How to Optimize
Raise/lower RSI length or bands to make signals more/less frequent.
Adjust stop/target multiples for your preferred risk/reward profile.
Change session hours to match your broker or market.
Disclaimer
This is not financial advice. Use on a demo or sim account first. Results will vary by market, slippage, and execution speed. Past performance does not guarantee future results.
If you find this useful, please give it a like, follow for more strategies, and comment your results or questions!
Good luck and safe trading!
X EMA EQThe X EMA EQ is a versatile technical analysis tool designed to overlay price action with customizable Exponential Moving Averages (EMAs) and real-time equilibrium levels. Ideal for intraday traders, it blends trend-following and mean-reversion concepts to highlight both directional bias and potential value zones.
🔹 Key Features:
1. Dual EMA Visualization
Plot up to two user-defined EMAs (default: 20 and 50 periods).
Independently toggle and style each EMA to suit your strategy.
Helps track short- and mid-term trend dynamics with clarity.
2. Running Equilibrium Bands
Displays a real-time dynamic price range based on the highest high and lowest low over a user-defined rolling window (default: 15 minutes).
Includes upper/lower quartile lines and a central midpoint, giving structure to intraday price movement.
Useful for identifying compression, breakouts, and fair value zones.
3. Linear Regression Overlay (Optional)
Apply a smoothed linear regression curve across the same time window.
Highlights directional momentum and price mean trajectory.
Valuable for assessing slope bias and trend strength over the equilibrium period.
4. Intraday Timeframe Optimization
Designed specifically for intraday charts with minute-based resolutions (30 seconds to 60 minutes).
Auto-adjusts logic based on the current chart’s timeframe.
5. Clean Visual Design
Minimalist and translucent color schemes ensure readability without clutter.
All components are independently toggleable for full customization.
⚙️ Settings Overview:
EMA Settings: Enable/disable each EMA, set lengths and colors.
Time & Price Settings: Define the running equilibrium period (in minutes), control visibility of bands and regression line, and adjust styling.
X EMA EQ offers a compact yet powerful visual framework for traders seeking to align with short-term trend structure while keeping an eye on evolving price balance zones.
Multi-Timeframe SFP + SMTImportant: Please Read First
This indicator is not a "one size fits all" solution. It is a professional and complex tool that requires you to learn how to use it, in addition to backtesting different settings to discover what works best for your specific trading style and the assets you trade. The default settings provided are my personal preferences for trading higher-timeframe setups, but you are encouraged to experiment and find your own optimal configuration.
Please note that while this initial version is solid, it may still contain small errors or bugs. I will be actively working on improving the indicator over time. Also, be aware that the script is not written for maximum efficiency and may be resource-intensive, but this should not pose a problem for most users.
The source code for this indicator is open. If you truly want to understand precisely how all the logic works, you can copy and paste the code into an AI assistant like Gemini or ChatGPT and ask it to explain any part of the script to you.
Author's Preferred Settings (Guideline)
As a starting point, here are the settings I personally use for my trading:
SFP Timeframe: 4-Hour (Strength: 5-5)
Max Lookback: 35 Bars
Raid Expiration: 1 Bar
SFP Lines Limit: 1
SMT Timeframe 1: 30-Minute (Strength: 2-2) with 3-Minute LTF Detection.
SMT Timeframe 2: 15-Minute (Strength: 3-3) with 3-Minute LTF Detection.
SMT Timeframe 3: 1-Hour (Strength: 1-1) with 3-Minute LTF Detection.
SMT Timeframe 4: 15-Minute (Strength: 1-1) with 3-Minute LTF Detection.
Multi-Timeframe SMT: An Overview
This indicator is a powerful tool designed to identify high-probability trading setups by combining two key institutional concepts: Swing Failure Patterns (SFP) on a higher timeframe and Smart Money Technique (SMT) divergences on a lower timeframe. A key feature is the ability to configure and run up to four independent SMT analyses simultaneously, allowing you to monitor for divergences across multiple timeframes (e.g., 15m, 1H, 4H) from a single indicator.
Its primary purpose is to generate automated signals through TradingView's alert system. By setting up alerts, the script runs server-side, monitoring the market for you. When a setup presents itself, it will send a push notification to your device, allowing you to personally evaluate the trade without being tied to your screen.
The Strategy: HTF Liquidity Sweeps into LTF SMT
The core strategy is built on a classic institutional trading model:
Wait for a liquidity sweep on a significant high timeframe (e.g., 4-hour, Daily).
Once liquidity is taken, look for a confirmation of a shift in market structure on a lower timeframe.
This indicator uses an SMT divergence as that confirmation signal, indicating that smart money may be stepping in to reverse the price.
How It Works: The Two-Step Process
The indicator's logic follows a precise two-step process to generate a signal:
Step 1: The Swing Failure Pattern (SFP)
First, the indicator identifies a high-timeframe liquidity sweep. This is configured in the "Swing Failure Pattern (SFP) Timeframe" settings.
It looks for a candle that wicks above a previous high (or below a previous low) but then closes back within the range of that pivot. This action is known as a "raid" or a "swing failure," suggesting the move failed to find genuine momentum.
Step 2: The SMT Divergence
The moment a valid SFP is confirmed, the indicator's multiple SMT engines activate.
Each engine begins monitoring the specific SMT timeframe you have configured (e.g., "SMT Timeframe 1," "SMT Timeframe 2," etc.) for a Smart Money Technique (SMT) divergence.
An SMT divergence occurs when two closely correlated assets fail to move in sync. For example, after a raid on a high, Asset A makes a new high, but Asset B fails to do so. This disagreement suggests weakness and a potential reversal.
When the script finds this divergence, it plots the SMT line and triggers an alert.
The Power of Alerts
The true strength of this indicator lies in its alert capabilities. You can create alerts for both unconfirmed and confirmed SMTs.
Enable Alerts LTF Detection: These alerts trigger when an unconfirmed, potential SMT is spotted on the lower "LTF Detection" timeframe. While not yet confirmed, these early alerts can notify you of a potential move before it fully happens, allowing you to be ahead of the curve and find the best possible trade entries.
Enable Alerts Confirmed SMT: These alerts trigger only when a permanent, confirmed SMT line is plotted on your chosen SMT timeframe. These signals are more reliable but occur later than the early detection alerts.
Key Concepts Explained
What is Pivot Strength?
Pivot Strength determines how significant a high or low needs to be to qualify as a valid structural point. A setting of 5-5, for example, means that for a candle's high to be considered a valid pivot high, its high must be higher than the highs of the 5 candles to its left and the 5 candles to its right.
Higher Strength (e.g., 5-5, 8-8): Creates fewer, but more significant, pivots. This is ideal for identifying major structural highs and lows on higher timeframes.
Lower Strength (e.g., 2-2, 3-3): Creates more pivots, making it suitable for identifying the smaller shifts in momentum on lower timeframes.
Raid Expiration & Validity
An SFP signal is not valid forever. The "Raid Expiration" setting determines how many SFP timeframe bars can pass after a raid before that signal is considered "stale" and can no longer be used to validate an SMT. This ensures your SMT divergences are always in response to recent liquidity sweeps.
Why You Must Be on the Right Chart Timeframe to See SMT Lines
Pine Script™ has a fundamental rule: an indicator running on a chart can only "see" the bars of that chart's timeframe or higher.
When the SMT logic is set to the 15-minute timeframe, it calculates its pivots based on 15-minute data. To accurately plot lines connecting these pivots, you must be on a 15-minute chart or lower (e.g., 5-minute, 1-minute).
If you are on a higher timeframe chart, like the 1-hour, the 15-minute bars do not exist on that chart, so the indicator has no bars to draw the lines on.
This is precisely why the alert system is so powerful. You can set your alert to run on the 15-minute timeframe, and TradingView's servers will monitor that timeframe for you, sending a notification regardless of what chart you are currently viewing.