En la carga de los recursos... Cargando...

Tendencia de media móvil doble siguiendo una estrategia con sistema de gestión de riesgos basado en ATR

El autor:¿ Qué pasa?, Fecha: 2024-11-29 14:56:43
Las etiquetas:La SMAEl ATRTPSLEl HTF

img

Resumen general

Esta estrategia combina el seguimiento clásico de tendencias de media móvil dual con la gestión de riesgos dinámicos basados en ATR. Ofrece dos modos de negociación: un modo básico que utiliza cruces de media móvil simples para el seguimiento de tendencias, y un modo avanzado que incorpora un filtrado de tendencias de mayor marco de tiempo y mecanismos de stop-loss dinámicos basados en ATR. Los operadores pueden cambiar entre los modos a través de un simple menú desplegable, satisfaciendo tanto las necesidades de los principiantes como la facilidad de uso y las necesidades de los operadores experimentados en la gestión de riesgos.

Principios de estrategia

La estrategia 1 (Modo Básico) emplea un sistema de promedio móvil dual de 21 y 49 días, generando señales largas cuando el MA rápido cruza por encima del MA lento. Los objetivos de ganancias se pueden establecer en porcentaje o puntos, con una parada de seguimiento opcional para bloquear las ganancias. La estrategia 2 (Modo Avanzado) agrega filtración de tendencias diarias, permitiendo entradas solo cuando el precio está por encima del promedio móvil del marco de tiempo superior. Incorpora un stop-loss dinámico basado en ATR de 14 períodos que se ajusta a la volatilidad del mercado e incluye una funcionalidad de toma de ganancias parcial para proteger las ganancias.

Ventajas estratégicas

  1. Estrategia altamente adaptable que puede adaptarse a la experiencia del operador y a las condiciones del mercado
  2. El análisis de múltiples marcos de tiempo en modo avanzado mejora la calidad de la señal
  3. Las paradas dinámicas basadas en ATR se adaptan a la variación de la volatilidad del mercado
  4. Saldos de obtención de beneficios parciales Protección de los beneficios con continuación de la tendencia
  5. Configuración de parámetros flexible para las diferentes características del mercado

Riesgos estratégicos

  1. El sistema de doble MA puede generar frecuentes señales falsas en mercados variados
  2. El filtrado de tendencias puede causar retraso en la señal, perdiendo algunas oportunidades comerciales
  3. Las paradas de ATR pueden no ajustarse lo suficientemente rápidamente a los picos de volatilidad
  4. La obtención parcial de beneficios podría reducir el tamaño de las posiciones demasiado pronto en caso de tendencias fuertes

Direcciones para la optimización de la estrategia

  1. Añadir indicadores de volumen y volatilidad para filtrar señales falsas
  2. Considerar la posibilidad de aplicar una adaptación dinámica de los parámetros en función de las condiciones del mercado
  3. Optimizar el período de cálculo del ATR para equilibrar la sensibilidad y la estabilidad
  4. Añadir un módulo de reconocimiento del estado del mercado para la selección automática del modo de estrategia
  5. Introduzca más opciones de stop-loss como paradas de trailing y salidas basadas en el tiempo

Resumen de las actividades

Este es un sistema de negociación bien diseñado y completo. La combinación de doble seguimiento de tendencia de media móvil y gestión de riesgos basada en ATR garantiza fiabilidad y control de riesgos efectivo. El diseño de doble modo satisface las necesidades de diferentes niveles de comerciantes, mientras que las opciones de parámetros ricos proporcionan amplias oportunidades de optimización. Se aconseja a los comerciantes que comiencen con parámetros conservadores en el comercio en vivo y se optimicen gradualmente para obtener los mejores resultados.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © shaashish1

//@version=5
strategy("Dual Strategy Selector V2 - Cryptogyani", overlay=true, pyramiding=0, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100000)

//#region STRATEGY SELECTION
strategyOptions = input.string(title="Select Strategy", defval="Strategy 1", options=["Strategy 1", "Strategy 2"], group="Strategy Selection")
//#endregion STRATEGY SELECTION

// ####################### STRATEGY 1: Original Logic ########################
//#region STRATEGY 1 INPUTS
s1_fastMALen = input.int(defval=21, title="Fast SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_slowMALen = input.int(defval=49, title="Slow SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_takeProfitMode = input.string(defval="Percentage", title="Take Profit Mode (S1)", options=["Percentage", "Pips"], group="Strategy 1 Settings")
s1_takeProfitPerc = input.float(defval=7.0, title="Take Profit % (S1)", minval=0.05, step=0.05, group="Strategy 1 Settings") / 100
s1_takeProfitPips = input.float(defval=50, title="Take Profit Pips (S1)", minval=1, step=1, group="Strategy 1 Settings")
s1_trailingTakeProfitEnabled = input.bool(defval=false, title="Enable Trailing (S1)", group="Strategy 1 Settings")
//#endregion STRATEGY 1 INPUTS

// ####################### STRATEGY 2: Enhanced with Recommendations ########################
//#region STRATEGY 2 INPUTS
s2_fastMALen = input.int(defval=20, title="Fast SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_slowMALen = input.int(defval=50, title="Slow SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_atrLength = input.int(defval=14, title="ATR Length (S2)", group="Strategy 2 Settings", inline="ATR")
s2_atrMultiplier = input.float(defval=1.5, title="ATR Multiplier for Stop-Loss (S2)", group="Strategy 2 Settings", inline="ATR")
s2_partialTakeProfitPerc = input.float(defval=50.0, title="Partial Take Profit % (S2)", minval=10, maxval=100, step=10, group="Strategy 2 Settings")
s2_timeframeTrend = input.timeframe(defval="1D", title="Higher Timeframe for Trend Filter (S2)", group="Strategy 2 Settings")
//#endregion STRATEGY 2 INPUTS

// ####################### GLOBAL VARIABLES ########################
var float takeProfitPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na
var float fastMA = na
var float slowMA = na
var float higherTimeframeTrendMA = na
var bool validOpenLongPosition = false

// Precalculate higher timeframe values (global scope for Strategy 2)
higherTimeframeTrendMA := request.security(syminfo.tickerid, s2_timeframeTrend, ta.sma(close, s2_slowMALen))

// ####################### LOGIC ########################
if (strategyOptions == "Strategy 1")
    // Strategy 1 Logic (Original Logic Preserved)
    fastMA := ta.sma(close, s1_fastMALen)
    slowMA := ta.sma(close, s1_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA)
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0
    
    // Take Profit Price
    takeProfitPrice := if (s1_takeProfitMode == "Percentage")
        close * (1 + s1_takeProfitPerc)
    else
        close + (s1_takeProfitPips * syminfo.mintick)

    // Trailing Stop Price (if enabled)
    if (strategy.position_size > 0 and s1_trailingTakeProfitEnabled)
        trailingStopPrice := high - (s1_takeProfitPips * syminfo.mintick)
    else
        trailingStopPrice := na

else if (strategyOptions == "Strategy 2")
    // Strategy 2 Logic with Recommendations
    fastMA := ta.sma(close, s2_fastMALen)
    slowMA := ta.sma(close, s2_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA) and close > higherTimeframeTrendMA
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0

    // ATR-Based Stop-Loss
    atr = ta.atr(s2_atrLength)
    stopLossPrice := close - (atr * s2_atrMultiplier)

    // Partial Take Profit Logic
    takeProfitPrice := close * (1 + (s2_partialTakeProfitPerc / 100))
//#endregion STRATEGY LOGIC

// ####################### PLOTTING ########################
plot(series=fastMA, title="Fast SMA", color=color.yellow, linewidth=1)
plot(series=slowMA, title="Slow SMA", color=color.orange, linewidth=1)
plot(series=takeProfitPrice, title="Take Profit Price", color=color.teal, linewidth=1, style=plot.style_linebr)

// Trailing Stop and ATR Stop-Loss Plots (Global Scope)
plot(series=(strategyOptions == "Strategy 1" and s1_trailingTakeProfitEnabled) ? trailingStopPrice : na, title="Trailing Stop", color=color.red, linewidth=1, style=plot.style_linebr)
plot(series=(strategyOptions == "Strategy 2") ? stopLossPrice : na, title="ATR Stop-Loss", color=color.red, linewidth=1, style=plot.style_linebr)
//#endregion PLOTTING

// ####################### POSITION ORDERS ########################
//#region POSITION ORDERS
if (validOpenLongPosition)
    strategy.entry(id="Long Entry", direction=strategy.long)

if (strategyOptions == "Strategy 1")
    if (strategy.position_size > 0)
        if (s1_trailingTakeProfitEnabled)
            strategy.exit(id="Trailing Take Profit", from_entry="Long Entry", stop=trailingStopPrice)
        else
            strategy.exit(id="Take Profit", from_entry="Long Entry", limit=takeProfitPrice)

else if (strategyOptions == "Strategy 2")
    if (strategy.position_size > 0)
        strategy.exit(id="Partial Take Profit", from_entry="Long Entry", qty_percent=s2_partialTakeProfitPerc, limit=takeProfitPrice)
        strategy.exit(id="Stop Loss", from_entry="Long Entry", stop=stopLossPrice)
//#endregion POSITION ORDERS


Relacionados

Más.