Die Ressourcen sind geladen. Beförderung...

Dynamische Stop-Loss-Anpassung Elephant Bar Trend nach der Strategie

Schriftsteller:ChaoZhang, Datum: 2025-01-17 16:24:18
Tags:SMAHAMMERRSI

 Dynamic Stop-Loss Adjustment Elephant Bar Trend Following Strategy

Übersicht

Diese Strategie ist ein Trendfolgensystem, das auf der Erkennung von Balkenmustern basiert und hauptsächlich elephant bars (Preisbalken, die signifikant größer als der Durchschnitt sind) identifiziert, um potenzielle Trendstartpunkte zu erfassen.

Strategieprinzipien

Die Strategie beruht auf folgenden Schlüsselschritten: 1. Berechnung der durchschnittlichen Balkengröße über einen bestimmten Zeitraum als Benchmark Identifizieren Sie, ob die aktuelle Stange die Eigenschaften elephant bar erfüllt: - Strichgröße deutlich überdurchschnittlich (konfigurierbarer Multiplikator) - Schlusskurs innerhalb eines spezifischen Prozentsatzbereichs von hoch/niedrig - Oder passt zu Hammer-/umgekehrten Hammermustern 3. Bestimmung der Handelsrichtung basierend auf der Richtung der Elefantenbalken 4. Festlegen Sie anfängliche Stop-Loss- und Gewinnziele 5. Steuern Sie den Stop-Loss dynamisch an, wenn sich der Preis günstig bewegt: - Bewegen Sie den Stop-Loss über den Kostenwert, wenn das Ziel von 60% erreicht wird - Weitere Verschärfung des Stop-Loss auf 80% Ziel - Die Stop-Loss-Regelungen deutlich zu verschärfen und das Gewinnziel auf 90% anzupassen

Strategische Vorteile

  1. Dynamisches Risikomanagement: Schützt die Gewinne und ermöglicht gleichzeitig die Entwicklung von Trends durch dynamische Stop-Loss-Anpassungen
  2. Mustererkennungsflexibilität: beinhaltet spezielle Muster wie Hammerlinien jenseits der traditionellen Elefantenstangen
  3. Starke Anpassungsfähigkeit an die Parameter: Schlüsselparameter wie der Multiplikator für die Strichgröße und die Zielprozentsätze können an die Merkmale des Marktes angepasst werden
  4. Vermögenswerte, die nicht in einem anderen als dem in Artikel 4 Absatz 1 Buchstabe b der Richtlinie 2009/138/EG vorgesehenen System verwendet werden

Strategische Risiken

  1. Gefahr eines falschen Ausbruchs: Elefantenbalkenmuster können zu falschen Ausbrüchen führen, die geeignete Filterbedingungen erfordern.
  2. Das Risiko liegt in der Größenordnung der Risikopositionen.
  3. Die Risikopositionen sind in der Regel in den folgenden Kategorien aufgeführt:
  4. Parameterempfindlichkeit: Die Wirksamkeit der Strategie hängt von den Parameter-Einstellungen ab und erfordert eine gründliche Prüfung

Optimierungsrichtlinien

  1. Verbesserung der Filterung des Marktumfelds:
    • Hinzufügen von Trendindikatoren zur Ermittlung der aktuellen Marktbedingungen
    • Anwendung unterschiedlicher Parametereinstellungen in verschiedenen Marktumgebungen
  2. Verbessertes Stop-Loss-Mechanismus:
    • Einbeziehung von Trailing Stops
    • Dynamische Anpassung der Stoppdistanzen anhand der Volatilität
  3. Optimierte Eintrittszeit:
    • Integrierte Volumenindikatoren
    • Hinzufügen von Umkehrbestätigungssignalen
  4. Erweiterter Profit-taking-Ansatz:
    • Einführung von Teilgewinn-Ausgängen
    • Dynamische Anpassung der Gewinnziele anhand der Marktstruktur

Zusammenfassung

Die Strategie verfolgt effektiv Trends durch die Identifizierung von wichtigen Preismustern und dynamisches Risikomanagement. Ihr Hauptvorteil liegt im adaptiven Stop-Loss-Management-Mechanismus, der Gewinne schützt und gleichzeitig Trendchancen maximiert. Eine weitere Optimierung der Marktumgebungserkennung und Risikomanagementmechanismen verspricht eine gleichbleibende Leistung unter verschiedenen Marktbedingungen.


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

Verwandt

Mehr