Money Flow Index (MFI) w/ Multi Time Frame DivergencesBack color MTF
Money Flow Index (MFI) w/ Multi Time Frame Divergences
Wskaźniki i strategie
Dual EMA (9 & 16) Customizable 📈 Dual EMA Indicator (Customizable & Preset Based)
The Dual EMA Indicator is a simple yet powerful trend-following tool that plots two Exponential Moving Averages (EMAs) on the price chart. It is designed for scalpers, intraday traders, and swing traders who rely on EMA crossovers and trend direction for decision-making.
This indicator allows full customization of both EMAs, including length, color, source, line width, and offset. Users can also enable or disable each EMA individually, keeping the chart clean and focused.
To make trading faster and easier, built-in preset EMA combinations such as 5–9, 9–21, and 16–34 are provided, which are commonly used for scalping and trend trading. A Custom mode is also available for traders who prefer their own EMA settings.
🔑 Key Features
Two EMAs in a single indicator
Preset EMA pairs for scalping and intraday trading
Fully customizable EMA lengths and sources
Change colors, line width, and offset
Enable/disable each EMA with a checkbox
Clean and lightweight with no lag
📊 How to Use
Fast EMA above Slow EMA → Bullish trend
Fast EMA below Slow EMA → Bearish trend
EMA crossovers can be used for entry and exit confirmation
Works well on 1m, 3m, 5m, 15m, and higher timeframes
This indicator is ideal for traders who want a simple, flexible, and reliable EMA setup without cluttering their charts.
Smart Fixed Volume Profile [MarkitTick]💡 This comprehensive analysis suite integrates Auction Market Theory, structural gap analysis, and statistical liquidity strain modeling into a single, cohesive toolkit. Designed for traders who require a granular view of institutional order flow, this indicator overlays a Fixed Range Volume Profile with intelligent price gap classification and a volatility-adjusted exhaustion detector. By combining these three distinct analytical dimensions, it allows users to identify value consensus, structural breakouts, and potential market turns driven by liquidity shortages.
✨ Originality and Utility
While standard Volume Profiles display where trading occurred, this script advances the concept by contextually analyzing *how* price arrived at those levels. It solves the problem of isolated analysis by fusing three disparate methodologies:
Contextual Integration: It does not merely show support and resistance; it qualifies moves using "Smart Gaps" (classifying gaps based on market structure) and "Liquidity Strain" (identifying unsustainable price velocity).
Institutional Footprint: The inclusion of an "Unusual Volume" highlighter within the profile bars helps traders spot hidden institutional accumulation or distribution blocks that standard profiles miss.
Hybrid Logic: By combining a fixed-time profile (anchored to specific dates) with dynamic, developing gap analysis, it provides both a static roadmap of the past and a dynamic interpretation of current price action.
🔬 Methodology and Concepts
• Fixed Volume Profile Engine
The core of the indicator constructs a volume distribution histogram over a user-defined time window. It utilizes a custom aggregation engine that:
Fetches higher-timeframe volume and price data to ensure accuracy.
Segments the price range into specific "bins" or rows.
Allocates volume to these bins based on price action within the bar, separating Buying Volume (Up bars) from Selling Volume (Down bars).
Calculates the Point of Control (POC) —the price level with the highest traded volume—and the Value Area , which contains 70% (customizable) of the total volume centered around the POC.
• Smart Gap Logic
The script systematically identifies price gaps and classifies them based on their location relative to market pivots (Highs/Lows):
Breakaway Gaps: Occur when price gaps beyond a significant structural pivot (Lookback High/Low), signaling a potential trend initiation.
Runaway Gaps: Occur within an existing trend without breaking structure, indicating trend continuation.
Exhaustion Gaps: Identified when a gap occurs late in a mature trend (measured by bar count since the last pivot) accompanied by a volume spike, suggesting the trend is overextended.
• Liquidity Strain Detector
This module utilizes a statistical approach to measure market stress. It calculates "Illiquidity" by analyzing the ratio of True Range to Volume (Price Impact).
It applies a Logarithmic transformation to normalize the data.
It calculates a Z-Score (Standard Deviation from the mean) of this impact.
If the Z-Score exceeds a threshold (e.g., 2.0 Sigma) while the trend opposes the price move, it triggers an exhaustion signal, indicating that price is moving too easily on too little volume (thin liquidity).
🎨 Visual Guide
• Volume Profile Elements
Histogram Bars: Horizontal bars representing volume at price. Cyan indicates bullish volume; Red indicates bearish volume.
Unusual Volume Highlight: Bars with volume exceeding the average by a set factor (default 2x) are highlighted with brighter, distinct overlays to denote institutional interest.
POC Line: A solid Yellow line marking the price level with the highest volume.
VAH / VAL Lines: Dashed Blue lines marking the Value Area High and Value Area Low.
Background Box: A grey shaded area encapsulating the entire time and price range of the profile.
• Smart Gap Boxes
Blue Box (Breakaway): Marks the start of a new structural move.
Orange Box (Runaway): Marks continuation gaps in the middle of a trend.
Red Box (Exhaustion): Marks potential trend termination points.
Dotted Lines: Extend from the center of gap boxes to serve as future support/resistance levels. These boxes are automatically deleted if price "fills" or violates the gap level.
Note: This tool incorporates core components from [ Smart Gap Concepts ], optimized for this specific strategy.
• Liquidity Signals
Green Label (SE): "Seller Exhaustion" – Appears below bars in a downtrend when selling pressure is statistically overextended.
Red Label (BE): "Buyer Exhaustion" – Appears above bars in an uptrend when buying pressure is statistically overextended.
Note: This tool incorporates core components from [ Liquidity Strain Detector ], optimized for this specific strategy.
📖 How to Use
• Interactive Range Selection: This indicator features a flexible, interactive input system. Upon adding the script to your chart, execution is paused until the analysis range is defined. You will be prompted to click on the chart twice: first to establish the Start Date and second to establish the End Date. Once these anchor points are confirmed, the indicator will automatically load the data and generate the profile for the selected specific period.
● Strategies for Optimal Anchoring
the optimal starting and ending points for high-probability setups:
Swing Highs and Lows (Trend Analysis):
Anchor the Start Date at a major structural swing high or low and the End Date at the current price using the Extend to Present feature. This identifies the "Fair Value" for the entire price move .
Consolidation/Range Anchoring:
Set the Start Date at the first bar of a sideways range and the End Date at the breakout candle. This reveals the high-node volume clusters that will act as future support or resistance.
Session-Based Anchoring (Intraday):
Align the Start Date with the session open (e.g., London or New York open) to track institutional flow for that specific day .
Event-Driven Anchoring:
Place the Start Date on a significant news event or a Breakaway Gap identified by the script's Gap Engine. This helps determine if the new volume supports the direction of the gap.
Correction Cycles:
During a pullback, anchor the Start Date at the start of the correction to find the Value Area Low (VAL), which often serves as a tactical entry point for a trend continuation.
• Identifying Value:
Use the Value Area to gauge market consensus. Acceptance of price within the VA indicates balance. A breakout above VAH or below VAL suggests the market is searching for new value. The POC often acts as a magnet for price correction.
• Trading Breakouts:
Watch for Breakaway Gaps (Blue) that align with a move out of the Volume Profile's Value Area. This confluence increases the probability of a sustained trend.
• Spotting Reversals:
Combine Exhaustion Gaps (Red) with Liquidity Strain Signals (SE/BE) . If price gaps up into a low-volume node on the profile and prints a "Buyer Exhaustion" signal, it suggests the move is unsupported by liquidity and liable to reverse.
• Support and Resistance:
The extended dotted lines from the Smart Gap boxes act as dynamic support/resistance. A retest of a "Runaway Gap" is often a viable entry point for trend continuation.
⚙️ Inputs and Settings
• Global Profile:
Start/End Date: Define the exact window for the volume profile calculation.
Extend to Present: If checked, the profile updates with live data beyond the end date.
• Profile Settings:
Number of Rows: Determines the vertical resolution (granularity) of the histogram.
Value Area %: Default is 70%, representing one standard deviation of volume distribution.
Placement: Position the profile on the Left or Right of the defined range.
• Liquidity & Gaps:
Unusual Threshold: Multiplier of average volume to highlight institutional bars (default 2.0x).
Structure Lookback: Adjusts the sensitivity of pivot detection for gap classification.
Stress Threshold (Sigma): The Z-Score limit for triggering Liquidity Strain signals (default 2.0).
🔍 Deconstruction of the Underlying Scientific and Academic Framework
• Auction Market Theory (AMT):
The script is grounded in AMT, which posits that the market's primary function is to facilitate trade. The Volume Profile visualizes this by displaying a bell curve of price distribution. The Value Area (typically 70%) corresponds to the First Standard Deviation in a normal Gaussian distribution, representing the area of "Fair Value" where buyers and sellers agree.
• Market Microstructure & Kyle’s Lambda:
The Liquidity Strain module draws conceptually from Kyle’s Lambda, a metric in market microstructure that measures market depth and price impact (Illiquidity). By calculating the ratio of price change (True Range) to Volume, the script approximates the "cost" of moving the market.
• Statistical Z-Score Normalization:
To make the liquidity data actionable, the script applies Z-Score normalization: Z = (X - μ) / σ . This converts raw illiquidity values into standard deviations from the mean. A Z-Score above +2.0 signifies a statistically significant anomaly—an outlier event where price moved excessively relative to the volume traded, often preceding a mean-reversion event.
⚠️ Disclaimer
All provided scripts and indicators are strictly for educational exploration and must not be interpreted as financial advice or a recommendation to execute trades. I expressly disclaim all liability for any financial losses or damages that may result, directly or indirectly, from the reliance on or application of these tools. Market participation carries inherent risk where past performance never guarantees future returns, leaving all investment decisions and due diligence solely at your own discretion.
QUARTERS THEORY XAUUSDThe “Quarter Theory XAUUSD” indicator on TradingView is designed to automatically plot horizontal price levels in $25 increments on your chart, providing traders with a clear visual representation of key psychological and technical price points. These levels are particularly useful for instruments like XAU/USD, where price often reacts to round numbers, forming support and resistance zones that can be leveraged for both scalping and swing trading strategies. By showing all $25 increments as horizontal white lines, the indicator ensures that traders can quickly identify potential entry and exit points, without the need for manual drawing or repeated calculations.
The indicator works by calculating the nearest $25 multiple relative to the current market price and then drawing horizontal lines across the chart for all increments within a defined range. This range can be customized to suit the instrument being traded; for example, for gold (XAU/USD), a typical range might extend from 0 to 5000, covering all practical price levels that could be relevant in both high and low market conditions. By using Pine Script’s persistent variables, the indicator efficiently creates these lines only once at the start of the chart, avoiding unnecessary resource usage and preventing TradingView from slowing down, which can happen if lines are redrawn every bar.
From a trading perspective, these levels serve multiple purposes. For scalpers, the $25 increments act as micro support and resistance points, helping to determine short-term price reactions and potential breakout zones. Scalpers can use these levels to enter positions with tight stop-loss orders just beyond a level and take profits near the next $25 increment, which aligns with common price behavior patterns in highly liquid instruments. For swing traders, the same levels provide broader context, allowing them to identify areas where price might pause or reverse over several days. Swing traders can use these levels to align trades with the prevailing trend, particularly when combined with other indicators such as moving averages or trendlines.
Another key advantage of the Quarterly Levels indicator is its simplicity and visual clarity. By plotting lines in a uniform white color and extending them to the right, the chart remains clean and easy to read, allowing traders to focus on price action and market dynamics rather than cluttered technical drawings. This visual consistency also helps in backtesting and strategy development, as traders can quickly see how price interacts with each level over time. Additionally, the use of round-number increments leverages the psychological tendencies of market participants, as many traders place stop orders or entry points near these levels, making them natural zones of interest.
Overall, the Quarterly Levels indicator combines efficiency, clarity, and practical trading utility into a single tool. It streamlines chart analysis, highlights meaningful price zones, and supports both scalping and swing trading approaches, making it an essential addition to a trader’s toolkit. By understanding how to integrate these levels into trading strategies, traders can make more informed decisions, manage risk effectively, and identify high-probability trade setups across various market conditions.
TJR asia session sweep//@version=5
strategy("TJR asia session sweep", "TJR Asia Sweep", overlay=true, max_lines_count=500, max_labels_count=500)
// Input settings
show_asian = input.bool(true, "Show Asian Session", group="Visual Settings")
show_london = input.bool(true, "Show London Session", group="Visual Settings")
show_swing_points = input.bool(true, "Show Asian Swing Points", group="Visual Settings")
show_market_structure = input.bool(true, "Show Market Structure", group="Visual Settings")
show_bos = input.bool(true, "Show Break of Structure", group="Visual Settings")
// Session Time Settings
asian_start_hour_input = input.int(22, "Asian Session Start Hour", minval=0, maxval=23, group="Session Times")
asian_end_hour_input = input.int(3, "Asian Session End Hour", minval=0, maxval=23, group="Session Times")
london_start_hour_input = input.int(3, "London Session Start Hour", minval=0, maxval=23, group="Session Times")
london_end_hour_input = input.int(8, "London Session End Hour", minval=0, maxval=23, group="Session Times")
session_timezone = input.string("America/New_York", "Session Timezone", options= , group="Session Times")
// Risk Management Settings
use_atr_sl = input.bool(false, "Use ATR Multiplier for Stop Loss", group="Risk Management")
atr_length = input.int(14, "ATR Length", minval=1, maxval=50, group="Risk Management")
atr_multiplier = input.float(2.0, "ATR Multiplier for Stop Loss", minval=0.5, maxval=10.0, group="Risk Management")
force_london_close = input.bool(true, "Force Close at London Session End", group="Risk Management")
cutoff_minutes = input.int(60, "Minutes Before Session End to Stop New Trades", minval=0, maxval=300, group="Risk Management")
// Position Sizing Settings
position_sizing_method = input.string("USD Risk", "Position Sizing Method", options= , group="Position Sizing")
usd_risk_per_trade = input.float(100.0, "USD Risk Per Trade", minval=1.0, maxval=10000.0, group="Position Sizing")
fixed_contracts = input.float(1.0, "Fixed Number of Contracts", minval=0.01, maxval=1000.0, step=0.01, group="Position Sizing")
// Color settings
asian_color = input.color(color.red, "Asian Session Color")
london_color = input.color(color.blue, "London Session Color")
swing_high_color = input.color(color.orange, "Swing High Color")
swing_low_color = input.color(color.lime, "Swing Low Color")
bullish_structure_color = input.color(color.green, "Bullish Structure Color")
bearish_structure_color = input.color(color.red, "Bearish Structure Color")
bos_color = input.color(color.orange, "Break of Structure Color")
// Line settings
line_width = input.int(2, "Line Width", minval=1, maxval=5)
// ATR calculation for stop loss
atr = ta.atr(atr_length)
// Position size calculation function
calculate_position_size(entry_price, stop_loss_price) =>
var float position_size = na
if position_sizing_method == "Fixed Contracts"
position_size := fixed_contracts
else // USD Risk method
stop_distance = math.abs(entry_price - stop_loss_price)
if stop_distance > 0
// Calculate position size based on USD risk per trade
// For forex: position_size = risk_amount / (stop_distance * point_value)
// For most forex pairs, point value = 1 (since we're dealing with price differences directly)
position_size := usd_risk_per_trade / stop_distance
else
position_size := fixed_contracts // Fallback to fixed contracts if stop distance is 0
position_size
// Session time definitions (using input variables)
asian_start_hour = asian_start_hour_input
asian_end_hour = asian_end_hour_input
london_start_hour = london_start_hour_input
london_end_hour = london_end_hour_input
// Get current hour using selected timezone
current_hour = hour(time, session_timezone)
// Previous hour for transition detection
prev_hour = hour(time , session_timezone)
// Session transition detection
asian_start = current_hour == asian_start_hour and prev_hour != asian_start_hour
asian_end = current_hour == asian_end_hour and prev_hour != asian_end_hour
london_start = current_hour == london_start_hour and prev_hour != london_start_hour
london_end = current_hour == london_end_hour and prev_hour != london_end_hour
// Session activity detection
asian_active = (current_hour >= asian_start_hour) or (current_hour < asian_end_hour)
london_active = (current_hour >= london_start_hour) and (current_hour < london_end_hour)
// Session boxes - keep previous sessions visible
var box asian_session_box = na
var box london_session_box = na
// Create Asian session box
if show_asian and asian_start
// Create new box at session start (previous box remains visible)
asian_session_box := box.new(bar_index, high, bar_index + 1, low,
border_color=asian_color, bgcolor=color.new(asian_color, 90),
border_width=2, border_style=line.style_solid)
// Pre-calculate session highs and lows for consistency
asian_session_length = asian_active and not na(asian_session_box) ? bar_index - box.get_left(asian_session_box) + 1 : 1
current_asian_high = ta.highest(high, asian_session_length)
current_asian_low = ta.lowest(low, asian_session_length)
// Update Asian session box continuously during session
if show_asian and asian_active and not na(asian_session_box)
box.set_right(asian_session_box, bar_index)
// Update box to contain session highs and lows
box.set_top(asian_session_box, current_asian_high)
box.set_bottom(asian_session_box, current_asian_low)
// Create London session box
if show_london and london_start
// Create new box at session start (previous box remains visible)
london_session_box := box.new(bar_index, high, bar_index + 1, low,
border_color=london_color, bgcolor=color.new(london_color, 90),
border_width=2, border_style=line.style_solid)
// Pre-calculate London session highs and lows for consistency
london_session_length = london_active and not na(london_session_box) ? bar_index - box.get_left(london_session_box) + 1 : 1
current_london_high = ta.highest(high, london_session_length)
current_london_low = ta.lowest(low, london_session_length)
// Update London session box continuously during session
if show_london and london_active and not na(london_session_box)
box.set_right(london_session_box, bar_index)
// Update box to contain session highs and lows
box.set_top(london_session_box, current_london_high)
box.set_bottom(london_session_box, current_london_low)
// Asian Session Swing Points Detection
var float asian_session_high = na
var float asian_session_low = na
var int asian_high_bar = na
var int asian_low_bar = na
// Asian Session Absolute High/Low for TP levels
var float asian_absolute_high = na
var float asian_absolute_low = na
var line asian_high_line = na
var line asian_low_line = na
var label asian_high_label = na
var label asian_low_label = na
var bool high_broken = false
var bool low_broken = false
// London Session High/Low tracking for stop loss
var float london_session_high = na
var float london_session_low = na
// Market structure tracking variables
var string breakout_direction = na // "bullish" or "bearish"
var float last_hh_level = na // Last Higher High level
var float last_hl_level = na // Last Higher Low level
var float last_ll_level = na // Last Lower Low level
var float last_lh_level = na // Last Lower High level
var int structure_count = 0
var string last_structure_type = na // "HH", "HL", "LL", "LH"
// Legacy variables for compatibility
var float last_swing_high = na
var float last_swing_low = na
var int last_high_bar = na
var int last_low_bar = na
// Market structure state tracking
var float pending_high = na
var float pending_low = na
var int pending_high_bar = na
var int pending_low_bar = na
var bool waiting_for_confirmation = false
// Break of Structure tracking variables
var float most_recent_hl = na
var float most_recent_lh = na
var int most_recent_hl_bar = na
var int most_recent_lh_bar = na
var bool bos_detected = false
// Trading variables
var bool trade_taken = false
// Trade visualization boxes (based on Casper strategy approach)
var box current_profit_box = na
var box current_sl_box = na
// Update swing points during Asian session
if asian_active and show_swing_points
// Always track absolute high/low for both TP levels and breakout detection
if na(asian_absolute_high) or high > asian_absolute_high
asian_absolute_high := high
if na(asian_absolute_low) or low < asian_absolute_low
asian_absolute_low := low
// Use absolute high/low for breakout levels (simplified logic)
if na(asian_session_high) or high > asian_session_high
asian_session_high := high
asian_high_bar := bar_index
if na(asian_session_low) or low < asian_session_low
asian_session_low := low
asian_low_bar := bar_index
// Track London session high/low for stop loss levels
if london_active
if na(london_session_high) or high > london_session_high
london_session_high := high
if na(london_session_low) or low < london_session_low
london_session_low := low
// Draw initial lines when Asian session ends
if asian_end and show_swing_points
if not na(asian_session_high) and not na(asian_high_bar)
// Draw extending line for high
asian_high_line := line.new(asian_high_bar, asian_session_high, bar_index + 200, asian_session_high,
color=swing_high_color, width=2, style=line.style_dashed, extend=extend.right)
asian_high_label := label.new(bar_index + 5, asian_session_high, "Asian High: " + str.tostring(asian_session_high, "#.####"), style=label.style_label_left, color=swing_high_color, textcolor=color.white, size=size.small)
if not na(asian_session_low) and not na(asian_low_bar)
// Draw extending line for low
asian_low_line := line.new(asian_low_bar, asian_session_low, bar_index + 200, asian_session_low,
color=swing_low_color, width=2, style=line.style_dashed, extend=extend.right)
asian_low_label := label.new(bar_index + 5, asian_session_low, "Asian Low: " + str.tostring(asian_session_low, "#.####"), style=label.style_label_left, color=swing_low_color, textcolor=color.white, size=size.small)
// Reset break flags for new session
high_broken := false
low_broken := false
// Check for breakouts during London session
if london_active and show_swing_points and not na(asian_session_high) and not na(asian_session_low)
// Check if Asian high is broken
if not high_broken and not low_broken and high > asian_session_high
high_broken := true
// Update high line to end at break point
if not na(asian_high_line)
line.set_x2(asian_high_line, bar_index)
line.set_extend(asian_high_line, extend.none)
// Remove the low line (first break wins)
if not na(asian_low_line)
line.delete(asian_low_line)
if not na(asian_low_label)
label.delete(asian_low_label)
// Add break marker
label.new(bar_index, asian_session_high * 1.001, "HIGH BREAK!",
style=label.style_label_down, color=color.red, textcolor=color.white, size=size.normal)
// Set breakout direction and initialize structure tracking
breakout_direction := "bullish"
last_swing_high := asian_session_high
last_swing_low := asian_session_low
last_high_bar := bar_index
structure_count := 0
// Check if Asian low is broken
if not low_broken and not high_broken and low < asian_session_low
low_broken := true
// Update low line to end at break point
if not na(asian_low_line)
line.set_x2(asian_low_line, bar_index)
line.set_extend(asian_low_line, extend.none)
// Remove the high line (first break wins)
if not na(asian_high_line)
line.delete(asian_high_line)
if not na(asian_high_label)
label.delete(asian_high_label)
// Add break marker
label.new(bar_index, asian_session_low * 0.999, "LOW BREAK!",
style=label.style_label_up, color=color.red, textcolor=color.white, size=size.normal)
// Set breakout direction and initialize structure tracking
breakout_direction := "bearish"
last_swing_high := asian_session_high
last_swing_low := asian_session_low
last_low_bar := bar_index
structure_count := 0
// Stop extending lines when London session ends (if not already broken)
if london_end and show_swing_points
if not high_broken and not na(asian_high_line)
line.set_x2(asian_high_line, bar_index)
line.set_extend(asian_high_line, extend.none)
if not low_broken and not na(asian_low_line)
line.set_x2(asian_low_line, bar_index)
line.set_extend(asian_low_line, extend.none)
// Force close all trades at London session end (if enabled)
if london_end and force_london_close
if strategy.position_size != 0
// Extend boxes immediately before session close to prevent timing issues
if not na(current_profit_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na // Clear reference after extending
if not na(current_sl_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na // Clear reference after extending
strategy.close_all(comment="London Close")
trade_taken := false // Reset trade flag for next session
// Market structure detection after breakout (only during London session and before first BoS)
if show_market_structure and not na(breakout_direction) and london_active and not bos_detected
// Bullish structure tracking (HH, HL alternating)
if breakout_direction == "bullish"
// Check for Higher High pattern: Bullish candle followed by bearish candle
pattern_high = math.max(high , high)
prev_hh = na(last_hh_level) ? last_swing_high : last_hh_level
// HH Detection: Only if we expect HH next (no last structure or last was HL)
if (na(last_structure_type) or last_structure_type == "HL") and close > open and close < open and pattern_high > prev_hh and close > prev_hh
// Check consolidation
is_too_close = not na(last_high_bar) and (bar_index - last_high_bar) <= 4
should_create_hh = true
if is_too_close and structure_count > 0 and pattern_high <= last_hh_level
should_create_hh := false
if should_create_hh
structure_count := structure_count + 1
label.new(bar_index - 1, high + (high * 0.0003), "HH" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_hh_level := pattern_high
last_swing_high := pattern_high
last_high_bar := bar_index
last_structure_type := "HH"
// HL Detection: Only if we expect HL next (last was HH)
pattern_low = math.min(low , low)
prev_hl = na(last_hl_level) ? last_swing_low : last_hl_level
if last_structure_type == "HH" and close < open and close > open and pattern_low > prev_hl and close > prev_hl
// Check consolidation
is_too_close = not na(last_low_bar) and (bar_index - last_low_bar) <= 4
should_create_hl = true
if is_too_close and pattern_low <= last_hl_level
should_create_hl := false
if should_create_hl
structure_count := structure_count + 1
label.new(bar_index - 1, low - (low * 0.0003), "HL" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_hl_level := pattern_low
most_recent_hl := pattern_low // Update most recent HL for BoS detection
most_recent_hl_bar := bar_index - 1 // Store HL bar position
last_low_bar := bar_index
last_structure_type := "HL"
// Bearish structure tracking (LL, LH alternating)
if breakout_direction == "bearish"
// Check for Lower Low pattern: Bearish candle followed by bullish candle
pattern_low = math.min(low , low)
prev_ll = na(last_ll_level) ? last_swing_low : last_ll_level
// LL Detection: Only if we expect LL next (no last structure or last was LH)
if (na(last_structure_type) or last_structure_type == "LH") and close < open and close > open and pattern_low < prev_ll and close < prev_ll
// Check consolidation
is_too_close = not na(last_low_bar) and (bar_index - last_low_bar) <= 4
should_create_ll = true
if is_too_close and structure_count > 0 and pattern_low >= last_ll_level
should_create_ll := false
if should_create_ll
structure_count := structure_count + 1
label.new(bar_index - 1, low - (low * 0.0003), "LL" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_ll_level := pattern_low
last_swing_low := pattern_low
last_low_bar := bar_index
last_structure_type := "LL"
// LH Detection: Only if we expect LH next (last was LL)
pattern_high = math.max(high , high)
prev_lh = na(last_lh_level) ? last_swing_high : last_lh_level
if last_structure_type == "LL" and close > open and close < open and pattern_high < prev_lh and close < prev_lh
// Check consolidation
is_too_close = not na(last_high_bar) and (bar_index - last_high_bar) <= 4
should_create_lh = true
if is_too_close and pattern_high >= last_lh_level
should_create_lh := false
if should_create_lh
structure_count := structure_count + 1
label.new(bar_index - 1, high + (high * 0.0003), "LH" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_lh_level := pattern_high
most_recent_lh := pattern_high // Update most recent LH for BoS detection
most_recent_lh_bar := bar_index - 1 // Store LH bar position
last_high_bar := bar_index
last_structure_type := "LH"
// Check if we're within the cutoff period before London session end
current_minute = minute(time, session_timezone)
london_end_time_minutes = london_end_hour * 60 // Convert London end hour to minutes
current_time_minutes = current_hour * 60 + current_minute // Current time in minutes
// Calculate minutes remaining in London session
london_session_minutes_remaining = london_end_time_minutes - current_time_minutes
// Handle day rollover case (e.g., if london_end is 8:00 (480 min) and current is 23:30 (1410 min))
if london_session_minutes_remaining < 0
london_session_minutes_remaining := london_session_minutes_remaining + (24 * 60) // Add 24 hours in minutes
// Only allow trades if more than cutoff_minutes remaining in London session
allow_new_trades = london_session_minutes_remaining > cutoff_minutes
// Break of Structure (BoS) Detection and Trading Logic - Only first BoS per London session and outside cutoff period
if show_bos and london_active and show_market_structure and not bos_detected and not trade_taken and allow_new_trades
// Bullish BoS: Price closes below the most recent HL (after bullish breakout) - SELL SIGNAL
if breakout_direction == "bullish" and not na(most_recent_hl) and not na(most_recent_hl_bar)
// Check minimum distance requirement (at least 4 candles between BoS and HL)
if close < most_recent_hl and (bar_index - most_recent_hl_bar) >= 4
// Draw dotted line from HL position to BoS point
line.new(most_recent_hl_bar, most_recent_hl, bar_index, most_recent_hl,
color=bos_color, width=2, style=line.style_dotted, extend=extend.none)
// Calculate center position for BoS label
center_bar = math.round((most_recent_hl_bar + bar_index) / 2)
// Draw BoS label below the line for HL break
label.new(center_bar, most_recent_hl - (most_recent_hl * 0.0005), "BoS",
style=label.style_none, color=color.new(color.white, 100),
textcolor=bos_color, size=size.normal)
// SELL ENTRY
if not na(london_session_high) and not na(asian_absolute_low)
// Calculate stop loss based on settings
stop_loss_level = use_atr_sl ? close + (atr * atr_multiplier) : london_session_high
take_profit_level = asian_absolute_low
entry_price = close
// Calculate position size based on user settings
position_size = calculate_position_size(entry_price, stop_loss_level)
strategy.entry("SELL", strategy.short, qty=position_size, comment="BoS Sell")
strategy.exit("SELL EXIT", "SELL", stop=stop_loss_level, limit=take_profit_level, comment="SL/TP")
// Create trade visualization boxes (TradingView style) - minimum 8 bars width
// Blue profit zone box (from entry to take profit)
current_profit_box := box.new(left=bar_index, top=take_profit_level, right=bar_index + 8, bottom=entry_price,
bgcolor=color.new(color.blue, 70), border_width=0)
// Red stop loss zone box (from entry to stop loss)
current_sl_box := box.new(left=bar_index, top=entry_price, right=bar_index + 8, bottom=stop_loss_level,
bgcolor=color.new(color.red, 70), border_width=0)
trade_taken := true
bos_detected := true // Mark BoS as detected for this session
// Bearish BoS: Price closes above the most recent LH (after bearish breakout) - BUY SIGNAL
if breakout_direction == "bearish" and not na(most_recent_lh) and not na(most_recent_lh_bar)
// Check minimum distance requirement (at least 4 candles between BoS and LH)
if close > most_recent_lh and (bar_index - most_recent_lh_bar) >= 4
// Draw dotted line from LH position to BoS point
line.new(most_recent_lh_bar, most_recent_lh, bar_index, most_recent_lh,
color=bos_color, width=1, style=line.style_dotted, extend=extend.none)
// Calculate center position for BoS label
center_bar = math.round((most_recent_lh_bar + bar_index) / 2)
// Draw BoS label above the line for LH break
label.new(center_bar, most_recent_lh + (most_recent_lh * 0.0005), "BoS",
style=label.style_none, color=color.new(color.white, 100),
textcolor=bos_color, size=size.normal)
// BUY ENTRY
if not na(london_session_low) and not na(asian_absolute_high)
// Calculate stop loss based on settings
stop_loss_level = use_atr_sl ? close - (atr * atr_multiplier) : london_session_low
take_profit_level = asian_absolute_high
entry_price = close
// Calculate position size based on user settings
position_size = calculate_position_size(entry_price, stop_loss_level)
strategy.entry("BUY", strategy.long, qty=position_size, comment="BoS Buy")
strategy.exit("BUY EXIT", "BUY", stop=stop_loss_level, limit=take_profit_level, comment="SL/TP")
// Create trade visualization boxes (TradingView style) - minimum 8 bars width
// Blue profit zone box (from entry to take profit)
current_profit_box := box.new(left=bar_index, top=entry_price, right=bar_index + 8, bottom=take_profit_level,
bgcolor=color.new(color.blue, 70), border_width=0)
// Red stop loss zone box (from entry to stop loss)
current_sl_box := box.new(left=bar_index, top=stop_loss_level, right=bar_index + 8, bottom=entry_price,
bgcolor=color.new(color.red, 70), border_width=0)
trade_taken := true
bos_detected := true // Mark BoS as detected for this session
// Position close detection for extending boxes (based on Casper strategy)
if barstate.isconfirmed and strategy.position_size == 0 and strategy.position_size != 0
// Extend trade visualization boxes to exact exit point when position closes
if not na(current_profit_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na // Clear reference after extending
if not na(current_sl_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na // Clear reference after extending
// Backup safety check - extend boxes if position is closed but boxes still active
if not na(current_profit_box) and strategy.position_size == 0
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na
if not na(current_sl_box) and strategy.position_size == 0
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na
// Reset everything when new Asian session starts
if asian_start and show_swing_points
asian_session_high := na
asian_session_low := na
asian_high_bar := na
asian_low_bar := na
// Reset absolute levels
asian_absolute_high := na
asian_absolute_low := na
asian_high_line := na
asian_low_line := na
asian_high_label := na
asian_low_label := na
high_broken := false
low_broken := false
// Reset London session levels
london_session_high := na
london_session_low := na
// Reset market structure tracking
breakout_direction := na
last_hh_level := na
last_hl_level := na
last_ll_level := na
last_lh_level := na
last_swing_high := na
last_swing_low := na
last_high_bar := na
last_low_bar := na
structure_count := 0
last_structure_type := na
pending_high := na
pending_low := na
pending_high_bar := na
pending_low_bar := na
waiting_for_confirmation := false
// Reset BoS tracking
most_recent_hl := na
most_recent_lh := na
most_recent_hl_bar := na
most_recent_lh_bar := na
bos_detected := false
// Reset trading
trade_taken := false
// Reset current trade boxes
current_profit_box := na
current_sl_box := na
// Debug info (optional)
show_debug = input.bool(false, "Show Debug Info")
if show_debug
var table debug_table = table.new(position.top_right, 2, 3, bgcolor=color.white, border_width=1)
if barstate.islast
table.cell(debug_table, 0, 0, "Current Hour:", text_color=color.black)
table.cell(debug_table, 1, 0, str.tostring(current_hour), text_color=color.black)
table.cell(debug_table, 0, 1, "Asian Active:", text_color=color.black)
table.cell(debug_table, 1, 1, str.tostring((current_hour >= asian_start_hour) or (current_hour < asian_end_hour)), text_color=color.black)
table.cell(debug_table, 0, 2, "London Active:", text_color=color.black)
table.cell(debug_table, 1, 2, str.tostring((current_hour >= london_start_hour) and (current_hour < london_end_hour)), text_color=color.black)
Entry ChecklistEntry Checklist
A comprehensive multi-factor analysis tool for stock and crypto entry decisions, combining fundamental, technical, and market sentiment indicators in a dynamic table display.
🎯 Overview
This advanced Pine Script indicator provides traders and investors with a systematic checklist for evaluating potential entry points. It consolidates critical market data into a clean, color-coded table that adapts based on asset type and data availability.
📊 Key Features
Market Context Analysis:
Seasonality: Historical S&P 500 monthly return patterns with strength/weakness labels
Market Breadth (S5TH): Percentage of S&P 500 stocks above their 50-day moving average
Fear/Greed Index (VIX): Market sentiment indicator with threshold-based color coding
Fundamental Analysis (Stocks Only):
Earnings Dates: Upcoming earnings announcement tracking with 14-day warning
Growth Metrics: Year-over-year sales and EPS growth rates
Acceleration: Quarter-over-quarter growth acceleration analysis
Sector & Industry Analysis:
Sector Relative Strength: 20-day performance vs SPY benchmark
Industry Relative Strength: Granular industry ETF performance comparison
120+ Industry ETF Mappings: Comprehensive sector and industry classifications
Technical Analysis:
IBD-Style RS Rating: Multi-timeframe relative strength scoring (1-99 scale)
RS vs SPX: Stock performance relative to S&P 500
RS vs Sector: Performance relative to sector ETF
RS vs Industry: Performance relative to industry ETF
🎨 Visual Design
Dynamic Table: Bottom-right overlay with professional dark theme
Color-Coded Signals: Green (bullish), red (bearish), neutral (white)
0.06% Price ChangePower indicator candle - Ideal for IntraDay Bank Nifty
Optiions Buying indicator - Trade after this candle + Doji + Continuity
Multi TF Volume ATRThis indicator measures volatility using ATR applied to volume across multiple timeframes. It helps identify when real momentum enters the market by showing volume spikes on 1h, 4h, 12h, and Daily charts. When several timeframes spike at the same time, it often signals strong moves, breakouts, or major shifts in volatility.
The script calculates Volume ATR for 1h, 4h, 12h, and 1D. Each timeframe generates its own spike condition. The indicator then checks for alignment between timeframes. The 1h histogram changes color based on the strength of the signal.
Red means multi timeframe alignment. This is the strongest signal and shows that several timeframes are spiking together.
Yellow means a 1h spike only. This is an early warning of local volatility.
Blue means no spike.
The indicator also plots higher timeframe ATR lines for context. These include 4h ATR, 12h ATR, and 1D ATR. When these lines rise together, volatility is building. Spike markers appear at the top of the pane when higher timeframes trigger.
You can choose how strict the alignment should be. Options include all three timeframes (1h, 4h, 12h), at least two timeframes, or including the daily timeframe for even stronger confirmation.
The script includes alert conditions for 1h spikes, multi timeframe alignment spikes, and daily spikes. These alerts help you stay ahead of volatility without watching charts constantly.
This indicator is useful for many trading styles. Breakout traders use red bars to confirm momentum. Mean reversion traders use daily spikes to confirm volatility conditions. Trend traders watch rising 4h and 12h ATR lines. Scalpers use yellow bars as early warnings.
Volume ATR shows how quickly volume is expanding. When several timeframes spike together, it often signals institutional activity, liquidity events, volatility shifts, breakouts, or reversals. This provides information that price alone cannot show.
SHFE Silver Price Discovery (USD/oz)This indicator converts Shanghai Futures Exchange (SHFE) silver futures into USD per troy ounce and optionally overlays COMEX silver futures for direct, same-unit comparison.
SHFE silver is quoted in CNY per kilogram, while COMEX is quoted in USD per troy ounce. To make SHFE prices comparable on the same chart, the script:
pulls SHFE:AG1! close (CNY/kg)
pulls USD/CNY FX rate
converts to USD/oz using the exact kg → troy oz factor (32.1507466)
Why this is useful:
SHFE pricing often reflects different drivers than Western paper markets (currency effects, local liquidity, industrial demand, and regional availability). Normalizing SHFE into USD/oz lets traders and investors monitor inter-market alignment and spot periods where Eastern pricing diverges from COMEX.
How to use:
Use the SHFE USD/oz line as a “physical-demand-sensitive” reference.
Overlay COMEX to compare regional pricing and identify multi-week divergence regimes.
For the premium/discount histogram, use the companion indicator: “SHFE Silver Premium vs COMEX (USD/oz)”.
This indicator is designed for macro and inter-market analysis rather than short-term scalping.
Engulfing + EMA + WMA + ICT Alejandradetector de velas engulfing
7 emas disponibles
wma
detector de bos y choch
Sticky Last 7 Days Highs and LowsHighs and lows marked for last 7 days, to get the clear picture of the range of the chart in last 7 days.
GC A Share Filter at Ox StreetThis a dummy indicator to help select potential shares based on momentum theory for GC A share market.
Sarina - EMA Dynamic -BB - 01132026Here is a concise and professional description of your indicator in English, designed to be shared with others. It highlights the logic of "Dynamic Adaptation" and the "Anti-Noise" system without being overly technical.
Indicator Description: EMA Dynamic - Pro Adaptive System
This indicator is a high-performance trend-following tool designed to filter market noise and adapt to real-time price volatility. Unlike standard EMAs that use a fixed length, this system uses a Computational Logic that expands or contracts its period based on price momentum and distance.
Key Features:
Dynamic EMA Core: The lengths (c1 & c2) are not static. They increase or decrease dynamically as price moves, allowing the indicator to "speed up" during breakouts and "slow down" during consolidations.
Shock-Absorber (Stability Logic): To prevent "false signals" during sudden spikes, the indicator includes a stabilization filter (No-Shock). It only confirms a trend change after the price maintains its position relative to the EMAs for a specified number of bars.
Volatility-Linked Bollinger Bands: The Bollinger Bands are anchored to the Dynamic EMA 1, meaning the volatility channels expand and contract in perfect harmony with the adaptive core of the system.
Dual-Layer Signal System: Includes S-Signals (Fast/Scalp) and P-Signals (Pro/Trend) to identify different layers of market entry and exit points.
Visual Efficiency: Designed for clean charts. Works best with "Wick-only" candlestick views to focus strictly on price rejection and dynamic trend structures.
Best Used For: Identifying the "Safe Middle" of a move and avoiding the traps set by market makers during choppy price action.
Would you like me to create a separate Readme file or a Setup Guide for users who want to know exactly how to tune the "Step Inc/Dec" settings?
Trading Sessions UAETrading Sessions – UAE (GMT+4)
This indicator plots the Asia, London, and New York trading sessions as clean session boxes based on UAE time (GMT+4).
Session timing is fully locked to UAE timezone and does not change with the user’s country, chart timezone, or device location. This ensures consistent session behavior for all users worldwide.
Features include:
Asia, London & New York session boxes
Correct session closing (no early close issue)
New York session handled across midnight
Customizable colors, borders, and widths
Session labels with adjustable size and text color
Designed for ICT / SMC traders, Forex, Indices, and Crypto.
updated swapsV-Tap (also called D-Tap) is a standardized auxiliary power output found on V-mount batteries. It provides direct DC power—typically around 14.4V—to run external accessories such as monitors, wireless video transmitters, follow-focus motors, LED lights, and audio equipment. V-Tap ports allow filmmakers to power multiple devices from a single battery, reducing cable clutter and improving mobility on set.
If you want it shorter, more technical, or more marketing-style, tell me where you’re using it (product page, manual, school project, etc.).
Weekly VWAP (ETH to RTH) - OHLC4Weekly vwap with standard deviations. The vwap will carry over ETH data into RTH when RTH mode is turned on.
Crypto 1H [Universal - Strict + R:R]Overview This indicator is a trend-following strategy designed specifically for the 1-hour timeframe (though it works universally). It focuses on high-probability "pullback" entries within an established trend.
What distinguishes this script from standard trend indicators is the integrated Risk:Reward (R:R) Pre-Filter. Before generating a signal, the script calculates the distance to the logical Stop Loss and the logical Take Profit (Resistance/Support). If the trade does not offer a minimum Risk-to-Reward ratio (default 1:2), the signal is suppressed.
How It Works
The strategy follows a strictly defined logical flow:
1. Trend Identification The script uses a Baseline EMA (Default: 50) to determine the trend.
Long: Price is above the 50 EMA, and the 50 EMA is sloping up.
Short: Price is below the 50 EMA, and the 50 EMA is sloping down.
2. The Pullback & Trigger Once a trend is identified, the script waits for price to pull back to the "Trigger" EMA (Default: 21).
The Wait Window: The script utilizes a "Max Wait Bars" logic. Once the price touches the Trigger EMA, it listens for an entry signal for exactly 3 bars. If price lingers too long without reacting, the setup is invalidated to avoid chopping markets.
3. The Risk:Reward Filter (Crucial) This is the final gatekeeper. Even if the trend and candle shape are perfect, the script performs a geometric check:
Stop Loss Calculation: Determined by the lowest low (for longs) or highest high (for shorts) of the last 5 bars, plus a small ATR buffer.
Target Calculation: Determined by the highest high or lowest low of the last 24 bars (local Support/Resistance).
The Math: If the distance to the Target is not at least 2.0x the distance to the Stop Loss, the trade is skipped. This prevents buying right into resistance or selling right into support.
Indicator Features & Settings
Session Filter: Defaults to London and NY sessions (UTC) to ensure volume is present.
Volatility Filter: Requires the signal candle to have a minimum body size (0.15% of price) to avoid "doji" or low-momentum entries.
Visuals:
White Line: 50 EMA (Trend)
Yellow Line: 21 EMA (Momentum Trigger)
Labels: Green (Long) and Red (Short) entry markers.
Red Crosses: These indicate exactly where the suggested Stop Loss was located at the moment of entry.
Risk Disclaimer This tool is designed for educational and analytical purposes. The "Strict R:R" filter does not guarantee profit; it simply filters out setups that mathematically do not fit the specified ratio based on historical price action. Always perform your own analysis.
30d Rolling TWAP (Hourly)code:
//@version=5
indicator("30d Rolling TWAP (Hourly)", overlay=true)
// Calculation: (High + Low + Close) / 3
typicalPrice = hlc3
// 30 days * 24 hours = 720 bars
length = 720
twap30 = ta.sma(typicalPrice, length)
// Plotting
plot(twap30, color=color.new(#2962FF, 0), title="30d Hourly TWAP", linewidth=2)
// Optional: Background highlight
fillColor = close > twap30 ? color.new(color.green, 90) : color.new(color.red, 90)
bgcolor(fillColor)
LEVENT: Lifetime Estimation via Efficiency-Regime EventLEVENT — Lifetime Estimation via Efficiency-Regime Event Transitions
LEVENT is a research-grade indicator that estimates the remaining structural lifetime of the current market regime.
Unlike trend, volatility, or momentum tools, LEVENT does not measure price movement — it measures how long the current market structure is likely to survive before breaking.
This script implements the LEVENT model published on Zenodo (Bülent Duman, 2026) and is built on top of the open-source DERYA (Dynamic Efficiency Regime Yield Analyzer) microstructural efficiency framework.
What LEVENT measures
LEVENT outputs a single continuous variable L that represents the remaining survival capacity of the active efficiency regime.
High L → the current regime has strong structural endurance
Falling L → the regime is consuming its capacity
L → 0 → regime exhaustion and elevated probability of transition
This makes LEVENT a forward-looking structural time variable, not a price indicator.
What is inside this script
This implementation contains the following components:
1. DERYA (open-source microstructure efficiency)
DERYA is computed from OHLC data as:
Net close-to-close movement divided by total intrabar range
It is smoothed with an EMA and normalized over a rolling window to produce a bounded efficiency state (0–100).
This is an open-source indicator and is explicitly credited in the LEVENT paper.
2. Transition Strength (S)
S measures how unstable the regime is by combining:
the slope of DERYA
the acceleration of DERYA
This is not RSI, MACD, or ATR — it is a state-transition intensity metric.
3. Regime Engine
Markets are classified into four structural regimes:
Expansion
Exhaustion
Collapse
Base / Recovery
A debounce + persistence filter is used to avoid noise-based flickering.
4. Structural Lifetime (LEVENT L)
Each regime is assigned a capacity (Λ) and a fragility (α).
LEVENT then evolves as a jump-and-countdown survival process:
On regime change → L resets to full capacity
Inside a regime → L decays deterministically
High instability → faster decay
This is not a moving average, oscillator, or probability estimate — it is a structural survival clock.
How to use LEVENT
LEVENT is designed to be used as a regime-health overlay, not a buy/sell trigger.
Typical uses:
Detect late-stage trends when L is low
Avoid initiating positions when the regime is near collapse
Compare structural stability across assets
Combine with price, trend, or volume systems
Do not use LEVENT alone as a trading signal.
LEVENT tells you “how long the structure may last”, not “where price will go.”
Visuals
Background colors show the current regime
The LEVENT line shows remaining structural lifetime
A table displays the active regime and current L value
Important notes
LEVENT is not RSI, MACD, ATR, or trend
LEVENT does not predict price direction
LEVENT does not issue entry/exit signals
LEVENT is a research-grade structural model
The DERYA component used here is an open-source microstructural efficiency estimator and is credited accordingly.
Risk and disclaimer
This script is provided for research and analytical purposes only.
It is not financial advice and must not be used as a standalone trading system.
Markets are uncertain.
All trading decisions and risks remain entirely the responsibility of the user.
LEVENT: Lifetime Estimation via Efficiency-regime Event Transitions
Introducing a Regime-Dependent Structural Lifetime Estimator for Financial Markets Using OHLC Data
Author: DUMAN,Bülent
Affiliation: Independent Researcher
zenodo.org
ATR Bands over 50D SMA ($ method)This indicator does NOT conform to Jeff Sun's methodology. It is published for educational purposes only. It is offered as-is, with no warranty of suitability or accuracy. The reality is, this was just a detour that let me to developing my other indicator.






















