Sumber daya yang dimuat... Pemuatan...

Pengaturan Stop-Loss Dinamis Trend Elephant Bar Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2025-01-17 16:24:18
Tag:SMAHammerRSI

 Dynamic Stop-Loss Adjustment Elephant Bar Trend Following Strategy

Gambaran umum

Strategi ini adalah sistem trend following yang didasarkan pada pengakuan pola bar, terutama mengidentifikasi elephant bars (bar harga yang jauh lebih besar dari rata-rata) untuk menangkap titik awal tren potensial. Fitur utama strategi ini adalah skema penyesuaian stop-loss dinamis, yang secara adaptif memodifikasi posisi stop-loss berdasarkan kemajuan pergerakan harga, melindungi keuntungan dan memungkinkan fleksibilitas harga yang cukup.

Prinsip Strategi

Strategi ini beroperasi berdasarkan langkah-langkah utama berikut: 1. Menghitung ukuran bar rata-rata selama periode tertentu sebagai patokan 2. Mengidentifikasi apakah bar saat ini memenuhi karakteristik elephant bar: - ukuran bar secara signifikan melebihi rata-rata (multiplikator yang dapat dikonfigurasi) - Harga penutupan dalam rentang persentase tertentu tinggi/rendah - Atau cocok pola palu/palu terbalik 3. Menentukan arah perdagangan berdasarkan arah gajah bar 4. Tetapkan target stop-loss dan keuntungan awal 5. Sesuaikan stop-loss secara dinamis saat harga bergerak menguntungkan: - Pindahkan stop loss di atas biaya saat mencapai target 60% - Lebih ketat stop loss pada target 80% - Meningkatkan secara signifikan stop-loss dan menyesuaikan target keuntungan pada target 90%

Keuntungan Strategi

  1. Manajemen risiko dinamis: Melindungi keuntungan sambil memungkinkan tren berkembang melalui penyesuaian stop-loss dinamis
  2. Fleksibilitas pengenalan pola: Termasuk pola khusus seperti garis palu di luar tongkat gajah tradisional
  3. Adaptifitas parameter yang kuat: Parameter utama seperti pengganda ukuran bar dan persentase target dapat disesuaikan dengan karakteristik pasar
  4. Rasio risiko-manfaat yang wajar: Stop-loss awal yang konservatif dengan penyesuaian dinamis untuk keuntungan yang lebih besar seiring perkembangan tren

Risiko Strategi

  1. Risiko pecah palsu: Pola batang gajah dapat menghasilkan pecah palsu yang membutuhkan kondisi penyaringan yang tepat
  2. Risiko pasar berkisar: Stop-loss yang sering dapat dipicu di pasar sampingan
  3. Risiko penyesuaian stop loss: penyesuaian stop loss yang agresif dapat menyebabkan keluar yang lebih dini
  4. Sensitivitas parameter: Efektivitas strategi sensitif terhadap pengaturan parameter, yang membutuhkan pengujian menyeluruh

Arahan Optimasi

  1. Penyaringan lingkungan pasar yang ditingkatkan:
    • Tambahkan indikator tren untuk mengidentifikasi kondisi pasar saat ini
    • Menerapkan pengaturan parameter yang berbeda dalam lingkungan pasar yang berbeda
  2. Memperbaiki mekanisme stop loss:
    • Masukkan trailing stop
    • Mengatur jarak berhenti secara dinamis berdasarkan volatilitas
  3. Waktu masuk yang dioptimalkan:
    • Mengintegrasikan indikator volume
    • Tambahkan sinyal konfirmasi pembalikan
  4. Pendekatan peningkatan keuntungan:
    • Menerapkan keluar keuntungan parsial
    • Sesuaikan secara dinamis target laba berdasarkan struktur pasar

Ringkasan

Strategi ini secara efektif melacak tren melalui identifikasi pola harga utama dan manajemen risiko dinamis. Keuntungannya utama terletak pada mekanisme manajemen stop-loss adaptif, yang melindungi keuntungan sambil memaksimalkan peluang tren. Optimalisasi lebih lanjut dari pengakuan lingkungan pasar dan mekanisme manajemen risiko menunjukkan janji untuk kinerja yang konsisten di berbagai kondisi pasar.


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

Berkaitan

Lebih banyak