Backtesting e Otimização de Estratégias RSI


Data de criação: 2023-11-10 11:59:40 última modificação: 2023-11-10 11:59:40
cópia: 1 Cliques: 858
1
focar em
1617
Seguidores

Backtesting e Otimização de Estratégias RSI

Visão geral

Esta estratégia baseia-se em um índice de força relativa (RSI) para julgar a sobrevenda e a sobrevenda, estabelecendo uma posição de reversão quando o RSI atinge a zona de sobrevenda e sobrevenda, com o objetivo de alcançar um baixo preço de compra e venda. A estratégia é simples e eficiente, obtendo lucro capturando o fenômeno de sobrevenda e venda de curto prazo no mercado.

Princípio da estratégia

A estratégia usa apenas o indicador RSI como sinal de construção de posição. Faça mais quando o RSI atravessa a baixa definida abaixo (default 20) e feche quando o RSI atravessa a alta definida acima (default 80).

A lógica central da estratégia é:

  1. O indicador RSI é usado para avaliar o excesso de compra e venda.
  2. RSI, 20 horas de trabalho extra
  3. O RSI está em 80 e está em branco.
  4. 100 dólares por cada posição.
  5. Posições de liquidação pós-stop ou stop loss
  6. Se a perda é na próxima linha K, suspenda 24 linhas K sem negociação

A estratégia é muito simples, mecânica, e quase não há espaço para otimização de parâmetros. Ela usa puramente as características matemáticas do indicador RSI para obter lucros inversos na posição inversa nas áreas de sobrevenda e sobrevenda.

Análise de vantagens

A maior vantagem dessa estratégia é a sua simplicidade e eficácia.

  1. O uso de um único indicador RSI, sem a necessidade de uma análise técnica complexa.
  2. O sistema de negociação é totalmente automático e não é influenciado por emoções pessoais.
  3. O mercado de ações é um mercado de ações que se desenvolve de forma independente e não precisa de previsão de mercado.
  4. Normas de gestão de fundos, mecanismo de suspensão de perdas e controle de risco.

Além disso, a estratégia também configura um stop loss para bloquear os lucros e controlar o risco, e um mecanismo de suspensão de negociação para reduzir a frequência de negociação. Isso permite que a estratégia obtenha lucros estáveis com o mínimo de risco.

Análise de Riscos

Os principais riscos dessa estratégia são:

  1. Quando a tendência é muito forte, o RSI pode ficar por muito tempo na zona de sobrecompra ou sobrevenda, com pouca chance de reversão, e a estratégia será difícil de lucrar.

  2. A configuração de stop loss excessiva pode levar à expansão dos prejuízos. Atualmente, o stop loss é de 3%, mas pode ser necessário ajustá-lo para 1 a 2%, o que é mais razoável.

  3. A frequência de negociação excessiva é fácil de lucrar e continuar a construir posições. A frequência de abertura de posições deve ser controlada adequadamente.

  4. Fixação de capital de US$ 100 por abertura de posição pode ser uma concentração excessiva de risco e precisa ser otimizada como uma porcentagem de capital.

Direção de otimização

De acordo com a análise acima, a estratégia pode ser otimizada em vários aspectos:

  1. Aumentar os indicadores de tendência, como o MA, e suspender a negociação quando a tendência não é clara.

  2. Otimizar a proporção de stop loss para ajustar o stop loss em 1 a 2%, o stop loss pode ser configurado como um stop floating.

  3. Aumentar o limite de frequência de abertura de uma posição, como uma ou duas aberturas em um determinado período de tempo.

  4. Modifique o capital fixo de US$ 100 em porcentagem de capital, como 1%.

  5. Optimização de combinações de parâmetros, como o ciclo RSI, as zonas de sobrecompra e sobrevenda.

  6. Aumentar o controle de posição, sem aumentar o capital de transação individual ao aumentar o capital inicial.

Otimizando os pontos acima, você pode reduzir o risco de negociação e aumentar a estabilidade e a confiabilidade da estratégia.

Resumir

Esta estratégia é geralmente muito simples e direta, através do indicador RSI para obter lucro de retorno a curto prazo. Os benefícios são simples e eficientes, sem necessidade de previsão, a lógica de negociação é clara, fácil de rastrear e verificar. Mas pode ser difícil de lidar com a situação da tendência, há um certo risco de perda.

Código-fonte da estratégia
/*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)