Estratégia de negociação de oscilação RSI dinâmica

Autora:ChaoZhang, Data: 2023-11-02 16:04:07
Tags:

img

Resumo

Esta estratégia combina níveis dinâmicos de suporte/resistência e o indicador de índice de força relativa (RSI). Estabelece limiares de sobrecompra/supervenda para o RSI e gera sinais de compra/venda quando o preço quebra os níveis dinâmicos de suporte/resistência enquanto o RSI não está na área de sobrecompra/supervenda.

Princípios

1. Apoio/Resistência Dinâmico

Use a função de segurança para obter o preço de fechamento como níveis dinâmicos de suporte / resistência.

2. Indicador RSI

Calcular o ganho médio e a perda média durante um determinado período para gerar valores do RSI e determinar se o RSI atinge a área de sobrecompra/supervenda.

3. Sinais comerciais

Quando o preço quebra os níveis dinâmicos, se o RSI não estiver na área de sobrecompra/supervenda, são gerados sinais de compra/venda. Caso contrário, os sinais de quebra são ignorados.

4. Sinais de saída

Fechar posições quando o preço voltar ao nível dinâmico, ou quando o RSI retornar ao intervalo normal.

Análise das vantagens

  1. Usar suporte/resistência dinâmico para determinar a direção da tendência para uma taxa de ganho mais elevada.

  2. O RSI filtra falhas e evita entradas falsas.

  3. A combinação de tendência e indicador torna a estratégia adaptável às diferentes condições de mercado.

  4. Regras simples e claras tornam-na fácil de aplicar.

Riscos e soluções

  1. Testes múltiplos de níveis dinâmicos podem gerar sinais falsos.

  2. O RSI solo pode causar um erro de julgamento. Adicione outros indicadores para filtragem combinada.

  3. A frequência de negociação no mercado de intervalo leva a custos mais elevados.

  4. Otimizar os parâmetros com base em diferentes ativos.

Orientações de otimização

  1. Use aprendizagem de máquina para otimizar automaticamente os parâmetros do RSI.

  2. Adicione uma estratégia stop loss/profit taking para garantir lucros e reduzir perdas.

  3. Incorporar mais indicadores para filtragem combinada para melhorar a estabilidade.

  4. Adicionar um indicador de volatilidade ao tamanho da posição mais baixo quando a volatilidade for baixa.

  5. Otimizar o algoritmo de dimensionamento de posições para ajustar dinamicamente as posições para diferentes ambientes de mercado.

Resumo

Esta estratégia combina o julgamento da tendência e a filtragem de indicadores para identificar efetivamente a reversão da tendência em torno de níveis-chave, controlando os riscos.


/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Levels+RSI Strategy v1.0", shorttitle = "Levels+RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title = "timeframe 1")
src = input(ohlc4, "Source")
ap = input(true, defval = true, title = "antipila")
cf = input(true, defval = true, title = "color filter")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI Period")
rsilimit = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Level
level = request.security(syminfo.tickerid, tf, src[1])
plot(level, linewidth = 3, color = silver)

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))

//Level Signals
ls = close > level and ap == false ? true : low > level ? true : false
up1 = strategy.position_size == 0 and ls and (close < open or cf == false)
exit1 = close < level and ap == false ? true : high < level ? true : false 

//RSI Signal

up2 = rsi < rsilimit and (close < open or cf == false)
exit2 = rsi > rsilimit and ls == false

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if up1 or up2 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
    
if  (exit1 and rsi > rsilimit) or exit2
    strategy.close_all()

Mais.