Gaussian Volatility Adjusted Gaussian Volatility Adjusted Indicator
The Gaussian Volatility Adjusted indicator is a powerful tool designed to identify trend direction and momentum by combining a Gaussian-filtered moving average with volatility-based thresholds. By smoothing price data with a Gaussian filter and adjusting for market volatility using Average True Range (ATR) and Standard Deviation (SD), this indicator generates clear bullish and bearish signals. The Exponential Moving Average (EMA) of the momentum difference and price bars are dynamically colored to highlight trend strength, making it easier for traders to identify potential entry and exit points in various market conditions.
How It Works
Gaussian Filter Calculations
Gaussian Filter: Applies a Gaussian smoothing filter to a user-defined price source, typically an EMA of the closing price, over a configurable length (default: 70) with a specified sigma (default: 12). The Gaussian filter uses a weighted sum based on a Gaussian distribution to reduce noise while preserving significant price trends. Weights are calculated using the Gaussian formula and normalized to ensure accurate smoothing.
Base Moving Average: Optionally applies an EMA (default: enabled, length: 45) to the closing price before Gaussian filtering, providing a smoother input for the Gaussian calculation to enhance signal reliability.
Volatility Adjustments
ATR-Based Bands: Calculates the Average True Range (ATR) over a user-defined period (default: 24), scaled by a sensitivity factor (default: 1) and an ATR factor (default: 0.85). These form volatility-adjusted bands around the Gaussian-filtered value:
Upper Band: Gaussian value + (ATR × ATR Factor).
Lower Band: Gaussian value - (ATR × ATR Factor).
Standard Deviation Bands: Computes the Standard Deviation (SD) of the closing price over a user-defined period (default: 27), scaled by the sensitivity factor. These form additional bands:
Upper SD Band: Gaussian value + SD.
Lower SD Band: Gaussian value - SD.
Trend and Momentum SignalsTrend
Detection:Bullish Trend: Triggered when the closing price exceeds the upper SD band, setting the trend to +1.
Bearish Trend: Triggered when the closing price falls below the upper ATR-based band, setting the trend to -1.
Momentum Calculation: Computes a momentum difference (Diff) based on the trend:
For a bullish trend (+1), Diff = Close - Upper ATR Band.
For a bearish trend (-1), Diff = Close - (Gaussian + SD).
EMA of Momentum: Applies an EMA (default length: 45) to the momentum difference to smooth the momentum signal.
Final Trend with EMA Confluences:
If EMA confluence is enabled (default: true), a bullish signal (+1) is confirmed when the trend is +1 and Diff exceeds the EMA of Diff. A bearish signal (-1) is confirmed when the trend is -1 and Diff is below the EMA of Diff.
If EMA confluence is disabled, the final trend follows the initial trend direction (±1).
Visual Representation
The indicator provides a clear and intuitive visual interface:
EMA Line: Plots the EMA of the momentum difference, colored based on the final trend:
Green: Bullish trend (Final_Trend = +1).
Red: Bearish trend (Final_Trend = -1).
Gray: Neutral or no trend.
Zero Line: A dashed line at zero (semi-transparent) serves as a reference for the EMA plot.
Bar Coloring: Price bars are colored to reflect the trend:
Green: Bullish trend (Final_Trend = +1).
Red: Bearish trend (Final_Trend = -1).
No Color: Neutral or no trend.
Volatility Bands: While not plotted in the provided script, the ATR and SD bands are calculated and could be plotted for additional context, marking key levels for trend detection.
Customization & Parameters
The Gaussian Volatility Adjusted indicator offers flexible parameters to suit various trading styles:
Volatility Parameters:
ATR Length: Period for ATR calculation (default: 24).
ATR Factor: Multiplier for ATR-based bands (default: 0.85).
SD Length: Period for Standard Deviation calculation (default: 27).
Sensitivity: Scales ATR and SD for band sensitivity (default: 1).
Moving Average Parameters:
Use EMA Confluence: Enable/disable EMA confluence for trend confirmation (default: true).
EMA Length: Period for EMA calculations (default: 45).
Gaussian Parameter:
Gaussian Length: Period for Gaussian filter (default: 70).
Sigma: Controls the Gaussian filter’s smoothness (default: 12).
Color Settings: EMA line and bars use green for bullish signals, red for bearish signals, and gray for neutral states, with customizable transparency for the zero line.
Trading Applications
This indicator is versatile and can be applied across various markets and strategies:
Trend Following:
Use the final trend signals and bar coloring to identify and follow bullish or bearish trends, with the Gaussian filter reducing noise for clearer trend detection.
Momentum Trading: The EMA of the momentum difference highlights strong momentum shifts, ideal for entering or exiting trades based on trend strength.
Reversal Detection: Monitor price crossings of the ATR and SD bands to identify potential trend reversals, especially when confirmed by the EMA confluence.
Scalping and Swing Trading: Adjust parameters (e.g., ATR length, Gaussian length, or sensitivity) to suit short-term scalping or longer-term swing trading strategies.
Final Note
The Gaussian Volatility Adjusted indicator is a robust tool for traders seeking to leverage smoothed price data and volatility-adjusted thresholds for trend and momentum analysis. Its combination of Gaussian filtering, ATR and SD-based bands, and EMA confluence provides a comprehensive framework for identifying trading opportunities. The dynamic coloring of the EMA line and price bars enhances visual clarity, making it easier to act on signals. As with all indicators, backtest thoroughly and integrate into a comprehensive trading strategy for optimal results.
Candlestick analysis
Kalman VWMA For LoopKalman VWMA For Loop Indicator
The Kalman VWMA For Loop indicator is a sophisticated tool designed to smooth price data using a Kalman filter applied to a Volume Weighted Moving Average (VWMA). By combining the VWMA’s volume-weighted price sensitivity with the adaptive noise reduction of a Kalman filter, this indicator provides traders with a robust momentum and trend-following signal. The indicator includes a customizable for-loop mechanism to potentially iterate over a range of calculations or parameters, enhancing flexibility for advanced trading strategies. Visual outputs are plotted to help traders identify trends and potential trading opportunities with reduced noise.
How It Works
VWMA Calculations
Volume Weighted Moving Average (VWMA): Computes a VWMA based on a user-selected price source (default: Close) over a configurable period (default: 14). The VWMA weights price data by trading volume, providing a more accurate representation of market activity compared to a simple moving average.
Kalman Filter Calculation
Kalman Filter: Applies a Kalman filter to the price source to smooth price movements and reduce noise.
The filter uses:
Process Noise: Controls the adaptability of the filter to price changes (default: 0.01).
Measurement Noise: Adjusts sensitivity to price fluctuations (default: 3).
Filter Order (N): Defines the number of states in the Kalman filter (default: 3), allowing for multi-state modeling of price dynamics.
The Kalman filter iteratively predicts and updates the price estimate using state estimates and error covariances stored in arrays. This process minimizes noise while preserving significant price trends.
For-Loop Mechanism
The script includes a for-loop structure with user-defined parameters (from and to_, defaulting to 1 and 25, respectively). While the provided code does not fully implement the for-loop’s functionality, it is intended to allow iterative calculations or parameter sweeps, such as testing multiple periods or thresholds within the specified range. This feature enhances the indicator’s flexibility for optimization or multi-scenario analysis.
Visual Representations
The indicator plots the VWMA as a red line on the chart, providing a clear visual reference for the volume-weighted trend.
The Kalman-filtered price is calculated but not plotted in the provided code. When plotted, it would appear as a smoothed price line, highlighting the underlying trend with reduced noise.
The for-loop parameters suggest potential for additional visual outputs (e.g., multiple VWMA lines or signals) if fully implemented, but the current script only plots the VWMA.
Customization & Parameters
The Kalman VWMA For Loop indicator offers flexible parameters to suit various trading styles:
Moving Average Parameters:
Price Source: Select the input price (default: Close; options: Close, High, Low, Open).
MA Period: Adjust the VWMA calculation period (default: 14).
Kalman Parameters:
Process Noise: Adjusts the filter’s adaptability to price changes (default: 0.01).
Measurement Noise: Controls sensitivity to price fluctuations (default: 3).
Filter Order (N): Sets the number of states for the Kalman filter (default: 3).
For-Loop Parameters:
From: Starting value for the for-loop (default: 1).
To: Ending value for the for-loop (default: 25).
Color Settings: The VWMA is plotted in red, with potential for additional customizable colors if the for-loop is expanded to plot multiple outputs.
Trading Applications
This indicator is versatile and can be applied across various markets and strategies:
Trend Following:
Use the Kalman-filtered price and VWMA to identify the direction and strength of trends, with the smoothed output reducing false signals in volatile markets.
Momentum Trading: The VWMA highlights volume-driven price movements, allowing traders to enter or exit based on momentum shifts.
Parameter Optimization: The for-loop structure (if fully implemented) enables testing multiple VWMA periods or Kalman parameters, aiding in strategy optimization.
Scalping and Swing Trading: Adjust the MA period and Kalman parameters to suit short-term (scalping) or longer-term (swing trading) strategies.
Final Note
The Kalman VWMA For Loop indicator is a powerful tool for traders seeking to combine volume-weighted price analysis with advanced noise reduction via a Kalman filter. Its customizable parameters and potential for iterative calculations through the for-loop make it adaptable to various trading styles. While the for-loop functionality is not fully implemented in the provided code, completing it could enable dynamic parameter testing or signal generation. As with all indicators, backtest thoroughly and integrate into a comprehensive trading strategy for optimal results.
Venkat Sir RSI 38Here's a Pine Script (TradingView) code that does the following:
Uses the RSI indicator (Relative Strength Index).
Watches for RSI crossing below level 38 and then crossing above 38.
When RSI crosses above 38 (after having gone below), it plots a green triangle-up symbol above the candle that triggered the cross.
Ashish indicator//@version=5
// Copyright (c) 2021-present, Alex Orekhov (everget)
indicator('Ashish indicator', overlay=true)
amplitude = input(title='Amplitude', defval=1)
channelDeviation = input(title='Channel Deviation', defval=2)
showArrows = input(title='Show Arrows', defval=true)
showChannels = input(title='Show Channels', defval=false)
var int trend = 0
var int nextTrend = 0
var float maxLowPrice = nz(low , low)
var float minHighPrice = nz(high , high)
var float up = 0.0
var float down = 0.0
float atrHigh = 0.0
float atrLow = 0.0
float arrowUp = na
float arrowDown = na
atr2 = ta.atr(100) / 2
dev = channelDeviation * atr2
highPrice = high
lowPrice = low
highma = ta.sma(high, amplitude)
lowma = ta.sma(low, amplitude)
if nextTrend == 1
maxLowPrice := math.max(lowPrice, maxLowPrice)
if highma < maxLowPrice and close < nz(low , low)
trend := 1
nextTrend := 0
minHighPrice := highPrice
minHighPrice
else
minHighPrice := math.min(highPrice, minHighPrice)
if lowma > minHighPrice and close > nz(high , high)
trend := 0
nextTrend := 1
maxLowPrice := lowPrice
maxLowPrice
if trend == 0
if not na(trend ) and trend != 0
up := na(down ) ? down : down
arrowUp := up - atr2
arrowUp
else
up := na(up ) ? maxLowPrice : math.max(maxLowPrice, up )
up
atrHigh := up + dev
atrLow := up - dev
atrLow
else
if not na(trend ) and trend != 1
down := na(up ) ? up : up
arrowDown := down + atr2
arrowDown
else
down := na(down ) ? minHighPrice : math.min(minHighPrice, down )
down
atrHigh := down + dev
atrLow := down - dev
atrLow
ht = trend == 0 ? up : down
var color buyColor = color.purple
var color sellColor = color.red
htColor = trend == 0 ? buyColor : sellColor
htPlot = plot(ht, title='Ashish indicator', linewidth=2, color=htColor)
atrHighPlot = plot(showChannels ? atrHigh : na, title='ATR High', style=plot.style_circles, color=sellColor)
atrLowPlot = plot(showChannels ? atrLow : na, title='ATR Low', style=plot.style_circles, color=buyColor)
fill(htPlot, atrHighPlot, title='ATR High Ribbon', color=sellColor, transp=90)
fill(htPlot, atrLowPlot, title='ATR Low Ribbon', color=buyColor, transp=90)
buySignal = not na(arrowUp) and trend == 0 and trend == 1
sellSignal = not na(arrowDown) and trend == 1 and trend == 0
plotshape(showArrows and buySignal ? atrLow : na, title='Arrow Up', style=shape.triangleup, location=location.belowbar, size=size.tiny, color=buyColor)
plotshape(showArrows and sellSignal ? atrHigh : na, title='Arrow Down', style=shape.triangledown, location=location.abovebar, size=size.tiny, color=sellColor)
alertcondition(buySignal, title='Alert: Ashish indicator Buy', message='Ashish indicator Buy')
alertcondition(sellSignal, title='Alert: Ashish indicator Sell', message='Ashish indicator Sell')
TLP Swing Chart V2thanks
// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// Sửa đổi trên code gốc của © meomeo105
// © meomeo105
//@version=5
indicator('TLP Swing Chart V2', shorttitle='TLP Swing V2', overlay=true, max_lines_count=500)
//-----Input-------
customTF = input.timeframe(defval="",title = "Show Other TimeFrame")
showTLP = input.bool(false, 'Show TLP', inline = "TLP1")
colorTLP = input.color(color.aqua, '', inline = "TLP1")
showSTLP = input.bool(true, 'Show TLP Swing', inline = "Swing1")
colorSTLP = input.color(color.aqua, '', inline = "Swing1")
showLabel = input.bool(true, 'Show Label TimeFrame')
lineSTLP = input.string(title="",options= ,defval="(─)", inline = "Swing1")
lineStyleSTLP = lineSTLP == "(┈)" ? line.style_dotted : lineSTLP == "(╌)" ? line.style_dashed : line.style_solid
//IOSB
IOSB = "TLPInOutSideBarSetting"
ISB = input(true,group =IOSB, title="showISB")
colorISB = input.color(color.rgb(250, 171, 0), inline = "ISB")
OSB = input(true,group =IOSB, title="showOSB")
colorOSB = input.color(color.rgb(56, 219, 255), inline = "OSB")
ZoneColor = input(defval = color.new(color.orange, 90),group =IOSB, title = "Background Color")
BorderColor = input(defval = color.new(color.orange, 100),group =IOSB, title = "Border Color")
/////////////////
var aCZ = array.new_float(0)
float highest = high
float lowest = low
if (array.size(aCZ) > 0)
highest := array.get(aCZ, 0)
lowest := array.get(aCZ, 1)
insideBarCondtion = low >= lowest and low <= highest and high >= lowest and high <= highest
if ( insideBarCondtion == true )
array.push(aCZ, high )
array.push(aCZ, low )
if( array.size(aCZ) >= 2 and insideBarCondtion == false )
float maxCZ = array.max(aCZ)
float minCZ = array.min(aCZ)
box.new(bar_index - (array.size(aCZ) / 2) - 1, maxCZ, bar_index - 1, minCZ, bgcolor = ZoneColor, border_color = BorderColor)
array.clear(aCZ)
//////////////////////////Global//////////////////////////
var arrayLineTemp = array.new_line()
// Funtion
f_resInMinutes() =>
_resInMinutes = timeframe.multiplier * (
timeframe.isseconds ? 1. / 60. :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 1440. :
timeframe.isweekly ? 10080. :
timeframe.ismonthly ? 43800. : na)
// Converts a resolution expressed in minutes into a string usable by "security()"
f_resFromMinutes(_minutes) =>
_minutes < 1 ? str.tostring(math.round(_minutes*60)) + "S" :
_minutes < 60 ? str.tostring(math.round(_minutes)) + "m" :
_minutes < 1440 ? str.tostring(math.round(_minutes/60)) + "H" :
_minutes < 10080 ? str.tostring(math.round(math.min(_minutes / 1440, 7))) + "D" :
_minutes < 43800 ? str.tostring(math.round(math.min(_minutes / 10080, 4))) + "W" :
str.tostring(math.round(math.min(_minutes / 43800, 12))) + "M"
f_tfRes(_res,_exp) =>
request.security(syminfo.tickerid,_res,_exp,lookahead=barmerge.lookahead_on)
var label labelError = label.new(bar_index, high, text = "", color = #00000000, textcolor = color.white,textalign = text.align_left)
sendError(_mmessage) =>
label.set_xy(labelError, bar_index + 3, close )
label.set_text(labelError, _mmessage)
var arrayLineChoCh = array.new_line()
var label labelTF = label.new(time, close, text = "",color = color.new(showSTLP ? colorSTLP : colorTLP,95), textcolor = showSTLP ? colorSTLP : colorTLP,xloc = xloc.bar_time, textalign = text.align_left)
//////////////////////////TLP//////////////////////////
var arrayXTLP = array.new_int(5,time)
var arrayYTLP = array.new_float(5,close)
var arrayLineTLP = array.new_line()
int drawLineTLP = 0
_high = high
_low = low
_close = close
_open = open
if(customTF != timeframe.period)
_high := f_tfRes(customTF,high)
_low := f_tfRes(customTF,low)
_close := f_tfRes(customTF,close)
_open := f_tfRes(customTF,open)
highPrev = _high
lowPrev = _low
// drawLineTLP => 2:Tiếp tục 1:Đảo chiều; // Outsidebar 2:Tiếp tục 3:Tiếp tục và Đảo chiều 4 : Đảo chiều 2 lần
drawLineTLP := 0
if(_high > highPrev and _low > lowPrev )
if(array.get(arrayYTLP,0) > array.get(arrayYTLP,1))
if(_high <= high)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _high )
drawLineTLP := 2
else
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_high )
drawLineTLP := 1
else if(_high < highPrev and _low < lowPrev )
if(array.get(arrayYTLP,0) > array.get(arrayYTLP,1))
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_low )
drawLineTLP := 1
else
if(_low >= low)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _low )
drawLineTLP := 2
else if(_high >= highPrev and _low < lowPrev or _high > highPrev and _low <= lowPrev )
if(array.get(arrayYTLP,0) > array.get(arrayYTLP,1))
if(_high >= array.get(arrayYTLP,0) and array.get(arrayYTLP,1) < _low )
if(_high <= high)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _high )
drawLineTLP := 2
else if(_high >= array.get(arrayYTLP,0) and array.get(arrayYTLP,1) > _low )
if(_close < _open)
if(_high <= high)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _high )
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_low )
drawLineTLP := 3
else
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_low )
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_high )
drawLineTLP := 4
else if(array.get(arrayYTLP,0) < array.get(arrayYTLP,1))
if(_low <= array.get(arrayYTLP,0) and _high < array.get(arrayYTLP,1))
if(_low >= low)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _low )
drawLineTLP := 2
else if(_low <= array.get(arrayYTLP,0) and _high > array.get(arrayYTLP,1))
if(_close > _open)
if(_low >= low)
array.set(arrayXTLP, 0, time)
array.set(arrayYTLP, 0, _low )
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_high )
drawLineTLP := 3
else
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_high )
array.unshift(arrayXTLP,time)
array.unshift(arrayYTLP,_low )
drawLineTLP := 4
else if((_high <= highPrev and _low >= lowPrev ))
highPrev := highPrev
lowPrev := lowPrev
if(f_resInMinutes() < f_tfRes(customTF,f_resInMinutes()) and drawLineTLP == 0)
if(array.get(arrayYTLP,0) > array.get(arrayYTLP,1))
if(array.get(arrayYTLP,0) <= high)
array.set(arrayXTLP, 0, time)
drawLineTLP := 2
else
if(array.get(arrayYTLP,0) >= low)
array.set(arrayXTLP, 0, time)
drawLineTLP := 2
if((showSTLP or showTLP) and f_resInMinutes() <= f_tfRes(customTF,f_resInMinutes()))
if(drawLineTLP == 2)
if(array.size(arrayLineTLP) >0)
line.set_xy2(array.get(arrayLineTLP,0),array.get(arrayXTLP,0),array.get(arrayYTLP,0))
else
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,1),array.get(arrayYTLP,1),array.get(arrayXTLP,0),array.get(arrayYTLP,0), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
else if(drawLineTLP == 1)
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,1),array.get(arrayYTLP,1),array.get(arrayXTLP,0),array.get(arrayYTLP,0), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
else if(drawLineTLP == 3)
if(array.size(arrayLineTLP) >0)
line.set_xy2(array.get(arrayLineTLP,0),array.get(arrayXTLP,1),array.get(arrayYTLP,1))
else
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,2),array.get(arrayYTLP,2),array.get(arrayXTLP,1),array.get(arrayYTLP,1), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,1),array.get(arrayYTLP,1),array.get(arrayXTLP,0),array.get(arrayYTLP,0), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
else if(drawLineTLP == 4)
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,2),array.get(arrayYTLP,2),array.get(arrayXTLP,1),array.get(arrayYTLP,1), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
array.unshift(arrayLineTLP,line.new(array.get(arrayXTLP,1),array.get(arrayYTLP,1),array.get(arrayXTLP,0),array.get(arrayYTLP,0), color = colorTLP,xloc = xloc.bar_time, style = lineStyleSTLP))
//////////////////////////Swing TLP//////////////////////////
var arrayXSTLP = array.new_int(5,time)
var arrayYSTLP = array.new_float(5,close)
var arrayLineSTLP = array.new_line()
int drawLineSTLP = 0
int drawLineSTLP1 = 0
if(showSTLP)
if(math.max(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1)) < math.min(array.get(arrayYTLP,0),array.get(arrayYTLP,1)) or math.min(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1)) > math.max(array.get(arrayYTLP,0),array.get(arrayYTLP,1)))
//Khởi tạo bắt đầu
drawLineSTLP1 := 5
array.set(arrayXSTLP, 0, array.get(arrayXTLP,1))
array.set(arrayYSTLP, 0, array.get(arrayYTLP,1))
array.unshift(arrayXSTLP,array.get(arrayXTLP,0))
array.unshift(arrayYSTLP,array.get(arrayYTLP,0))
// drawLineSTLP kiểm tra điểm 1 => 13:Tiếp tục có sóng hồi // 12|19(reDraw):Tiếp tục không có sóng hồi // 14:Đảo chiều
if(array.get(arrayXTLP,0) == array.get(arrayXTLP,1))
if(array.get(arrayXSTLP,0) >= array.get(arrayXTLP,2) and array.get(arrayYSTLP,0) != array.get(arrayYTLP,1) and ((array.get(arrayYTLP,1) > array.get(arrayYTLP,2) and array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1)) or (array.get(arrayYTLP,1) < array.get(arrayYTLP,2) and array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1))))
drawLineSTLP1 := 12
array.set(arrayXSTLP, 0, array.get(arrayXTLP,1))
array.set(arrayYSTLP, 0, array.get(arrayYTLP,1))
else if(array.get(arrayXSTLP,0) <= array.get(arrayXTLP,2))
if((array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1) and array.get(arrayYTLP,1) < array.get(arrayYSTLP,1)) or (array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1) and array.get(arrayYTLP,1) > array.get(arrayYSTLP,1)))
drawLineSTLP1 := 14
array.unshift(arrayXSTLP,array.get(arrayXTLP,1))
array.unshift(arrayYSTLP,array.get(arrayYTLP,1))
else if((array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1) and array.get(arrayYTLP,1) > array.get(arrayYSTLP,0)) or (array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1) and array.get(arrayYTLP,1) < array.get(arrayYSTLP,0)))
drawLineSTLP1 := 13
_max = math.min(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1))
_min = math.max(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1))
_max_idx = 0
_min_idx = 0
for i = 2 to array.size(arrayXTLP)
if(array.get(arrayXSTLP,0) >= array.get(arrayXTLP,i))
break
if(_min > array.get(arrayYTLP,i))
_min := array.get(arrayYTLP,i)
_min_idx := array.get(arrayXTLP,i)
if(_max < array.get(arrayYTLP,i))
_max := array.get(arrayYTLP,i)
_max_idx := array.get(arrayXTLP,i)
if(array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1))
array.unshift(arrayXSTLP,_min_idx)
array.unshift(arrayYSTLP,_min)
else if(array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1))
array.unshift(arrayXSTLP,_max_idx)
array.unshift(arrayYSTLP,_max)
array.unshift(arrayXSTLP,array.get(arrayXTLP,1))
array.unshift(arrayYSTLP,array.get(arrayYTLP,1))
if(f_resInMinutes() < f_tfRes(customTF,f_resInMinutes()))
if(array.get(arrayYSTLP,0) == array.get(arrayYTLP,1) and array.get(arrayXSTLP,0) != array.get(arrayXTLP,1))
array.set(arrayXSTLP, 0, array.get(arrayXTLP,1))
drawLineSTLP1 := 19
if(f_resInMinutes() <= f_tfRes(customTF,f_resInMinutes()))
if(drawLineSTLP1 == 12 or drawLineSTLP1 == 19)
if(array.size(arrayLineSTLP) >0)
line.set_xy2(array.get(arrayLineSTLP,0),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0))
else
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP1 == 14)
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP1 == 13)
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,2),array.get(arrayYSTLP,2),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1), color = colorSTLP,xloc = xloc.bar_time))
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP1 == 15)
if(array.size(arrayLineSTLP) >0)
line.set_xy2(array.get(arrayLineSTLP,0),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1))
else
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,2),array.get(arrayYSTLP,2),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1), color = colorSTLP,xloc = xloc.bar_time))
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
// drawLineSTLP kiểm tra điểm 0 => 3:Tiếp tục có sóng hồi // 2|9(reDraw):Tiếp tục không có sóng hồi // 4:Đảo chiều
if(array.get(arrayXSTLP,0) >= array.get(arrayXTLP,1) and array.get(arrayYSTLP,0) != array.get(arrayYTLP,0) and ((array.get(arrayYTLP,0) > array.get(arrayYTLP,1) and array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1)) or (array.get(arrayYTLP,0) < array.get(arrayYTLP,1) and array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1))))
drawLineSTLP := 2
array.set(arrayXSTLP, 0, array.get(arrayXTLP,0))
array.set(arrayYSTLP, 0, array.get(arrayYTLP,0))
else if(array.get(arrayXSTLP,0) <= array.get(arrayXTLP,1))
if((array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1) and array.get(arrayYTLP,0) < array.get(arrayYSTLP,1)) or (array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1) and array.get(arrayYTLP,0) > array.get(arrayYSTLP,1)))
drawLineSTLP := 4
array.unshift(arrayXSTLP,array.get(arrayXTLP,0))
array.unshift(arrayYSTLP,array.get(arrayYTLP,0))
else if((array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1) and array.get(arrayYTLP,0) > array.get(arrayYSTLP,0)) or (array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1) and array.get(arrayYTLP,0) < array.get(arrayYSTLP,0)))
drawLineSTLP := 3
_max = math.min(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1))
_min = math.max(array.get(arrayYSTLP,0),array.get(arrayYSTLP,1))
_max_idx = 0
_min_idx = 0
for i = 1 to array.size(arrayXTLP)
if(array.get(arrayXSTLP,0) >= array.get(arrayXTLP,i))
break
if(_min > array.get(arrayYTLP,i))
_min := array.get(arrayYTLP,i)
_min_idx := array.get(arrayXTLP,i)
if(_max < array.get(arrayYTLP,i))
_max := array.get(arrayYTLP,i)
_max_idx := array.get(arrayXTLP,i)
if(array.get(arrayYSTLP,0) > array.get(arrayYSTLP,1))
array.unshift(arrayXSTLP,_min_idx)
array.unshift(arrayYSTLP,_min)
else if(array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1))
array.unshift(arrayXSTLP,_max_idx)
array.unshift(arrayYSTLP,_max)
array.unshift(arrayXSTLP,array.get(arrayXTLP,0))
array.unshift(arrayYSTLP,array.get(arrayYTLP,0))
if(f_resInMinutes() < f_tfRes(customTF,f_resInMinutes()))
if(array.get(arrayYSTLP,0) == array.get(arrayYTLP,0) and array.get(arrayXSTLP,0) != array.get(arrayXTLP,0))
array.set(arrayXSTLP, 0, array.get(arrayXTLP,0))
drawLineSTLP := 9
if(f_resInMinutes() <= f_tfRes(customTF,f_resInMinutes()))
if(drawLineSTLP == 2 or drawLineSTLP == 9)
if(array.size(arrayLineSTLP) >0)
line.set_xy2(array.get(arrayLineSTLP,0),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0))
else
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP == 4)
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP == 3)
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,2),array.get(arrayYSTLP,2),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1), color = colorSTLP,xloc = xloc.bar_time))
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
else if(drawLineSTLP == 5)
if(array.size(arrayLineSTLP) >0)
line.set_xy2(array.get(arrayLineSTLP,0),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1))
else
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,2),array.get(arrayYSTLP,2),array.get(arrayXSTLP,1),array.get(arrayYSTLP,1), color = colorSTLP,xloc = xloc.bar_time))
array.unshift(arrayLineSTLP,line.new(array.get(arrayXSTLP,1),array.get(arrayYSTLP,1),array.get(arrayXSTLP,0),array.get(arrayYSTLP,0), color = colorSTLP,xloc = xloc.bar_time))
///////////////////////Other//////////////////////////////////
if(f_resInMinutes() <= f_tfRes(customTF,f_resInMinutes()))
if(showSTLP)
if(showLabel and (barstate.islast or barstate.islastconfirmedhistory))
texLabel = f_resInMinutes() == f_tfRes(customTF,f_resInMinutes()) ? f_resFromMinutes(f_resInMinutes()) : f_resFromMinutes(f_tfRes(customTF,f_resInMinutes()))
label.set_xy(labelTF,array.get(arrayXSTLP,0),array.get(arrayYSTLP,0))
label.set_text(labelTF,texLabel)
label.set_style(labelTF,array.get(arrayYSTLP,0) < array.get(arrayYSTLP,1) ? label.style_label_upper_right : label.style_label_lower_right)
if(not showTLP)
arrayLineTemp := array.copy(arrayLineTLP)
for itemArray in arrayLineTemp
if(line.get_x1(itemArray) < array.get(arrayXSTLP,0))
line.delete(itemArray)
array.remove(arrayLineTLP,array.indexof(arrayLineTLP, itemArray))
//Inside Bars - Outside Bars
insideBar() => ISB and high <= high and low >= low ? 1 : 0
outsideBar() => OSB and (high > high and low < low ) ? 1 : 0
//Inside and Outside Bars
barcolor(insideBar() ? color.new(colorISB,0) : na )
barcolor(outsideBar() ? color.new(colorOSB,0) : na )
AVWAP 4HThe AVWAP 4H indicator is a multi-session Anchored Volume-Weighted Average Price (AVWAP) tool designed for intraday precision and institutional-grade insight. It plots session-specific AVWAP lines based on a series of key UTC-based time anchors, allowing traders to monitor value zones and dynamic support/resistance across global trading hours.
This script calculates and displays AVWAP lines anchored from five distinct UTC times:
8:00 PM (ETH Open)
10:00 PM
2:00 AM
6:00 AM
10:00 AM
Each line is calculated using ohlc4 as the price source and resets at its respective session start time. Traders can enable or disable any AVWAP anchor individually, as well as customize line color and width for better visual distinction.
The indicator is ideal for identifying volume-weighted equilibrium levels across overlapping global market sessions, particularly useful for short-term mean-reversion, breakout, and institutional order flow strategies.
Volume Surge Detector[SpeculationLab]Volume Surge Detector
This tool is especially useful for spotting early signs of breakouts, news-driven spikes, or institutional activity that are often preceded by abnormal surges in volume.
For better chart readability, the volume bar colors are based on TradingView’s original Volume indicator, while all other code is fully original by Speculation Lab.
You can customize both the SMA line and the volume bar colors to fit your style.
The logic compares the current volume against its SMA (default length: 14, fully adjustable).
The script comes with two surge levels:
Surge Level 1 (default = 5) → When volume is more than 5× the SMA, the bar turns aqua.
Surge Level 2 (default = 10) → When volume is more than 10× the SMA, the bar turns yellow.
It also includes built-in alerts, so you’ll be notified instantly whenever a surge is detected.
This makes it easier to spot potential breakout moves or large market participation in real time.
Disclaimer: This script is for educational purposes only. It does not provide financial advice.
这是一个用于探测 成交量爆发 的指标。
为了图表美观,成交量柱的颜色借鉴了 TradingView 原始 Volume 指标,其余代码均为 Speculation Lab 原创。
用户可以自由调整成交量柱和其对应的 SMA 均线的颜色。
指标通过对比成交量和其 SMA(默认长度为14,可自定义长度和颜色)的比例来检测放量。
默认设置了两个放量级别:
Surge Level 1(默认=5):当成交量超过均量的 5 倍时,量柱变为水蓝色。
Surge Level 2(默认=10):当成交量超过均量的 10 倍时,量柱变为黄色。
脚本还设置了 内置警报功能,方便交易者在出现放量时实时收到通知。
PHL Sweep Signals(1 Hour)PHL Sweep Signals (Full History)
This indicator is designed to identify high-probability reversal setups by detecting liquidity sweeps of the previous standard hour's high and low (PHL). It provides clear, actionable signals complete with visual aids and a data table to keep you in tune with the higher-timeframe context.
Key Features
Previous Hour Levels: Automatically draws the high and low of the previous standard hour as key reference lines for the current trading hour. The line colors rotate to provide a clear visual separation.
Bearish Sweep Signal: Identifies a specific bearish pattern: a green (bullish) candle that wicks above the previous hour's high but fails to hold, with its body remaining entirely below the line.
Bullish Sweep Signal: Identifies the opposite bullish pattern: a red (bearish) candle that wicks below the previous hour's low but is absorbed, with its body remaining entirely above the line.
Clear Visual Signals: When a signal is confirmed, the indicator provides a multi-faceted alert:
Plots a "Buy" or "Sell" arrow on the chart.
Draws a colored box around the signal candle for easy identification.
Displays a label with the potential Stop Loss size (calculated from the size of the signal candle).
Informative Display Table: Includes a convenient table in the corner showing the Open and Close data for the last 3 hours, helping you stay aware of the broader market context without leaving your chart.
Built-in Alerts: Triggers an alert for every confirmed Buy and Sell signal so you never miss a potential setup.
How to Use
This indicator helps you spot potential exhaustion and reversals at key hourly levels.
A "Sell" signal suggests a failed breakout to the upside, indicating potential weakness and a possible entry for shorts.
A "Buy" signal suggests a failed breakdown to the downside, indicating potential strength and a possible entry for longs.
As with any tool, these signals are most powerful when used as part of a comprehensive trading strategy and combined with your own analysis for confirmation.
Optimal Settings:
Timeframe: 5-Minute
Time Zone: UTC-4 (New York Time)
-ratheeshinv
HTF Candles [theUltimator5]Overlay higher timeframe candles on any lower timeframe chart with real-time updates.
This indicator displays the full structure of each higher timeframe (HTF) candle—including open-close bodies and full wicks—directly on your current chart. Great for multi-timeframe traders who want to align short-term entries with broader market context.
🔹 Features:
View higher timeframe candles (e.g., 1H, 4H, Daily) on intraday charts
Dynamic candle bodies that update in real-time
Accurate wick representation with auto-redrawing
Customizable bullish/bearish colors and transparency
Efficient object management for minimal clutter
🛠️ How to Use:
Add this indicator to a lower timeframe chart (e.g., 1m, 5m, or 15m).
Select a higher timeframe (must be greater than your chart timeframe).
Customize your candle colors and transparency for better visibility.
Watch as each higher timeframe candle evolves live with every bar.
📌 Example: Use a 5-minute chart with a 1-hour HTF overlay to track hourly market structure without switching timeframes.
HTF Sweep Model with CISD Table vmodA mod of NotProfGreens w/ alerts and some stylish options- thanks for your work.
AlphaEdge SR Modulentroducing AlphaEdge SR Module – a powerful tool that combines:
🔹 Clean S/R Zones (Daily & 4H)
🔹 EMA Trend Filters
🔹 RSI OB/OS Highlighting
🔹 Reversal Candle Detection (Engulfing, Pin Bar, Doji)
🔹 Volume Spike Highlighting
🔹 Smart Signal Labels with EMA, RSI, and Volume
Optimized for Gold (XAUUSD), Forex, and Crypto on 1H+ timeframes.
Use it for trend reversals, breakouts, or S/R scalping.
🎯 Public & Free – Search “AlphaEdge SR Module” under Community Scripts.
6FG Plan Checklist & Alerts - Final Version🧠 SCRIPT OVERVIEW: "6FG A+ SETUP - Simplified"
This script is designed to identify high-probability A+ trade setups in alignment with your personal 6FG trading plan, based on:
H1 Break of Structure (required)
4H trend confirmation
15M candle confirmation
Session filter
A+ Label & Visual Table Checklist
✅ KEY COMPONENTS
1. Toggle Inputs
These allow you to customize your view and filters without changing the code:
showSession: Only allow alerts inside Asian or NY sessions
show4hTrend: Include or ignore 4H directional bias
show15mConfirm: Include or ignore confirmation from 15M candles
showTable: Display checklist table on chart
showLabel: Display the “✅ A+” label on qualifying bars
2. Session Filter
Defines valid timeframes for trading (Asian or New York)
Helps avoid setups during low-liquidity hours
Controlled by showSession
3. 4H Trend (Confirmation Only)
Uses a 20-period SMA on 4H to detect general bias:
Bullish = Price above SMA
Bearish = Price below SMA
This trend is not mandatory for an alert if toggle is off
4. H1 Break of Structure (REQUIRED)
Looks at the highest high and lowest low of the last 10 candles on the 1H timeframe
Detects either:
Bullish BOS = Current close > highest high
Bearish BOS = Current close < lowest low
This is the core trigger for the A+ setup
If BOS doesn't happen, no entry is valid
5. 15M Confirmation Candles
(Optional - controlled by show15mConfirm)
Checks for one of three confirmation patterns:
Bullish Engulfing
Bearish Engulfing
Pin Bar
This adds confidence but can be toggled off
6. Entry Conditions (A+ Setup)
All the following must be true for entryOK = true:
✅ H1 BOS (required)
✅ Session is valid (if toggle is on)
✅ 15M confirmation pattern (if toggle is on)
✅ 4H trend (if toggle is on)
7. Visual Output
If entryOK = true:
✅ A green "A+" label appears below price
✅ A checklist table on the top-right shows:
Session status ✔️❌
4H bullish/bearish ✔️❌
H1 BOS ✔️❌
15M confirmation ✔️❌
Final Direction: Bullish / Bearish / —
A+ Setup: ✔️❌
8. Alerts
You will receive a TradingView alert when an A+ Setup is detected:
50-Candle Look-Back MarkerIt simply redraws one vertical dotted line that always sits exactly 50 bars behind the current bar, so you can check at a glance that any trend-line you draw has at least 50 candles of data to the right of it.
FVG + IFVG Gap (ULTRA) by Aditya NejeThis Indicator shows Fair Value Gap and Inverse Fair Value gaps
Current Hourly Open Liquidity with Sweep DetectionStatistics indicate that if the current hourly candle reaches the high or low of the previous hourly candle, there is a strong likelihood that the price will return to the current hour's open, depending on how quickly the previous hour's high or low was swept. If the sweep occurs within the first 20 minutes, there is a 75% chance the current hour's open will be reached; if it takes between 21 and 40 minutes, the probability decreases to 50%; and if it takes longer than 41 minutes, the chance drops to 25%.
These statistics can help identify manipulation on the hourly timeframe and guide trade decisions accordingly. For instance, if the previous hourly high is taken within the first 20 minutes but the current hour's open is not reached, it may be wise to avoid long positions until it happens or consider short positions in the direction of the open liquidity, using your existing entry rules and risk management.
The indicator highlights the current hour's open with a line and label to visually represent that liquidity pool, adjusting the line's color based on whether and when the previous hour's high or low was tapped. Once the open is reached, the indicator can, depending on settings, remove the line and label from the chart (this is enabled by default) since the liquidity pool is no longer relevant, preventing chart clutter.
All colors, line widths, label text sizes, and colors can be customized.
Day‑trade Long/Short Signalsday trade Long\Short signals idskator
Displays EMA 5, 8, and 13 to track the trend.
Signals LONG when EMA5 crosses above EMA8 and the MACD line is above the signal line.
Signals SHORT when EMA5 crosses below EMA8 and the MACD line is below the signal line.
Dr. Keith Wade Momentum SignalsThis is a heikin Ashli strategy combined with an 18 moving average crossover. Entry at cross of 18 EMA and exit at change of heikin Ashi
ORB Scalp setup by UnenbatDescription
ORB Scalp Setup by Unenbat is a precise breakout scalping tool that identifies short-term price ranges at the transition between hourly sessions.
📌 Core Features:
Draws a dynamic box using the price range from the last 3 minutes of the previous hour and the first 3 minutes of the new hour (total 5m59s range).
Automatically plots:
Box representing the selected range.
Opening Price Line at the start of the hour.
TP Lines (Take Profit) above and below the box at customizable distances.
BE Lines (Break-Even) above and below the box at customizable distances.
Box and line lengths are user-defined (default: 60 minutes).
Works across historical data (up to the last 100 days).
Fully customizable visuals (colors, offsets, visibility toggles).
🎯 How to Use:
Ideal for scalp traders using breakout strategies.
Enter trades when price breaks above or below the box range.
Use TP and BE lines as clear reference levels for exits or trailing stop logic.
⚙️ Custom Settings:
Enable/disable each component (box, open line, TP line, BE line).
Set your own offset in pips for TP/BE lines.
Adjust the box duration to match your trading style.
Modify start and end times of the range as needed.
Smart Trap Candle Detector [Pro]Purpose
The Smart Trap Candle Detector is designed to identify common fakeout scenarios in the market, where price breaks a key swing high or low and quickly reverses. These “trap candles” often mislead breakout traders and are commonly used by smart money to induce liquidity before reversing.
How It Works
The script detects potential trap candles using these conditions:
A bearish trap is identified when price breaks above a recent swing high and closes back below it.
A bullish trap is identified when price breaks below a recent swing low and closes back above it.
Optional confirmation from the previous candle’s direction can be enabled.
Swing highs/lows are calculated dynamically using a configurable lookback window.
Once a trap candle is confirmed, a signal is displayed on the chart along with optional labels and alert conditions.
Features
Detects fake breakouts of swing highs and lows
Configurable swing lookback period
Optional confirmation candle filter
Optional label display on trap bars
Built-in alerts for bullish and bearish trap signals
Lightweight, real-time signal detection
Usage Tips
Best used on intraday timeframes such as 15m, 30m, or 1H
Use around key support/resistance zones or liquidity areas
Combine with other confluence signals such as order blocks or RSI divergence
Adjust the swing lookback period depending on the volatility of the asset
Clarix Smart FlipPurpose
This tool identifies high-probability intraday reversals by detecting when price flips through the daily open after strong early-session commitment.
How It Works
A valid flip occurs when:
The previous daily candle is bullish or bearish
The first hour today continues in the same direction
Then, the price flips back through the daily open with a minimum break threshold (user-defined)
This setup is designed to catch liquidity grabs or fakeouts near the daily open, where early buyers or sellers get trapped after showing commitment
Signal Logic
Buy Flip
Previous day bearish → first hour bearish → price flips above open
Sell Flip
Previous day bullish → first hour bullish → price flips below open
Features
Configurable flip threshold in percentage
Signals only activate after the first hour ends
Daily open line displayed on chart
Simple triangle markers with no visual clutter
Alerts ready to use for automation or notifications
Usage Tips
Use "Once Per Bar" alert mode to get notified immediately when the flip happens
Works best in active markets like FX, indices, or crypto
Adjust threshold based on asset volatility
Suggested stop loss: use the previous daily high for sell flips or the previous daily low for buy flips
Suggested take profit: secure at least 30 pips to aim for a 1:3 risk-to-reward ratio on average
Infalible Universal 2:1 Estrategia🔹 "Infalible Universal 2:1 Strategy" – Optimized for All Markets and Timeframes
This strategy combines proven technical indicators with a dynamic risk management model to deliver consistent and optimized entries, especially on lower timeframes like 5 and 15 minutes.
Core Components:
📈 Entry Signals:
Trades are triggered when a fast Simple Moving Average (SMA) crosses over or under a slow SMA, with confirmation from a strong trend (ADX filter).
🎯 Dynamic Take Profit and Stop Loss:
Positions are exited based on a 2:1 Risk/Reward ratio, calculated using the current Average True Range (ATR). This allows the system to adapt to market volatility and remain effective across any asset.
🧱 Visual SL/TP Zones:
Colored rectangles highlight the Stop Loss (red) and Take Profit (green) areas on the chart, helping traders clearly visualize risk and reward at every entry.
🧠 Clean and Effective Logic:
No repainting. No lagging signals. Fully backtestable. Alerts included for long and short entries.
Whether you're trading forex, crypto, indices, or stocks, this universal strategy adapts to market behavior and focuses on consistent execution through disciplined risk management.