Estratégia de custo médio ponderado de múltiplos custos EMA com base em stop loss dinâmico e lucro alvo


Data de criação: 2024-01-19 15:16:53 última modificação: 2024-01-19 15:16:53
cópia: 2 Cliques: 778
1
focar em
1617
Seguidores

Estratégia de custo médio ponderado de múltiplos custos EMA com base em stop loss dinâmico e lucro alvo

Visão geral

Esta estratégia utiliza a média móvel de múltiplos índices dinâmicos como sinal de entrada, combinado com um mecanismo de rastreamento de stop loss e ganhos-alvo para gerenciar o risco e os ganhos. A estratégia aproveita ao máximo a natureza suave da EMA para identificar tendências e controlar os custos por meio de vários investimentos em DCA. Além disso, a configuração integrada de stop loss dinâmico e ganhos-alvo torna a estratégia intelectual e automatizada.

Princípio da estratégia

Cálculo do indicador

  • As médias móveis dos índices EMA5, EMA10, EMA20, EMA50, EMA100 e EMA200
  • ATR média real amplitude de flutuação

Sinal de entrada

Quando o preço se aproxima ou atravessa um determinado ciclo EMA, o sinal de entrada é gerado. O ciclo EMA pode ser personalizado e, tipicamente, os ciclos 5, 10, 20, 50, 100 e 200 são selecionados. Esta estratégia usa o preço dentro de 1% acima ou abaixo do EMA como condição de entrada.

Gestão de Riscos

Integrar vários mecanismos de gestão de riscos:

  1. ATR Stop: Cessação de liquidação quando o ATR excede o limiar definido
  2. Controle de entrada máxima: evitar investimentos excessivos
  3. Trailing stop: trailing stop baseado em flutuações de preços em tempo real

Mecanismo de lucro

Estabelecer um nível de lucro alvo e sair quando o preço ultrapassa o alvo

Análise de vantagens estratégicas

  1. O EMA pode ser usado para identificar tendências e filtrar os movimentos de curto prazo.
  2. Custo do DCA disperso para evitar alta e baixa venda
  3. Portfólio de EMAs multiplas para aumentar a taxa de sucesso de entrada em bolsa
  4. Dinâmico Stop Loss REAL-TIME Loss Control
  5. Objetivo de lucro claro e poupança de lucro

Riscos e melhorias

  1. A seleção do fator EMA precisa ser otimizada, e a combinação de ciclos em diferentes mercados varia muito
  2. Excesso de DCA pode levar a uma ocupação excessiva de fundos
  3. Parar a configuração da amplitude de perda de precisão para otimizar a retrospectiva

Otimização de estratégias

  1. Identificação de tendências através de sistemas EMA avançados
  2. Otimização multivariável de DCA e Stop Loss
  3. Adição de modelos de aprendizagem de máquina para prever mudanças de preços
  4. Módulo de gestão de fundos integrado para controlar o investimento total

Resumir

Esta estratégia integra vários mecanismos, como a identificação de tendências EMA, controle de custos DCA, rastreamento dinâmico de stop loss e retirada de lucros alvo. Há muito espaço para otimização em termos de ajuste de parâmetros e controle de risco.

Código-fonte da estratégia
/*backtest
start: 2023-01-12 00:00:00
end: 2024-01-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("EMA DCA Strategy with Trailing Stop and Profit Target", overlay=true )

// Define the investment amount for when the condition is met
investment_per_condition = 6

// Define the EMAs
ema5 = ema(close, 5)
ema10 = ema(close, 10)
ema20 = ema(close, 20)
ema50 = ema(close, 50)
ema100 = ema(close, 100)
ema200 = ema(close, 200)

// Define ATR sell threshold
atr_sell_threshold = input(title="ATR Sell Threshold", type=input.integer, defval=10, minval=1)

// Helper function to find if the price is within 1% of the EMA
isWithin1Percent(price, ema) =>
    ema_min = ema * 0.99
    ema_max = ema * 1.01
    price >= ema_min and price <= ema_max

// Control the number of buys
var int buy_count = 0
buy_limit = input(title="Buy Limit", type=input.integer, defval=3000)

// Calculate trailing stop and profit target levels
trail_percent = input(title="Trailing Stop Percentage", type=input.integer, defval=1, minval=0, maxval=10)
profit_target_percent = input(title="Profit Target Percentage", type=input.integer, defval=3, minval=1, maxval=10)

// Determine if the conditions are met and execute the strategy
checkConditionAndBuy(emaValue, emaName) =>
    var int local_buy_count = 0 // Create a local mutable variable
    if isWithin1Percent(close, emaValue) and local_buy_count < buy_limit
        strategy.entry("Buy at " + emaName, strategy.long, qty=investment_per_condition / close, alert_message ="Buy condition met for " + emaName)
        local_buy_count := local_buy_count + 1
        // alert("Buy Condition", "Buy condition met for ", freq_once_per_bar_close)
        
    local_buy_count // Return the updated local_buy_count

// Add ATR sell condition
atr_condition = atr(20) > atr_sell_threshold
if atr_condition
    strategy.close_all()
    buy_count := 0 // Reset the global buy_count when selling

// Strategy execution
buy_count := checkConditionAndBuy(ema5, "EMA5")
buy_count := checkConditionAndBuy(ema10, "EMA10")
buy_count := checkConditionAndBuy(ema20, "EMA20")
buy_count := checkConditionAndBuy(ema50, "EMA50")
buy_count := checkConditionAndBuy(ema100, "EMA100")
buy_count := checkConditionAndBuy(ema200, "EMA200")

// Calculate trailing stop level
trail_offset = close * trail_percent / 100
trail_level = close - trail_offset

// Set profit target level
profit_target_level = close * (1 + profit_target_percent / 100)

// Exit strategy: Trailing Stop and Profit Target
strategy.exit("TrailingStop", from_entry="Buy at EMA", trail_offset=trail_offset, trail_price=trail_level)
strategy.exit("ProfitTarget", from_entry="Buy at EMA",  when=close >= profit_target_level)

// Plot EMAs
plot(ema5, title="EMA 5", color=color.red)
plot(ema10, title="EMA 10", color=color.orange)
plot(ema20, title="EMA 20", color=color.yellow)
plot(ema50, title="EMA 50", color=color.green)
plot(ema100, title="EMA 100", color=color.blue)
plot(ema200, title="EMA 200", color=color.purple)