O recurso está a ser carregado... Carregamento...

Sistema de Gestão de Capital Baseado na Força da Tendência do RSI e do ADX

Autora:ChaoZhang, Data: 2024-12-20 14:24:34
Tags:RSIADXATREMATP

img

Resumo

Esta estratégia é um sistema híbrido que combina o seguimento da tendência e o swing trading, alcançando negociação estável através de triagem de múltiplos indicadores técnicos e gestão rigorosa de capital. A estratégia adota uma abordagem de take-profit gradual para bloquear os lucros, enquanto define o controle máximo de retirada para gerenciar o risco, garantindo retornos. O sistema usa o indicador de impulso RSI e o indicador de força da tendência ADX como os principais gatilhos de sinal de negociação, combinados com múltiplos filtros de volume, ATR e EMA para garantir a eficácia da negociação.

Princípio da estratégia

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

  1. As condições de entrada exigem satisfação simultânea: volume de negociação superior a 1M, ADX superior a 25 indicando uma tendência clara, RSI superior a 60 mostrando forte impulso, ATR superior a 2 garantindo um intervalo de volatilidade suficiente, preço acima da média móvel de 200 dias mantendo tendência de alta.
  2. O projeto de take-profit escalonado: primeiro take-profit a 15%, encerrando 50% da posição; segundo take-profit a 30%, encerrando a posição restante.
  3. Controlo de stop-loss: uma posição de stop-loss de 15% protege o capital, ao mesmo tempo em que sai quando o RSI cai abaixo de 50 ou o preço cai abaixo de 200 MA.
  4. Gerenciamento do aproveitamento: acompanhamento em tempo real do capital estratégico, desencadeamento do controlo do risco sistémico e compensação de todas as posições quando o aproveitamento exceda 30%.

Vantagens da estratégia

  1. A validação cruzada de vários indicadores técnicos melhora a fiabilidade dos sinais de negociação
  2. O projeto gradual de lucro equilibra o lucro a curto prazo e capta as principais tendências
  3. Sistema completo de controlo do risco, incluindo o controlo do risco sistémico e o controlo do stop-loss individual das existências
  4. Condições comerciais rigorosas filtram eficazmente os falsos sinais
  5. Lógica estratégica clara, fácil ajuste de parâmetros com base nas condições do mercado

Riscos estratégicos

  1. A filtragem de múltiplos indicadores pode perder algumas oportunidades comerciais
  2. Os mercados oscilantes podem desencadear frequentes stop-loss
  3. As definições de stop-loss e take-profit em percentagem fixa podem não ser adequadas a todos os ambientes de mercado
  4. A estratégia baseia-se em indicadores técnicos, podendo ter uma resposta insuficiente a eventos súbitos fundamentais
  5. Requer maior escala de capital para satisfazer os requisitos de volume de negociação

Orientações para a otimização da estratégia

  1. Introduzir mecanismos adaptativos de stop-loss e take-profit, ajustando-se dinamicamente com base na volatilidade do mercado
  2. Adicionar módulo de avaliação do ambiente de mercado, utilizando diferentes definições de parâmetros em diferentes condições de mercado
  3. Otimizar o método de cálculo do ADX, considerar o uso de períodos adaptativos
  4. Incluir consideração de custos de transação, otimizar o sistema de gestão de posições
  5. Desenvolver um mecanismo de filtragem de sinais baseado no aprendizado de máquina

Resumo

Esta estratégia é um sistema de negociação abrangente que alcança negociação estável através de múltiplos indicadores técnicos e gestão estrita de capital. As principais vantagens da estratégia estão em seu sistema completo de controle de risco e mecanismo de lucro gradual, mas é necessário prestar atenção aos ajustes oportunos de parâmetros com base nas condições do mercado na aplicação prática.


/*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)


Relacionados

Mais.