Estrategia comercial de seguimiento de tendencias estocásticas en múltiples marcos temporales

EMA ATR MTF ROI TP SL
Fecha de creación: 2025-02-18 17:53:04 Última modificación: 2025-02-18 17:53:04
Copiar: 1 Número de Visitas: 360
1
Seguir
1617
Seguidores

Estrategia comercial de seguimiento de tendencias estocásticas en múltiples marcos temporales

Descripción general

La estrategia es un sistema de seguimiento de tendencias que combina un indicador aleatorio de múltiples marcos horarios (estocástico) y un promedio móvil de índice (EMA). Utiliza un indicador aleatorio de marcos horarios altos para juzgar las condiciones de sobreventa y sobreventa, al mismo tiempo que utiliza el EMA como filtro de tendencias e integra la gestión de posiciones dinámicas y el seguimiento de las paradas, como un sistema de estrategia de comercio completo.

Principio de estrategia

La lógica central de la estrategia se basa en los siguientes elementos clave:

  1. El indicador aleatorio del marco de horas altas identifica las zonas de sobreventa y sobreventa, y determina las señales potenciales de transacción a través de la intersección de la línea K con el nivel de sobreventa y sobreventa
  2. Utiliza EMA como filtro de tendencia, solo hace más cuando el precio está por encima de EMA, hace menos cuando está por debajo de EMA
  3. Basado en el cálculo dinámico de los objetivos de stop loss y profit, el stop loss es 1.5 veces el ATR y el profit es 2 veces el stop loss
  4. Utiliza un método de cálculo de posiciones dinámicas basado en porcentajes de riesgo en la cuenta para garantizar que el riesgo de cada operación se controle a un nivel predeterminado
  5. Función de deterioro de seguimiento opcional, con una distancia de seguimiento de 1.5 veces el ATR

Ventajas estratégicas

  1. Confirmación de múltiples señales: combinación de indicadores aleatorios en el marco de tiempo alto y filtros de tendencia EMA para mejorar la fiabilidad de la señal
  2. Una buena gestión de riesgos: un enfoque de gestión de riesgos porcentuales para garantizar la seguridad de los fondos
  3. Métodos de pérdidas flexibles: soporte de pérdidas fijas y seguimiento de pérdidas para adaptarse a diferentes entornos de mercado
  4. Alertas claros de transacciones: el sistema marca automáticamente los puntos de entrada, los puntos de parada y los objetivos para facilitar la ejecución de las operaciones
  5. Gestión de posiciones dinámicas: ajuste automático del tamaño de la operación en función de la volatilidad y optimización de la eficiencia de la utilización de los fondos

Riesgo estratégico

  1. Riesgo de cambio de tendencia: Falsa señal en un mercado con fuertes sacudidas
  2. Riesgo de deslizamiento: un deslizamiento mayor en un mercado con poca liquidez
  3. Sensibilidad a parámetros: el rendimiento de la estrategia es sensible a la configuración de parámetros y requiere una optimización cuidadosa.
  4. Riesgo de retiro: Se podría hacer un retiro mayor en momentos de fuertes fluctuaciones en el mercado
  5. Riesgo de desencadenamiento del stop loss: el stop loss de seguimiento puede desencadenarse prematuramente cuando la oscilación se agrava

Dirección de optimización de la estrategia

  1. Aumentar el filtro de entornos de mercado: se puede agregar un indicador de volatilidad o un indicador de intensidad de tendencia para ajustar los parámetros de la estrategia en diferentes entornos de mercado
  2. Mecanismo de confirmación de señales optimizado: se puede considerar la adición de confirmación de volumen de entrega u otros indicadores técnicos como juicio auxiliar
  3. Mejora en la gestión de las posiciones: Percentaje de riesgo ajustable en función de la volatilidad del mercado
  4. Mejora del mecanismo de detención de pérdidas: el seguimiento de la distancia de detención se puede ajustar a la dinámica de las características del mercado
  5. Añadir filtro de tiempo: considera los límites de transacción en períodos importantes y evita el riesgo durante las noticias importantes.

Resumir

La estrategia utiliza el análisis de múltiples marcos de tiempo y el mecanismo de confirmación de múltiples señales, combinado con un sistema de gestión de riesgos completo, para construir un sistema de negociación más completo. Aunque existe cierto riesgo, la estrategia espera mantener un rendimiento estable en diferentes entornos de mercado a través de la optimización y la mejora continuas.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-17 00:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Ultimate fairas Oil", overlay=true)

// === Input Parameter ===
k_period = input(14, "K Period")
d_period = input(3, "D Period")
smooth_k = input(3, "Smooth K")
overbought = input(80, "Overbought Level")
oversold = input(20, "Oversold Level")
atrMult = input(1.5, "ATR Multiplier")
use_trailing_stop = input(true, "Enable Trailing Stop")
ema_length = input(50, "EMA Length")
risk_percent = input(2, "Risk per Trade (%)") / 100
account_balance = input(50000, "Account Balance")
mtf_tf = input.timeframe("D", "Higher Timeframe for Stochastic")

// === Multi-Timeframe Stochastic ===
stoch_source = request.security(syminfo.tickerid, mtf_tf, ta.stoch(close, high, low, k_period))
k = ta.sma(stoch_source, smooth_k)

// === Trend Filter (EMA) ===
ema = ta.ema(close, ema_length)
trendUp = close > ema
trendDown = close < ema

// === Entry Conditions ===
longCondition = ta.crossover(k, oversold) and trendUp
shortCondition = ta.crossunder(k, overbought) and trendDown

// === ATR-Based Stop Loss & Take Profit ===
atrValue = ta.atr(14)
stopLoss = atrMult * atrValue
takeProfit = 2 * stopLoss

// === Dynamic Lot Sizing (Risk Management) ===
risk_amount = account_balance * risk_percent
position_size = risk_amount / stopLoss

// === Trailing Stop Calculation ===
trailOffset = atrValue * 1.5
trailStopLong = use_trailing_stop ? close - trailOffset : na
trailStopShort = use_trailing_stop ? close + trailOffset : na

// === Execute Trades ===
if longCondition
    strategy.entry("Long", strategy.long, qty=position_size)
    strategy.exit("Exit Long", from_entry="Long", stop=close - stopLoss, limit=close + takeProfit, trail_points=use_trailing_stop ? trailOffset : na)

    // // Labels & Lines
    // label.new(x=bar_index, y=close, text="BUY", color=color.green, textcolor=color.white, size=size.small, style=label.style_label_down)
    // label.new(x=bar_index, y=close + takeProfit, text="TP 🎯", color=color.blue, textcolor=color.white, size=size.tiny)
    // label.new(x=bar_index, y=close - stopLoss, text="SL ❌", color=color.red, textcolor=color.white, size=size.tiny)
    // line.new(x1=bar_index, y1=close + takeProfit, x2=bar_index + 5, y2=close + takeProfit, width=2, color=color.blue)
    // line.new(x1=bar_index, y1=close - stopLoss, x2=bar_index + 5, y2=close - stopLoss, width=2, color=color.red)

    // Alert
    alert("BUY Signal! TP: " + str.tostring(close + takeProfit) + ", SL: " + str.tostring(close - stopLoss) + ", Lot Size: " + str.tostring(position_size), alert.freq_once_per_bar_close)

if shortCondition
    strategy.entry("Short", strategy.short, qty=position_size)
    strategy.exit("Exit Short", from_entry="Short", stop=close + stopLoss, limit=close - takeProfit, trail_points=use_trailing_stop ? trailOffset : na)

    // // Labels & Lines
    // label.new(x=bar_index, y=close, text="SELL", color=color.red, textcolor=color.white, size=size.small, style=label.style_label_up)
    // label.new(x=bar_index, y=close - takeProfit, text="TP 🎯", color=color.blue, textcolor=color.white, size=size.tiny)
    // label.new(x=bar_index, y=close + stopLoss, text="SL ❌", color=color.green, textcolor=color.white, size=size.tiny)
    // line.new(x1=bar_index, y1=close - takeProfit, x2=bar_index + 5, y2=close - takeProfit, width=2, color=color.blue)
    // line.new(x1=bar_index, y1=close + stopLoss, x2=bar_index + 5, y2=close + stopLoss, width=2, color=color.green)

    // Alert
    alert("SELL Signal! TP: " + str.tostring(close - takeProfit) + ", SL: " + str.tostring(close + stopLoss) + ", Lot Size: " + str.tostring(position_size), alert.freq_once_per_bar_close)