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

Ajuste dinámico de stop-loss Tendencia de la barra de elefante Siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2025-01-17 16:24:18
Las etiquetas:La SMAEl martilloIndicador de riesgo

 Dynamic Stop-Loss Adjustment Elephant Bar Trend Following Strategy

Resumen general

Esta estrategia es un sistema de seguimiento de tendencias basado en el reconocimiento de patrones de barras, identificando principalmente barras de elefante (barras de precios significativamente más grandes que el promedio) para capturar puntos de inicio de tendencia potenciales.

Principios de estrategia

La estrategia se basa en los siguientes pasos clave: 1. Calcular el tamaño medio de la barra durante un período específico como referencia 2. Identifique si la barra actual cumple con las características de la barra del elefante: - Tamaño de barra significativamente superior a la media (multiplicador configurable) - Precio de cierre dentro del intervalo porcentual específico de alto/bajo - O coincide con los patrones de martillo / martillo invertido 3. Determine la dirección del comercio basado en la dirección de la barra del elefante 4. Establezca objetivos iniciales de stop-loss y ganancias 5. Ajuste dinámico de stop-loss a medida que el precio se mueve favorablemente: - Mover el stop-loss por encima del costo al alcanzar el objetivo del 60% - Seguir ajustando el stop-loss a un objetivo del 80% - Aumentar significativamente el stop-loss y ajustar el objetivo de ganancias al objetivo del 90%

Ventajas estratégicas

  1. Gestión dinámica del riesgo: protege las ganancias al tiempo que permite que las tendencias se desarrollen mediante un ajuste dinámico del stop-loss
  2. Flexibilidad de reconocimiento de patrones: incluye patrones especiales como líneas de martillo más allá de las barras tradicionales de elefante
  3. Gran adaptabilidad de los parámetros: los parámetros clave como el multiplicador de tamaño de barra y los porcentajes objetivo pueden ajustarse a las características del mercado
  4. Se considerará que el riesgo de pérdida inicial no es superior al riesgo de pérdida inicial.

Riesgos estratégicos

  1. Riesgo de fuga falsa: los patrones de barras de elefante pueden producir fuga falsa que requieren condiciones de filtración adecuadas
  2. El riesgo de mercado variado: en los mercados laterales pueden desencadenarse frecuentes pérdidas de parada.
  3. El riesgo de ajuste de suspensión: los ajustes agresivos de suspensión de pérdidas pueden dar lugar a salidas prematuras.
  4. Sensibilidad a los parámetros: la eficacia de la estrategia es sensible a la configuración de los parámetros, lo que requiere pruebas exhaustivas

Direcciones de optimización

  1. Filtración mejorada del entorno de mercado:
    • Añadir indicadores de tendencia para identificar las condiciones actuales del mercado
    • Aplicar diferentes ajustes de parámetros en diferentes entornos de mercado
  2. Mejorado el mecanismo de stop-loss:
    • Incorporar las paradas de seguimiento
    • Ajuste dinámico de las distancias de parada en función de la volatilidad
  3. Tiempo de entrada optimizado:
    • Indicadores de volumen integrados
    • Añadir señales de confirmación de inversión
  4. Enfoque mejorado de la obtención de beneficios:
    • Implementar salidas parciales de beneficios
    • Ajuste dinámico de los objetivos de utilidad en función de la estructura del mercado

Resumen de las actividades

La estrategia realiza un seguimiento eficaz de las tendencias a través de la identificación de patrones clave de precios y la gestión dinámica de riesgos. Su principal ventaja radica en el mecanismo de gestión de stop-loss adaptativo, que protege las ganancias al tiempo que maximiza las oportunidades de tendencia.


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

Relacionados

Más.