Sistema de gestión de dinero basado en el impulso del RSI y la fuerza de la tendencia del ADX

RSI ADX ATR EMA TP
Fecha de creación: 2024-12-20 14:24:34 Última modificación: 2024-12-20 14:24:34
Copiar: 0 Número de Visitas: 397
1
Seguir
1617
Seguidores

Sistema de gestión de dinero basado en el impulso del RSI y la fuerza de la tendencia del ADX

Descripción general

La estrategia es un sistema de estrategias mixtas que combina el seguimiento de la tendencia y el comercio de la oscilación para lograr una negociación sólida a través de la selección de múltiples indicadores técnicos y la gestión estricta de fondos. La estrategia utiliza un método de parada por etapas para bloquear las ganancias, al mismo tiempo que establece el control de la máxima retirada y controla el riesgo al mismo tiempo que garantiza los beneficios.

Principio de estrategia

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

  1. Los requisitos de entrada se cumplen al mismo tiempo: volumen de operaciones mayor a 1 millón, ADX mayor a 25 muestra una tendencia clara, RSI mayor a 60 muestra un movimiento fuerte, ATR mayor a 2 asegura suficiente espacio para la volatilidad, el precio mantiene una tendencia alcista por encima de la línea media diaria de 200.
  2. Diseño de stop-loss escalonado: el primer stop-loss se encuentra en el 15%, la posición de liquidación es del 50%; el segundo stop-loss se encuentra en el 30%, la posición de liquidación restante. Este diseño puede bloquear parte de las ganancias con antelación y no perderse la gran tendencia.
  3. Control de pérdidas: establece un capital de protección de pérdidas del 15% y cierra las posiciones cuando el RSI es inferior a 50 o el precio cae por debajo de la línea media de 200.
  4. Gestión de retiros: seguimiento en tiempo real del valor neto de la estrategia, activación de un control de ventas sistemático cuando el retiro supera el 30%, vacíación de todas las posiciones.

Ventajas estratégicas

  1. Múltiples indicadores técnicos se validan de forma cruzada para mejorar la confiabilidad de las señales comerciales
  2. El diseño de la barra de paso tiene en cuenta la necesidad de obtener ganancias a corto plazo y de captar grandes tendencias
  3. Sistema de control de riesgos completo, incluido el deterioro individual de la acción y el control de riesgo sistemático
  4. Las condiciones de las transacciones son estrictas y filtran las señales falsas.
  5. La lógica de la estrategia es clara y permite ajustar los parámetros según las condiciones del mercado

Riesgo estratégico

  1. El filtrado de múltiples indicadores puede llevar a perder algunas oportunidades de negociación
  2. Los stop loss pueden activarse con frecuencia en mercados volátiles
  3. Las configuraciones de stop loss y stop loss con porcentajes fijos pueden no ser adecuadas para todos los entornos de mercado
  4. Las estrategias dependen de indicadores técnicos y pueden no reaccionar adecuadamente ante una emergencia fundamental.
  5. Se requiere una mayor cantidad de capital para satisfacer los requisitos de volumen de transacciones

Dirección de optimización de la estrategia

  1. Introducción de un mecanismo de suspensión de pérdidas adaptativo que se ajuste a la dinámica de la volatilidad del mercado
  2. Añadir un módulo de evaluación de la situación del mercado para usar diferentes configuraciones de parámetros en diferentes condiciones de mercado
  3. Optimizar el método de cálculo de ADX, considerando el uso de ciclos de adaptación
  4. Incluir costos de transacción y optimizar el sistema de gestión de posiciones
  5. Desarrollo de un mecanismo de filtración de señales basado en el aprendizaje automático

Resumir

La estrategia es un sistema de negociación integral que permite realizar operaciones sólidas a través de múltiples indicadores técnicos y una gestión estricta de los fondos. La estrategia tiene como ventaja central su sistema de control de riesgos y su mecanismo de parálisis por etapas, pero también debe tener en cuenta el ajuste de los parámetros en función de las condiciones del mercado en la aplicación real. El espacio para una optimización adicional de la estrategia se encuentra principalmente en la adaptación dinámica de los parámetros y la mejora del mecanismo de filtración de señales.

Código Fuente de la Estrategia
/*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)