En la carga de los recursos... Cargando...

Sistema de gestión de capital basado en el impulso del RSI y la fortaleza de la tendencia del ADX

El autor:¿ Qué pasa?, Fecha: 2024-12-20 14:24:34
Las etiquetas:Indicador de riesgoADXEl ATREl EMATP

img

Resumen general

Esta estrategia es un sistema híbrido que combina el seguimiento de tendencias y el swing trading, logrando una negociación estable a través de la selección de múltiples indicadores técnicos y una estricta gestión del capital. La estrategia adopta un enfoque escalonado de toma de ganancias para bloquear las ganancias mientras establece un control de extracción máximo para gestionar el riesgo al tiempo que garantiza los retornos. El sistema utiliza el indicador de impulso RSI y el indicador de fuerza de tendencia ADX como los principales desencadenantes de señales de negociación, combinados con múltiples filtros de volumen, ATR y EMA para garantizar la efectividad comercial.

Principio de la estrategia

La lógica central de la estrategia incluye los siguientes elementos clave:

  1. Las condiciones de entrada requieren una satisfacción simultánea: volumen de negociación superior a 1M, ADX superior a 25 que indica una clara tendencia, RSI superior a 60 que muestra un fuerte impulso, ATR superior a 2 que garantiza un rango de volatilidad suficiente, precio superior a la media móvil de 200 días que mantiene la tendencia alcista.
  2. El diseño escalonado de las ganancias obtenidas: la primera obtención de ganancias al 15%, cerrando el 50% de la posición; la segunda obtención de ganancias al 30%, cerrando la posición restante.
  3. Control de stop-loss: la posición de stop-loss del 15% protege el capital, al mismo tiempo que sale cuando el RSI cae por debajo de 50 o el precio se rompe por debajo de 200 MA.
  4. Gestión del aprovechamiento: seguimiento en tiempo real del capital estratégico, activación del control del riesgo sistémico y liquidación de todas las posiciones cuando el aprovechamiento exceda el 30%.

Ventajas estratégicas

  1. La validación cruzada de múltiples indicadores técnicos mejora la fiabilidad de las señales de negociación
  2. El diseño escalonado de las ganancias equilibra las ganancias a corto plazo y captura las principales tendencias
  3. Sistema completo de control de riesgos, incluido el control de pérdidas de stock individuales y el control del riesgo sistémico
  4. Las condiciones comerciales estrictas filtran eficazmente las señales falsas
  5. Lógica estratégica clara, fácil ajuste de parámetros basados en las condiciones del mercado

Riesgos estratégicos

  1. El filtrado de múltiples indicadores puede perder algunas oportunidades comerciales
  2. En los mercados oscilantes pueden desencadenarse frecuentes stop-loss
  3. Los ajustes de stop loss y take profit en porcentaje fijo pueden no ser adecuados para todos los entornos de mercado
  4. La estrategia se basa en indicadores técnicos, puede tener una respuesta insuficiente a eventos repentinos fundamentales
  5. Requiere una mayor escala de capital para cumplir con los requisitos de volumen de negociación

Direcciones para la optimización de la estrategia

  1. Introducir mecanismos adaptativos de stop-loss y take-profit, ajustándose dinámicamente en función de la volatilidad del mercado
  2. Añadir un módulo de evaluación del entorno de mercado, utilizando diferentes configuraciones de parámetros en diferentes condiciones de mercado
  3. Optimizar el método de cálculo de ADX, considerar el uso de períodos adaptativos
  4. Incluir la consideración de los costes de transacción, optimizar el sistema de gestión de posiciones
  5. Desarrollar un mecanismo de filtración de señales basado en el aprendizaje automático

Resumen de las actividades

Esta estrategia es un sistema de negociación integral que logra una negociación estable a través de múltiples indicadores técnicos y una gestión estricta del capital. Las principales ventajas de la estrategia se encuentran en su sistema completo de control de riesgos y el mecanismo gradual de toma de ganancias, pero se debe prestar atención a los ajustes oportunos de parámetros basados en las condiciones del mercado en la aplicación práctica.


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

Más.