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.
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.
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.
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.
A estratégia pode ser melhorada nos seguintes domínios:
Otimizar os períodos de EMA para encontrar a combinação de parâmetros ideal para identificar reversões.
Adicione outros filtros como o RSI para confirmar sinais de reversão.
Teste diferentes níveis de stop loss para encontrar o ponto ideal que maximiza a prevenção de perdas sem ser cortado.
Considere adicionar o stop de trailing em cima do stop loss para ajustar o nível de stop dinamicamente com base no preço.
Teste diferentes prazos como diários ou semanais para ver qual é o melhor para esta estratégia.
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)