Combinação da DMI e da estratégia de negociação da média móvel

Autora:ChaoZhang, Data: 2023-09-28 12:39:44
Tags:

Resumo

Esta estratégia combina o índice de movimento direcional (DMI) e a média móvel para identificar a direção da tendência e gerar sinais de negociação.

Estratégia lógica

A estratégia baseia-se em dois indicadores principais:

  1. O DMI, incluindo DMI+ e DMI-, é usado para identificar a existência e a direção de uma tendência.

  2. A média móvel, geralmente definida em 15 a 50 dias, é usada para determinar a direção da tendência do preço.

A estratégia primeiro calcula o DMI+, DMI- e média móvel. Quando o DMI mostra um estado de tendência (DMI+ acima do DMI- ou vice-versa) e a média móvel confirma a direção, um sinal de negociação é gerado. Especificamente:

  • Quando o DMI+ cruza acima do DMI- e o preço cruza acima do MA, vá longo.

  • Quando o DMI- cruzar acima do DMI+ e o preço cruzar abaixo do MA, vá para curto.

Quando ativado, os sinais longos e curtos são invertidos.

Análise das vantagens

A combinação de um indicador de tendência como o DMI e um indicador de tendência como a média móvel pode melhorar a confiabilidade do sinal utilizando os pontos fortes de ambos.

A vantagem do DMI é a sua rápida identificação de tendências emergentes. A média móvel ajuda a filtrar o ruído e confirmar a direção da tendência.

A opção inversa também acrescenta flexibilidade para negociar com ou contra a tendência.

Análise de riscos

Os principais riscos desta estratégia são:

  1. Os sinais errados podem ocorrer em torno de transições de tendência, levando a perdas.

  2. A formação de tendências leva tempo. Enquanto isso, as flutuações de preços podem gerar sinais falsos. O alongamento dos períodos DMI e MA pode filtrar esse ruído.

  3. Com a opção reversa, o tamanho da perda deve ser limitado e os trailing stops usados para bloquear os lucros.

  4. Os parâmetros precisam ser re-otimizados para diferentes produtos e prazos.

Orientações de otimização

As potenciais otimizações desta estratégia incluem:

  1. Teste de diferentes períodos de média móvel para encontrar o melhor ajuste para transições de tendência.

  2. Testar os períodos de suavização do DMI para filtrar reversões curtas dentro das tendências.

  3. Avaliação do efeito da opção reversa em relação à tendência de inadimplência, seguindo os backtests históricos para escolher a melhor abordagem.

  4. Incorporar estratégias de stop como trailing stops, time stops ou breakout stops para limitar o tamanho da perda.

  5. Avaliação do desempenho dos parâmetros em diferentes produtos e prazos e otimização dos parâmetros.

  6. Adicionando filtros como o RSI para evitar sinais falsos em extremos localizados.

Resumo

Esta estratégia combina os pontos fortes do DMI de tendência e indicadores de média móvel para entrar em tendências cedo, evitando batidas em mercados agitados. A opção reversa também adiciona flexibilidade.


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 03/03/2017
// The related article is copyrighted material from Stocks & Commodities Aug 2009 
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Combining DMI And Moving Average For A EUR/USD Trading System")
Length_MA = input(30, minval=1)
Length_DMI = input(14, minval=1)
reverse = input(false, title="Trade reverse")
xMA = sma(close, Length_MA)
up = change(high)
down = -change(low)
trur = rma(tr, Length_DMI)
xPDI = fixnan(100 * rma(up > down and up > 0 ? up : 0, Length_DMI) / trur)
xNDI = fixnan(100 * rma(down > up and down > 0 ? down : 0, Length_DMI) / trur)
nPDI = xPDI
nNDI = xNDI
nMA = xMA
nPDI_1 = xPDI[1]
nNDI_1 = xNDI[1]
nMA_1 = xMA[1]
bMDILong =iff(nPDI > nNDI and nPDI_1 < nNDI_1, true, 
           iff(nPDI < nNDI and nPDI_1 > nNDI_1, false, false)) 
bMDIShort =  iff(nPDI > nNDI and nPDI_1 < nNDI_1, false, 
              iff(nPDI < nNDI and nPDI_1 > nNDI_1, true, false)) 
bMALong = iff(close > nMA and close[1] < nMA_1, true, 
           iff(close < nMA and close[1] > nMA_1, false, false))
bMAShort = iff(close > nMA and close[1] < nMA_1, false, 
             iff(close < nMA and close[1] > nMA_1, true, false))
pos = iff(bMDILong and bMALong, 1, 
     iff(bMDIShort and bMAShort, -1, nz(pos[1], 0)))
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1 )
    strategy.entry("Long", strategy.long)
if (possig == -1 )
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(nPDI, color=green, title="DMI Plus")
plot(nNDI, color=red, title="DMI Minus")

Mais.