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


Data de criação: 2023-10-30 15:49:35 última modificação: 2023-10-30 15:49:35
cópia: 0 Cliques: 670
1
focar em
1617
Seguidores

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

Visão geral

A estratégia usa uma combinação de indicadores RSI em diferentes períodos de tempo para determinar se o mercado atual está sobrecomprado ou sobrevendido, e combina a relação do preço com a média móvel para emitir sinais de compra e venda. O objetivo é comprar em baixa, vender em alta e obter lucro em liquidação.

Princípio da estratégia

  1. Calcule os valores do RSI de 5 minutos, 15 minutos e 1 hora, quando o RSI de 5 minutos, 15 minutos e 1 hora estiver abaixo de 25 simultaneamente, julgue como um fenômeno de sobrevenda, gerando um sinal de compra; quando o RSI de 5 minutos, 15 minutos e 1 hora estiver acima de 75 simultaneamente, julgue como um fenômeno de sobrevenda, gerando um sinal de venda.

  2. A quebra do preço da média móvel de 21 dias também serve como sinal de negociação, gerando um sinal de compra se o preço estiver abaixo da média móvel; se o preço estiver acima da média móvel, gerando um sinal de venda.

  3. Dependendo da posição, defina o número de transações iniciais e as regras de acumulação de posições: a primeira abertura de posição é definida como 2 mãos, depois cada acumulação de 1 mão, até que a posição atinja 2 mãos.

  4. Parar quando a perda atingir 3%. Parar quando o lucro atingir 1%

Vantagens estratégicas

  1. O uso de uma combinação de indicadores RSI de múltiplos quadros temporais para determinar a sobrevenda e a sobrevenda aumenta a confiabilidade do sinal.

  2. Combinado com a linha de câmbio móvel, gera sinais de divisas e aumenta as oportunidades de negociação.

  3. Estabelecer regras de controle de posição e de stop loss e controle de risco.

  4. Aumentar a margem de lucro com a adição de quantidade.

Risco estratégico

  1. O indicador RSI apresenta um risco de reversão, ou seja, após o RSI atingir o ponto crítico de sobrevenda e sobrevenda, o preço pode continuar a operar por um período sem uma reversão. Nesse momento, se seguir cegamente o sinal de RSI, pode ocorrer um prejuízo.

  2. Os sinais de negociação gerados por uma média móvel podem ser enganosos. Quando os preços flutuam fortemente, a média móvel não consegue acompanhar as mudanças de preço em tempo hábil.

  3. A configuração errada do tamanho da posição e da relação de ganhos e perdas pode levar a um controle inadequado do risco.

  4. É necessário estabelecer condições razoáveis para a aquisição de posições. Se a aquisição de posições for excessivamente aberta, isso pode levar à expansão dos prejuízos.

Direção de otimização

  1. Ajustar os parâmetros do RSI e testar diferentes combinações de parâmetros do ciclo do RSI para encontrar sinais de superaquecimento mais confiáveis.

  2. Testar diferentes parâmetros de Moving Average Line como sinal de negociação auxiliar. Outros indicadores técnicos também podem ser testados.

  3. Optimizar as regras de controle de posição e de suspensão de perdas, estabelecer mecanismos de controle de risco mais científicos.

  4. Optimizar as condições de aquisição de posições, para evitar que a aquisição de posições leve a maiores perdas. Também pode ser considerado um método alternativo de aquisição de posições, em vez de um índice de aquisição de posições.

Resumir

Esta estratégia usa a combinação de vários quadros temporais do RSI para avaliar o potencial de tendência e obter uma maior taxa de ganho. Ao mesmo tempo, é auxiliada pela geração de sinais de negociação por meio da linha de média móvel, ampliando as oportunidades de negociação. O controle de risco é controlado por regras como controle de posição, parada de perda e aumento quantitativo.

Código-fonte da estratégia
/*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()