동적 손절매 조정을 통한 Elephant Bar 추세 추종 전략

SMA HAMMER RSI
생성 날짜: 2025-01-17 16:24:18 마지막으로 수정됨: 2025-01-17 16:24:18
복사: 4 클릭수: 371
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

동적 손절매 조정을 통한 Elephant Bar 추세 추종 전략

개요

이 전략은 막대 패턴 인식을 기반으로 하는 추세 추적 시스템으로, 주로 시장에서 “엘리펀트 막대”(즉, 평균 크기보다 상당히 큰 가격 막대)를 식별하여 잠재적인 추세 시작점을 포착합니다. 이 전략의 핵심 특징은 동적으로 조정되는 손절매 계획을 채택하여 가격 변동의 진행에 따라 손절매 포지션을 적응적으로 조정함으로써 기존 수익을 보호하고 가격에 충분한 변동 여지를 제공하는 것입니다.

전략 원칙

이 전략은 다음과 같은 핵심 단계를 기반으로 운영됩니다.

  1. 과거 특정 기간 동안의 막대의 평균 크기를 벤치마크 값으로 계산합니다.
  2. 현재 열이 “코끼리 열” 특성을 충족하는지 확인하십시오.
    • 열 크기가 평균보다 상당히 큽니다(구성 가능한 배수)
    • 종가는 최고가와 최저가의 일정비율 범위 내에 있습니다.
    • 또는 망치/역망치 패턴의 특성을 충족합니다.
  3. 코끼리 기둥의 방향을 기준으로 거래 방향을 결정하세요.
  4. 초기 손절매 및 이익 목표 설정
  5. 가격이 유리한 방향으로 움직이면 손절매 포지션을 동적으로 조정합니다.
    • 60% 목표에 도달하면 손절매를 비용선 위로 이동합니다.
    • 목표치의 80%에 도달하면 손절매를 더욱 강화하세요.
    • 90% 목표 달성 시 손절매 폭이 대폭 축소되고 이익 목표도 조정된다.

전략적 이점

  1. 동적 위험 관리: 손절매 포지션을 동적으로 조정함으로써 이 전략은 수익을 보호하면서도 추세가 완전히 발전할 수 있는 여지를 제공합니다.
  2. 패턴 인식의 유연성: 기존의 엘리펀트 바 외에도 해머 라인과 같은 특수 패턴 인식도 포함됩니다.
  3. 강력한 매개변수 조정성: 컬럼 크기 배수, 목표 비율 등과 같은 주요 매개변수는 시장 특성에 따라 유연하게 조정될 수 있습니다.
  4. 합리적인 위험-수익률: 초기 손실 제한은 비교적 보수적이지만 추세가 발전함에 따라 더 큰 수익을 얻기 위해 동적으로 조정됩니다.

전략적 위험

  1. 거짓 브레이크아웃 위험: 엘리펀트 컬럼 패턴은 거짓 브레이크아웃이 발생할 수 있으므로 필터링 조건을 합리적으로 설정하는 것이 필요합니다.
  2. 변동성 있는 시장의 위험: 횡보 및 변동성 있는 시장에서는 손절매가 자주 발생할 수 있습니다.
  3. 손절매 조정 위험: 지나치게 공격적인 손절매 조정은 조기 종료로 이어질 수 있습니다.
  4. 매개변수 민감도: 전략의 효과는 매개변수 설정에 민감하며 충분한 테스트가 필요합니다.

전략 최적화 방향

  1. 시장 환경 필터 추가:
    • 현재 시장 환경을 파악하기 위해 추세 지표 추가
    • 다양한 시장 환경에서 다양한 매개변수 설정을 사용합니다.
  2. 손절매 메커니즘 개선:
    • Trailing Stop 소개
    • 변동성에 따라 손절매 거리를 동적으로 조정합니다.
  3. 진입 타이밍 최적화:
    • 볼륨 지표와 결합
    • 반전 확인 신호 추가
  4. 수익 창출 개선:
    • 부분적 이익 실현
    • 시장 구조에 따라 동적으로 이익 목표를 조정합니다.

요약하다

이 전략은 시장의 주요 가격 패턴을 파악하고 역동적인 위험 관리 접근 방식을 채택하여 추세를 효과적으로 추적합니다. 이 전략의 핵심 장점은 추세 기회를 완전히 파악하는 동시에 수익을 보호할 수 있는 적응형 손절매 관리 메커니즘에 있습니다. 시장 환경 식별과 위험 관리 메커니즘을 더욱 최적화함으로써, 이 전략은 다양한 시장 환경에서 안정적인 성과를 달성할 것으로 기대됩니다.

전략 소스 코드
/*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