Estratégia de scalping baseada no indicador RSI com trailing stop loss

Autora:ChaoZhang, Data: 2023-12-12 15:46:49
Tags:

img

Resumo

Esta estratégia é chamada de Scalping Strategy baseada no Indicador RSI com Trailing Stop Loss. Utiliza o indicador RSI para determinar condições de sobrecompra e sobrevenda, combina com médias móveis (MA) rápidas e lentas para determinar a direção da tendência e define as condições de entrada.

Estratégia lógica

Os sinais de entrada desta estratégia são principalmente determinados pelo indicador RSI e cruzamento MA. O parâmetro RSI é definido em 2 períodos para capturar rapidamente situações de sobrecompra e sobrevenda para oportunidades de reversão. O MA rápido e o MA lento são definidos em 50 e 200 períodos, respectivamente, para identificar a direção da tendência. Especificamente, a lógica de entrada é:

Introdução longa: a MA rápida cruza acima da MA lenta, o preço está acima da MA lenta e o RSI está abaixo do nível de sobrevenda (default 10%); Entrada curta: MA rápida cruza abaixo de MA lenta, o preço está abaixo de MA lenta e o RSI está acima do nível de sobrecompra (default 90%).

A estratégia também possui um filtro de volatilidade opcional que calcula a diferença entre as inclinações de MAs rápidos e lentos. As posições só serão abertas quando a diferença exceder um limite.

No lado da saída, a estratégia usa percentual de stop loss. Com base na porcentagem de entrada, ele calcula o preço de stop loss combinado com o tamanho do tick, para ajustar dinamicamente o stop loss.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. O RSI definido em 2 períodos pode capturar rapidamente situações de sobrecompra e sobrevenda para oportunidades de reversão.
  2. Os MAs rápidos e lentos podem identificar eficazmente a direcção da tendência e os pontos de virada.
  3. A combinação de indicadores duplos RSI e MA evita falhas.
  4. O filtro de volatilidade evita a abertura de posições quando não há uma direção clara durante a flutuação.
  5. A percentagem de perdas de paralisação pode ajustar o nível de perdas de paralisação com base na volatilidade do mercado para controlar efetivamente os riscos.

Análise de riscos

Esta estratégia apresenta também alguns riscos:

  1. Os indicadores RSI e MA têm algum efeito de atraso, podem perder algumas oportunidades de reversão.
  2. A percentagem de stop loss é susceptível de ser desencadeada em baixas quedas de volume.
  3. As variações significativas dos preços durante o dia e antes do mercado não são tratadas de forma eficaz.

As direcções de otimização dos riscos são:

  1. Ajustar o parâmetro RSI a 1 período para reduzir o efeito de atraso.
  2. Otimizar os períodos de MA com base nas características dos símbolos.
  3. Ajustar o nível percentual de stop loss para equilibrar entre stop loss e tolerância à flutuação.

Orientações de otimização

As direcções de otimização para esta estratégia são:

  1. Adicionar outros juízos de indicadores, como volume, para evitar falsos sinais de ruptura.
  2. Adicionar previsões de modelos de aprendizagem de máquina para ajudar na tomada de decisão.
  3. Otimizar os tempos de pirâmide e o dimensionamento da posição para melhorar ainda mais o retorno.
  4. Configure filtros para oscilações de preços do dia a dia e pré-mercado.

Conclusão

Em geral, esta é uma estratégia de tendência relativamente estável. Ao combinar indicadores duplos de RSI e MA, ele garante certa estabilidade enquanto captura oportunidades mais claras de reversão de tendência. O filtro de volatilidade evita alguns riscos e o stop loss percentual também controla efetivamente a perda de uma única negociação. Esta estratégia pode ser usada como uma estratégia genérica de vários símbolos e também pode ser otimizada em parâmetros e modelos para símbolos específicos para alcançar melhores resultados.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// Scalping strategy
// © Lukescream and Ninorigo
// (original version by Lukescream - lastest versions by Ninorigo) - v1.3
//

//@version=4
strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false)

var bool ConditionEntryL = false
var bool ConditionEntryS = false


//***********
// Costants
//***********
def_start_date = timestamp("01 Jan 2021 07:30 +0000")
def_end_date   = timestamp("01 Dec 2024 07:30 +0000")

def_rsi_length = 2
def_overbought_value = 90
def_oversold_value   = 10

def_slow_ma_length = 200
def_fast_ma_length = 50
def_ma_choice      = "EMA"

def_tick   = 0.5
def_filter = true

def_trailing_stop = 1


//***********
// Change the optional parameters
//***********
start_time  = input(title="Start date", defval=def_start_date, type=input.time)
end_time    = input(title="End date", defval=def_end_date, type=input.time)
// RSI
src         = input(title="Source", defval=close, type=input.source)
rsi_length  = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer)
overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float)
oversold_threshold   = input(title="Oversold threshold", defval=def_oversold_value, type=input.float)
// Moving average
slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer)
fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer)
ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"])
// Input ticker
tick   = input(title="Ticker size", defval=def_tick, type=input.float)
filter = input(title="Trend Filter", defval=def_filter, type=input.bool)
// Trailing stop (%)
ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float)


//***********
// RSI
//***********
// Calculate RSI
up   = rma(max(change(src), 0), rsi_length)
down = rma(-min(change(src), 0), rsi_length)
rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down)))


//***********
// Moving averages
//***********
slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length))
fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length))
// Show the moving averages
plot(slow_ma, color=color.white,  title="Slow MA")
plot(fast_ma, color=color.yellow, title="Fast MA")


//***********
// Strategy
//***********
if true
    // Determine the entry conditions (only market entry and market exit conditions)
    // Long position
    ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold))
    // Short position
    ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold))
   
    // Calculate the trailing stop
    ts_calc = close * (1/tick) * ts_rate * 0.01

    // Submit the entry orders and the exit orders
    // Long position
    if ConditionEntryL
        strategy.entry("RSI Long", strategy.long)
    // Exit from a long position
    strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc)

    // Short position 
    if ConditionEntryS
        strategy.entry("RSI Short", strategy.short)
    // Exit from a short position
    strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc)

// Highlights long conditions
bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band")
// Highlights short conditions
bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")


Mais.