DiNapoli Deterred Oscillator Strategy (Estratégia de oscilador desacelerado)

Autora:ChaoZhang, Data: 23 de setembro de 2023
Tags:

Resumo

Esta estratégia gera sinais de negociação baseados no Oscilador Determinado de DiNapoli. Reflete os níveis de sobrecompra / sobrevenda pela diferença entre o preço e a média móvel, com o objetivo de identificar oportunidades de reversão. Os sinais são gerados quando o oscilador cruza um limiar.

Estratégia lógica

Os principais componentes são:

  1. Média móvel: Calcula a linha de base da tendência.

  2. Indicador de diferença: o preço menos a média móvel forma o oscilador.

  3. Linha de limiar: atravessar este nível desencadeia sinais.

  4. Signais longos: oscilador que cruza o limiar.

  5. Signo curto: oscilador cruzando abaixo do limiar.

  6. Opção inversa: Flip os sinais longo / curto.

A estratégia visa capturar reversões de curto prazo, identificando divergências entre o preço e a tendência.

Vantagens

Em comparação com outras estratégias de reversão, as vantagens são:

  1. Lógica simples e intuitiva, fácil de implementar.

  2. Parâmetros mínimos, backtesting conveniente.

  3. Flexibilidade no ajuste dos parâmetros para diferentes períodos.

  4. Opção inversa adaptável a diferentes mercados.

  5. Paradas e saídas limpas para controlar o risco.

  6. Relativamente pequenas reduções, ajustáveis através de parâmetros.

  7. Potencial de otimização com aprendizagem de máquina.

  8. Profil de risco/recompensa geral bom para a negociação a curto prazo.

Riscos

No entanto, os principais riscos são:

  1. O excesso de dependência da otimização de parâmetros corre o risco de sobreajuste.

  2. Atraso na média móvel e no oscilador.

  3. Falta de confirmação de outras variáveis.

  4. O efeito do calendário pode diminuir em função da evolução dos mercados.

  5. Difícil de gerar persistentemente alfa, requer ajustes frequentes.

  6. Precisa de monitorizar as relações recompensa/risco e a suavidade da curva.

  7. A alta frequência do comércio aumenta os custos das transacções.

  8. A robustez entre os mercados requer validação.

Melhorias

Com base na análise, as melhorias podem incluir:

  1. Testando diferentes parâmetros da média móvel.

  2. Adicionando confirmação de volume.

  3. Implementar paradas e saídas para controlar o risco.

  4. Avaliação da robustez em diferentes mercados e prazos.

  5. Testes de retrospectiva das janelas rolantes para verificação contínua.

  6. Ajusto o tamanho da posição para uma frequência mais baixa.

  7. Incorporar aprendizagem de máquina para melhores parâmetros.

  8. Otimizar as estratégias globais de gestão de riscos.

  9. Iterações contínuas para se adaptar aos mercados em mudança.

Conclusão

Em resumo, esta é uma idéia estratégica relativamente simples de reversão da média. A ajuste adequado dos parâmetros pode produzir resultados decentes. Mas evitar o sobreajuste e alcançar sucesso persistente requer backtesting contínuo, otimização e melhorias de múltiplas dimensões.


/*backtest
start: 2023-08-23 00:00:00
end: 2023-09-22 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version = 2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 05/12/2016
// DiNapoli Detrended Oscillator Strategy
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="DiNapoli Detrended Oscillator Strategy Backtest")
Length = input(14, minval=1)
Trigger = input(0)
reverse = input(true, title="Trade reverse")
hline(Trigger, color=gray, linestyle=line)
xSMA = sma(close, Length)
nRes = close - xSMA
pos = iff(nRes > Trigger, 1,
	   iff(nRes <= Trigger, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
         iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
plot(nRes, color=blue, title="DiNapoli")
barcolor(possig == -1 ? red: possig == 1 ? green : blue )

Mais.