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.
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
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