Sistema de negociación de precios con soporte dinámico

SR PA
Fecha de creación: 2024-12-04 15:19:00 Última modificación: 2024-12-04 15:19:00
Copiar: 0 Número de Visitas: 422
1
Seguir
1617
Seguidores

Sistema de negociación de precios con soporte dinámico

Descripción general

La estrategia es un sistema de negociación basado en el comportamiento de los precios y en la resistencia de los soportes dinámicos, que se realiza mediante la identificación de las formas clave de los precios cerca de los puntos de soporte y resistencia. El sistema utiliza un método de cálculo de resistencia de soporte dinámico de 16 ciclos, que combina las cuatro formas clásicas de retorno de la retracción: la línea de la avalancha, la línea de la estrella, la cruz y la aguja para capturar las oportunidades de reversión potencial del mercado. La estrategia utiliza un porcentaje fijo de stop loss para administrar el riesgo y utiliza parámetros de sensibilidad para controlar la rigidez de las señales de entrada.

Principio de estrategia

El núcleo de la estrategia es formar un límite superior y inferior de la actividad de los precios mediante el cálculo dinámico de los niveles de soporte y resistencia. Cuando los precios se acercan a estos niveles críticos, el sistema busca una configuración gráfica específica como señal de reversión. Las condiciones de entrada requieren que los precios se reversionen dentro del 1.8% de la resistencia de soporte (sensibilidad predeterminada).

Ventajas estratégicas

  1. La estrategia combina los dos elementos más confiables en el análisis técnico: la forma de los precios y la resistencia de soporte, lo que mejora la confiabilidad de las señales de negociación
  2. El soporte de resistencia, calculado dinámicamente, se adapta a los cambios en las condiciones del mercado
  3. La adopción de medidas estrictas de gestión de fondos y control de riesgos para evitar retiros masivos
  4. La lógica de la estrategia es clara, los parámetros son ajustables y son fáciles de optimizar según las diferentes condiciones del mercado
  5. Las señales de entrada son claras, sin ingredientes de juicio subjetivo, adecuadas para el comercio automatizado

Riesgo estratégico

  1. La efectividad de las resistencias de soporte puede disminuir en mercados altamente volátiles
  2. La posición de parada es relativamente lejana (<16%) y puede sufrir grandes pérdidas en situaciones extremas.
  3. La configuración de los parámetros de sensibilidad tiene un impacto importante en la frecuencia y la precisión de las transacciones
  4. Dependiendo solo de la forma de los precios, se pueden perder otras señales importantes del mercado
  5. Es necesario considerar el impacto de los costos de transacción en los retornos de la estrategia

Dirección de optimización de la estrategia

  1. Introducción del volumen de tráfico como indicador de confirmación auxiliar para mejorar la fiabilidad de la señal
  2. Desarrollo de parámetros de sensibilidad adaptativos que se ajusten a las dinámicas de la volatilidad del mercado
  3. Optimice la configuración de stop loss, y considere el uso de stop loss móvil o stop loss por etapas
  4. Aumentar los filtros de tendencia para evitar inversiones en una tendencia fuerte
  5. Desarrollo de un sistema de gestión de posiciones dinámicas para ajustar el tamaño de las transacciones según las condiciones del mercado

Resumir

Esta estrategia de negociación basada en el comportamiento de los precios ofrece a los comerciantes un método de negociación sistematizado mediante la combinación de soporte dinámico y resistencia y la forma clásica de reversión. La estrategia tiene la ventaja de tener una claridad lógica y un riesgo controlado, pero aún así necesita una optimización continua en función del efecto de la negociación real. Se recomienda a los comerciantes que realicen una adecuada retroalimentación y optimización de los parámetros antes de su uso en el mundo real, y que realicen un ajuste personalizado de la estrategia en combinación con la experiencia del mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-03 00:00:00
period: 1h
basePeriod: 1h
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=5
strategy("Price Action Strategy", overlay=true)

// Settings
length = input.int(16, title="Support and Resistance Length")
sensitivity = input.float(0.018, title="Sensitivity")

// Stop Loss and Take Profit
stop_loss_pct = input.float(16, title="Stop Loss percentage", minval=0.1) / 100
take_profit_pct = input.float(9.5, title="Take Profit percentage", minval=0.1) / 100

// Function to identify a Hammer
isHammer() =>
    body = close - open
    price_range = high - low
    lower_shadow = open - low
    upper_shadow = high - close
    body > 0 and lower_shadow > body * 2 and upper_shadow < body * 0.5 and price_range > 0

// Function to identify a Shooting Star
isShootingStar() =>
    body = open - close
    price_range = high - low
    lower_shadow = close - low
    upper_shadow = high - open
    body > 0 and upper_shadow > body * 2 and lower_shadow < body * 0.5 and price_range > 0

// Function to identify a Doji
isDoji() =>
    body = close - open
    price_range = high - low
    math.abs(body) < (price_range * 0.1)  // Doji has a small body

// Function to identify a Pin Bar
isPinBar() =>
    body = close - open
    price_range = high - low
    lower_shadow = open - low
    upper_shadow = high - close
    (upper_shadow > body * 2 and lower_shadow < body * 0.5) or (lower_shadow > body * 2 and upper_shadow < body * 0.5)

// Support and resistance levels 
support = ta.lowest(low, length)
resistance = ta.highest(high, length)

// Entry criteria
long_condition = (isHammer() or isDoji() or isPinBar()) and close <= support * (1 + sensitivity)
short_condition = (isShootingStar() or isDoji() or isPinBar()) and close >= resistance * (1 - sensitivity)

// Function to calculate stop loss and take profit (long)
calculate_levels(position_size, avg_price, stop_loss_pct, take_profit_pct) =>
    stop_loss_level = avg_price * (1 - stop_loss_pct)
    take_profit_level = avg_price * (1 + take_profit_pct)
    [stop_loss_level, take_profit_level]

// Function to calculate stop loss and take profit (short)
calculate_levels_short(position_size, avg_price, stop_loss_pct, take_profit_pct) =>
    stop_loss_level = avg_price * (1 + stop_loss_pct)
    take_profit_level = avg_price * (1 - take_profit_pct)
    [stop_loss_level, take_profit_level]

// Buy entry order with label
if (long_condition and strategy.opentrades == 0)
    strategy.entry("Buy", strategy.long)
    pattern = isHammer() ? "Hammer" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : ""
    label.new(x=bar_index, y=low, text=pattern, color=color.green, textcolor=color.black, size=size.small)

// Sell entry order with label
if (short_condition and strategy.opentrades == 0)
    strategy.entry("Sell", strategy.short)
    pattern = isShootingStar() ? "Shooting Star" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : ""
    label.new(x=bar_index, y=high, text=pattern, color=color.red, textcolor=color.black, size=size.small)

// Stop Loss and Take Profit management for open positions
if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // Long position
        avg_price_long = strategy.position_avg_price  // Average price of long position
        [long_stop_level, long_take_profit_level] = calculate_levels(strategy.position_size, avg_price_long, stop_loss_pct, take_profit_pct)
        strategy.exit("Exit Long", from_entry="Buy", stop=long_stop_level, limit=long_take_profit_level)
    if (strategy.position_size < 0)  // Short position
        avg_price_short = strategy.position_avg_price  // Average price of short position
        [short_stop_level, short_take_profit_level] = calculate_levels_short(strategy.position_size, avg_price_short, stop_loss_pct, take_profit_pct)
        strategy.exit("Exit Short", from_entry="Sell", stop=short_stop_level, limit=short_take_profit_level)

// Visualization of Support and Resistance Levels
plot(support, title="Support", color=color.green, linewidth=2)
plot(resistance, title="Resistance", color=color.red, linewidth=2)