Backtesting y optimización de estrategias RSI


Fecha de creación: 2023-11-10 11:59:40 Última modificación: 2023-11-10 11:59:40
Copiar: 1 Número de Visitas: 858
1
Seguir
1617
Seguidores

Backtesting y optimización de estrategias RSI

Descripción general

Esta estrategia se basa en el índice de fuerza relativa (RSI) para juzgar sobrecompra y venta, y establece una posición inversa cuando el RSI alcanza la zona de sobrecompra y venta, con el objetivo de alcanzar una posición baja y alta. La estrategia es simple y eficiente para obtener ganancias capturando el fenómeno de sobrecompra y venta en el mercado a corto plazo.

Principio de estrategia

La estrategia utiliza solo el indicador RSI como señal de posición. Haga más cuando el RSI baje por debajo del mínimo establecido (default 20) y deje de hacer nada cuando el RSI suba por encima del máximo establecido (default 80).

En concreto, la lógica central de la estrategia es la siguiente:

  1. El indicador RSI es utilizado para determinar sobrecompra y sobreventa.
  2. Hacer más bajo el RSI
  3. El RSI se desvanecerá cuando llegue a los 80
  4. $ 100 por cada posición abierta
  5. Posiciones cerradas después de detener o detener
  6. En caso de pérdidas, se suspende la operación de 24 líneas K en la siguiente línea K.

Se puede ver que la estrategia es muy simple, mecánica, y casi no hay espacio para la optimización de parámetros. Utiliza puramente las características matemáticas del indicador RSI para obtener ganancias inversas en la inversión inversa de la zona de sobreventa en la zona de sobreventa.

Análisis de las ventajas

La mayor ventaja de esta estrategia es su simplicidad y eficacia.

  1. El uso de un solo indicador RSI no requiere un análisis técnico complejo.
  2. Es un sistema de intercambio completamente automático, sin influencias emocionales.
  3. Utiliza las características matemáticas de las variaciones de corto plazo del mercado para obtener ganancias, sin necesidad de predecir las tendencias del mercado.
  4. Normas de gestión de fondos y mecanismos de control de riesgos.

Además, la estrategia también establece un índice de stop loss para bloquear ganancias y controlar el riesgo, y un mecanismo de suspensión de operaciones para reducir la frecuencia de las operaciones. Esto permite que la estrategia obtenga ganancias estables con el mínimo riesgo.

Análisis de riesgos

Los principales riesgos de esta estrategia provienen de:

  1. Cuando la tendencia es muy fuerte, el RSI puede estar en una zona de sobrecompra o sobreventa durante mucho tiempo, con pocas posibilidades de reversión, y la estrategia será difícil de rentabilizar.

  2. El exceso de la configuración de stop loss puede causar una expansión de las pérdidas. Actualmente, el stop loss es del 3%, pero puede ser necesario ajustarlo al 1-2% para que sea más razonable.

  3. La frecuencia de las operaciones es demasiado alta para obtener ganancias y luego continuar con la construcción de posiciones. Se debe controlar adecuadamente la frecuencia de apertura de posiciones.

  4. Fijar 100 dólares por cada posición puede ser un exceso de concentración de riesgo que requiere ser optimizado como porcentaje de capital.

Dirección de optimización

De acuerdo con el análisis anterior, la estrategia puede ser optimizada en los siguientes aspectos:

  1. Aumentar los indicadores de tendencia, como el MA, y suspender la negociación cuando la tendencia no es clara.

  2. Optimización de la proporción de stop loss para ajustar el stop loss a un 1-2% más razonable, el stop loss se puede configurar como un stop float.

  3. Aumentar la frecuencia de apertura de las posiciones, como si solo se permitiera abrirlas una o dos veces en un período determinado.

  4. Modifique el capital fijo de $ 100 a un porcentaje de capital, como el 1%.

  5. Optimización de la combinación de parámetros, como el ciclo RSI, las zonas de sobrecompra y sobreventa.

  6. Aumentar el control de la posición, sin aumentar el capital de una sola transacción cuando se aumenta el capital inicial.

La optimización de los puntos anteriores puede reducir el riesgo de transacción y mejorar la estabilidad y la fiabilidad de la estrategia.

Resumir

Esta estrategia es en general muy simple y directa, a través de los indicadores de RSI para obtener ganancias de inversión a corto plazo. La ventaja es simple y eficiente, no necesita predicción, la lógica de negociación es clara, fácil de rastrear y verificar. Pero puede ser difícil de enfrentar la situación de la tendencia, existe un cierto riesgo de pérdida.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-02 00:00:00
end: 2023-11-09 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("rsi超买超卖_回测用", overlay=false, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash)
open_pos = input.int(50000, title = "每次开单资金(usdt)")
rsi_period = input.int(14, title = "rsi周期")
rsi_line      = input.float(20.0,      title='RSI触发线',      step=0.05)
stop_rsi_top_line = input.float(70, title = "顶部rsi止损线")
stop_rsi_bottom_line = input.float(30, title = "底部rsi止损线")
stop_loss_perc = input.float(0.03, title = "止损线")
stop_profit = input.float(0.01, title = "止盈")
loss_stop_trade_k = input.int(24, title = "亏损后x根K线不做交易")


rsiParam = ta.rsi(close, rsi_period)

var int failedTimes = 0
var bool stopTrade = false

// plot(rsiParam)

if stopTrade
    failedTimes += 1
    if failedTimes == loss_stop_trade_k
        failedTimes := 0
        stopTrade := false



// 获取当前持仓方向
checkCurrentPosition() =>
    strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0

curPosition = checkCurrentPosition()

// 当前持仓成本价
position_avg_price = strategy.position_avg_price


// 当前持单, 触达反向的rsi线,清仓
if curPosition > 0 and rsiParam >= stop_rsi_top_line
    strategy.close_all(comment = "closebuy")

if curPosition < 0 and rsiParam <= stop_rsi_bottom_line
    strategy.close_all(comment = "closesell")


// 止盈止损清仓
if curPosition > 0
    // if (position_avg_price - close) / close >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closebuy")
    //     stopTrade := true
    if (close - position_avg_price) / position_avg_price >= stop_profit
        // 止盈
        strategy.close_all(comment = "closebuy")



if curPosition < 0
    // if (close - position_avg_price) / position_avg_price >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closesell")
    //     stopTrade := true

    if (position_avg_price - close) / close >= stop_profit
        // 止盈
        strategy.close_all(comment = "closesell")


a = strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1)

if bar_index == a and strategy.closedtrades.profit(strategy.closedtrades - 1) < 0
    stopTrade := true

var float openPrice = 0.0



if rsiParam <= rsi_line and stopTrade == false
	strategy.entry("long", strategy.long, open_pos / close, comment = "long")
    if curPosition == 0
        openPrice := close
    strategy.exit("long_stop", "long", limit = openPrice * (1+stop_profit), stop=openPrice * (1-stop_loss_perc), comment = "closebuy")

if rsiParam >= 100 - rsi_line and stopTrade == false
    strategy.entry("short", strategy.short, open_pos / close, comment = "short")
    if curPosition == 0
        openPrice := close
    strategy.exit("short_stop", "short", limit = openPrice * (1-stop_profit), stop=openPrice * (1+stop_loss_perc), comment = "closesell")




plot(failedTimes)