
A estratégia de negociação de desvio do indicador RSI dá sinais de compra e venda através da identificação do desvio entre o indicador RSI e a movimentação do preço. A estratégia possui simultaneamente funções de parada de perda, parada de parada e rastreamento de perda para controlar o risco de forma eficaz.
A estratégia identifica oportunidades de negociação com base no desvio do indicador RSI. Concretamente, a estratégia primeiro calcula o valor do RSI em um determinado período e, em seguida, traça uma linha de tendência do indicador RSI. Ao mesmo tempo, a estratégia também traça uma linha de tendência do preço. Quando a linha RSI e a linha de preço se desviam, ou seja, quando o RSI sobe e o preço cai ou o RSI cai e o preço sobe, a estratégia julga que uma reversão pode ocorrer, gerando um sinal de negociação.
Se você identificar que o RSI está subindo e o preço está subindo, dê um sinal de compra. Se você identificar que o RSI está subindo e o preço está subindo, dê um sinal de venda. Uma vez que o sinal de negociação é formado, a estratégia pode ser feita de acordo com o tamanho do valor do RSI.
Além disso, a estratégia também configura paradas de perda, paradas de perda e rastreamento de perdas. Paradas de perda controlam o risco de perda, paradas de perda bloqueiam os lucros e rastreamento de perda permite que os lucros continuem funcionando. Essas configurações gerenciam efetivamente o risco de cada transação.
A estratégia de desvio do RSI tem as seguintes vantagens:
Ao capturar o desvio do indicador RSI, pode-se detectar uma reversão de preço mais cedo.
O indicador RSI é amplamente utilizado e a maioria dos softwares de negociação incorporam o indicador RSI. A estratégia é bastante útil.
A configuração dos parâmetros do indicador RSI é flexível e pode ser ajustada de acordo com o ciclo de observação do mercado, adaptando-se a diferentes situações.
A combinação de Stop Loss, Stop Stop e Stop Loss Tracking permite um controle eficaz do risco de cada transação.
A estratégia é negociar com uma frequência de sinais moderada, evitando transações excessivamente intensas.
A estratégia é clara e fácil de entender, e é fácil de ser implementada por um programa de computador.
A estratégia também apresenta alguns riscos:
A desviação do RSI não é 100% confiável e pode produzir falsos sinais. É necessário combinar os sinais de filtragem de outros indicadores.
Em situações de tendência, o sinal de desvio do RSI pode falhar e deve ser evitado.
A configuração inadequada dos parâmetros do RSI também afeta a eficácia da estratégia. A configuração de um ciclo muito curto aumenta a frequência de negociação e o risco.
Se o ponto de parada for pequeno demais, pode ocorrer uma parada prematura; se for grande demais, o risco não pode ser controlado de forma eficaz. É necessário um equilíbrio.
O tracking stop pode ocorrer prematuramente em situações de alta volatilidade. É necessário definir um tracking stop razoável, combinado com a volatilidade do mercado.
Os riscos podem ser mitigados através das seguintes medidas:
Adicionar outros indicadores, como MACD, linhas de Brin e outros para filtragem de sinais, reduzindo os falsos sinais.
A estratégia é usada apenas em situações de agitação, evitando evidentes tendências.
Optimizar as configurações de parâmetros do RSI, escolher a melhor duração de ciclo e testar as preferências de parâmetros de diferentes mercados.
De acordo com os dados de retrospectiva histórica, estabeleça uma posição de parada e parada razoável.
A quantidade de tracking stop é ajustada de acordo com a volatilidade do mercado e as preferências de risco.
A estratégia pode ser otimizada em:
Adicionar outros critérios de avaliação para filtrar sinais de negociação e aumentar a confiabilidade dos sinais.
Otimizar automaticamente a configuração dos parâmetros do RSI usando técnicas de aprendizado de máquina.
De acordo com diferentes padrões de mercado, desenhe algoritmos de stop loss dinâmicos. Por exemplo, expandir o stop loss em situações de turbulência e reduzir o stop loss em situações de tendência.
Desenvolver algoritmos de gerenciamento de posições dinâmicas que ajustem o tamanho das posições de cada transação de acordo com fatores como a volatilidade do mercado.
O conceito de taxa de flutuação é introduzido no rastreamento de stop loss, definindo a distância de stop loss de acordo com a intensidade das flutuações de preço.
Tente implementar estratégias em outros tipos de mercados, como Forex e criptomoedas.
Construir um sistema de negociação de quantidade para automatizar a negociação estratégica.
A estratégia de negociação de desvio do RSI gera sinais de negociação capturando o desvio entre o indicador RSI e a movimentação de preços. A vantagem da estratégia é que ela é simples, clara e fácil de ser automatizada. Ao mesmo tempo, as configurações de parada, parada e rastreamento de parada também podem controlar o risco.
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 4h
basePeriod: 15m
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/
// © faytterro
//@version=5
// strategy("RSI Divergence Strategy", overlay=true, scale = scale.none)
rsilen=input.int(14, title="rsi length")
rsisrc=input(close, title="source")
x=ta.rsi(rsisrc,rsilen)
len=input.int(14, title="RSI Divergence length", maxval=500)
tpb = input.float(25, title="take profit", group = "buy", step = 0.5)
sb = input.float(5, title="stop", group = "buy", step = 0.5)
tsb = input.float(0.25, title="trailing stop", group = "buy", step = 0.5)
tps = input.float(25, title="take profit", group = "sell", step = 0.5)
ss =input.float(5, title="stop", group = "sell", step = 0.5)
tss = input.float(0.25, title="trailing stop", group = "sell", step = 0.5)
src=close
extrapolation=0
zoom=input.int(0, title="zoom", maxval=27, minval=-27)
hline(300-zoom*10, color=color.rgb(54, 58, 69, 100))
hline(10, color=color.rgb(54, 58, 69, 100))
// for ax+b
xo=0.0
yo=0.0
xyo=0.0
xxo=0.0
for i=0 to len-1
xo:= xo + i/(len)
yo:= yo + x[len-1-i]/(len)
xyo:= xyo + i*x[len-1-i]/(len)
xxo:= xxo + i*i/(len)
dnm=ta.lowest(low,200)
dizi=array.new_float(len*2+1+extrapolation)
// linedizi=array.new_line()
a=(xo*yo-xyo)/(xo*xo-xxo)
b=yo-a*xo
for i=0 to len-1+extrapolation
array.set(dizi,i,a*i+b)
//// for src
// for ax+b
xo2=0.0
yo2=0.0
xyo2=0.0
xxo2=0.0
for i=0 to len-1
xo2:= xo2 + i/(len)
yo2:= yo2 + src[len-1-i]/(len)
xyo2:= xyo2 + i*src[len-1-i]/(len)
xxo2:= xxo2 + i*i/(len)
dizi2=array.new_float(len*2+1+extrapolation)
// linedizi2=array.new_line()
a2=(xo2*yo2-xyo2)/(xo2*xo2-xxo2)
b2=yo2-a*xo2
for i=0 to len-1+extrapolation
array.set(dizi2,i,a2*i+b2)
ttk=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))? 1 :
((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))? -1 : 0
cg=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))// and ta.highest(ttk[1],len/2)<1)
cr=((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))// and ta.lowest(ttk[1],len/2)>-1)
bgcolor(color=(cg and ta.highest(ttk[1],len/2)<1)? color.rgb(76, 175, 79, 50) :
(cr and ta.lowest(ttk[1],len/2)>-1)? color.rgb(255, 82, 82, 50) : na, offset=0, display=display.none)
plot(x)
// for ax+b
xo3=0.0
yo3=0.0
xyo3=0.0
xxo3=0.0
for i=0 to len-1
xo3:= xo3 + i/(len)
yo3:= yo3 + x[len-1-i+(ta.barssince(cg))]/(len)
xyo3:= xyo3 + i*x[len-1-i+(ta.barssince(cg))]/(len)
xxo3:= xxo3 + i*i/(len)
dizi3=array.new_float(len*2+1+extrapolation)
// linedizi3=array.new_line()
a3=(xo3*yo3-xyo3)/(xo3*xo3-xxo3)
b3=yo3-a3*xo3
for i=0 to len-1+extrapolation
array.set(dizi3,i,a3*i+b3)
// for ax+b
xo4=0.0
yo4=0.0
xyo4=0.0
xxo4=0.0
for i=0 to len-1
xo4:= xo4 + i/(len)
yo4:= yo4 + x[len-1-i+(ta.barssince(cr))]/(len)
xyo4:= xyo4 + i*x[len-1-i+(ta.barssince(cr))]/(len)
xxo4:= xxo4 + i*i/(len)
dizi4=array.new_float(len*2+1+extrapolation)
// linedizi4=array.new_line()
a4=(xo4*yo4-xyo4)/(xo4*xo4-xxo4)
b4=yo4-a4*xo4
for i=0 to len-1+extrapolation
array.set(dizi4,i,a4*i+b4)
// line=line.new((last_bar_index-ta.barssince(cg)-len),
// array.get(dizi3,0),
// last_bar_index-ta.barssince(cg),
// array.get(dizi3,len-1), color=color.rgb(0,255,0), width=2)
// line2=line.new((last_bar_index-ta.barssince(cr)-len),
// array.get(dizi4,0),
// last_bar_index-ta.barssince(cr),
// array.get(dizi4,len-1), color=color.rgb(255, 0, 0, 0), width=2)
// line.delete(line[1])
// line.delete(line2[1])
alert=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)) and ta.highest(ttk[1],len/2)<1)
or ((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)) and ta.lowest(ttk[1],len/2)>-1)
alertcondition(alert)
hline(50)
rs=hline(30)
rss=hline(70)
fill(rs, rss, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
longCondition = cg and ta.highest(ttk[1],len/2)<1
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("exit long", "Long", limit = close*(100+tpb)/100 , stop =close*(100-sb)/100 , trail_price = close , trail_offset = close*tsb)
shortCondition = cr and ta.lowest(ttk[1],len/2)>-1
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("exit short", "Short", limit = close*(100-tps)/100, stop = close*(100+ss)/100, trail_price = close , trail_offset = close*tss)