Estrategia de stop trading con velas japonesas con media móvil exponencial

EMA RSI SUPPORT RESISTANCE BREAKOUT
Fecha de creación: 2025-02-25 11:11:35 Última modificación: 2025-02-25 11:11:35
Copiar: 8 Número de Visitas: 348
2
Seguir
319
Seguidores

Estrategia de stop trading con velas japonesas con media móvil exponencial Estrategia de stop trading con velas japonesas con media móvil exponencial

Descripción general

La estrategia de parada de la caída de la media móvil es un sistema de negociación cuantitativa basado en el reconocimiento de la forma de la caída y la tendencia de la media móvil. La estrategia se basa principalmente en la identificación de una forma de caída específica (es decir, la señal de “parada de la caída”) como punto de entrada, al tiempo que se combina con la EMA (la media móvil del índice) para confirmar la tendencia general del mercado y utilizar el soporte dinámico y los puntos de resistencia para identificar las rupturas del mercado.

Principio de estrategia

El principio central de la estrategia es identificar las formas específicas de caída en el mercado, que generalmente representan la posibilidad de una reversión del mercado en el corto plazo. El mecanismo de funcionamiento de la estrategia es el siguiente:

  1. Determinación de la tendencia: determina la tendencia del mercado al comparar la posición relativa de EMA20 con EMA90. Cuando EMA20 está por encima de EMA90, determina una tendencia alcista; cuando EMA20 está por debajo de EMA90, determina una tendencia bajista.

  2. La señal de identificación de la parada del tren:

    • Requisitos de la señal de parada de la caída en la tendencia ascendente: la línea de sombra inferior tiene al menos 0.8 veces la longitud de la entidad, la línea de sombra superior es menor que la entidad y el precio de cierre es más alto que el precio de apertura (la línea de sol).
    • Requisitos de la señal de parada de la caída en la tendencia descendente: la línea de sombra ascendente tiene al menos 0.8 veces la longitud de la entidad, la línea de sombra descendente es menor que la entidad y el precio de cierre es menor que el precio de apertura (línea inferior).
  3. Detección de rupturas: Identificación de rupturas en el mercado mediante la comparación de los precios de cierre actuales con los niveles de soporte / resistencia (calculación de precios mínimos / máximos basados en 30 ciclos).

  4. Condiciones de entrada: Si se produce una señal de parada de la caída cuando el mercado está en una tendencia específica y no en un estado de ruptura, la estrategia se introducirá de acuerdo con el parámetro de riesgo predeterminado (riesgo de 2.5% por transacción).

  5. Establecimiento de stop loss: para las posiciones de más de una posición, el stop loss se establece en un 2.5% por debajo del precio de entrada; para las posiciones de más de una posición, el stop loss se establece en un 2.5% por encima del precio de entrada.

  6. Condiciones de parada: Condiciones combinadas basadas en el porcentaje de ganancias y el porcentaje de ganancias por riesgo. El polvo requiere al menos un 7% de ganancias y un porcentaje de ganancias por riesgo no inferior a 3; el blanco requiere al menos un 6% de ganancias y un porcentaje de ganancias por riesgo no inferior a 3.

Ventajas estratégicas

  1. Las señales de entrada y salida claras: proporcionan señales de negociación claras a través de la configuración de la caída específica y la tendencia de la línea media móvil, reduciendo el impacto emocional de los juicios subjetivos.

  2. Mecanismo integral de confirmación de tendencias: utiliza indicadores EMA de varios períodos de tiempo para confirmar tendencias del mercado y mejorar la fiabilidad de las señales de negociación.

  3. Identificación de soporte y resistencia dinámicos: soporte y resistencia dinámicos calculados con ventanas rodantes para que la estrategia se adapte a las diferentes etapas del mercado.

  4. Estricta gestión de riesgos: Se establecen parámetros de riesgo predefinidos (riesgo del 2.5% por transacción) y condiciones de detención basadas en el riesgo-rendimiento para garantizar la racionalidad de la gestión de fondos.

  5. Diferenciación de los criterios de negociación de divisas: establece diferentes condiciones de entrada y objetivos de ganancias para las operaciones de divisas y divisas, adaptándose a las características asimétricas del mercado.

  6. Calculación de posiciones dinámicas: el tamaño de posición adecuado se calcula automáticamente en función de la distancia de parada para garantizar la uniformidad del riesgo de cada operación.

Riesgo estratégico

  1. Retraso del indicador: Como un indicador retrasado, el EMA puede proporcionar señales de retraso en mercados que cambian rápidamente, lo que lleva a un mal tiempo de entrada.

  2. Riesgo de falsas rupturas: El mercado puede presentar falsas rupturas, lo que puede generar señales erróneas. La solución es introducir confirmación de transacción o aumentar el ciclo de confirmación de ruptura.

  3. Desafío de ajuste de sensibilidad: los parámetros de la señal de parada de la caída (por ejemplo, la proporción de la línea de sombra a la entidad) necesitan ser ajustados según los diferentes mercados y períodos. Ser demasiado sensible puede conducir a un exceso de comercio, mientras que ser demasiado estricto puede perder oportunidades.

  4. Riesgo de cambio de tendencia: durante el cambio de tendencia, la estrategia puede generar una serie de operaciones perdedoras. La solución es aumentar el filtro de intensidad de tendencia o reducir la frecuencia de operaciones cuando la tendencia no es clara.

  5. Inadaptabilidad de la distancia de parada fija: el uso del mismo porcentaje de parada para todas las transacciones (el 2.5%) puede no adaptarse a diferentes tipos de volatilidad del mercado. Se puede considerar el uso de una distancia de parada dinámica basada en la volatilidad.

  6. Limitaciones de las condiciones de filtración RSI: el uso de filtración RSI solo para operaciones de tiendas en blanco puede generar una frecuencia de negociación desequilibrada. Se puede considerar la introducción de un mecanismo de filtración similar o la optimización de los parámetros RSI actuales para operaciones de tiendas múltiples.

Dirección de optimización de la estrategia

  1. Parámetros de adaptación a la volatilidad: la introducción de indicadores de volatilidad (como ATR) para ajustar dinámicamente los requisitos de la proporción de la línea de sombra y la distancia de parada de la señal de parada de la quiebra, permite que la estrategia se adapte mejor a las diferentes condiciones del mercado.

  2. Confirmación de marcos de tiempo múltiples: confirmación de la tendencia de reintroducción de marcos de tiempo más altos (como el gráfico de 1 hora), mejora la fiabilidad de las señales de negociación y reduce el impacto de las señales falsas.

  3. Optimización de la hora de entrada: optimización de la hora de entrada mediante la adición de condiciones de filtrado adicionales (como indicadores de intensidad de tendencia, confirmación de volumen de transacciones) para mejorar la tasa de éxito de las operaciones.

  4. Mecanismo de parada parcial: Introducción de un mecanismo de parada por etapas, que traslada el stop loss al precio de costo o bloquea parte de la ganancia cuando se alcanza un determinado nivel de ganancia, para equilibrar mejor el riesgo y la ganancia.

  5. Extensión del ciclo de retroalimentación: Realizar una retroalimentación más completa en diferentes ciclos y condiciones del mercado para verificar la solidez y adaptabilidad de la estrategia.

  6. Optimización de aprendizaje automático: utiliza métodos de aprendizaje automático para optimizar los parámetros de la estrategia y encontrar la combinación de parámetros óptima para un mercado específico.

  7. Control de la frecuencia de las transacciones: Introducción de un mecanismo de restricción de la frecuencia de las transacciones o de período de enfriamiento para evitar el exceso de operaciones en condiciones de mercado desfavorables.

Resumir

La estrategia para detener la caída de un indicador móvil es un sistema de negociación cuantitativa que combina análisis técnico y gestión de riesgos para generar señales de negociación mediante la identificación de patrones de caída específicos y la confirmación de tendencias. La principal ventaja de la estrategia reside en las reglas de negociación claras y los estrictos mecanismos de control de riesgo, lo que hace que las decisiones de negociación sean más sistematizadas y disciplinadas. Sin embargo, como cualquier estrategia de análisis técnico, también se enfrenta a desafíos como el atraso de los indicadores y la adaptabilidad a los cambios en el mercado.

La estrategia tiene el potencial de lograr un rendimiento más estable en diferentes entornos de mercado mediante la introducción de mejoras en la dirección de la adaptación de la tasa de volatilidad, el reconocimiento de múltiples marcos de tiempo y la optimización de la hora de entrada. En particular, la aplicación de métodos de aprendizaje automático a la optimización de parámetros puede mejorar considerablemente la adaptabilidad y el rendimiento general de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-26 00:00:00
end: 2025-02-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("Advanced Candle Stop Strategy Backtest - Tuned v9 - Max Trades", overlay=true)

// --- EMA Variables ---
ema5_length = 5
ema20_length = 20
ema90_length = 90

ema5 = ta.ema(close, ema5_length)
ema20 = ta.ema(close, ema20_length)
ema90 = ta.ema(close, ema90_length)

// --- Support, Resistance, and Volume Calculation ---
lookback_support_resistance = 30
support_level = ta.lowest(low, lookback_support_resistance)
resistance_level = ta.highest(high, lookback_support_resistance)

// --- Volume Condition for Short (Removed) ---
avg_volume_lookback = 20
avg_volume = ta.sma(volume, avg_volume_lookback)

// --- RSI Condition for Short (Removed) ---
rsi_length = 14
rsi_overbought = 70
rsi = ta.rsi(close, rsi_length)


// --- Candle Stop Function ---
is_candle_stop(trend) =>
    body = math.abs(close - open)
    upper_shadow = high - math.max(open, close)
    lower_shadow = math.min(open, close) - low

    if trend == "up"
        lower_shadow >= 0.8 * body and upper_shadow < body and close > open // Shadow ratio reduced to 0.8 for longs
    else if trend == "down"
        upper_shadow >= 0.8 * body and lower_shadow < body and close < open // Shadow ratio reduced to 0.8 for shorts - EMA5 and Volume conditions removed
    else
        false

// --- Trend Determination (only 15m, no 1H confirmation) ---
trend = ema20 > ema90 ? "up" : ema20 < ema90 ? "down" : "neutral"
final_trend = trend  // حذف تأیید با تایم‌فریم 1H

// --- Breakout Detection ---
var bool breakout_detected = false
if final_trend == "up" and close > resistance_level
    breakout_detected := true
    alert("شکست صعودی تشخیص داده شد! منتظر پولبک 🚀", alert.freq_once_per_bar)
else if final_trend == "down" and close < support_level
    breakout_detected := true
    alert("شکست نزولی تشخیص داده شد! منتظر پولبک 📉", alert.freq_once_per_bar)

// --- Entry and Exit Conditions ---
var float position = 0.0
var float entry_price = 0.0
var float stop_loss_price = na
var bool take_profit_long = false  // Declare take_profit_long
var bool stop_loss_hit_long = false // Declare stop_loss_hit_long
var bool take_profit_short = false // Declare take_profit_short
var bool stop_loss_hit_short = false // Declare stop_loss_hit_short
risk_per_trade_percent = 2.5  // افزایش ریسک به 2.5٪ برای موقعیت‌های بیشتر


if not breakout_detected
    if position == 0 and is_candle_stop(final_trend)
        risk_amount_usd = strategy.initial_capital * (risk_per_trade_percent / 100)
        if final_trend == "up"
            stop_loss_price := close * 0.975 // Stop loss at 2.5% below entry for longs
            if (close - stop_loss_price) != 0
                position_size_usd = risk_amount_usd / (close - stop_loss_price)
                amount = position_size_usd / close
                strategy.entry("Long", strategy.long, qty=amount)
                position := amount
                entry_price := close
        else if final_trend == "down"
            stop_loss_price := close * 1.025 // Stop loss at 2.5% above entry for shorts
            if (stop_loss_price - close) != 0
                position_size_usd = risk_amount_usd / (stop_loss_price - close)
                amount = position_size_usd / close
                if rsi >= rsi_overbought // RSI condition for short entry - No Change, still using RSI but not enforcing it for now - Consider removing RSI condition as well for max trades
                    strategy.entry("Short", strategy.short, qty=amount)
                    position := amount
                    entry_price := close

if position > 0
    profit_percent_long = (close - entry_price) / entry_price * 100
    profit_percent_short = (entry_price - close) / entry_price * 100
    loss_percent_long = (entry_price - close) / entry_price * 100
    loss_percent_short = (close - entry_price) / entry_price * 100

    risk_reward_long = loss_percent_long != 0 ? profit_percent_long / loss_percent_long : (profit_percent_long != 0 ? 99999 : 0)
    risk_reward_short = loss_percent_short != 0 ? profit_percent_short / loss_percent_short : (profit_percent_short != 0 ? 99999 : 0)


    take_profit_long := profit_percent_long >= 7 and risk_reward_long >= 3
    stop_loss_hit_long := close <= stop_loss_price
    take_profit_short := profit_percent_short >= 6 and risk_reward_short >= 3 // Reduced Take Profit for Shorts to 6% - No Change
    stop_loss_hit_short := close >= stop_loss_price

    if (final_trend == "up" and (take_profit_long or stop_loss_hit_long)) or (final_trend == "down" and (take_profit_short or stop_loss_hit_short))
        if final_trend == "up"
            strategy.close("Long")
        else
            strategy.close("Short")
        position := 0
        entry_price := 0.0
        breakout_detected := false

// --- Plotting EMAs and Support/Resistance Levels ---
plot(ema5, color=color.blue, title="EMA5")
plot(ema20, color=color.red, title="EMA20")
plot(ema90, color=color.green, title="EMA90")
plot(resistance_level, color=color.orange, style=plot.style_line, title="Resistance")
plot(support_level, color=color.orange, style=plot.style_line, title="Support")