Estratégia mensal de reversão de DCA

Autora:ChaoZhang, Data: 2023-10-08 16:12:29
Tags:

Resumo

O objetivo desta estratégia é identificar os pontos de reversão das tendências de baixa de curto prazo dos ativos e investir uma quantidade fixa de dinheiro nesses pontos.

Princípios

Esta estratégia opera num período de tempo mensal. Existem 240 barras de 1 hora em cada mês, que são utilizadas para determinar o momento das inversões de tendência.

Especificamente, a estratégia calcula a diferença entre a EMA rápida e a EMA lenta (EMA_CD), bem como a linha de sinal da EMA_CD. Quando a linha rápida cruza acima da linha de sinal, ela determina o fim de uma tendência de baixa de curto prazo e aciona um sinal de compra.

Após o sinal de compra, a estratégia fechará todas as posições no final do mês.

Isto permite-nos pescar o fundo no final de declínios de curto prazo, e média de custo em dólares em intervalos fixos.

Vantagens

A maior vantagem desta estratégia é que ela pode filtrar mercados de faixa e comprar apenas em pontos de reversão da tendência, assim, a média de custo do dólar a preços relativamente melhores.

Além disso, usar a EMA para determinar pontos de reversão pode ser mais estável e preciso em comparação com apenas olhar para reversões de velas.

Por último, o stop loss mensal bloqueia o desempenho de cada investimento mensal, limitando a perda máxima por mês.

Riscos

O maior risco desta estratégia é que os preços continuem a diminuir após a compra, levando ao stop loss no final do mês.

Podemos otimizar os parâmetros da EMA para melhorar a identificação, ou combinar outros indicadores como RSI para confirmar sinais de reversão.

Outro risco é o nível de stop loss. Um stop loss que é muito apertado pode ser parado por flutuações de curto prazo facilmente. Um stop loss que é muito amplo não limita as perdas. O parâmetro ideal precisa ser encontrado através do teste de diferentes níveis de stop loss.

Oportunidades de melhoria

A estratégia pode ser melhorada nos seguintes domínios:

  1. Otimizar os períodos de EMA para encontrar a combinação de parâmetros ideal para identificar reversões.

  2. Adicione outros filtros como o RSI para confirmar sinais de reversão.

  3. Teste diferentes níveis de stop loss para encontrar o ponto ideal que maximiza a prevenção de perdas sem ser cortado.

  4. Considere adicionar o stop de trailing em cima do stop loss para ajustar o nível de stop dinamicamente com base no preço.

  5. Teste diferentes prazos como diários ou semanais para ver qual é o melhor para esta estratégia.

Conclusão

A ideia geral desta estratégia é simples e clara - usando a EMA para identificar reversões de tendência de curto prazo e média de custo do dólar em pontos de reversão mensalmente. Pode filtrar efetivamente mercados agitados e investir a preços relativamente baixos. O espaço de otimização reside principalmente em ajustes de parâmetros e técnicas de stop loss.


/*backtest
start: 2023-09-07 00:00:00
end: 2023-10-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BHD_Trade_Bot

// @version=5
// strategy(
//  shorttitle            = 'DCA After Downtrend',
//  title                 = 'DCA After Downtrend (by BHD_Trade_Bot)',
//  overlay               = true,
//  calc_on_every_tick    = true,
//  calc_on_order_fills   = true,
//  use_bar_magnifier     = true,
//  pyramiding            = 100,
//  initial_capital       = 0,
//  default_qty_type      = strategy.cash,
//  default_qty_value     = 1000,
//  commission_type       = strategy.commission.percent,
//  commission_value      = 0.1)



// Backtest Time Period
start_year   = input(title='Start year'   ,defval=2017)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_time   = timestamp(start_year, start_month, start_day, 00, 00)

end_year     = input(title='end year'     ,defval=2050)
end_month    = input(title='end month'    ,defval=1)
end_day      = input(title='end day'      ,defval=1)
end_time     = timestamp(end_year, end_month, end_day, 23, 59)

window() => true



// EMA
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)

// EMA_CD
emacd = ema50 - ema200
emacd_signal = ta.ema(emacd, 20)
hist = emacd - emacd_signal

// Count n candles after x long entries
var int nPastCandles = 0
var int entryNumber = 0
nPastCandles := nPastCandles + 1



// ENTRY CONDITIONS

// 8 hours per day => 240 hours per month
entry_condition1 = nPastCandles > entryNumber * 240

// End of downtrend
entry_condition2 = ta.crossover(emacd, emacd_signal)

ENTRY_CONDITIONS = entry_condition1 and entry_condition2


if ENTRY_CONDITIONS and window()
    entryNumber := entryNumber + 1
    entryId = 'Long ' + str.tostring(entryNumber)
    strategy.entry(entryId, strategy.long)
    
    

// CLOSE CONDITIONS

// Last bar
CLOSE_CONDITIONS = barstate.islast

if CLOSE_CONDITIONS
    strategy.close_all()


    
// Draw
plot(ema50, color=color.orange, linewidth=3)
plot(ema200, color=entry_condition1 ? color.green : color.red, linewidth=3)


Mais.