Add New Function alongside old, Keep All Old Function as It: Sometime There are conditions when a candles meet Distance from EMA Logic  and all other logic also meet (Require last N candles to have touched EMA?, Require N% of Current Candle to Overlap with Last Candle?, Require candle to be N% smaller than last candle?), then highlight those candle with orange circle,  But Keep the Blue Circle as Same, Add This New Signal in Old Alert Condition, Update All Variable Name using Meaningful and Understandable words so that are easy from future: //@version=5
indicator("Candles Not Touching EMA 5 with Overlap and Size Check (Updated)", 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%")

// 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 (%)")

// New Distance from EMA Check Inputs
enable_distance_check = input.bool(false, title="Enable Distance from EMA Check?")
distance_atr_percent = input.float(2.0, minval=0.0, step=0.1, title="ATR Percentage for Distance from EMA (%)")

// Inputs to select which logic to ignore when Distance Condition is Met
ignore_last_n_check = input.bool(false, title="Ignore Last N Candles Touching EMA Check when Distance Condition is Met?")
ignore_overlap_check = input.bool(false, title="Ignore Overlap Check when Distance Condition is Met?")
ignore_percentage_check = input.bool(false, title="Ignore Size Percentage Check when Distance Condition is Met?")

// 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

// 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

// Candle Size Logic

// 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

// --- New Distance from EMA Condition ---

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

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

// Initialize Distance Condition
distance_condition = false
distance = 0.0

if enable_distance_check and not_touching
    if close > ema5
        distance := low - ema5
    else if close < ema5
        distance := ema5 - high
    else
        distance := 0

    if distance >= atr_offset
        distance_condition := true

// Adjust conditions based on Distance Condition and user preferences
cond_last_n_check = true
if enable_last_n_check
    cond_last_n_check := condition_for_signal

cond_overlap_check = true
if enable_overlap_check
    cond_overlap_check := is_current_candle_N_percent_overlapping

cond_percentage_check = true
if enable_percentage_check
    cond_percentage_check := is_smaller_by_N_percent

if distance_condition
    if ignore_last_n_check
        cond_last_n_check := true
    if ignore_overlap_check
        cond_overlap_check := true
    if ignore_percentage_check
        cond_percentage_check := true

// Signal conditions (including all logic)
signal_above = not_touching and close > ema5 and cond_last_n_check and cond_overlap_check and cond_percentage_check
signal_below = not_touching and close < ema5 and cond_last_n_check and cond_overlap_check and cond_percentage_check

// 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)

// Plot small circle to highlight candles where Distance Condition is met
plotshape(distance_condition and (close > ema5), title="Distance Condition Met Above EMA", style=shape.circle, location=location.abovebar, color=color.blue, size=size.tiny)
plotshape(distance_condition and (close < ema5), title="Distance Condition Met Below EMA", style=shape.circle, location=location.belowbar, color=color.blue, 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. Signal conditions met.")
alertcondition(signal_below, title="Below EMA Alert", message="Candle entirely below EMA 5, not touching it. Signal conditions met.")

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

// 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_percent / 100.0) * daily_atr)
        stop_loss_color := color.red
    else if signal_below
        stop_loss_level := low - ((atr_percent / 100.0) * daily_atr)
        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)