Autora:ChaoZhang, Data: 2024-01-25
Tags:

img

## Visão geral Esta estratégia combina o indicador DMI para determinar a direção da tendência e o indicador RSI para determinar as condições de sobrecompra e sobrevenda, implementando uma tendência relativamente completa após a estratégia de negociação.

## Estratégia Lógica

    • O DMI consiste em três linhas: +DI indica tendência ascendente, -DI indica tendência descendente, o ADX avalia a força da tendência
    • Quando +DI>-DI, é uma tendência de alta, vá longo; quando -DI>+DI, é uma tendência de baixa, vá curto
  1. Utilize o indicador RSI para julgar sobrecompra e sobrevenda
    • O RSI compara ganhos e perdas médios ao longo de um período para determinar sobrecompra ou sobrevenda
    • RSI abaixo de 30 é sobrevendido, acima de 70 é sobrecomprado
  2. Combinar o DMI para determinar a direcção da tendência e o RSI para sobrecompra/supervenda pode capturar melhor o ritmo do mercado
    • Quando o DMI mostra tendência de alta e o RSI sobrevendido, bom momento para longo
    • Quando o DMI mostra tendência de queda e o RSI é sobrecomprado, bom momento para curto
  3. Configurar o stop loss para bloquear os lucros

Análise de vantagens Trata-se de uma tendência relativamente madura e estável que segue uma estratégia com os seguintes pontos fortes:

  1. A combinação de tendência e sobrecompra/supervenda evita a troca frequente no mercado limitado por intervalo
  2. Indicadores populares DMI e RSI com fácil ajuste de parâmetros e verificação prática completa
  3. O trailing stop loss bloqueia os lucros e evita o stop loss até certo ponto
  4. Regras claras e fáceis de aplicar

Análise de Riscos Há também alguns riscos a ter em conta:

  1. DMI e RSI podem facilmente gerar sinais falsos, causando perdas desnecessárias
  2. A definição incorreta de stop loss de trailing pode impedir perdas demasiado cedo ou demasiado
  3. Não consegue filtrar eficazmente os mercados de serralheira, propenso a ficar preso
  4. A tendência não sai imediatamente quando a tendência se inverte

Direcções de otimização A estratégia pode ser otimizada nos seguintes aspectos:

  1. Adicionar um filtro de volatilidade para evitar mercados agitados
  2. Definição de uma parada de perda adequada perto do suporte/resistência chave para limitar as perdas
  3. Aumentar o modelo de aprendizagem de máquina para previsão de tendências
  4. Optimização dinâmica dos parâmetros DMI e RSI


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © YingYangJPN

//@version=5
strategy("DMI and RSI Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// DMI indikatörünü tanımlayalım
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
len = input.int(14, minval=1, title="DI Length")
up = ta.change(high)
down = -ta.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 = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / trur)
minus = fixnan(100 * ta.rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
trailing_stop_loss_factor = input.float(0.50, "Trailing Stop Loss Factor", step = 0.01)

// RSI indikatörünü tanımlayalım
rsiLength = input.int(14, minval=1, title="RSI Length")
rsiSource = input(close, title="RSI Source")
rsiOverbought = input.int(70, title="RSI Overbought Level")
rsiOversold = input.int(30, title="RSI Oversold Level")
rsiValue = ta.rsi(rsiSource, rsiLength)

// Uzun pozisyon açma koşullarını tanımlayalım
longCondition1 = rsiValue < rsiOversold // RSI oversold seviyesinin altındaysa
longCondition2 = adx > 20 // ADX 20'den büyükse
longCondition3 = minus > plus

// Kısa pozisyon açma koşullarını tanımlayalım
shortCondition1 = rsiValue > rsiOverbought // RSI overbought seviyesinin üstündeyse
shortCondition2 = adx > 20 // ADX 20'den büyükse
shortCondition3 = plus > minus

// Uzun pozisyon açalım
if longCondition1 and longCondition2 and longCondition3
    strategy.entry("Long", strategy.long)
    

// Kısa pozisyon açalım
if shortCondition1 and shortCondition2 and shortCondition3
    strategy.entry("Short", strategy.short)
    
// Trailing Stop Loss
longTrailingStopLoss = strategy.position_avg_price * (1 - trailing_stop_loss_factor / 100)
shortTrailingStopLoss = strategy.position_avg_price * (1 + trailing_stop_loss_factor / 100)
if strategy.position_size > 0 
    strategy.exit("Exit Long", "Long", stop  = longTrailingStopLoss)
if strategy.position_size < 0 
    strategy.exit("Exit Short", "Short", stop = shortTrailingStopLoss)

// DMI ve RSI indikatörlerini grafiğe çizelim
plot(adx, color=#F50057, title="ADX")
plot(plus, color=#2962FF, title="+DI")
plot(minus, color=#FF6D00, title="-DI")
plot(rsiValue, color=#9C27B0, title="RSI")
hline(rsiOverbought, title="RSI Overbought Level", color=#E91E63, linestyle=hline.style_dashed)
hline(rsiOversold, title="RSI Oversold Level", color=#4CAF50, linestyle=hline.style_dashed)



Mais.