RSI Estratégia de negociação de saldo longo e curto

Autora:ChaoZhang, Data: 2023-10-30 15:49:35
Tags:

img

Resumo

Esta estratégia usa uma combinação de indicadores RSI em diferentes prazos para determinar se o mercado atual está sobrecomprado ou sobrevendido, e combina a relação entre preço e média móvel para gerar sinais de compra e venda.

Estratégia lógica

  1. Calcule os valores do RSI dos intervalos de tempo de 5 minutos, 15 minutos e 1 hora. Quando o RSI de 5 minutos, 15 minutos e 1 hora estiver abaixo de 25 ao mesmo tempo, ele é julgado como uma condição de sobrevenda e gera um sinal de compra. Quando o RSI de 5 minutos, 15 minutos e 1 hora estiver acima de 75 ao mesmo tempo, ele é julgado como uma condição de sobrecompra e gera um sinal de venda.

  2. A quebra da média móvel de 21 dias também atua como um sinal de negociação. Se o preço estiver abaixo da média móvel, um sinal de compra é gerado.

  3. Com base na posição atual, é definido o tamanho inicial da negociação e as regras de pirâmide: 2 contratos para a primeira entrada e, em seguida, adicionando 1 contrato de cada vez até que a posição atinja 2 contratos.

  4. O stop loss é acionado quando a perda atinge 3%.

Vantagens

  1. O uso de indicadores RSI em vários prazos para determinar as condições de sobrecompra e sobrevenda melhora a confiabilidade do sinal.

  2. A combinação de médias móveis gera sinais de negociação adicionais e amplia as oportunidades de negociação.

  3. O controlo do dimensionamento das posições e o rácio de lucro/perda para o stop loss e o take profit gerem os riscos.

  4. A escalação com quantidade fixa aumenta o potencial de lucro.

Riscos

  1. Risco de divergência do RSI. O preço pode continuar em tendência por um período após o RSI atingir o limiar de sobrecompra ou sobrevenda antes de reverter. Seguir cegamente o sinal do RSI pode levar a perdas.

  2. O sinal de negociação da média móvel pode ser enganoso. A média móvel não consegue rastrear a mudança de preço em tempo hábil durante grandes oscilações de preços.

  3. O tamanho incorreto das posições e a definição incorreta do rácio lucro/perda conduzem a um controlo inadequado do risco.

  4. As condições de pirâmide devem ser estabelecidas de forma razoável para evitar perdas exageradas.

Orientações de otimização

  1. Ajustar os parâmetros do RSI e testar diferentes combinações de períodos para encontrar sinais de sobrecompra/supervenda mais confiáveis.

  2. Teste diferentes médias móveis como sinais de negociação auxiliares ou outros indicadores técnicos.

  3. Otimizar o dimensionamento das posições e as regras de stop loss/take profit para criar mecanismos mais científicos de controlo dos riscos.

  4. Otimizar as condições de pirâmide para evitar perdas de aumento.

Resumo

Esta estratégia usa o RSI em vários prazos para determinar o potencial de tendência e alcançar uma taxa de ganho maior. Sinais adicionais são gerados com médias móveis para expandir as oportunidades de negociação. O risco é gerenciado através do dimensionamento de posição, stop loss / take profit e pirâmide de quantidade fixa.


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

//@version=3
strategy("5M_RSI_Strategy", overlay=true, pyramiding = 1)
len =14 
Initial_Trade_Size = 2
up = rma(max(change(close), 0), len)
down = rma(-min(change(close), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
RSI_1h = request.security(syminfo.tickerid, "60", rsi)
RSI_3h = request.security(syminfo.tickerid, "180", rsi)
RSI_15m = request.security(syminfo.tickerid, "15", rsi)
RSI_5m = request.security(syminfo.tickerid, "5", rsi)
RSI_1m = request.security(syminfo.tickerid, "1", rsi)
ema21_5 = ema(request.security(syminfo.tickerid, "5", close), 21)
ema21_15 = ema(request.security(syminfo.tickerid, "15", close), 21)
//(RSI_3h<=25) and  (RSI_1h<=25) and (RSI_15m<=25) and
Positive = ((RSI_5m<=25) and (RSI_15m<=25) and (RSI_1h<=25))?true:false
//alertcondition(Positive, title='POS', message='POS')        
//plotshape(Positive, style=shape.triangleup,location=location.belowbar, color=green,size =size.tiny)
Negative = (( RSI_5m>=75) and ( RSI_15m>=75) and ( RSI_1h>=75))?true:false
//alertcondition(Negative, title='NEG', message='NEG')
//plotshape(Negative, style=shape.triangledown,location=location.abovebar, color=red,size=size.tiny)          Positive and   Negative and 

lastordersize = abs(strategy.position_size)>=Initial_Trade_Size?abs(strategy.position_size):Initial_Trade_Size
//lastordersize =1
// and ((ema21_15-low)/ema21_15) > 0.077
//Adding to position rules
if (abs(strategy.position_size) >= Initial_Trade_Size and (abs(close - strategy.position_avg_price)/abs(strategy.position_avg_price)>0.03))
    if(strategy.position_avg_price > close and strategy.position_size > 0)
        strategy.entry("Add", strategy.long , qty = lastordersize , when = true)
    if(strategy.position_avg_price < close and strategy.position_size < 0)
        strategy.entry("Add", strategy.short, qty = lastordersize , when = true)
if (strategy.position_size == 0)
    if (Positive or ((ema21_5-low)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.long , qty = lastordersize , when = true)
    // and ((high-ema21_15)/ema21_15) > 0.077
    if (Negative or ((high-ema21_5)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.short, qty = lastordersize , when = true)
//lastordersize := lastordersize * 2
//or (strategy.openprofit / abs(strategy.position_size * close))>=0.01
if(cross(ema21_5, high) or cross(ema21_5, low))
    strategy.close_all()

Mais.