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

Dinámica de soporte y resistencia Estrategia de negociación por pivote adaptativa

El autor:¿ Qué pasa?, fecha: 2025-01-10 15:08:24
Las etiquetas:El ATREl eje

 Dynamic Support and Resistance Adaptive Pivot Trading Strategy

Resumen general

Esta estrategia es un sistema de negociación adaptativo basado en la identificación dinámica de los niveles de soporte y resistencia utilizando puntos de giro de precios. Determina los niveles de precios clave calculando los máximos y mínimos locales en tiempo real y ejecuta las operaciones en consecuencia.

Principios de estrategia

La lógica central se basa en varios elementos clave: 1. Cálculo dinámico de pivote: utiliza el parámetro de longitud de pivote ajustable (por defecto 2) para identificar máximos y mínimos locales 2. Zonas de soporte/resistencia: Establece rangos basados en porcentajes (por defecto 0.4%) alrededor de puntos pivot para definir áreas de negociación válidas 3. Generación de señales: señales largas cuando el precio rompe por encima del soporte, señales cortas cuando el precio rompe por debajo de la resistencia 4. Gestión del riesgo: Implementa niveles dinámicos de stop-loss (10%) y take-profit (27%), con dimensionamiento de posiciones basado en el patrimonio neto de la cuenta

Ventajas estratégicas

  1. Alta adaptabilidad: ajusta dinámicamente los niveles de soporte/resistencia según las condiciones del mercado, evitando el retraso de los niveles estáticos
  2. El riesgo controlado: mantiene un riesgo razonable por operación mediante paradas estrictas basadas en porcentajes y dimensionamiento dinámico de las posiciones.
  3. Escalabilidad: admite múltiples marcos de tiempo y combinaciones de parámetros para la optimización en diferentes entornos de mercado
  4. Transparencia: lógica de negociación clara con todas las señales y niveles de precios visualizados en los gráficos

Riesgos estratégicos

  1. Riesgo de ruptura falsa: puede generar frecuentes señales falsas en mercados variados, lo que requiere el ajuste de los parámetros de la zona de soporte/resistencia.
  2. Impacto del deslizamiento: los precios de ejecución reales pueden diferir significativamente de los precios de la señal en condiciones de mercado menos líquidas
  3. Dependencia de la tendencia: la estrategia tiene un mejor rendimiento en los mercados de tendencia, pero puede generar señales excesivas durante las fases de consolidación
  4. Sensibilidad de los parámetros: El rendimiento depende en gran medida de la configuración de los parámetros, lo que requiere pruebas posteriores exhaustivas para la optimización

Direcciones de optimización

  1. Añadir un módulo de reconocimiento del entorno de mercado para el ajuste automático de parámetros basado en la volatilidad
  2. Incorporar el volumen y indicadores técnicos adicionales como señales de confirmación
  3. Optimizar el algoritmo de posicionamiento con ajustes dinámicos basados en la volatilidad del mercado
  4. Implementar filtros de tiempo para evitar el comercio durante los períodos desfavorables
  5. Desarrollar un algoritmo de stop-loss adaptativo con ajuste dinámico basado en la volatilidad del mercado

Resumen de las actividades

La estrategia proporciona un marco confiable para el seguimiento de tendencias y la inversión de operaciones a través de la identificación dinámica de los niveles de precios clave combinados con un estricto control de riesgos.


/*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"}]
*/

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

//@version=6
strategy("Dynamic Support and Resistance Pivot Strategy ", overlay=true)

// Strategy parameters
pivot_length = input.int(2, title="Pivot Length", tooltip="Pivot size to identify peaks and troughs")
support_resistance_distance = input.float(0.4, title="Support/Resistance Distance %", tooltip="Distance to consider a support or resistance level in %")

// Stop Loss and Take Profit parameters
stop_loss_pct = input.float(10.0, title="Stop Loss %", tooltip="Stop loss percentage", minval=0.1) / 100
take_profit_pct = input.float(26.0, title="Take Profit %", tooltip="Take profit percentage", minval=0.1) / 100

// Functions to identify high and low pivots
pivot_high = ta.pivothigh(high, pivot_length, pivot_length)
pivot_low = ta.pivotlow(low, pivot_length, pivot_length)

// Storing support and resistance levels
var float resistance_level = na
var float support_level = na
var float last_pivot_high = na
var float last_pivot_low = na

// Updating support and resistance based on pivots
if (not na(pivot_high))
    resistance_level := high[pivot_length]
    last_pivot_high := high[pivot_length]

if (not na(pivot_low))
    support_level := low[pivot_length]
    last_pivot_low := low[pivot_length]

// Function to check if the current price is near a support or resistance level
is_near_resistance = (not na(resistance_level)) and (close >= resistance_level * (1 - support_resistance_distance / 100)) and (close <= resistance_level * (1 + support_resistance_distance / 100))
is_near_support = (not na(support_level)) and (close >= support_level * (1 - support_resistance_distance / 100)) and (close <= support_level * (1 + support_resistance_distance / 100))

// Cross conditions variables
long_cross = ta.crossover(close, support_level) and not na(support_level)
short_cross = ta.crossunder(close, resistance_level) and not na(resistance_level)

// Entry conditions
long_condition = is_near_support and long_cross  // Buy when crossing support from below
short_condition = is_near_resistance and short_cross  // Sell when crossing resistance from above

// Order execution
if (long_condition)
    strategy.entry("Long", strategy.long)

if (short_condition)
    strategy.entry("Short", strategy.short)

// Stop Loss and Take Profit
if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // For long position
        avg_price_long = strategy.position_avg_price
        long_stop_level = avg_price_long * (1 - stop_loss_pct)
        long_take_profit_level = avg_price_long * (1 + take_profit_pct)
        strategy.exit("Exit Long", from_entry="Long", stop=long_stop_level, limit=long_take_profit_level)

    if (strategy.position_size < 0)  // For short position
        avg_price_short = strategy.position_avg_price
        short_stop_level = avg_price_short * (1 + stop_loss_pct)
        short_take_profit_level = avg_price_short * (1 - take_profit_pct)
        strategy.exit("Exit Short", from_entry="Short", stop=short_stop_level, limit=short_take_profit_level)

// Plotting support and resistance levels on the chart
plot(support_level, title="Support", color=color.green, linewidth=2, style=plot.style_line)
plot(resistance_level, title="Resistance", color=color.red, linewidth=2, style=plot.style_line)

// Adding labels to show pivot values
if (long_condition and not na(support_level))
    label.new(bar_index, low[pivot_length], str.tostring(low[pivot_length]), style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)

if (short_condition and not na(resistance_level))
    label.new(bar_index, high[pivot_length], str.tostring(high[pivot_length]), style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)


Relacionados

Más.