Uma estratégia de negociação DMI e estocástica com stop-loss dinâmico

Autora:ChaoZhang, Data: 2023-12-26 14:30:23
Tags:

img

Resumo

Esta estratégia de negociação combina o Índice de Movimento Direcional (DMI) e o Oscilador Estocástico para gerar sinais de negociação. O DMI, com suas linhas DI +, DI e Índice Direcional Médio (ADX), mede a força e direção da tendência. A estratégia vai longo (compra) quando o DI + está acima do DI-, o ADX está acima de 25 e o Stochastic %K está abaixo de 20 (supervendido).

Estratégia lógica

A estratégia baseia-se nos seguintes elementos essenciais:

  1. DMI para a identificação de tendências: As linhas DI+, DI- e ADX do DMI determinam a direção e a força da tendência do mercado.

  2. Stochastic para sobrecompra/supervendaA linha %K do Estocástico mostra uma aproximação atual em relação aos máximos e mínimos recentes. Valores abaixo de 20 implicam sobrevenda enquanto acima de 80 são sobrecompra.

  3. Lógica do sinal: Combinando DMI e Estocástico, a estratégia vai longa quando DI+>DI- ((uptrend), ADX>25 (força da tendência) e Stochastic %K <20 (oversold).

  4. Previsão de prejuízoOs níveis mais elevados e mais baixos de fechamento recentes após a entrada são utilizados como níveis dinâmicos de stop-loss, permitindo um controlo adaptativo do risco.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. Maior fiabilidade com a confirmação dupla do DMI (tendência) e do Stochastic (compra/venda excessiva).

  2. A inovação em termos de stop loss dinâmico baseado nas recentes flutuações de preços permite um melhor controlo do risco.

  3. Menos parâmetros facilitam a otimização e implementação.

  4. Ampla adaptabilidade nos mercados financeiros (ações, divisas, criptomoedas, etc.) e nos prazos.

  5. A escrita de pinho permite a aplicação directa em plataformas de negociação.

Análise de riscos

Alguns riscos a considerar:

  1. Potenciais sinais falsos em mercados de tendência quando o ADX está baixo.

  2. O estocástico é um indicador atrasado.

  3. As paradas dinâmicas não podem evitar completamente grandes oscilações de tendência.

  4. O ajuste inadequado dos parâmetros afeta negativamente o desempenho.

  5. Os eventos do cisne negro exigem suspensão da estratégia para evitar perdas anormais.

Orientações de otimização

Algumas formas de melhorar a estratégia:

  1. A adição de filtros com mais indicadores como médias móveis e MACD aumenta a confiabilidade do sinal.

  2. A otimização de parâmetros através de backtesting ajuda a descobrir configurações ideais.

  3. Os instrumentos mais rápidos podem usar comprimentos mais curtos.

  4. Incorporar saídas de log detalhadas usando getInfo() para permitir uma análise e um refinamento mais fáceis.

  5. Trace pontos de sinal e linhas de stop-loss no gráfico para obter informações adicionais.

  6. Desenvolver alertas personalizados para receber notificações oportunas que permitam intervenções rápidas.

Conclusão

Esta estratégia combina os pontos fortes do DMI e do Oscilador Estocástico para identificar a direção da tendência e os níveis de sobrecompra / sobrevenda para as entradas de negociação. O inovador mecanismo dinâmico de stop loss também permite um controle de risco mais inteligente. Com sinais confiáveis, ampla aplicabilidade, facilidade de uso e personalização, esta é uma estratégia de negociação algorítmica eficiente.


/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("DMI with Stochastic and Dynamic Stop-Loss", shorttitle="DMI_Stoch_SL", overlay=true)

length = input(14, title="DMI Length")
adxThreshold = input(25, title="ADX Threshold")
stochKLength = input(14, title="Stochastic %K Length")
stochDLength = input(3, title="Stochastic %D Length")

[diPlus, diMinus, adx] = ta.dmi(length, length)
stochKLine = ta.stoch(close, high, low, stochKLength)

var float lowestClose = na
var float highestClose = na
lowestClose := na(lowestClose) ? close : math.min(lowestClose, close)
highestClose := na(highestClose) ? close : math.max(highestClose, close)

longCondition = (diPlus > diMinus) and (adx > adxThreshold) and (stochKLine < 20)
shortCondition = (diMinus > diPlus) and (adx > adxThreshold) and (stochKLine > 80)

if longCondition
    strategy.entry("Buy", strategy.long)
    strategy.exit("Exit Buy", "Buy", stop=lowestClose)

if shortCondition
    strategy.entry("Sell", strategy.short)
    strategy.exit("Exit Sell", "Sell", stop=highestClose)

Mais.