Tài nguyên đang được tải lên... tải...

Điều chỉnh dừng lỗ động xu hướng thanh voi theo chiến lược

Tác giả:ChaoZhang, Ngày: 2025-01-17 16:24:18
Tags:SMAĐáRSI

 Dynamic Stop-Loss Adjustment Elephant Bar Trend Following Strategy

Tổng quan

Chiến lược này là một hệ thống theo xu hướng dựa trên nhận dạng mô hình thanh, chủ yếu xác định các thanh voi (các thanh giá lớn hơn đáng kể so với mức trung bình) để nắm bắt các điểm bắt đầu xu hướng tiềm năng.

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

Chiến lược hoạt động dựa trên các bước chính sau: 1. Tính toán kích thước thanh trung bình trong một khoảng thời gian cụ thể như một điểm chuẩn 2. Xác định xem thanh hiện tại có đáp ứng các đặc điểm của thanh voi không: - kích thước thanh vượt quá đáng kể trung bình (được cấu hình nhân) - Giá đóng trong phạm vi tỷ lệ phần trăm cụ thể của cao / thấp - Hoặc phù hợp với mô hình búa / búa đảo ngược 3. Xác định hướng giao dịch dựa trên hướng thanh voi 4. Đặt mục tiêu dừng lỗ và lợi nhuận ban đầu 5. Điều chỉnh động stop-loss khi giá di chuyển thuận lợi: - Di chuyển dừng lỗ trên chi phí khi đạt được 60% mục tiêu - Cắt chặt thêm stop-loss ở mục tiêu 80% - Tắt chặt đáng kể dừng lỗ và điều chỉnh mục tiêu lợi nhuận ở mục tiêu 90%

Ưu điểm chiến lược

  1. Quản lý rủi ro năng động: Bảo vệ lợi nhuận trong khi cho phép xu hướng phát triển thông qua điều chỉnh dừng lỗ năng động
  2. Độ linh hoạt nhận dạng mẫu: Bao gồm các mẫu đặc biệt như đường búa ngoài các thanh voi truyền thống
  3. Khả năng thích nghi các thông số mạnh mẽ: Các thông số chính như nhân kích thước thanh và tỷ lệ phần trăm mục tiêu có thể được điều chỉnh theo đặc điểm thị trường
  4. Tỷ lệ rủi ro/lợi nhuận hợp lý: Stop-loss ban đầu bảo thủ với điều chỉnh năng động cho lợi nhuận lớn hơn khi phát triển xu hướng

Rủi ro chiến lược

  1. Nguy cơ đột phá sai: Mô hình thanh voi có thể tạo ra đột phá sai đòi hỏi điều kiện lọc thích hợp
  2. Rủi ro thị trường dao động: Rủi ro dừng lỗ thường xuyên có thể được kích hoạt trong các thị trường bên cạnh
  3. Rủi ro điều chỉnh dừng: Điều chỉnh dừng lỗ tích cực có thể dẫn đến thoát sớm
  4. Độ nhạy của các tham số: Hiệu quả của chiến lược rất nhạy cảm với các cài đặt tham số, đòi hỏi phải thử nghiệm kỹ lưỡng

Hướng dẫn tối ưu hóa

  1. Bộ lọc môi trường thị trường nâng cao:
    • Thêm các chỉ số xu hướng để xác định điều kiện thị trường hiện tại
    • Áp 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ơ chế dừng lỗ được cải thiện:
    • Bao gồm các điểm dừng
    • Điều chỉnh năng động khoảng cách dừng dựa trên biến động
  3. Thời gian vào tối ưu:
    • Tích hợp các chỉ số khối lượng
    • Thêm tín hiệu xác nhận đảo ngược
  4. Cách tiếp cận lợi nhuận tăng cường:
    • Thực hiện việc thoát lợi nhuận một phần
    • Điều chỉnh năng động các mục tiêu lợi nhuận dựa trên cấu trúc thị trường

Tóm lại

Chiến lược theo dõi hiệu quả xu hướng thông qua việc xác định các mô hình giá chính và quản lý rủi ro năng động. Ưu điểm chính của nó nằm trong cơ chế quản lý dừng lỗ thích nghi, bảo vệ lợi nhuận trong khi tối đa hóa cơ hội xu hướng.


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

Có liên quan

Thêm nữa