Les ressources ont été chargées... Je charge...

Réglage dynamique de l'arrêt-perte

Auteur:ChaoZhang est là., Date: 2025-01-17 16h24 et 18h
Les étiquettes:SMALe marteauIndice de résistance

 Dynamic Stop-Loss Adjustment Elephant Bar Trend Following Strategy

Résumé

Cette stratégie est un système de suivi de tendance basé sur la reconnaissance de modèles de barres, identifiant principalement les barres éléphant (barres de prix significativement plus grandes que la moyenne) pour capturer les points d'initiation de tendance potentiels.

Principes de stratégie

La stratégie est basée sur les étapes clés suivantes: 1. Calculer la taille moyenne des barres sur une période donnée comme référence 2. Déterminez si la barre actuelle répond aux caractéristiques de la barre éléphant: - La taille de la barre dépasse sensiblement la moyenne (multiplicateur configurable) - Prix de clôture dans une fourchette de pourcentage spécifique de haut/bas - Ou correspond à des motifs de marteau / marteau inversé 3. Déterminez la direction du commerce en fonction de la direction de la barre de l'éléphant 4. Fixez des objectifs de stop-loss et de profit initiaux 5. Ajustez dynamiquement le stop-loss à mesure que le prix évolue favorablement: - Déplacer le stop-loss au-dessus du coût lorsque l'objectif de 60% est atteint - Resserrer encore le stop-loss à 80% - Resserrer considérablement le stop-loss et ajuster l'objectif de profit à 90%

Les avantages de la stratégie

  1. Gestion dynamique des risques: protège les bénéfices tout en permettant l'évolution des tendances grâce à un ajustement dynamique du stop-loss
  2. Flexibilité de la reconnaissance des motifs: inclut des motifs spéciaux tels que des lignes de marteau au-delà des barres d'éléphant traditionnelles
  3. Une forte adaptabilité des paramètres: les paramètres clés tels que le multiplicateur de taille de barre et les pourcentages cibles peuvent être ajustés aux caractéristiques du marché
  4. Ratio risque-rendement raisonnable: Stop-loss initial conservateur avec ajustement dynamique pour des gains plus importants au fur et à mesure de l'évolution des tendances

Risques stratégiques

  1. Risque de fausse rupture: les motifs de barres d'éléphant peuvent produire de fausses ruptures nécessitant des conditions de filtrage appropriées
  2. Risque de marché variable: des stop-loss fréquents peuvent être déclenchés sur les marchés latéraux
  3. Risque d'ajustement par arrêt: les ajustements agressifs par arrêt-perte peuvent entraîner des sorties prématurées
  4. Sensibilité aux paramètres: l'efficacité de la stratégie est sensible aux paramètres, ce qui nécessite des tests approfondis

Directions d'optimisation

  1. Filtrage amélioré de l'environnement de marché:
    • Ajouter des indicateurs de tendance pour identifier les conditions actuelles du marché
    • Appliquer différents paramètres dans différents environnements de marché
  2. Mécanisme de stop-loss amélioré:
    • Incorporer des arrêts de trail
    • Ajustez dynamiquement les distances d'arrêt en fonction de la volatilité
  3. Temps d'entrée optimisé:
    • Intégrer des indicateurs de volume
    • Ajouter des signaux de confirmation d'inversion
  4. Approche améliorée de la prise de profit:
    • Mettre en œuvre des sorties partielles des bénéfices
    • Ajustez dynamiquement les objectifs de profit en fonction de la structure du marché

Résumé

La stratégie suit efficacement les tendances grâce à l'identification des principaux modèles de prix et à la gestion dynamique des risques. Son principal avantage réside dans le mécanisme de gestion adaptatif du stop-loss, qui protège les bénéfices tout en maximisant les opportunités de tendance.


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

Relationnée

Plus de