RSI e estratégia de negociação de retracementos de Fibonacci

Autora:ChaoZhang, Data: 2023-12-27 16:49:52
Tags:

img

Resumo

Este artigo descreve principalmente uma estratégia de negociação que combina o Índice de Força Relativa (RSI) e os níveis de retração de Fibonacci. A estratégia primeiro calcula os principais níveis de retração de Fibonacci com base na dinâmica histórica dos preços durante um determinado período e, em seguida, usa o indicador RSI para julgar se o mercado está sobrecomprado ou sobrevendido perto dos níveis de retração para gerar sinais de negociação.

Princípio da estratégia

Os principais princípios subjacentes a esta estratégia são os seguintes:

  1. Usar dados de preços durante um determinado período (por exemplo, 200 bares) para calcular a mediana do preço, o desvio padrão e os níveis principais de retracement de Fibonacci (por exemplo, 0,764) para esse período;

  2. Quando o preço se aproxima dos níveis de retração superior ou inferior, utilizar o indicador RSI para determinar se existe uma situação de sobrecompra ou sobrevenda em torno desses níveis;

  3. Se o indicador RSI mostrar sinais de sobrecompra ou sobrevenda, serão gerados sinais longos ou curtos em torno dos níveis de retração;

  4. Configurar stop loss e take profit para fechar posições quando o preço exceder os níveis pré-definidos ou quando for acionado o stop loss.

O que precede é o fluxo de trabalho básico para identificar oportunidades de negociação nesta estratégia.

Análise das vantagens

Em comparação com o uso de RSI ou Fibonacci sozinho, esta estratégia combinada tem as seguintes vantagens:

  1. A filtragem de indicadores duplos pode reduzir os falsos sinais e melhorar a qualidade do sinal;

  2. A negociação a níveis de retracementos de Fibonacci é uma técnica clássica de análise técnica;

  3. Com stop loss e take profit em ritmo, a perda máxima por negociação pode ser efetivamente controlada;

  4. Os parâmetros podem ser otimizados para diferentes períodos e produtos.

Análise de riscos

Há também alguns riscos a considerar para esta estratégia:

  1. A probabilidade de uma reversão nos níveis-chave não é de 100%, deve ser combinada com a ação dos preços;

  2. RSI de período único pode gerar falsos sinais de rebotes de gato morto, considere a validação de múltiplos prazos;

  3. A definição de stop loss flexível pode aumentar as perdas;

  4. As paradas podem ser executadas durante oscilações voláteis de preços.

Estes riscos podem ser geridos através da regulação dos parâmetros, da otimização das combinações de indicadores, etc.

Orientações de otimização

As áreas para melhorias adicionais incluem:

  1. Adicionar um indicador de volume para evitar falhas com baixo volume;

  2. Considere Bandas de Bollinger para sinais de rupturas de bandas;

  3. Construir modelos de aprendizagem de máquina para detectar automaticamente oportunidades de negociação de alta qualidade;

  4. Usar algoritmos genéticos para ajustar os parâmetros automáticos e ajustar os níveis de stop loss/profit.

Resumo

Este artigo descreve em detalhes uma estratégia de negociação quantitativa que combina RSI e análise de retração de Fibonacci. Ao misturar análise de indicadores duplos e estratégias técnicas clássicas, a estratégia melhora a qualidade do sinal sob riscos gerenciados.


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

//@version=4
strategy(title="Gab Fib  + RSI", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000, initial_capital=1000, currency=currency.USD, commission_type=strategy.commission.cash_per_order, commission_value=4)

// Inputs
timeFilter = year >= 2000
    // Stop Loss 
stop_loss = input(title="SL in % of Instrum. i.e 1.5%=150pips", minval=0, step=0.1, defval=1.5) /100
    // RSI Inputs
len = input(title="[RSI] Length", minval=0, step=1, defval=14)
overSold = input(title="[RSI] Over Sold %", defval=30)
overBought = input(title="[RSI] Over Bought %", defval=70)
    // Fibonacci Levels
length = input(title="[Fibonacci] Length", defval=200, minval=1)
src = input(hlc3, title="[Fibonacci] Source")
mult = input(title="[Fibonacci] Multiplier", defval=3.0, minval=0.001, maxval=50)
level = input(title="[Fibonacci] Level", defval=764)


// Calculate Fibonacci
basis = vwma(src, length)
dev = mult * stdev(src, length)
fu764= basis + (0.001*level*dev)
fu1= basis + (1*dev)
fd764= basis - (0.001*level*dev)
fd1= basis - (1*dev)

// Calculate RSI
vrsi = rsi(close, len)

// Calculate the Targets
targetUp = fd764
targetDown = fu764
    // Actual Targets
bought = strategy.position_size[0] > strategy.position_size[1]
exit_long = valuewhen(bought, targetUp, 0)
sold = strategy.position_size[0] < strategy.position_size[1]
exit_short = valuewhen(sold, targetDown, 0)

// Calculate Stop Losses
sl_long = close * (1-stop_loss)
sl_short = close * (1+stop_loss)


// Conditions to Open Trades
openLong = low < fd1 and crossover(vrsi[1], overSold)
openShort = high > fu1 and crossunder(vrsi[1], overBought)

// Conditions to Close Trades
closeLong = high > exit_long or sl_long
closeShort = low < exit_short or sl_short


//Rounding to MinTick value
roundtargetUp = round_to_mintick(targetUp)
roundtargetDown = round_to_mintick(targetDown)
roundsllong = round_to_mintick(sl_long)
roundslshort = round_to_mintick(sl_short)

// Plots
plot(basis, color=color.blue, linewidth=2, title="[Fibonacci Level] Basis")
plot(fu764, color=color.white, linewidth=1, title="[Fibonacci Level] Short Target")
plot(fu1, color=color.red, linewidth=2, title="[Fibonacci Level] Top")
plot(fd764, color=color.white, linewidth=1, title="[Fibonacci Level] Long Target")
plot(fd1, color=color.green, linewidth=2, title="[Fibonacci Level] Bottom")


// Strategy Orders
if timeFilter
    // Entry Orders
    strategy.entry(id="buy", long=true, when=openLong and high < targetUp, limit=close, alert_message="buy,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetUp)+",sl="+tostring(roundsllong))
    strategy.entry(id="sell", long=false, when=openShort and low > targetDown, limit=close,  alert_message="sell,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetDown)+",sl="+tostring(roundslshort))

    // Exit Orders
    strategy.exit(id="closelong", when=closeLong and strategy.position_size > 0, limit=exit_long, stop=sl_long, alert_message="closelong,"+tostring(syminfo.ticker))
    strategy.exit(id="closeshort", when=closeShort and strategy.position_size < 0, limit=exit_short, stop=sl_short, alert_message="closeshort,"+tostring(syminfo.ticker))

Mais.