If Candle is Above EMA that Does not Touch EMA and It’s Low is High N% of Daily ATR from EMA and If Candle is Below EMA that Does not Touch EMA and It’s High is low N% of Daily ATR from EMA then Indicator can ignore all other Logic and Allow user to Select Multiple Logic Which Indicator Can Ignore while Generating Signal and Highlight These Candle with Small Circle, But But Send Alert as Indicator did Before, don’t make changes it that, Add This Signal In Old Alert Conditions Also: //@version=5
indicator("Candles Not Touching EMA 5 with Overlap and Size Check", overlay=true)

// User inputs
enable_last_n_check = input.bool(true, title="Require last N candles to have touched EMA?")
N = input.int(3, minval=1, title="Number of candles to check")
enable_stop_loss_feature = input.bool(true, title="Enable Stop Loss Levels")
atr_percent = input.float(2.0, title="ATR Percentage for Stop Loss (%)", minval=0, step=0.1)

// Overlap Method Inputs
enable_overlap_check = input.bool(true, title="Require N% of Current Candle to Overlap with Last Candle?")
overlap_percentage_N = input.float(50.0, minval=0.0, maxval=100.0, title="Required Overlap Percentage N%")

// --- Restored Candle Size Inputs ---
enable_percentage_check = input.bool(true, title="Require candle to be N% smaller than last candle?")
percentage_N = input.float(20.0, minval=0.01, title="Percentage smaller (%)")
// --- End Restored Candle Size Inputs ---

// Calculate EMA 5
ema5 = ta.ema(close, 5)

// Identify candles that do not touch EMA 5
not_touching = (low > ema5) or (high < ema5)

// Identify candles that touch EMA 5
touching = not not_touching

// Function to check if all of the last N candles touched the EMA
all_last_N_touching(N) =>
    result = true
    for i = 1 to N
        result := result and touching[i]
    result

// Initialize condition_for_signal
condition_for_signal = true

// If the feature is enabled, update condition_for_signal
if enable_last_n_check
    // Condition for signal: all of the last N candles touched the EMA
    condition_for_signal := all_last_N_touching(N)

// --- Overlap Method Logic Starts Here ---

// Initialize is_current_candle_N_percent_overlapping
is_current_candle_N_percent_overlapping = true

// If the feature is enabled, compute the condition
if enable_overlap_check
    // Calculate current candle's range
    current_candle_range = high - low
    // Avoid division by zero
    if current_candle_range != 0
        // Calculate overlap between current candle and previous candle
        overlap_high = math.min(high, high[1])
        overlap_low = math.max(low, low[1])
        overlap_range = overlap_high - overlap_low
        // If overlap_range is negative or zero, set condition to false
        if overlap_range <= 0
            is_current_candle_N_percent_overlapping := false
        else
            // Calculate percentage of current candle's range that overlaps with previous candle's range
            percentage_of_current_overlapping = (overlap_range / current_candle_range) * 100.0
            // Check if percentage is greater than or equal to N%
            is_current_candle_N_percent_overlapping := percentage_of_current_overlapping >= overlap_percentage_N
    else
        // If current candle range is zero, set condition to false
        is_current_candle_N_percent_overlapping := false

// --- Overlap Method Logic Ends Here ---

// --- Restored Candle Size Logic Starts Here ---

// Initialize is_smaller_by_N_percent
is_smaller_by_N_percent = true

// If the feature is enabled, update is_smaller_by_N_percent
if enable_percentage_check
    // Calculate candle sizes
    prev_candle_size = high[1] - low[1]
    current_candle_size = high - low
    // Avoid division by zero
    if prev_candle_size != 0
        // Calculate size difference percentage
        size_difference_percent = ((prev_candle_size - current_candle_size) / prev_candle_size) * 100.0
        // Check if current candle is N% smaller than previous candle
        is_smaller_by_N_percent := size_difference_percent >= percentage_N
    else
        // If previous candle size is zero, set condition to false
        is_smaller_by_N_percent := false

// --- Restored Candle Size Logic Ends Here ---

// Signal conditions (including both restored and overlap logic)
signal_above = not_touching and close > ema5 and condition_for_signal and is_current_candle_N_percent_overlapping and is_smaller_by_N_percent
signal_below = not_touching and close < ema5 and condition_for_signal and is_current_candle_N_percent_overlapping and is_smaller_by_N_percent

// Combined signal for any of the conditions
signal_any = signal_above or signal_below

// Plot EMA 5 for reference
plot(ema5, color=color.orange, linewidth=2, title="EMA 5")

// Plot arrows to highlight signals
// Arrow Down for candles entirely above EMA 5
plotshape(signal_above, title="Above EMA Signal", style=shape.arrowdown, location=location.abovebar, color=color.green, size=size.tiny)

// Arrow Up for candles entirely below EMA 5
plotshape(signal_below, title="Below EMA Signal", style=shape.arrowup, location=location.belowbar, color=color.red, size=size.tiny)

// Alert Conditions
alertcondition(signal_any, title="Any Signal Alert", message="A signal has been triggered: either 'Above EMA' or 'Below EMA'.")
alertcondition(signal_above, title="Above EMA Alert", message="Candle entirely above EMA 5, not touching it, N% of current candle overlaps with last candle, and is N% smaller than last candle.")
alertcondition(signal_below, title="Below EMA Alert", message="Candle entirely below EMA 5, not touching it, N% of current candle overlaps with last candle, and is N% smaller than last candle.")

// --- Existing Stop Loss Feature ---

// Calculate Daily ATR
daily_atr = request.security(syminfo.tickerid, 'D', ta.atr(14))

// Calculate ATR offset based on user-defined percentage
atr_offset = (atr_percent / 100.0) * daily_atr

// Initialize variables for stop loss levels
float stop_loss_level = na
color stop_loss_color = na

// Compute and plot stop loss levels when the feature is enabled
if enable_stop_loss_feature
    if signal_above
        stop_loss_level := high + atr_offset
        stop_loss_color := color.red
    else if signal_below
        stop_loss_level := low - atr_offset
        stop_loss_color := color.green
    else
        stop_loss_level := na
        stop_loss_color := na

// Plot stop loss level
plot(stop_loss_level, title="Stop Loss Level", color=stop_loss_color, linewidth=2)