Estratégia de avanço da oscilação

Autora:ChaoZhang, Data: 2023-10-27 16:32:19
Tags:

img

Resumo

Esta estratégia baseia-se na idéia clássica de Larry Connors, usando o sistema de média móvel dupla para capturar a oscilação de médio prazo do mercado e tirar lucro quando ele está sobrecomprado ou sobrevendido.

Estratégia lógica

  1. Use o RSI de 2 períodos para determinar se o preço está na região de sobrevenda.

  2. Utilize a média móvel de longo período (200 períodos) para determinar a principal direcção da tendência.

  3. Quando o preço estiver acima da MA longa e o RSI estiver abaixo da linha de sobrevenda, abrir uma posição longa ao preço de mercado.

  4. Quando o preço ultrapassar o período MA curto (5 períodos) para cima, feche a posição longa ao preço de mercado para obter lucro.

Além disso, a estratégia prevê as seguintes opções configuráveis:

  • Parâmetros do RSI: duração do período, níveis de sobrecompra/supervenda.

  • Parâmetros do MA: período longo e curto.

  • Filtro RSI MA: adicionar RSI MA para evitar flutuações do RSI.

  • Perda de parada: configurável para adicionar ou não perda de parada.

Análise das vantagens

  1. O sistema de dupla MA permite acompanhar eficazmente as tendências a médio e longo prazo.

  2. O RSI evita perder o melhor momento de entrada durante flutuações violentas.

  3. Configuração flexível adequada para otimização de parâmetros.

  4. É uma estratégia avançada, não é provável que falte sinais.

Análise de riscos

  1. A estratégia de dupla MA é sensível aos parâmetros, exigindo otimização para alcançar o melhor desempenho.

  2. Não haver stop loss traz risco de expansão das perdas.

  3. Considerar a otimização de períodos de MA ou adicionar outros filtros.

  4. Requer validação entre mercados e períodos de tempo.

Orientações de otimização

  1. Testar e otimizar combinações de parâmetros RSI e MA para encontrar o ideal.

  2. Teste filtros de entrada adicionais como picos de volume para reduzir sinais falsos.

  3. Adicionar stop loss para controlar a perda de um único negócio.

  4. Avaliar o impacto dos diferentes períodos de detenção para determinar o ideal.

  5. Teste a robustez em períodos de tempo mais longos, como diariamente.

Resumo

Esta estratégia combina o rastreamento de tendência de MA duplo e o RSI sobrecomprado / sobrevendido para formar um sistema de ruptura típico. Com otimização de parâmetros, gerenciamento de risco rigoroso e validação de robustez, pode se tornar uma poderosa ferramenta de negociação quantitativa.


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

//@version=3
strategy("RSI Strategy", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Starter Parameters

length = input(title="RSI Lenght", defval=2)
overBoughtRSI = input(title="OverBought Level for RSI",  defval=10)
shortLength = input(title="Short MA Length",  defval=5)
longLength = input(title="Long MA Length",  defval=200)

RuleMRSI=input(title="RSI Moving Average Filter", defval= true)
lengthmrsi=input(title="RSI Moving Average Length",  defval=4)
overBoughtMRSI=input(title="OverBought Level for the Moving Average of the RSI",  defval=30)

Rulestop=input(title="Apply Stop Loss", defval=false)
stop_percentual=input(title="% Stop Loss",  defval=10)

//RSI

vrsi = rsi(close, length)

//Moving Averages

longma = sma(close,longLength)
shortma = sma(close,shortLength)
mrsi=sma(vrsi,lengthmrsi)

//Stop Loss

stop_level = strategy.position_avg_price*((100-stop_percentual)/100)

//Backtest Period
testStartYear = input(2009, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
    
//Strategy

if testPeriod() and (not na(vrsi))
    if  (RuleMRSI==false) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==false) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

Mais.