Estrategia de seguimiento de tendencia de barra de elefante con ajuste dinámico de stop loss

SMA HAMMER RSI
Fecha de creación: 2025-01-17 16:24:18 Última modificación: 2025-01-17 16:24:18
Copiar: 4 Número de Visitas: 371
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencia de barra de elefante con ajuste dinámico de stop loss

Descripción general

Esta estrategia es un sistema de seguimiento de tendencias basado en el reconocimiento de patrones de barras, que captura principalmente los posibles puntos de inicio de tendencias mediante la identificación de “barras de elefante” en el mercado (es decir, barras de precios que son significativamente más grandes que el tamaño promedio). La característica principal de la estrategia es adoptar un plan de stop-loss ajustado dinámicamente, que ajusta de forma adaptativa la posición de stop-loss según el progreso del movimiento de precios, protegiendo así las ganancias existentes y dando a los precios suficiente espacio para las fluctuaciones.

Principio de estrategia

El funcionamiento de la estrategia se basa en los siguientes pasos clave:

  1. Calcular el tamaño promedio de las barras en el último período específico como valor de referencia
  2. Identifique si la columna actual cumple con las características de la “columna de elefante”:
    • El tamaño de la columna es significativamente mayor que el promedio (múltiplo configurable)
    • El precio de cierre está dentro de un cierto rango porcentual del máximo y el mínimo.
    • O cumple con las características del patrón de martillo/martillo invertido.
  3. Determinar la dirección comercial en función de la dirección de la columna del elefante.
  4. Establecer un stop loss inicial y un objetivo de ganancias
  5. A medida que el precio se mueve en una dirección favorable, ajuste dinámicamente la posición de stop loss:
    • Mueva el stop loss por encima de la línea de costo cuando se alcance el objetivo del 60 %
    • Ajuste aún más el stop loss al alcanzar el objetivo del 80 %
    • Cuando se alcanza el objetivo del 90%, el stop loss se ajusta significativamente y el objetivo de ganancias se ajusta.

Ventajas estratégicas

  1. Gestión dinámica de riesgos: al ajustar dinámicamente la posición de stop loss, la estrategia puede proteger las ganancias y al mismo tiempo darle a la tendencia espacio para desarrollarse completamente.
  2. Flexibilidad en el reconocimiento de patrones: Además de la tradicional barra de elefante, también incluye el reconocimiento de patrones especiales como líneas de martillo.
  3. Fuerte capacidad de ajuste de parámetros: los parámetros clave como los múltiplos del tamaño de la columna, el porcentaje objetivo, etc. se pueden ajustar de manera flexible según las características del mercado.
  4. Relación riesgo-rendimiento razonable: el stop loss inicial es relativamente conservador, pero se ajusta dinámicamente a medida que se desarrolla la tendencia para obtener mayores retornos.

Riesgo estratégico

  1. Riesgo de ruptura falsa: el patrón de columna de elefante puede tener una ruptura falsa, por lo que es necesario establecer las condiciones de filtrado de manera razonable.
  2. Riesgo de mercado volátil: el stop loss puede activarse con frecuencia en un mercado lateral y volátil.
  3. Riesgo de ajuste del stop loss: un ajuste del stop loss demasiado agresivo puede provocar una salida anticipada
  4. Sensibilidad de los parámetros: el efecto de la estrategia es sensible a la configuración de los parámetros y requiere pruebas suficientes.

Dirección de optimización de la estrategia

  1. Añadir filtro de entorno de mercado:
    • Agregue indicadores de tendencia para identificar el entorno actual del mercado
    • Utilice diferentes configuraciones de parámetros en diferentes entornos de mercado
  2. Mejorar el mecanismo de stop loss:
    • Presentamos el Trailing Stop
    • Ajuste dinámico de la distancia de stop loss en función de la volatilidad
  3. Optimizar el tiempo de entrada:
    • Combinado con indicadores de volumen
    • Se agregó señal de confirmación de reversión
  4. Mejora de la obtención de beneficios:
    • Lograr una salida de beneficios parcial
    • Ajuste dinámicamente los objetivos de ganancias en función de la estructura del mercado

Resumir

Esta estrategia rastrea eficazmente las tendencias identificando patrones de precios clave en el mercado y adoptando un enfoque dinámico de gestión de riesgos. La principal ventaja de la estrategia radica en su mecanismo de gestión de stop loss adaptativo, que puede aprovechar plenamente las oportunidades de tendencia y al mismo tiempo proteger las ganancias. Al optimizar aún más los mecanismos de identificación del entorno de mercado y de gestión de riesgos, se espera que la estrategia logre un desempeño estable en diferentes entornos de mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-12-17 00:00:00
end: 2025-01-16 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Estratégia Barra Elefante com Stop Dinâmico", overlay=true)

// Parâmetros configuráveis
num_barras = input.int(15, title="Número de Barras para Média", minval=1, maxval=100)
percentual_fechamento_valido = input.float(10, title="Percentual do Máximo de Pavio (%)", minval=1, maxval=100)
percentual_condicao_tamanho = input.float(1.8, title="Multiplicador do Tamanho Médio da Barra", minval=0.1, step=0.1)
percentual_lucro = input.float(1.8, title="% de Lucro do Alvo ref. Tam. da Barra", minval=0.1, step=0.1)

var bool executou_entrada = false

// Calcula o tamanho de cada barra
barra_tamanho = math.abs(close - open)

// Calcula a média do tamanho das últimas 'num_barras' barras
media_tamanho = ta.sma(barra_tamanho, num_barras)

// Definição das variáveis para o corpo do candle, sombra superior e sombra inferior
corpo = barra_tamanho
sombra_superior = high - math.max(close, open)
sombra_inferior = math.min(close, open) - low

// Condições para verificar se a sombra é pelo menos 2x maior que o corpo
sombra_sup_maior = sombra_superior >= 2 * corpo
sombra_inf_maior = sombra_inferior >= 2 * corpo

// Define a relação mínima entre a sombra e o corpo
relacao_minima = 2.0

fechamento_valido = ((close >= high - (percentual_fechamento_valido / 100) * (high - low)) or (close <= low + (percentual_fechamento_valido / 100) * (high - low)))

// Condição para verificar se o fechamento está próximo da máxima ou mínima
fechamento_proximo_max = close >= (high - (high - low) * 0.1)  // Fechamento nos 20% superiores
fechamento_proximo_min = close <= (low + (high - low) * 0.1)   // Fechamento nos 20% inferiores

// definição de candle martelo
eh_martelo = (sombra_sup_maior and fechamento_proximo_max) and (math.abs(high - low) > 1.5*media_tamanho)
eh_martelo_invertido = (sombra_inf_maior and fechamento_proximo_min) and (math.abs(low - high) > 1.5*media_tamanho)

// Compara o tamanho da barra atual com a média usando o percentual configurável
condicao_tamanho = (barra_tamanho > percentual_condicao_tamanho * media_tamanho) and (fechamento_valido or (eh_martelo or eh_martelo_invertido))

// Variáveis para entrada
comprar_condicao = (condicao_tamanho and close > open)
vender_condicao = (condicao_tamanho and close < open)

// Stop Loss inicial
stop_loss_compra = low[1] + (barra_tamanho / 5)  // Para compra, stop é na mínima do candle anterior ajustado
stop_loss_venda = high[1] - (barra_tamanho / 5) // Para venda, stop é na máxima do candle anterior ajustado

// Take Profit inicial (multiplicador configurado)
take_profit_compra = close + percentual_lucro * barra_tamanho
take_profit_venda = close - percentual_lucro * barra_tamanho

// Variáveis para controle do progresso do preço
lucro_alvo_60 = close + 0.6 * (take_profit_compra - close)  // 60% do alvo
lucro_alvo_80 = close + 0.8 * (take_profit_compra - close)  // 80% do alvo
lucro_alvo_90 = close + 0.9 * (take_profit_compra - close)  // 90% do alvo

// Ajustes dinâmicos do Stop Loss e Alvo
if (strategy.position_size > 0)  // Para compras
    if (high >= lucro_alvo_60)
        stop_loss_compra := close + 0.1 * barra_tamanho  // Ajusta Stop para 10% acima da entrada
    if (high >= lucro_alvo_80)
        stop_loss_compra := close + 0.5 * barra_tamanho  // Ajusta Stop para 50% acima da entrada
    if (high >= lucro_alvo_90)
        stop_loss_compra := close + 0.8 * barra_tamanho  // Ajusta Stop para 80% acima da entrada
        take_profit_compra := close + 0.5 * barra_tamanho  // Ajusta Alvo para +50% do último fechamento

if (strategy.position_size < 0)  // Para vendas
    if (low <= lucro_alvo_60)
        stop_loss_venda := close - 0.1 * barra_tamanho  // Ajusta Stop para 10% abaixo da entrada
    if (low <= lucro_alvo_80)
        stop_loss_venda := close - 0.5 * barra_tamanho  // Ajusta Stop para 50% abaixo da entrada
    if (low <= lucro_alvo_90)
        stop_loss_venda := close - 0.8 * barra_tamanho  // Ajusta Stop para 80% abaixo da entrada
        take_profit_venda := close - 0.5 * barra_tamanho  // Ajusta Alvo para -50% do último fechamento

// Executando as ordens de compra e venda
if (not executou_entrada) and (comprar_condicao)
    strategy.entry("Compra", strategy.long)
    strategy.exit("Stop Compra", "Compra", stop=stop_loss_compra, limit=take_profit_compra)
    executou_entrada := true  // Marca que a entrada foi feita

if (not executou_entrada) and (vender_condicao)
    strategy.entry("Venda", strategy.short)
    strategy.exit("Stop Venda", "Venda", stop=stop_loss_venda, limit=take_profit_venda)
    executou_entrada := true  // Marca que a entrada foi feita

// Para visualização, vamos colorir as barras
barcolor(comprar_condicao ? color.rgb(14, 255, 22) : na)
barcolor(vender_condicao ? #d606ff : na)
bgcolor((eh_martelo) ? color.new(color.green, 60) : na)
bgcolor((eh_martelo_invertido) ? color.new(color.red, 60) : na)

// Reseta o controle de execução no início de cada nova barra
if barstate.isnew
    executou_entrada := false