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

Sistema de negociación de acción de precios de soporte dinámico de resistencia

El autor:¿ Qué pasa?, Fecha: 2024-12-04 15:19:00
Las etiquetas:El número de personasEl PA

img

Resumen general

Esta estrategia es un sistema de negociación basado en la acción del precio y los niveles dinámicos de soporte/resistencia, ejecutando operaciones cerca de los niveles clave de precios cuando surgen patrones específicos de velas. El sistema utiliza un método de cálculo de soporte/resistencia dinámico de 16 períodos, combinado con cuatro patrones clásicos de velas de reversión - Martillo, Estrella de Disparos, Doji y Pin Bar para capturar posibles reversiones del mercado. La estrategia emplea niveles fijos de porcentaje de toma de ganancias y stop-loss para la gestión de riesgos y utiliza un parámetro de sensibilidad para controlar el rigor de la señal de entrada.

Principios de estrategia

El núcleo de la estrategia radica en el cálculo dinámico de los niveles de soporte y resistencia para establecer los límites del movimiento de precios. Cuando el precio se acerca a estos niveles clave, el sistema busca patrones de velas específicos como señales de inversión. Las condiciones de entrada requieren la formación de patrones dentro del 1,8% (sensibilidad predeterminada) de los niveles de soporte / resistencia. El sistema implementa una regla de gestión de acciones del 35% con un 16% de stop-loss y un 9,5% de take-profit, controlando efectivamente el riesgo en alrededor del 5,6% del capital total por operación.

Ventajas estratégicas

  1. Combina dos elementos más fiables del análisis técnico: patrones de precios y soporte/resistencia, mejorando la fiabilidad de la señal
  2. Utiliza niveles de soporte/resistencia calculados dinámicamente, adaptándose a las condiciones cambiantes del mercado
  3. Implementa estrictas medidas de gestión de fondos y control de riesgos para evitar retiros significativos
  4. Una lógica estratégica clara con parámetros ajustables, que facilita la optimización para las diferentes condiciones del mercado
  5. Indicadores de entrada claros sin juicio subjetivo, adecuados para operaciones automatizadas

Riesgos estratégicos

  1. La eficacia del soporte/resistencia puede disminuir en mercados altamente volátiles
  2. Las pérdidas de parada relativamente amplias (16%) pueden dar lugar a pérdidas significativas en condiciones volátiles
  3. La configuración de los parámetros de sensibilidad tiene un impacto significativo en la frecuencia y exactitud de las operaciones
  4. El hecho de basarse únicamente en los patrones de precios puede perder otras señales importantes del mercado
  5. Necesidad de considerar los costes de negociación impacto en los rendimientos de la estrategia

Direcciones de optimización

  1. Introducir el volumen como indicador de confirmación para mejorar la fiabilidad de la señal
  2. Desarrollar parámetros de sensibilidad adaptativa que se ajusten dinámicamente en función de la volatilidad del mercado
  3. Optimizar las configuraciones de stop-loss, considerar la implementación de trailing stops o planes escalonados de stop-loss
  4. Añadir filtros de tendencia para evitar operaciones de inversión durante tendencias fuertes
  5. Desarrollar un sistema dinámico de dimensionamiento de posiciones que ajuste el tamaño de las operaciones en función de las condiciones del mercado

Resumen de las actividades

Esta estrategia de negociación basada en la acción de precios proporciona a los operadores un enfoque de negociación sistemático mediante la combinación de niveles de soporte / resistencia dinámicos con patrones de reversión clásicos. Las fortalezas de la estrategia se encuentran en su lógica clara y riesgo controlable, aunque es necesaria una optimización continua basada en los resultados reales de negociación. Se aconseja a los operadores que realicen pruebas de retroceso y optimización de parámetros antes de negociar en vivo y personalicen la estrategia en función de la experiencia del mercado.


/*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)






Relacionados

Más.