SMA RSI & Estratégia de compra e venda súbita

Autora:ChaoZhang, Data: 2023-12-20 17:33:04
Tags:

img

Resumo

Esta estratégia usa principalmente o valor médio do RSI e mudanças repentinas de preços para identificar tendências de mercado e pontos de reversão.

Princípios

  1. Calcule a SMA do RSI. Quando o RSI cruza a SMA acima de 60 ou cai abaixo de 40, é considerado sobrecomprado ou sobrevendido, e as posições reversas serão consideradas.

  2. Quando a variação do RSI excede um determinado valor, é considerada uma mudança súbita.

  3. Utilize várias EMAs para filtragem. Somente quando o preço cruzar acima da EMA de período mais curto, a posição longa será considerada. Somente quando o preço cair abaixo da EMA de período mais curto, a posição curta será considerada.

  4. Ao combinar a utilização da média do RSI, das alterações súbitas e da filtragem da EMA, podem ser identificados melhores pontos de entrada.

Análise das vantagens

  1. Usando a média do RSI pode julgar com precisão as condições de sobrecompra e sobrevenda, o que é propício para capturar oportunidades de reversão.

  2. Mudanças repentinas muitas vezes significam mudanças na tendência e direção do preço, usando este sinal pode melhorar a puntualidade das entradas.

  3. A filtragem da EMA a vários níveis pode evitar ainda mais falsos sinais e reduzir perdas desnecessárias.

  4. A combinação de vários parâmetros como critérios de decisão pode aumentar a estabilidade e a fiabilidade da estratégia.

Riscos e atenuações

  1. O desempenho do RSI pode ser instável e a taxa de acerto da SMA pode ser baixa. Os parâmetros do RSI podem ser otimizados ou outros indicadores podem substituí-lo.

  2. As mudanças súbitas podem ser apenas flutuações de curto prazo, em vez de reais inversões.

  3. Há um atraso na filtragem da direção da EMA. Teste EMAs de período mais curto para melhorar a sensibilidade.

  4. Em geral, essa estratégia é bastante sensível ao ajuste de parâmetros. Testes cuidadosos são necessários para encontrar combinações ótimas de parâmetros. Use stop loss para controlar riscos.

Sugestões de otimização

  1. Teste outros indicadores como ADX, MACD combinado com RSI para encontrar melhores pontos de entrada.

  2. Aumentar os algoritmos de aprendizagem de máquina para julgar a autenticidade e a estabilidade dos sinais súbitos de compra/venda.

  3. Reforçar ainda mais a filtragem da direcção da EMA, por exemplo através da utilização de um julgamento composto de diferentes EMA de períodos.

  4. Adicionar uma estratégia de stop loss adaptativa para ajustar dinamicamente o intervalo de stop loss com base na volatilidade do mercado.

  5. Continuar a otimização de parâmetros para encontrar combinações ótimas de parâmetros.

Conclusão

Esta estratégia usa em primeiro lugar a média do RSI para determinar as condições de sobrecompra / sobrevenda. As posições inversas são estabelecidas quando ocorrem mudanças repentinas. O EMA também é usado como um filtro auxiliar. Com configurações de parâmetros adequadas, esta estratégia pode determinar efetivamente as mudanças de tendência do mercado.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © samwillington

//@version=5


strategy("sma RSI & sudden buy and sell Strategy v1", overlay=true)
price = close
length = input( 14 )
inst_length = input( 10 )
var rbc = 0
var float rsiBP = 0.0
var rsc = 0
var float rsiSP = 0.0
bars = input(10)

lookbackno2 = input.int(20)
rsi_buy = 0
rsi_sell = 0



//EMA inputs

input_ema20 = input.int(20)
ema20 = ta.ema(price, input_ema20)
input_ema50 = input.int(50)
ema50 = ta.ema(price, input_ema50)
input_ema100 = input.int(100)
ema100 = ta.ema(price, input_ema100)
input_ema200 = input.int(200)
ema200 = ta.ema(price, input_ema200)
input_ema400 = input.int(400)
ema400 = ta.ema(price, input_ema400)
input_ema800 = input.int(800)
ema800 = ta.ema(price, input_ema800)


vrsi = ta.rsi(price, length)


hi2 = ta.highest(price, lookbackno2)
lo2 = ta.lowest(price, lookbackno2)

buy_diff_rsi = vrsi - ta.rsi(close[1], length)
sell_diff_rsi = ta.rsi(close[1],length) - vrsi


//RSI high low

var int sudS = 0
var int sudB = 0
var float sudSO = 0.0
var float sudSC = 0.0
var float sudBO = 0.0
var float sudBC = 0.0
var sudBuy = 0
var sudSell = 0 
var countB = 0
var countS = 0



var co_800 = false
var co_400 = false
var co_200 = false
var co_100 = false
var co_50 = false
var co_20 = false

co_800 := ta.crossover(price , ema800)
co_400 := ta.crossover(price , ema400)
co_200 := ta.crossover(price , ema200)
co_100 := ta.crossover(price , ema100)
co_50 := ta.crossover(price , ema50)
co_20 := ta.crossover(price , ema20)

if(ta.crossunder(price , ema20))
    co_20 := false
if(ta.crossunder(price , ema50))
    co_50 := false
if(ta.crossunder(price , ema100))
    co_100 := false
if(ta.crossunder(price , ema200))
    co_200 := false
if(ta.crossunder(price , ema400))
    co_400 := false
if(ta.crossunder(price , ema800))
    co_800 := false
    
if((price> ema800) and (price > ema400))
    if(co_20)
        if(co_50)
            if(co_100)
                if(co_200)
                    strategy.close("Sell")
                    strategy.entry("Buy", strategy.long, comment="spl Buy")
                    co_20 := false
                    co_50 := false
                    co_100 := false
                    co_200 := false



// too much rsi

if(vrsi > 90)
    strategy.close("Buy")
    strategy.entry("Sell", strategy.short, comment="RSI too overbuy")
if(vrsi < 10)
    strategy.close("Sell")
    strategy.entry("Buy", strategy.long, comment="RSI too oversold")


var sudbcount = 0  // counting no. of bars till sudden rise
var sudscount = 0  // counting no. of bars till sudden decrease



if(sudB == 1)
    sudbcount := sudbcount + 1
if(sudS == 1)
    sudscount := sudscount + 1


if((buy_diff_rsi > inst_length) and (hi2 > price))
    sudB := 1
    sudBO := open
    sudBC := close
if((sell_diff_rsi > inst_length) )
    sudS := 1
    sudSO := open
    sudSC := close   

if(sudbcount == bars)
    if(sudBC < price)
        strategy.close("Sell")
        strategy.entry("Buy", strategy.long, comment="sudd buy")
        sudbcount := 0
        sudB := 0
    sudbcount := 0
    sudB := 0
if(sudscount == bars) 
    if(sudSC > price)
        strategy.close("Buy")
        strategy.entry("Sell", strategy.short, comment="sudd sell")
        sudscount := 0
        sudS := 0
    sudscount := 0
    sudS := 0


over40 = input( 40 )
over60 = input( 60 )
sma =ta.sma(vrsi, length)
coo = ta.crossover(sma, over60)
cuu = ta.crossunder(sma, over40)

if (coo)
    strategy.close("Sell")
	strategy.entry("Buy", strategy.long, comment="modified buy")
if (cuu)
    strategy.close("Buy")
	strategy.entry("Sell", strategy.short, comment="modefied sell")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

Mais.