Estrategia de captura de volatilidad basada en el RSI siguiendo tendencias


Fecha de creación: 2024-02-04 10:48:38 Última modificación: 2024-02-04 10:48:38
Copiar: 0 Número de Visitas: 595
1
Seguir
1617
Seguidores

Estrategia de captura de volatilidad basada en el RSI siguiendo tendencias

Descripción general

La estrategia de captura de oscilación RSI de tendencia (Trend Riding RSI Swing Capture Strategy) es una estrategia de negociación de oscilación que combina el RSI, el MACD y el análisis de volumen de transacción. La estrategia identifica los puntos de soporte de la tendencia del mercado y abre posiciones invertidas cuando se produce un exceso de compra y venta, con el objetivo de comprar y vender.

El principio

Los indicadores centrales de la estrategia son el RSI, el MACD y el volumen de transacciones. La lógica específica es:

  1. Para determinar si el RSI se encuentra en el rango de sobrecompra o sobreventa, para confirmar el momento de la próxima reversión;

  2. El MACD se utiliza para determinar la tendencia de los precios y los cambios en la energía como condición auxiliar de entrada.

  3. La brecha en el volumen de transacciones sirve para juzgar las brechas reales y evitar las falsas señales.

Las señales de negociación se emiten cuando se cumplen las tres condiciones anteriores, y la dirección de la brecha depende de la dirección de la brecha. Esto puede filtrar eficazmente las brechas falsas y mejorar la fiabilidad de la señal.

Las ventajas

La mayor ventaja de esta estrategia reside en su excelente gestión de riesgos. La estrategia establece estrictas reglas de administración de fondos, como stop loss móvil, stop loss fijo y volumen de transacción fijo, que pueden controlar eficazmente el riesgo de una sola transacción y garantizar la seguridad de los fondos. Además, la estrategia también combina el volumen de transacciones para filtrar falsas rupturas y evitar transacciones innecesarias.

El riesgo

Ninguna estrategia de negociación puede evitar completamente el riesgo de mercado, y esta estrategia no es la excepción. Los principales riesgos se concentran en:

  1. El stop loss se rompe. En casos extremos, los precios pueden fluctuar mucho en un instante. Si el stop loss se rompe directamente, se enfrentan a grandes pérdidas.

  2. La configuración incorrecta de los parámetros como el RSI, MACD puede reducir la calidad de la señal de negociación y generar demasiadas señales erróneas.

Para los riesgos mencionados anteriormente, se puede mitigar mediante la optimización de los algoritmos de parada de pérdidas, la introducción de trazado de parada, etc. Al mismo tiempo, se debe probar y optimizar repetidamente los parámetros clave para garantizar su estabilidad y fiabilidad.

Dirección de optimización

En el marco de la estrategia actual, los principales puntos de mejora son:

  1. Aumentar los algoritmos de aprendizaje automático para realizar el seguimiento dinámico de los puntos de parada.

  2. Se añaden más indicadores de filtración, como la banda de Brin, KD, etc., para mejorar la calidad de la señal. Se reduce la inversión innecesaria.

  3. Optimización de las estrategias de gestión de fondos y ajuste de posiciones en tiempo real.

  4. Utiliza análisis de datos avanzados para buscar automáticamente los parámetros óptimos y reduce el trabajo de las pruebas manuales.

  5. Aumentar las señales de negociación basadas en el flujo de órdenes.

Resumir

La estrategia de captura de fluctuaciones de RSI en el curso de la tendencia es una estrategia de negociación de línea corta muy práctica en general. Considera la tendencia de los movimientos de precios y la tendencia de sobrecompra y sobreventa, y se combina con el filtro de volumen de transacción para formar un sistema de negociación relativamente estable. Bajo una estricta gestión de riesgos, la estrategia puede obtener ganancias estables en diversas situaciones.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// SwingSync RSI Strategy
// This strategy combines RSI, MACD, and volume analysis to capture swing trading opportunities.
// It includes risk management features to protect your capital.
// Adjust the input parameters and backtest to optimize performance.// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © str0zzapreti

//@version=5
strategy('SwingSync RSI', overlay=true)
// Adjustable Parameters
// var custom_message = input.string('', title='Symbol')
ma_period = input.int(20, title='Moving Average Period')
stop_loss_percent = input.float(1, title='STOP LOSS (%)',step=0.1)
macd_fast_length = input(12, title='MACD Fast Length')
macd_slow_length = input(26, title='MACD Slow Length')
macd_signal_smoothing = input(9, title='MACD Signal Smoothing')
rsi_period = input(14, title='RSI Period')
rsi_overbought = input(70, title='RSI OVERBOUGHT LEVEL')
rsi_oversold = input(30, title='RSI OVERSOLD LEVEL')
volume_ma_period = input(20, title="Volume MA Period")
volume_threshold_percent = input(50, title="Volume Threshold (%)")
slippage = 0.5
risk_per_trade = input(1, title='Risk per Trade (%)')

// Calculating Indicators *
price = close
ma = ta.sma(price, ma_period)
rsi = ta.rsi(price, rsi_period)
vol_ma = ta.sma(volume, volume_ma_period)
[macdLine, signalLine, _] = ta.macd(price, macd_fast_length, macd_slow_length, macd_signal_smoothing)
volume_threshold = vol_ma * (1 + volume_threshold_percent / 100)

// Definitions
volumeCheck = volume > volume_threshold
longRsiCheck = rsi < rsi_overbought
longMovAvgCross = ta.crossover(price, ma)
longMovAvgCheck = price > ma
longMacdCross = ta.crossover(macdLine, signalLine)
longMacdCheck = macdLine > signalLine
shortRsiCheck = rsi > rsi_oversold
shortMovAvgCross = ta.crossunder(price, ma)
shortMovAvgCheck = price < ma
shortMacdCross = ta.crossunder(macdLine, signalLine)
shortMacdCheck = macdLine < signalLine

// Entry Conditions for Long and Short Trades
longCondition = volumeCheck and longRsiCheck and ((longMovAvgCross and longMacdCheck) or (longMacdCross and longMovAvgCheck)) 
shortCondition = volumeCheck and shortRsiCheck and  ((shortMovAvgCross and shortMacdCheck) or (shortMacdCross and shortMovAvgCheck)) 

// Tracking Last Trade Day
var int last_trade_day = na

if longCondition or shortCondition
    last_trade_day := dayofweek

// Calculate can_exit_trade based on day difference
can_exit_trade = dayofweek != last_trade_day

// Entry Orders
var float max_qty_based_on_equity = na
var float qty = na

if longCondition
    max_qty_based_on_equity := strategy.equity / price
    qty := (strategy.equity * risk_per_trade / 100) / price
    if qty > max_qty_based_on_equity
        qty := max_qty_based_on_equity
    strategy.entry('Long', strategy.long, 1)

if shortCondition
    max_qty_based_on_equity := strategy.equity / price
    qty := (strategy.equity * risk_per_trade / 100) / price
    if qty > max_qty_based_on_equity
        qty := max_qty_based_on_equity
    strategy.entry('Short', strategy.short, 1)

// Exit Conditions
exitLongCondition = ta.crossunder(price, ma) or rsi > rsi_overbought
exitShortCondition = ta.crossover(price, ma) or rsi < rsi_oversold

// Calculate take profit and stop loss levels
stopLossLevelLong = strategy.position_avg_price * (1 - stop_loss_percent / 100)
stopLossLevelShort = strategy.position_avg_price * (1 + stop_loss_percent / 100)

// Adjust for slippage
adjusted_stop_loss_long = stopLossLevelLong * (1 + slippage / 100)
adjusted_stop_loss_short = stopLossLevelShort * (1 - slippage / 100)

// Strategy Exit Orders for Long Positions
if strategy.position_size > 0 and can_exit_trade
    if (close < adjusted_stop_loss_long)
        strategy.close('Long', comment='Stop Loss Long')
    if exitLongCondition
        strategy.close('Long', comment='Exit Long')

// Strategy Exit Orders for Short Positions
if strategy.position_size < 0 and can_exit_trade
    if (close > adjusted_stop_loss_short)
        strategy.close('Short', comment='Stop Loss Short')
    if exitShortCondition
        strategy.close('Short', comment='Exit Short')

plot(ma)