Chiến lược theo dõi xu hướng Elephant Bar với điều chỉnh dừng lỗ động

SMA HAMMER RSI
Ngày tạo: 2025-01-17 16:24:18 sửa đổi lần cuối: 2025-01-17 16:24:18
sao chép: 4 Số nhấp chuột: 371
1
tập trung vào
1617
Người theo dõi

Chiến lược theo dõi xu hướng Elephant Bar với điều chỉnh dừng lỗ động

Tổng quan

Chiến lược này là một hệ thống theo dõi xu hướng dựa trên nhận dạng mẫu thanh, chủ yếu nắm bắt các điểm bắt đầu xu hướng tiềm năng bằng cách xác định “thanh voi” trên thị trường (tức là thanh giá lớn hơn đáng kể so với kích thước trung bình). Đặc điểm cốt lõi của chiến lược này là áp dụng kế hoạch dừng lỗ được điều chỉnh linh hoạt, điều chỉnh vị thế dừng lỗ một cách thích ứng theo diễn biến giá, qua đó bảo vệ lợi nhuận hiện có và tạo đủ không gian cho giá biến động.

Nguyên tắc chiến lược

Việc thực hiện chiến lược dựa trên các bước chính sau:

  1. Tính kích thước trung bình của các thanh trong giai đoạn cụ thể trước đây làm giá trị chuẩn
  2. Xác định xem cột hiện tại có đáp ứng các đặc điểm của “cột voi” hay không:
    • Kích thước cột cao hơn đáng kể so với mức trung bình (có thể cấu hình nhiều lần)
    • Giá đóng cửa nằm trong phạm vi phần trăm nhất định của giá cao và giá thấp
    • Hoặc nó đáp ứng các đặc điểm của mô hình búa/búa ngược
  3. Xác định hướng giao dịch dựa trên hướng của cột voi
  4. Đặt mục tiêu dừng lỗ và lợi nhuận ban đầu
  5. Khi giá di chuyển theo hướng thuận lợi, hãy điều chỉnh vị trí dừng lỗ một cách linh hoạt:
    • Di chuyển mức dừng lỗ lên trên đường chi phí khi mục tiêu 60% đạt được
    • Thắt chặt hơn nữa lệnh dừng lỗ khi đạt mục tiêu 80%
    • Khi mục tiêu 90% đạt được, lệnh dừng lỗ được thắt chặt đáng kể và mục tiêu lợi nhuận được điều chỉnh

Lợi thế chiến lược

  1. Quản lý rủi ro động: Bằng cách điều chỉnh vị thế dừng lỗ một cách linh hoạt, chiến lược này có thể bảo vệ lợi nhuận trong khi vẫn tạo điều kiện cho xu hướng phát triển toàn diện.
  2. Tính linh hoạt trong nhận dạng mẫu: Ngoài thanh voi truyền thống, nó còn bao gồm khả năng nhận dạng các mẫu đặc biệt như đường búa
  3. Khả năng điều chỉnh thông số mạnh mẽ: các thông số chính như bội số kích thước cột, tỷ lệ phần trăm mục tiêu, v.v. có thể được điều chỉnh linh hoạt theo đặc điểm thị trường
  4. Tỷ lệ rủi ro-lợi nhuận hợp lý: mức dừng lỗ ban đầu tương đối bảo thủ, nhưng được điều chỉnh linh hoạt khi xu hướng phát triển để có được lợi nhuận lớn hơn

Rủi ro chiến lược

  1. Rủi ro đột phá sai: Mô hình cột voi có thể có đột phá sai, do đó cần thiết lập các điều kiện lọc hợp lý.
  2. Rủi ro thị trường biến động: Lệnh dừng lỗ có thể được kích hoạt thường xuyên trong thị trường đi ngang và biến động
  3. Rủi ro điều chỉnh dừng lỗ: Điều chỉnh dừng lỗ quá mức có thể dẫn đến thoát lệnh sớm
  4. Độ nhạy của tham số: Hiệu ứng của chiến lược nhạy cảm với các cài đặt tham số và đòi hỏi phải thử nghiệm đầy đủ.

Hướng tối ưu hóa chiến lược

  1. Thêm bộ lọc môi trường thị trường:
    • Thêm các chỉ báo xu hướng để xác định môi trường thị trường hiện tại
    • Sử dụng các thiết lập tham số khác nhau trong các môi trường thị trường khác nhau
  2. Cải thiện cơ chế dừng lỗ:
    • Giới thiệu lệnh Trailing Stop
    • Điều chỉnh khoảng cách dừng lỗ một cách linh hoạt dựa trên sự biến động
  3. Tối ưu thời gian nhập cảnh:
    • Kết hợp với các chỉ số khối lượng
    • Đã thêm tín hiệu xác nhận đảo ngược
  4. Cải thiện lợi nhuận:
    • Đạt được lợi nhuận thoát một phần
    • Điều chỉnh mục tiêu lợi nhuận một cách năng động dựa trên cơ cấu thị trường

Tóm tắt

Chiến lược này theo dõi hiệu quả các xu hướng bằng cách xác định các mô hình giá chính trên thị trường và áp dụng phương pháp quản lý rủi ro năng động. Ưu điểm cốt lõi của chiến lược này nằm ở cơ chế quản lý dừng lỗ thích ứng, có thể nắm bắt hoàn toàn các cơ hội theo xu hướng đồng thời bảo vệ lợi nhuận. Bằng cách tối ưu hóa hơn nữa cơ chế xác định môi trường thị trường và quản lý rủi ro, chiến lược này dự kiến ​​sẽ đạt được hiệu suất ổn định trong các môi trường thị trường khác nhau.

Mã nguồn chiến lược
/*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