Estratégia de negociação diária duplo DI

Autora:ChaoZhang, Data: 2023-11-13 11:32:08
Tags:

img

Resumo

Esta estratégia gera sinais de negociação baseados no cruzamento do indicador direcional positivo (DI +) e do indicador direcional negativo (DI-) calculado a partir do intervalo verdadeiro médio (ATR).

Estratégia lógica

  1. Calcular ATR(14): Calcular a faixa média real nos últimos 14 dias utilizando preços altos, baixos e próximos.

  2. Calcular DI+ e DI-:

    • O número de unidades de produção é o número de unidades de produção.

    • DI- = 100 * RMA(MAX(DOWN,0),N) / ATNR

    Onde UP é a diferença entre o máximo atual e o fechamento anterior, DOWN é a diferença entre o mínimo atual e o fechamento anterior, N é o período do parâmetro, por defeito 14, e ATNR é o ATR calculado a partir da etapa 1.

  3. Determinação da entrada e saída:

    • Quando o DI+ cruza o DI-, é gerado um sinal de compra.

    • Quando o DI+ cruza abaixo do DI-, é gerado um sinal de venda.

  4. Configure stop loss e take profit:

    • O preço de entrada menos ATR multiplicado pelo multiplicador de stop loss

    • O preço de entrada mais o ATR multiplicado pelo multiplicador do take profit

    • O preço de entrada mais o ATR multiplicado pelo multiplicador do stop loss

    • O preço de entrada menos o ATR multiplicado pelo multiplicador do take profit

Análise das vantagens

  1. A utilização do cruzamento DI+/DI- para determinar a inversão da tendência fornece um sinal oportuno para uma nova direção da tendência.

  2. O ATR, enquanto indicador dinâmico stop loss/take profit, pode definir níveis razoáveis com base na volatilidade do mercado.

  3. A estratégia tem poucos parâmetros e é fácil de compreender e implementar.

  4. Os resultados dos testes de retorno mostram que esta estratégia tem um fator de lucro positivo e supera o buy & hold.

Riscos e soluções

  1. Risco de sinal falso decorrente de cruzamento de DI

    • Filtrar sinais com médias móveis, etc., para evitar falhas.
  2. Stop loss/take profit muito próximos

    • Ajustar o multiplicador ATR para acomodar a volatilidade.
  3. Ineficaz no mercado de gama

    • Combinar com outros indicadores para filtrar sinais em consolidação.
  4. Risco de utilização

    • A redução é aceitável, mas inevitável para estratégias sistemáticas.

Sugestões de otimização

  1. Adicione filtros como a média móvel para evitar sinais falsos em períodos de intervalo.

  2. Implementar o dimensionamento de posições como fracionário fixo ou Martingale para controlar o drawdown e aumentar a lucratividade.

  3. Otimizar os parâmetros ATR para corresponder à volatilidade de diferentes instrumentos de negociação.

  4. Optimização de parâmetros no período DI, período ATR, multiplicador ATR, etc., para encontrar a combinação ideal.

  5. Adicione a lógica da sessão da noite e do início para executar a estratégia 24/7.

Conclusão

Esta é uma estratégia simples e prática que gera sinais do crossover DI e define um stop loss/take profit dinâmico com ATR. Com poucos parâmetros, é fácil de testar e otimizar. Mas o crossover DI é menos eficaz durante a consolidação.


/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
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/
// © TheHulkTrading
//@version=4
strategy("DI Crossing Daily Straregy HulkTrading", overlay=true)
// ATR Multiplier. Recommended values between 1..4
atr_multiplier = input(1, minval=1, title="ATR Multiplier") 
//Length of DI. Recommended default value = 14
length = input(14, minval=1, title="Length di")
up = change(high)
down = -change(low)
range = rma(tr, 14)

//DI+ and DI- Calculations
di_plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, length) / range)
di_minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, length) / range)

//Long and short conditions
longCond = crossover(di_plus,di_minus)
shortCond = crossunder(di_plus,di_minus) 


//Stop levels and take profits
stop_level_long = strategy.position_avg_price - atr_multiplier*atr(14)
take_level_long = strategy.position_avg_price + 2*atr_multiplier*atr(14)
stop_level_short = strategy.position_avg_price + atr_multiplier*atr(14)
take_level_short = strategy.position_avg_price - 2*atr_multiplier*atr(14)


//Entries and exits 
strategy.entry("Long", strategy.long, when=longCond)
strategy.exit("Close Long","Long", stop=stop_level_long, limit = take_level_long)
strategy.entry("Short", strategy.short, when=shortCond)
strategy.exit("Close Short","Short", stop=stop_level_short, limit = take_level_short)



Mais.