Estratégia multi-DCA da EMA com um trailing stop loss e uma meta de lucro

Autora:ChaoZhang
Tags:

img

Resumo

Esta estratégia utiliza EMAs múltiplos dinâmicos como sinais de entrada combinados com mecanismos de stop loss e meta de lucro para gerenciamento de riscos. Aproveita a natureza suavizante das EMAs para identificar tendências e controlar o custo através de entradas multi-DCA. Além disso, a integração de recursos de stop loss e captação de lucro adaptativos melhora o processo de automação.

Estratégia lógica

Indicadores

  • Distância real média (ATR)

Sinais de entrada

Gestão de riscos

Incorpora vários mecanismos de controlo dos riscos:

  1. ATR Stop Loss: fechar todas as posições quando o ATR exceder o limiar
  2. Limite de frequência de entrada: controlo do número máximo de entradas
  3. O valor da posição em risco deve ser calculado de acordo com o método de cálculo da posição em risco.

Obtenção de lucros

Fixar níveis de preços-alvo de lucro para as saídas

Vantagens

  1. Identificar tendências utilizando EMAs com filtragem de ruído
  2. Medição dos custos através de entradas de DCA múltiplos
  3. Sinais de entrada reforçados utilizando combinações EMA
  4. Mecanismo adaptativo de stop loss

Riscos e melhorias

  1. As entradas excessivas de DCA podem ocupar demasiado capital

Estratégias de melhoria

  1. Utilização de sistemas EMA avançados para melhor identificação de tendências
  2. Optimização de múltiplas variáveis da frequência DCA e percentagem de perda de parada
  3. Incorporar modelos de aprendizagem de máquina para previsões de mudança de preços
  4. Integrar o módulo de dimensionamento de posições para gerir a utilização global do capital

Conclusão


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


Mais.