Esta estratégia combina dois poderosos indicadores embutidos no TradingView - o Directional Movement Index (DMI) e o Detrended Price Oscillator (DPO) para formar uma base confiável para decisões de negociação. A lógica central da estratégia é determinar se o valor do DPO é maior que 0 quando ocorre uma cruz de ouro do DMI e gerar um sinal longo, se assim for; ou determinar se o valor do DPO é menor que 0 quando ocorre uma cruz morta do DMI e gerar um sinal curto, se assim for. Isso pode efetivamente filtrar muitos falsos sinais gerados durante oscilações de faixa no mercado, gerando assim apenas sinais de negociação quando uma tendência é formada, evitando perdas de parada repetidas durante oscilações.
Esta estratégia usa principalmente o indicador DMI para determinar a direção e a força da tendência. O indicador DMI consiste em três curvas: +DI, -DI e ADX. +DI representa a força da tendência ascendente, -DI representa a força da tendência descendente, e seu cruzamento pode determinar a direção da tendência atual; ADX representa a força da tendência, quanto maior o valor, mais óbvia a tendência. No entanto, o ADX não é bom em identificar intervalos de baixa volatilidade, então esta estratégia remove a determinação do ADX e só usa os cruzamentos +DI e -DI para determinar a direção da tendência.
Para filtrar os falsos sinais gerados nas oscilações de faixa, o indicador DPO é introduzido para julgamento auxiliar. O indicador DPO representa o grau de desvio do preço de seu trilho médio. Quando o preço está acima do trilho médio, o DPO é positivo, e quando abaixo, é negativo. Esta estratégia usa a positividade e negatividade do indicador DPO para julgar se está atualmente em uma tendência.
Especificamente, a lógica do julgamento é:
Quando +DI cruza acima de -DI, é uma cruz de ouro, indicando um mercado de alta. Neste momento, se o indicador DPO for maior que 0, confirma que está atualmente em uma tendência de alta e um sinal longo é gerado.
Quando -DI cruza abaixo de +DI, é uma cruz morta, indicando um mercado de baixa. Neste momento, se o indicador DPO for inferior a 0, confirma que está atualmente em tendência descendente e um sinal curto é gerado.
Se o +DI/-DI cruzar, mas o indicador DPO estiver próximo de 0, é determinado como oscilação e não é gerado nenhum sinal.
A maior vantagem desta estratégia combinada é a sua elevada precisão na identificação de tendências, gerando sinais de negociação apenas quando ocorrem inversões reais de tendências, evitando assim perdas repetidas em intervalos oscilantes.
Usando o indicador DMI para determinar a direcção e a força da tendência, é um indicador técnico maduro e fiável.
Filtrar sinais falsos em oscilações de faixa com a ajuda do indicador DPO, gerar sinais apenas quando se forma uma tendência, evitando perdas.
A combinação de vários indicadores pode servir de verificação mútua e melhorar a fiabilidade dos sinais.
A lógica da estratégia é simples e fácil de entender e implementar, adequada para negociação automatizada ou manual.
Uma vez que só negocia em tendências, pode obter um rácio de risco-recompensa relativamente elevado.
Embora esta seja uma estratégia altamente fiável, devem ser observados os seguintes riscos:
Os acontecimentos súbitos podem causar movimentos unilaterais enormes no mercado, possivelmente perdendo oportunidades de tendência.
O próprio indicador DMI pode também gerar sinais errados, e este risco não pode ser completamente evitado.
As definições incorretas dos parâmetros do indicador DPO podem também conduzir a erros de apreciação.
Os custos de negociação terão um certo impacto nos lucros, por isso a frequência de negociação deve ser controlada.
Ainda há espaço para uma melhor otimização desta estratégia:
Diferentes combinações de parâmetros podem ser testadas para encontrar os parâmetros ideais para reduzir o atraso do sinal e aumentar a taxa de lucro.
Pode ser combinado com outros indicadores, tais como KDJ, MACD, etc., para verificação para melhorar a precisão do sinal.
Os parâmetros de adaptação podem ser definidos de acordo com diferentes variedades, ciclos, etc., para tornar a estratégia mais adaptável.
As paradas dinâmicas podem ser definidas para controlar perdas individuais. Diferentes amplitudes de stop loss também podem ser definidas de acordo com os estágios da tendência.
Os métodos de aprendizagem de máquina podem ser usados para otimizar o tempo de entrada e saída para maiores retornos.
Esta estratégia combina as vantagens dos indicadores DMI e DPO para ter alta precisão no julgamento de reversões de tendências e pode identificar de forma confiável a geração de tendências. Ao mesmo tempo, o uso do indicador DPO efetivamente filtra o ruído causado por oscilações de faixa, evitando negociações ineficazes. Isso faz com que seja uma estratégia eficiente adequada para negociação automatizada e adoção manual.
/*backtest start: 2022-12-28 00:00:00 end: 2024-01-03 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("DMI DPO Guard Strategy", calc_on_order_fills=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, currency="USD", commission_type=strategy.commission.percent, commission_value=0.25) ///Tradingview's DMI indicator logic/// len = input(34, minval=1, title="DI Lookback") up = change(high) down = -change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) trur = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / trur) minus = fixnan(100 * rma(minusDM, len) / trur) plot(plus, color=color.orange, title="+DI") plot(minus, color=color.aqua, title="-DI") period_ = input(34, title="Length", minval=1) isCentered = input(false, title="Centered") barsback = period_/2 + 1 ma = sma(close, period_) dpo = isCentered ? close[barsback] - ma : close - ma[barsback] plot(dpo, offset = isCentered ? -barsback : 0, title="Detrended Price Oscillator", color=#C0C000) hline(0, title="Zero Line", color = #C0C0C0) long = crossover(plus, minus) and (dpo > 0) short = crossunder(plus, minus) and (dpo < 0) strategy.entry("Long", strategy.long, when=long) strategy.entry("Short", strategy.short, when=short)