Estrategia de seguimiento de tendencias stop-profit y stop-loss multimodo basada en EMA, bandas de Madrid y canales de Donchian

EMA RRR
Fecha de creación: 2025-01-10 16:24:30 Última modificación: 2025-01-10 16:24:30
Copiar: 2 Número de Visitas: 418
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias stop-profit y stop-loss multimodo basada en EMA, bandas de Madrid y canales de Donchian

Descripción general

Esta es una estrategia de seguimiento de tendencias que combina la media móvil exponencial (EMA), la cinta de Madrid y el canal de Donchian. La singularidad de la estrategia radica en la provisión de tres modos de stop-profit y stop-loss conmutables: basado en puntos, basado en cantidad y basado en la relación riesgo-rendimiento. La confiabilidad de las transacciones se mejora a través de un mecanismo de confirmación de señal secundaria, y las transacciones solo se realizan cuando aparece una señal válida por segunda vez.

Principio de estrategia

La estrategia utiliza una combinación de tres indicadores técnicos para identificar oportunidades comerciales:

  1. El promedio móvil exponencial de 200 períodos se utiliza para determinar la dirección general de la tendencia.
  2. Las bandas de Madrid (cruce de las EMA de 5 y 100 períodos) se utilizan para determinar las tendencias a medio plazo
  3. Rupturas del canal de Donchian para un momento de entrada específico

Condiciones comerciales largas: el precio está por encima de 200EMA, la Banda de Madrid se vuelve alcista y el precio sale del Canal Donchian superior. Condiciones comerciales cortas: el precio está por debajo de 200EMA, la Banda de Madrid se vuelve bajista y el precio sale del Canal Donchian inferior. Para reducir las señales falsas, la estrategia ejecuta una operación solo cuando aparece una señal válida por segunda vez.

Ventajas estratégicas

  1. Sistema flexible de gestión de stop-profit y stop-loss, que puede cambiar de modo según diferentes estilos de negociación.
  2. La combinación de múltiples indicadores técnicos proporciona señales comerciales más confiables
  3. El mecanismo de confirmación secundaria reduce eficazmente el impacto de las señales falsas.
  4. La estrategia evita por completo el sesgo de anticipación y no hay problemas de redibujo.
  5. Altamente personalizable para adaptarse a diferentes entornos de mercado.

Riesgo estratégico

  1. Puede ocurrir un retroceso mayor cuando la tendencia se invierte. Solución: Puede mejorar la sensibilidad de la estrategia ajustando los parámetros del indicador.
  2. La confianza excesiva en los indicadores técnicos puede provocar la pérdida de oportunidades de mercado Solución: Se recomienda combinar el análisis fundamental
  3. Los stop-loss fijos y los take-profit pueden no ser adecuados para todas las condiciones del mercado Solución: ajustar dinámicamente los niveles de toma de ganancias y stop loss en función de la volatilidad

Dirección de optimización de la estrategia

  1. Introducción de indicadores de volatilidad para ajustar dinámicamente los niveles de toma de ganancias y de stop loss
  2. Se agregó análisis de volumen para mejorar la confiabilidad de la señal.
  3. Añadiendo más indicadores del sentimiento del mercado
  4. Desarrollo de un sistema de optimización de parámetros adaptativo
  5. Añadir módulos de gestión de riesgos, como el control de reducción máxima

Resumir

Se trata de una estrategia de seguimiento de tendencias que combina múltiples indicadores técnicos clásicos y mejora la estabilidad de las transacciones mediante una gestión flexible de stop-profit y stop-loss y un mecanismo de confirmación secundario. La alta personalización de la estrategia le permite adaptarse a diferentes entornos de mercado y estilos de negociación. Se recomienda realizar pruebas retrospectivas de datos históricos suficientes antes del uso real y ajustar la configuración de los parámetros de acuerdo con las características específicas del mercado.

Código Fuente de la Estrategia
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Pamplona Enhanced TP/SL Toggleable", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Input settings
use_tick_based = input.bool(false, title="Use Tick-Based TP/SL")
use_dollar_based = input.bool(false, title="Use Dollar-Based TP/SL")
use_risk_reward = input.bool(true, title="Use Risk-Reward TP/SL") // Default option

tick_size = input.float(0.1, title="Tick Size (for Tick-Based)", minval=0.0001, step=0.0001)
ticks = input.int(10, title="Ticks (for Tick-Based TP/SL)", minval=1)
dollar_tp = input.float(10.0, title="Dollar Take Profit (for Dollar-Based)", minval=0.01, step=0.01)
dollar_sl = input.float(10.0, title="Dollar Stop Loss (for Dollar-Based)", minval=0.01, step=0.01)
risk_reward_ratio = input.float(2.0, title="Risk-Reward Ratio (for Risk-Reward TP/SL)", minval=0.1, step=0.1)
contract_size = input.int(1, title="Contract Size", minval=1)

// Retrieve indicators
ema200 = ta.ema(close, 200)
src = close
ma05 = ta.ema(src, 5)
ma100 = ta.ema(src, 100)
madrid_green = ma05 > ma100
dlen = input.int(20, title="Donchian Channel Period")
highest_d = ta.highest(high, dlen)
lowest_d = ta.lowest(low, dlen)
donchian_green = close > highest_d[1]
donchian_red = close < lowest_d[1]

// Track signals
var int long_signal_count = 0
var int short_signal_count = 0

// Conditions
long_condition_raw = madrid_green and donchian_green and close > ema200
short_condition_raw = not madrid_green and donchian_red and close < ema200

// Update signal counters
if long_condition_raw
    long_signal_count += 1
else
    long_signal_count := 0

if short_condition_raw
    short_signal_count += 1
else
    short_signal_count := 0

// Final conditions to enter on the second signal
long_condition = long_signal_count == 2
short_condition = short_signal_count == 2

// Ensure exactly one TP/SL mode is enabled
tp_sl_mode_count = (use_tick_based ? 1 : 0) + (use_dollar_based ? 1 : 0) + (use_risk_reward ? 1 : 0)
if tp_sl_mode_count != 1
    runtime.error("Enable exactly ONE TP/SL mode (Tick-Based, Dollar-Based, or Risk-Reward).")

// Function to calculate TP/SL based on active mode
calc_tp_sl(entry_price, is_long) =>
    float tp = na
    float sl = na
    if use_tick_based
        tp := is_long ? entry_price + ticks * tick_size : entry_price - ticks * tick_size
        sl := is_long ? entry_price - ticks * tick_size : entry_price + ticks * tick_size
    else if use_dollar_based
        tp := is_long ? entry_price + (dollar_tp / contract_size) : entry_price - (dollar_tp / contract_size)
        sl := is_long ? entry_price - (dollar_sl / contract_size) : entry_price + (dollar_sl / contract_size)
    else if use_risk_reward
        risk = is_long ? close - low : high - close
        tp := is_long ? close + (risk * risk_reward_ratio) : close - (risk * risk_reward_ratio)
        sl := is_long ? close - risk : close + risk
    [tp, sl]

// Entry logic
if long_condition
    [take_profit, stop_loss] = calc_tp_sl(close, true)
    strategy.entry("Long", strategy.long, qty=contract_size)
    strategy.exit("Take Profit", from_entry="Long", limit=take_profit, stop=stop_loss)

if short_condition
    [take_profit, stop_loss] = calc_tp_sl(close, false)
    strategy.entry("Short", strategy.short, qty=contract_size)
    strategy.exit("Take Profit", from_entry="Short", limit=take_profit, stop=stop_loss)

// Plot indicators
plot(ema200, title="200 EMA", color=color.white, linewidth=2)
bgcolor(long_condition ? color.new(color.green, 90) : short_condition ? color.new(color.red, 90) : na)