Sumber dimuat naik... memuat...

Penyesuaian Stop-Loss Dinamis Trend Bar Gajah Mengikuti Strategi

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

 Dynamic Stop-Loss Adjustment Elephant Bar Trend Following Strategy

Ringkasan

Strategi ini adalah sistem mengikuti trend berdasarkan pengiktirafan corak bar, terutamanya mengenal pasti bar gajah (bar harga yang jauh lebih besar daripada purata) untuk menangkap titik permulaan trend yang berpotensi. Ciri utama strategi ini adalah skim pelarasan stop-loss dinamiknya, yang secara adaptif mengubah suai kedudukan stop-loss berdasarkan kemajuan pergerakan harga, kedua-dua melindungi keuntungan dan membolehkan fleksibiliti harga yang mencukupi.

Prinsip Strategi

Strategi ini beroperasi berdasarkan langkah-langkah utama berikut: 1. Hitung saiz bar purata dalam tempoh tertentu sebagai penanda aras 2. Mengenal pasti sama ada bar semasa memenuhi ciri gabar gajah: - Saiz bar secara ketara melebihi purata (pengganda yang boleh dikonfigurasikan) - Harga penutupan dalam julat peratusan tertentu tinggi/rendah - Atau sepadan dengan corak tukul / tukul terbalik 3. Menentukan arah perdagangan berdasarkan arah bar gajah 4. Tetapkan sasaran stop-loss dan keuntungan awal 5. Sesuaikan stop-loss secara dinamik apabila harga bergerak dengan baik: - Pindahkan stop-loss di atas kos apabila mencapai sasaran 60% - Tambah ketat stop-loss pada sasaran 80% - Meneguhkan stop-loss dan menyesuaikan sasaran keuntungan pada sasaran 90%

Kelebihan Strategi

  1. Pengurusan risiko dinamik: Melindungi keuntungan sambil membolehkan trend berkembang melalui penyesuaian stop-loss dinamik
  2. Fleksibiliti pengenalan corak: Termasuk corak khas seperti garisan tukul di luar bar gajah tradisional
  3. Kebolehsesuaian parameter yang kuat: Parameter utama seperti pengganda saiz bar dan peratusan sasaran boleh diselaraskan dengan ciri pasaran
  4. Rasio risiko-balasan yang munasabah: Stop-loss awal yang konservatif dengan penyesuaian dinamik untuk keuntungan yang lebih besar mengikut perkembangan trend

Risiko Strategi

  1. Risiko pecah palsu: corak batang gajah boleh menghasilkan pecah palsu yang memerlukan keadaan penapisan yang betul
  2. Risiko pasaran yang berkisar: Stop-loss yang kerap boleh dicetuskan di pasaran sampingan
  3. Risiko penyesuaian hentian: Penyesuaian hentian kerugian yang agresif boleh membawa kepada keluar awal.
  4. Sensitiviti parameter: Keberkesanan strategi sensitif kepada tetapan parameter, memerlukan ujian menyeluruh

Arahan pengoptimuman

  1. Penapisan persekitaran pasaran yang lebih baik:
    • Tambah penunjuk trend untuk mengenal pasti keadaan pasaran semasa
    • Menggunakan tetapan parameter yang berbeza dalam persekitaran pasaran yang berbeza
  2. Mempertingkatkan mekanisme stop-loss:
    • Masukkan hentian trailing
    • Sesuaikan jarak henti secara dinamik berdasarkan turun naik
  3. Masa kemasukan yang optimum:
    • Mengintegrasikan penunjuk jumlah
    • Tambah isyarat pengesahan pembalikan
  4. Pendekatan keuntungan yang dipertingkatkan:
    • Melaksanakan keluar keuntungan separa
    • Sesuaikan sasaran keuntungan secara dinamik berdasarkan struktur pasaran

Ringkasan

Strategi ini secara berkesan mengesan trend melalui pengenalan corak harga utama dan pengurusan risiko dinamik. Kelebihannya utama terletak pada mekanisme pengurusan stop-loss adaptif, yang melindungi keuntungan sambil memaksimumkan peluang trend. Pengoptimuman lebih lanjut pengiktirafan persekitaran pasaran dan mekanisme pengurusan risiko menunjukkan janji untuk prestasi yang konsisten dalam keadaan pasaran yang berbeza.


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