Estrategia de trading de reversión basada en el indicador RSI


Fecha de creación: 2024-01-30 17:06:45 Última modificación: 2024-01-30 17:06:45
Copiar: 0 Número de Visitas: 642
1
Seguir
1617
Seguidores

Estrategia de trading de reversión basada en el indicador RSI

Descripción general

Esta estrategia utiliza el indicador RSI para identificar el estado de mercado en el que las acciones son sobrecompradas y sobrevendidas, se forman en el área de sobrecompra y se forman en el área de venta, y se forman en el área de venta. Se trata de una estrategia de negociación de inversión basada en indicadores. Esta estrategia, combinada con el seguimiento de la tendencia y el stop loss fijo, puede controlar eficazmente el riesgo de negociación.

Principio de estrategia

Las señales de negociación de esta estrategia se basan en el indicador RSI. El indicador RSI generalmente tiene 30 como línea de sobreventa y 70 como línea de sobreventa. Cuando se cruza la línea de sobreventa en el indicador RSI, se genera una señal de compra; cuando se cruza la línea de sobreventa en el indicador RSI, se genera una señal de venta. De acuerdo con este principio, la estrategia determina la formación de zonas de sobreventa y, en consecuencia, genera una señal de sobreventa.

Después de entrar en el mercado, la estrategia utiliza el método de seguimiento de pérdidas por porcentaje, mediante la actualización continua del precio más alto o más bajo, y deja un determinado porcentaje como punto de parada. También se utiliza una distancia de parada fija para detener la pérdida, que se detiene cuando se alcanza el objetivo de ganancias o pérdidas máximas. Esta combinación puede controlar el riesgo de la operación.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El uso del indicador RSI para determinar zonas de sobreventa y sobrecompra es una técnica de negociación más madura que permite capturar con mayor precisión los puntos de inflexión del mercado.

  2. El método de la horquilla dorada puede filtrar parte del ruido de las señales de transacción, lo que hace que las transacciones sean más fiables.

  3. La combinación de un stop-loss de seguimiento de tendencias puede maximizar el bloqueo de ganancias, al mismo tiempo que puede detenerse rápidamente y reducir las pérdidas individuales.

  4. La distancia fija de stop loss también puede controlar el riesgo de una sola transacción.

  5. En general, las reglas de la estrategia son claras, fáciles de entender y de implementar, y son adecuadas para que los principiantes aprendan a comerciar con cantidades.

Análisis de riesgos

La estrategia también tiene los siguientes riesgos:

  1. Los indicadores RSI son propensos a generar señales erróneas, con una mayor probabilidad de ruptura de la forma técnica, lo que puede provocar que se active el stop loss.

  2. La distancia fija del stop-loss no puede ajustarse a la volatilidad del mercado, lo que puede provocar un stop-loss prematuro o un stop-loss ampliado.

  3. El porcentaje de seguimiento del stop loss sólo sigue los puntos más altos o más bajos de los precios, y puede ser demasiado radical para que no sea rentable.

  4. Riesgo de ajuste de datos de retroalimentación. Los parámetros de la estrategia pueden ser optimizados para datos históricos y pueden tener un rendimiento inferior en aplicaciones reales.

  5. La frecuencia de las transacciones puede ser excesiva, lo que aumenta los costos de las transacciones y el riesgo de deslizamiento.

Dirección de optimización

La estrategia puede ser optimizada en las siguientes direcciones:

  1. Optimización de los parámetros del RSI, búsqueda de la combinación óptima de parámetros del indicador y mejora de la calidad de la señal.

  2. Se añade un filtro de otros indicadores para formar resonancias de varios indicadores y mejorar la precisión de la señal.

  3. Se utiliza un mecanismo de parada de pérdidas adaptativo que ajusta automáticamente el punto de parada de pérdidas según las fluctuaciones del mercado.

  4. Aumentar el módulo de control de la frecuencia de las transacciones, reducir el número de transacciones y reducir los gastos de transacción.

  5. Aumentar el módulo de administración de fondos, controlar el tamaño de las transacciones individuales y reducir las pérdidas individuales.

  6. La estabilidad de los parámetros se comprueba con un período de tiempo más largo.

Resumir

Esta estrategia en su conjunto es una estrategia de inversión típica, que utiliza el indicador RSI para determinar las zonas de sobreventa y sobreventa, para generar señales de negociación. Y utiliza un stop loss de seguimiento de tendencias y un stop loss fijo para controlar el riesgo. La lógica de la estrategia es clara, fácil de implementar y adecuada para el aprendizaje y la práctica de los principiantes en el comercio cuantitativo.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Author: © JoshuaMcGowan
// Taken from https://www.tradingview.com/script/GbZGYi6l-Adding-some-essential-components-to-a-prebuilt-RSI-strategy/
// Just updated to compile in version 4. 

//@version=4

strategy("Adding some essential components to a prebuilt RSI strategy", overlay=true)

/////////////// Component Code Start ///////////////

testStartYear = input(2011, "Backtest Start Year") 
testStartMonth = input(8, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2100, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(29, "Backtest Stop Day")
// testStopDay = testStartDay + 1
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
    
/////////////// Component Code Stop ///////////////

// Replace RSI Component, Long/Short, and Long Signal/Short Signal conditions with your trade setup components.
///////////// RSI component /////////////

length = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close

vrsi = rsi(price, length)
notna = not na(vrsi)

/////////////// STRATEGY ///////////////

ts = input(99999, "Trailing Stop") / 100
tp = input(99999, "Take Profit") / 100
sl = input(99999, "Stop Loss") / 100

// Update this with your setup. 
long = notna and crossover(vrsi, overSold)
short = notna and crossunder(vrsi, overBought)

last_long = 0
last_short = 0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

// Update this to reflect your setup. 
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

float last_open_long_signal = 0
float last_open_short_signal = 0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0
last_short_signal = 0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

float last_high = 0
float last_low = 0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

long_ts = not na(last_high) and high <= (last_high - ts) //and high >= last_open_long_signal
short_ts = not na(last_low) and low >= (last_low + ts) //and low <= last_open_short_signal

long_tp = high >= (last_open_long_signal + tp)
short_tp = low <= (last_open_short_signal - tp)

long_sl = low <= (last_open_long_signal - sl)
short_sl = high >= (last_open_short_signal + sl)

leverage = input(200, "Leverage")
long_call = last_open_long_signal - (0.8 + 0.2 * (1/leverage)) / leverage * last_open_long_signal
short_call = last_open_short_signal + (0.78 + 0.2 * (1/leverage)) / leverage * last_open_short_signal
long_call_signal = low <= long_call
short_call_signal = high >= short_call

if testPeriod()
    strategy.entry("Long", strategy.long, when=long_signal)
    strategy.entry("Short", strategy.short, when=short_signal)

    // plot(long_call, color=color.red)
    // plot(short_call, color=color.green)
    strategy.close("Long", when=long_call_signal)
    strategy.close("Short", when=short_call_signal)
    strategy.close("Long", when=long_tp)
    strategy.close("Short", when=short_tp)
    strategy.close("Long", when=long_sl)
    strategy.close("Short", when=short_sl)
    strategy.close("Long", when=long_ts)
    strategy.close("Short", when=short_ts)