Estrategia de trading adaptativo con seguimiento de tendencias de doble media móvil y control de riesgo ATR

SMA ATR TP SL HTF
Fecha de creación: 2024-11-29 14:56:43 Última modificación: 2024-11-29 14:56:43
Copiar: 0 Número de Visitas: 522
1
Seguir
1617
Seguidores

Estrategia de trading adaptativo con seguimiento de tendencias de doble media móvil y control de riesgo ATR

Descripción general

La estrategia es un sistema de comercio adaptativo que combina el seguimiento de tendencias de doble línea uniforme clásico y el control de riesgo dinámico de ATR. La estrategia ofrece dos modos de comercio: el modelo básico utiliza un simple cruce de doble línea uniforme para el seguimiento de tendencias, el modelo avanzado agrega un filtro de tendencias de marcos de tiempo más altos y un mecanismo de stop loss dinámico basado en ATR. La estrategia se puede cambiar entre los dos modos a través de un simple menú desplegable, tanto para la facilidad de uso de los principiantes como para satisfacer las necesidades de control de riesgo de los operadores experimentados.

Principio de estrategia

La estrategia 1 ((modo básico) adopta un sistema de doble ecuador de 21 y 49 días, que produce múltiples señales cuando la media rápida cruza la media lenta hacia arriba. Los objetivos de ganancias pueden elegir un porcentaje o un modo puntual, mientras que ofrece una función de parada de pérdidas móvil opcional para bloquear las ganancias. La estrategia 2 ((modo avanzado) agrega un filtro de tendencia a nivel de línea de sol en la base del sistema de doble ecuador, y solo se permite entrar en juego cuando el precio está por encima de la media del marco de tiempo más alto.

Ventajas estratégicas

  1. La estrategia es altamente adaptable y se puede cambiar con flexibilidad según el nivel de experiencia del comerciante y el entorno del mercado
  2. El análisis de múltiples marcos de tiempo en el modo avanzado mejora la calidad de la señal
  3. El ATR puede adaptarse a diferentes condiciones de mercado
  4. Algunos mecanismos de ganancias equilibran la protección de las ganancias y la continuación de la tendencia
  5. La configuración de los parámetros es flexible y se puede optimizar de acuerdo con las diferentes características del mercado

Riesgo estratégico

  1. Los sistemas de doble línea pueden generar falsas señales frecuentes en mercados convulsionados.
  2. El filtro de tendencias puede hacer que las señales se retrasen y se pierdan algunas oportunidades de negociación
  3. El deterioro de la ATR puede no ser lo suficientemente oportuno en caso de variaciones de la tasa de fluctuación
  4. Algunas ganancias podrían ser reducidas prematuramente y afectar a las ganancias generales

Dirección de optimización de la estrategia

  1. Se puede aumentar el volumen de transacciones y los indicadores de fluctuación para filtrar las señales falsas
  2. Considerar la introducción de un mecanismo de adaptación de parámetros dinámicos para ajustar automáticamente el ciclo de la mediana en función de la situación del mercado
  3. Optimización del ciclo de cálculo de ATR para equilibrar la sensibilidad y la estabilidad
  4. Agrega un módulo de identificación de estado de mercado para seleccionar automáticamente el mejor modelo de estrategia
  5. Introducción de más opciones para detener el daño, como el seguimiento del daño, el detener el tiempo, etc.

Resumir

Es un sistema de estrategia de negociación de diseño razonable y completo. La combinación de seguimiento de tendencias de doble línea recta y control de ventos ATR garantiza la fiabilidad de la estrategia y ofrece una buena gestión de riesgos. El diseño de dos modos satisface las necesidades de los comerciantes de diferentes niveles, y la rica configuración de parámetros ofrece un amplio espacio de optimización.

Código Fuente de la Estrategia
/*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