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

Estrategia de negociación mejorada de inversión de doble punto de giro

El autor:¿ Qué pasa?, Fecha: 2024-12-05 15:06:15
Las etiquetas:El ATREl PPIndicador de riesgoSLTPRR

 Enhanced Dual Pivot Point Reversal Trading Strategy

Resumen general

Esta estrategia es un sistema de negociación avanzado basado en el análisis de puntos de pivote que predice posibles inversiones de tendencia mediante la identificación de puntos de inflexión clave en el mercado. La estrategia emplea un innovador enfoque pivot of pivot combinado con el indicador ATR para la gestión de posiciones, formando un sistema de negociación completo. La estrategia es aplicable a múltiples mercados y puede optimizarse de acuerdo con diferentes características del mercado.

Principios de estrategia

El núcleo de la estrategia es identificar oportunidades de reversión del mercado a través de dos niveles de análisis de puntos de giro. Los puntos de giro de primer nivel son máximos y mínimos básicos, mientras que los puntos de giro de segundo nivel son puntos de giro significativos seleccionados de los puntos de giro de primer nivel. Las señales de negociación se generan cuando el precio rompe estos niveles clave. La estrategia también utiliza el indicador ATR para medir la volatilidad del mercado para determinar los niveles de stop-loss, take-profit y tamaño de posición.

Ventajas estratégicas

  1. Alta adaptabilidad: la estrategia puede adaptarse a diferentes entornos de mercado ajustando los parámetros para adaptarse a diferentes niveles de volatilidad.
  2. Gestión integral del riesgo: utiliza el ATR para ajustes dinámicos de stop-loss, ajustando automáticamente las medidas de protección en función de la volatilidad del mercado.
  3. Confirmación de varios niveles: Reduce los riesgos de fuga falsa a través de un análisis de dos capas de puntos de giro.
  4. Gestión flexible de posiciones: ajusta dinámicamente el tamaño de la posición en función del tamaño de la cuenta y la volatilidad del mercado.
  5. Reglas de entrada claras: Tiene mecanismos explícitos de confirmación de señales, reduciendo el juicio subjetivo.

Riesgos estratégicos

  1. Riesgo de deslizamiento: puede sufrir un deslizamiento significativo en mercados altamente volátiles.
  2. Riesgo de ruptura falsa: puede generar señales falsas durante la consolidación del mercado.
  3. Riesgo de apalancamiento excesivo: el uso inadecuado del apalancamiento puede provocar pérdidas graves.
  4. Riesgo de optimización de parámetros: la optimización excesiva puede conducir a un sobreajuste.

Direcciones de optimización

  1. Filtración de señales: añadir filtros de tendencia para operar solo en la dirección de la tendencia principal.
  2. Parámetros dinámicos: ajusta automáticamente los parámetros del punto de giro en función de las condiciones del mercado.
  3. Marcos de tiempo múltiples: agregar confirmación de marcos de tiempo múltiples para mejorar la precisión.
  4. Stop-Loss inteligente: Desarrolle estrategias de stop-loss más inteligentes, como las paradas de trailing.
  5. Control de riesgos: añadir más medidas de control de riesgos, como el análisis de correlación.

Resumen de las actividades

Esta es una estrategia de inversión de tendencia bien diseñada que construye un sistema comercial robusto a través del análisis de puntos de giro de doble capa y la gestión de la volatilidad ATR. Las fortalezas de la estrategia se encuentran en su adaptabilidad y gestión integral del riesgo, pero los operadores aún necesitan usar el apalancamiento con precaución y optimizar continuamente los parámetros. A través de las direcciones de optimización sugeridas, la estrategia tiene margen de mejora.


/*backtest
start: 2024-11-04 00:00:00
end: 2024-12-04 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Pivot of Pivot Reversal Strategy [MAD]", shorttitle="PoP Reversal Strategy", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3)

// Inputs with Tooltips
leftBars = input.int(4, minval=1, title='PP Left Bars', tooltip='Number of bars to the left of the pivot point. Increasing this value makes the pivot more significant.')
rightBars = input.int(2, minval=1, title='PP Right Bars', tooltip='Number of bars to the right of the pivot point. Increasing this value delays the pivot detection but may reduce false signals.')
atr_length = input.int(14, minval=1, title='ATR Length', tooltip='Length for ATR calculation. ATR is used to assess market volatility.')
atr_mult = input.float(0.1, minval=0.0, step=0.1, title='ATR Multiplier', tooltip='Multiplier applied to ATR for pivot significance. Higher values require greater price movement for pivots.')

allowLongs = input.bool(true, title='Allow Long Positions', tooltip='Enable or disable long positions.')
allowShorts = input.bool(true, title='Allow Short Positions', tooltip='Enable or disable short positions.')

margin_amount = input.float(1.0, minval=1.0, maxval=100.0, step=1.0, title='Margin Amount (Leverage)', tooltip='Set the leverage multiplier (e.g., 3x, 5x, 10x). Note: Adjust leverage in strategy properties for accurate results.')

risk_reward_enabled = input.bool(false, title='Enable Risk/Reward Ratio', tooltip='Enable or disable the use of a fixed risk/reward ratio for trades.')
risk_reward_ratio = input.float(1.0, minval=0.1, step=0.1, title='Risk/Reward Ratio', tooltip='Set the desired risk/reward ratio (e.g., 1.0 for 1:1).')
risk_percent = input.float(1.0, minval=0.1, step=0.1, title='Risk Percentage per Trade (%)', tooltip='Percentage of entry price to risk per trade.')

trail_stop_enabled = input.bool(false, title='Enable Trailing Stop Loss', tooltip='Enable or disable the trailing stop loss.')
trail_percent = input.float(0.5, minval=0.0, step=0.1, title='Trailing Stop Loss (%)', tooltip='Percentage for trailing stop loss.')

start_year  = input.int(2018, title='Start Year', tooltip='Backtest start year.')
start_month = input.int(1,    title='Start Month', tooltip='Backtest start month.')
start_day   = input.int(1,    title='Start Day',   tooltip='Backtest start day.')

end_year  = input.int(2100, title='End Year', tooltip='Backtest end year.')
end_month = input.int(1,    title='End Month', tooltip='Backtest end month.')
end_day   = input.int(1,    title='End Day',   tooltip='Backtest end day.')

date_start = timestamp(start_year, start_month, start_day, 00, 00)
date_end   = timestamp(end_year,   end_month,   end_day,   00, 00)
time_cond = time >= date_start and time <= date_end

// Pivot High Significant Function
pivotHighSig(left, right) =>
    pp_ok = true
    atr = ta.atr(atr_length)
    for i = 1 to left
        if high[right] < high[right + i] + atr * atr_mult
            pp_ok := false
    for i = 0 to right - 1
        if high[right] < high[i] + atr * atr_mult
            pp_ok := false
    pp_ok ? high[right] : na

// Pivot Low Significant Function
pivotLowSig(left, right) =>
    pp_ok = true
    atr = ta.atr(atr_length)
    for i = 1 to left
        if low[right] > low[right + i] - atr * atr_mult
            pp_ok := false
    for i = 0 to right - 1
        if low[right] > low[i] - atr * atr_mult
            pp_ok := false
    pp_ok ? low[right] : na

swh = pivotHighSig(leftBars, rightBars)
swl = pivotLowSig(leftBars, rightBars)

swh_cond = not na(swh)
var float hprice = 0.0
hprice := swh_cond ? swh : nz(hprice[1])

le = false
le := swh_cond ? true : (le[1] and high > hprice ? false : le[1])

swl_cond = not na(swl)
var float lprice = 0.0
lprice := swl_cond ? swl : nz(lprice[1])

se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])

// Pivots of pivots
var float ph1 = 0.0
var float ph2 = 0.0
var float ph3 = 0.0
var float pl1 = 0.0
var float pl2 = 0.0
var float pl3 = 0.0
var float pphprice = 0.0
var float pplprice = 0.0

ph3 := swh_cond ? nz(ph2[1]) : nz(ph3[1])
ph2 := swh_cond ? nz(ph1[1]) : nz(ph2[1])
ph1 := swh_cond ? hprice     : nz(ph1[1])

pl3 := swl_cond ? nz(pl2[1]) : nz(pl3[1])
pl2 := swl_cond ? nz(pl1[1]) : nz(pl2[1])
pl1 := swl_cond ? lprice     : nz(pl1[1])

pphprice := swh_cond and ph2 > ph1 and ph2 > ph3 ? ph2 : nz(pphprice[1])
pplprice := swl_cond and pl2 < pl1 and pl2 < pl3 ? pl2 : nz(pplprice[1])

// Entry and Exit Logic
if time_cond
    // Calculate order quantity based on margin amount
    float order_qty = na
    if margin_amount > 0
        order_qty := (strategy.equity * margin_amount) / close

    // Long Position
    if allowLongs and le and not na(pphprice) and pphprice != 0
        float entry_price_long = pphprice + syminfo.mintick
        strategy.entry("PivRevLE", strategy.long, qty=order_qty, comment="PivRevLE", stop=entry_price_long)
        if risk_reward_enabled or (trail_stop_enabled and trail_percent > 0.0)
            float stop_loss_price = na
            float take_profit_price = na
            float trail_offset_long = na
            float trail_points_long = na
            if risk_reward_enabled
                float risk_amount = entry_price_long * (risk_percent / 100)
                stop_loss_price := entry_price_long - risk_amount
                float profit_target = risk_amount * risk_reward_ratio
                take_profit_price := entry_price_long + profit_target
            if trail_stop_enabled and trail_percent > 0.0
                trail_offset_long := (trail_percent / 100.0) * entry_price_long
                trail_points_long := trail_offset_long / syminfo.pointvalue
            strategy.exit("PivRevLE Exit", from_entry="PivRevLE",
                          stop=stop_loss_price, limit=take_profit_price,
                          trail_points=trail_points_long, trail_offset=trail_points_long)
    // Short Position
    if allowShorts and se and not na(pplprice) and pplprice != 0
        float entry_price_short = pplprice - syminfo.mintick
        strategy.entry("PivRevSE", strategy.short, qty=order_qty, comment="PivRevSE", stop=entry_price_short)
        if risk_reward_enabled or (trail_stop_enabled and trail_percent > 0.0)
            float stop_loss_price = na
            float take_profit_price = na
            float trail_offset_short = na
            float trail_points_short = na
            if risk_reward_enabled
                float risk_amount = entry_price_short * (risk_percent / 100)
                stop_loss_price := entry_price_short + risk_amount
                float profit_target = risk_amount * risk_reward_ratio
                take_profit_price := entry_price_short - profit_target
            if trail_stop_enabled and trail_percent > 0.0
                trail_offset_short := (trail_percent / 100.0) * entry_price_short
                trail_points_short := trail_offset_short / syminfo.pointvalue
            strategy.exit("PivRevSE Exit", from_entry="PivRevSE",
                          stop=stop_loss_price, limit=take_profit_price,
                          trail_points=trail_points_short, trail_offset=trail_points_short)

// Plotting
plot(lprice, color=color.new(color.red, 55), title='Low Price')
plot(hprice, color=color.new(color.green, 55), title='High Price')
plot(pplprice, color=color.new(color.red, 0), linewidth=2, title='Pivot Low Price')
plot(pphprice, color=color.new(color.green, 0), linewidth=2, title='Pivot High Price')


Relacionados

Más.