Estratégia de negociação bidirecional de entrada e saída do RSI


Data de criação: 2023-09-28 16:09:39 última modificação: 2023-09-28 16:09:39
cópia: 2 Cliques: 697
1
focar em
1617
Seguidores

Visão geral

Esta estratégia usa o indicador RSI para avaliar a tendência do mercado e enviar sinais de negociação em áreas de sobrevenda e sobrevenda, com o objetivo de capturar o movimento de ajuste de linha curta do mercado. Ele combina o indicador de linha de equilíbrio e a lógica de stop loss para filtrar os sinais de negociação e controlar o risco.

Princípio da estratégia

  1. Calcule o valor do indicador RSI ((14) e defina uma linha de sobrevenda de 67, e uma linha de sobrevenda de 44.

  2. Quando o RSI ultrapassa a linha de compra, emite um sinal de venda; quando o RSI ultrapassa a linha de venda, emite um sinal de compra.

  3. O filtro de linha média superposta só emite um sinal de compra e venda no RSI quando o preço de fechamento está abaixo do preço médio de ontem; só emite um sinal de compra no RSI quando o preço de fechamento está acima do preço médio de ontem.

  4. Configure a lógica de stop-loss. Pode optar por um stop-loss de ponto fixo ou um stop-loss baseado no RSI.

Análise de vantagens

  1. O indicador RSI é usado para avaliar os excessos de compra e venda e para capturar as oportunidades de correção de curto prazo.

  2. Filtragem em combinação com a linha de equilíbrio, evitando operações de reversão em uma tendência.

  3. Configure o Stop Loss para controlar a perda individual.

  4. A tendência é de que os investidores se preocupem com o mercado de ações, e não com o mercado de ações.

Riscos e soluções

  1. O RSI tem atraso e pode ter desvios que levam a falsos sinais. A solução é ajustar os parâmetros adequadamente ou usá-los em combinação com outros indicadores.

  2. O número de pontos de parada fixa pode ser muito grande ou muito pequeno. O trailing stop pode ser mais flexível.

  3. A parada fixa pode ser prematura ou com um número de pontos de parada insuficiente. Pode ser considerada uma parada baseada no valor do RSI ou ATR.

  4. A incapacidade de filtrar efetivamente oscilações de tendências, que podem levar a aberturas e perdas frequentes. Os parâmetros do RSI podem ser ajustados de forma apropriada ou outros filtros podem ser adicionados.

Direção de otimização

  1. Teste a eficácia do indicador RSI em diferentes parâmetros de ciclo.

  2. Ajustar os parâmetros do RSI para testar diferentes linhas de superaquecimento.

  3. Tente diferentes tipos de médias móveis ou outros indicadores de filtragem.

  4. Teste a eficácia da travagem fixa e a travagem dinâmica.

  5. Otimizar o valor do stop loss para que seja mais compatível com as leis de volatilidade do mercado.

  6. O novo campo de entrada tem condições de filtragem para evitar que os turbulentos se espalhem.

  7. Considere a combinação de vários períodos de tempo de verificação para melhorar a qualidade do sinal.

Resumir

Esta estratégia usa o indicador RSI para determinar a situação de sobrevenda e sobrevenda, combinando a linha de equilíbrio e o stop loss para negociação bidirecional. Pode capturar oportunidades de reversão do mercado em curto prazo. Com a otimização dos parâmetros e a complementação das condições de filtragem, pode aumentar ainda mais a eficácia do lucro da estratégia e controlar o risco.

Código-fonte da estratégia
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//© профешинил хомячело
//@version = 4

strategy("RSI Strategy Professional Хомячело", overlay=false)
length = input( 14 )
overSold = input( 44 )
overBought = input( 67 )
price = open
rsi = rsi(price, length)
band1 = hline(overSold, "overSold12", color=#C0C0C0)
band0 = hline(overBought, "overBought12", color=#C0C0C0)
plot(rsi, "RSI", color=color.red)
fill(band1, band0, color=color.black, transp=90, title="Background")
src = close
a = sma(src, 1)
aaa = strategy.opentrades + 1

n = input(defval = 0.0576923077, title = "AvgPrice - n")
//n = 0.0576923077

buysignal = crossover(rsi, overSold) and (a < (strategy.position_avg_price - n) or strategy.opentrades == 0)
sellsignal = crossunder(rsi, overBought) and (a > (strategy.position_avg_price + n) or strategy.opentrades == 0)


// crossover(rsi, overSold)
// crossunder(rsi, overBought)
if (not na(rsi))
    if(buysignal)
        strategy.entry("LONG", strategy.long, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000
    if(sellsignal)
        strategy.entry("SHORT", strategy.short, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000

//лонги орні       
    if(rsi < 15 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ЛОНГ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi < 20 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЛОНГ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//шорти орні
    if(rsi > 85 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ШОРТ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi > 80 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ШОРТ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")


//стоп-лосс і ціль

//rsi
rsion = input(defval = false, title = "Тейк-профіт по RSI")
rcl = input(defval = 73.0, title = "RSI тейк по лонгу")
rcs = input(defval = 44.0, title = "RSI тейк по шорту")
possize = input(defval = 250.0, title = "Маржа")
posp = input(defval = 3.0, title = "Плече")

//tick
ut = input(defval = false, title = "Тейк-профіт")
tar = input(defval = 4500.0, title = "Тейк-профіт у тіках")
us = input(defval = false, title = "Стоп-лосс")
stop = input(defval = 0.0, title = "Стоп-лосс у тіках")
tar:=tar/syminfo.mintick
stop:=stop/syminfo.mintick

if(ut==true and us==false)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, comment = "ТейкL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, comment = "ТейкS")
if(us==true and ut==false)
    strategy.exit(id="LX", from_entry = "LONG", loss = stop, comment = "СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", loss = stop, comment = "СтопS")
    
if(ut==true and us==true)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, loss = stop, comment ="Тейк/СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, loss = stop, comment ="Тейк/СтопS")
    
//закриття по rsi
if(rsion == 1 )
    pr = round(((a / strategy.position_avg_price - 1) * possize * posp), 2)
    ppr = round(((a / strategy.position_avg_price - 1) * 100 * posp), 2)
    spr = round((1 - (a / strategy.position_avg_price)) * possize * posp, 2)
    sppr = round((100 - (a / strategy.position_avg_price * 100)) * posp, 2)
    
    if(rsi > rcl)
        strategy.close(id="LONG", comment = "LT\n" + tostring(ppr) + "%\n" + tostring(pr) + "$\n" + tostring(a))
    if(rsi < rcs)
        strategy.close(id="SHORT", comment = "ST\n" + tostring(sppr) + "%\n" + tostring(spr) + "$\n" + tostring(a))