Sistema de gestão de dinheiro baseado no momentum do RSI e na força da tendência do ADX

RSI ADX ATR EMA TP
Data de criação: 2024-12-20 14:24:34 última modificação: 2024-12-20 14:24:34
cópia: 0 Cliques: 397
1
focar em
1617
Seguidores

Sistema de gestão de dinheiro baseado no momentum do RSI e na força da tendência do ADX

Visão geral

A estratégia é um sistema de estratégias híbridas que combina o acompanhamento de tendências e negociações de choque para obter negociações estáveis por meio da seleção de vários indicadores técnicos e de um rigoroso gerenciamento de fundos. A estratégia usa um método de parada em etapas para bloquear os lucros, ao mesmo tempo em que configura o controle de retração máxima e controla o risco ao mesmo tempo em que garante o retorno. O sistema usa o indicador de dinâmica RSI e o indicador de intensidade de tendência ADX como principais sinais de ação de negociação e, em combinação com o volume de negociação, vários filtros, como ATR e EMA, garantem a eficácia da negociação.

Princípio da estratégia

A lógica central da estratégia inclui os seguintes elementos-chave:

  1. Os requisitos de entrada são simultaneamente atendidos: volume de transação maior que 1 milhão, ADX maior que 25 indica uma tendência clara, RSI maior que 60 mostra um forte movimento, ATR maior que 2 garante espaço suficiente para flutuação, preço acima da linha média diária de 200 mantém uma tendência ascendente.
  2. Desenho de stop-loss: o primeiro stop-loss é de 15%, a liquidação de 50% da posição; o segundo stop-loss é de 30%, a liquidação da posição restante. Este design pode bloquear parte dos lucros com antecedência e não perder a grande tendência.
  3. Controle de perda: estabeleça uma proteção de perda de 15% e feche as posições quando o RSI estiver abaixo de 50 ou o preço cair abaixo da linha média de 200.
  4. Gerenciamento de retirada: acompanhamento em tempo real do valor líquido da estratégia, acionamento de controle de vento sistemático quando a retirada for superior a 30% e vazio de todas as posições.

Vantagens estratégicas

  1. Vários indicadores técnicos são validados de forma cruzada para melhorar a confiabilidade dos sinais de negociação
  2. O design do stop-loss contempla a necessidade de obter lucros a curto prazo e de capturar grandes tendências
  3. Sistema de controlo de risco, incluindo paradas individuais e controlo de risco sistemático
  4. As condições de negociação são rigorosas e filtram os sinais falsos.
  5. Uma lógica estratégica clara para ajustar os parâmetros de acordo com as condições do mercado

Risco estratégico

  1. Filtragem de múltiplos indicadores pode levar a perda de algumas oportunidades de negociação
  2. Stop losses podem ser acionados com frequência em mercados voláteis
  3. A configuração de stop loss e stop loss de porcentagem fixa pode não ser adequada para todos os cenários de mercado
  4. A estratégia depende de indicadores técnicos, podendo não ser adequada em caso de surpresas fundamentais.
  5. Requer um maior volume de capital para atender às exigências de volume de transação

Direção de otimização da estratégia

  1. Introdução de um mecanismo de stop loss adaptativo, que se adapta à dinâmica de volatilidade do mercado
  2. Adição do módulo de julgamento do cenário de mercado, usando diferentes configurações de parâmetros em diferentes condições de mercado
  3. Otimização da metodologia de cálculo do ADX, considerando o uso de ciclos de adaptação
  4. Adição de custos de transação e otimização do sistema de gestão de posições
  5. Desenvolvimento de mecanismos de filtragem de sinais baseados em aprendizado de máquina

Resumir

A estratégia é um sistema de negociação abrangente que permite negociações estáveis por meio de múltiplos indicadores técnicos e gestão rigorosa de fundos. A vantagem central da estratégia está em seu sistema de controle de risco e mecanismo de parada em etapas, mas também precisa ter cuidado para ajustar os parâmetros de acordo com a situação do mercado em aplicações reais. O espaço para otimização adicional da estratégia está principalmente na adaptação dinâmica dos parâmetros e na melhoria do mecanismo de filtragem de sinais.

Código-fonte da estratégia
/*backtest
start: 2023-12-20 00:00:00
end: 2024-12-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Swing Strategy (<30% DD)", shorttitle="SwingStratDD", overlay=true)

//-----------------------------------------------------
// Example Indicators and Logic
//-----------------------------------------------------
emaLen   = input.int(200, "EMA Length", minval=1)
emaValue = ta.ema(close, emaLen)

plot(emaValue, color=color.yellow, linewidth=2, title="EMA 200")


//-----------------------------------------------------
// User Inputs
//-----------------------------------------------------
adxLen           = input.int(14,  "ADX Length",      minval=1)
rsiLen           = input.int(14,  "RSI Length",      minval=1)
atrLen           = input.int(14,  "ATR Length",      minval=1)

rsiBuyThresh     = input.float(60, "RSI Buy Threshold",     minval=1, maxval=100)
adxThresh        = input.float(25, "ADX Threshold (Trend)", minval=1, maxval=100)
minVolume        = input.float(1e6,"Minimum Volume",         minval=1)
minATR           = input.float(2,  "Minimum ATR(14)",        minval=0.1, step=0.1)

stopLossPerc     = input.float(15, "Stop-Loss %",            minval=0.1, step=0.1)
// We’ll do two partial take-profit levels to aim for consistent cashflow:
takeProfit1Perc  = input.float(15, "Take-Profit1 %",         minval=0.1, step=0.1)
takeProfit2Perc  = input.float(30, "Take-Profit2 %",         minval=0.1, step=0.1)

ddLimit          = input.float(30, "Max Drawdown %",         minval=0.1, step=0.1)

//-----------------------------------------------------
// Indicators
//-----------------------------------------------------

rsiValue = ta.rsi(close, rsiLen)
atrValue = ta.atr(atrLen)

//--- Fully Manual ADX Calculation ---
upMove      = high - high[1]
downMove    = low[1] - low
plusDM      = (upMove > downMove and upMove > 0) ? upMove : 0.0
minusDM     = (downMove > upMove and downMove > 0) ? downMove : 0.0
smPlusDM    = ta.rma(plusDM, adxLen)
smMinusDM   = ta.rma(minusDM, adxLen)
smTR        = ta.rma(ta.tr, adxLen)
plusDI      = (smPlusDM / smTR) * 100
minusDI     = (smMinusDM / smTR) * 100
dx          = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adxValue    = ta.rma(dx, adxLen)

//-----------------------------------------------------
// Screener-Like Conditions (Technical Only)
//-----------------------------------------------------
volumeCondition   = volume > minVolume
adxCondition      = adxValue > adxThresh
rsiCondition      = rsiValue > rsiBuyThresh
atrCondition      = atrValue > minATR
aboveEmaCondition = close > emaValue

longCondition = volumeCondition and adxCondition and rsiCondition and atrCondition and aboveEmaCondition

//-----------------------------------------------------
// Strategy Entry / Exit Logic
//-----------------------------------------------------
var bool inTrade = false

// Entry
if longCondition and not inTrade
    strategy.entry("Long", strategy.long)

// Basic Exit Condition: RSI < 50 or Price < EMA
exitCondition = (rsiValue < 50) or (close < emaValue)
if inTrade and exitCondition
    strategy.close("Long")

// Update inTrade status
inTrade := strategy.position_size > 0

//-----------------------------------------------------
// Multi-Level Stop-Loss & Partial Profits
//-----------------------------------------------------
if inTrade
    float entryPrice = strategy.position_avg_price

    // Stop-Loss
    float stopPrice     = entryPrice * (1 - stopLossPerc / 100)

    // Two partial take-profit levels
    float tp1Price      = entryPrice * (1 + takeProfit1Perc / 100)
    float tp2Price      = entryPrice * (1 + takeProfit2Perc / 100)

    // Example approach: exit half at TP1, half at TP2
    strategy.exit("TP1/SL",     from_entry="Long", stop=stopPrice,    limit=tp1Price, qty_percent=50)
    strategy.exit("TP2",        from_entry="Long", limit=tp2Price,    qty_percent=50)

//-----------------------------------------------------
// Dynamic Drawdown Handling
//-----------------------------------------------------
var float peakEquity = strategy.equity
peakEquity := math.max(peakEquity, strategy.equity)

currentDrawdownPerc = (peakEquity - strategy.equity) / peakEquity * 100
if currentDrawdownPerc > ddLimit
    strategy.close_all("Max Drawdown Exceeded")

//-----------------------------------------------------
// Plotting
//-----------------------------------------------------
plot(emaValue, title="EMA 200", color=color.yellow, linewidth=2)
plotchar(rsiValue, title="RSI", char='●', location=location.bottom, color=color.new(color.teal, 50))
plot(adxValue, title="Manual ADX", color=color.orange)