Esta é uma estratégia que identifica reversões de preços potenciais usando um oscilador de preços detrendido de Gauss (GDPO) personalizado combinado com ciclos de preços suavizados.
A estratégia primeiro calcula o Detrended Price Oscillator (DPO) comparando o preço de fechamento a uma média móvel exponencial (EMA) durante um período especificado para identificar ciclos de preços de curto prazo.
As regras de entrada e saída são definidas com base em eventos de cruzamento entre o GDPO suavizado e sua versão atrasada. Uma posição longa é inserida quando o GDPO suavizado cruza acima do atraso e é negativo. A posição longa é excedida quando o GDPO suavizado cruza abaixo do atraso ou da linha zero. Uma posição curta é inserida quando o GDPO suavizado cruza abaixo do atraso e é positivo. A posição curta é excedida quando o GDPO suavizado cruza acima do atraso ou da linha zero.
O PIBO suavizado e seu atraso são traçados em cores distintas. A linha zero também é exibida como referência. A cor de fundo do gráfico muda quando a estratégia entra em uma posição. Os marcadores cruzados são traçados nos pontos de cruzamento como sinais de saída.
A estratégia combina técnicas de desaceleração e suavização gaussiana para identificar mais claramente as oportunidades de reversão em comparação com outros osciladores. O GDPO melhora a precisão incorporando análise de ciclo com desaceleração. A suavização gaussiana elimina ruído para sinais mais claros. As regras específicas de entrada e saída controlam efetivamente as perdas.
A estratégia é sensível ao ajuste de parâmetros como os comprimentos de período e parâmetros de suavização. É necessário um extenso backtesting para determinar parâmetros ideais, caso contrário, podem ocorrer sinais falsos excessivos. A estratégia pode produzir perdas consecutivas em mercados de tendência. O stop loss deve ser usado para controlar a perda de um único negócio. Reversões falhadas também são um grande risco. A probabilidade de reversão deve ser confirmada usando padrões de gráfico e força da tendência.
A otimização pode ser feita ajustando dinamicamente os parâmetros e incorporando indicadores de tendência para melhorar a robustez.
A estratégia pode ser otimizada em vários aspectos:
Ajustar dinamicamente os parâmetros de suavização para aumentar a suavização das tendências e reduzir os falsos sinais.
Incorporar indicadores de tendência como o ADX para evitar perdas em mercados em tendência.
Adicione mecanismos de stop loss como stop dinâmico ou trailing.
Otimizar as condições de entrada utilizando indicadores ou padrões adicionais para uma maior precisão de entrada.
Otimizar a gestão de capital ajustando o tamanho das posições e as paradas com base nas condições de mercado.
Teste a estratégia em diferentes prazos, como dados diários ou semanais.
A estratégia de Reversão Determinada de Gauss identifica ciclos de curto prazo usando o GDPO e extrai sinais com filtragem de Gauss para capturar reversões sob regras definidas de entrada e saída. Ele controla efetivamente os riscos da negociação de reversão, mas requer otimização de parâmetros e validação de tendências.
/*backtest start: 2022-10-31 00:00:00 end: 2023-11-06 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 // © DraftVenture //@version=5 strategy(title="Gaussian Detrended Reversion Strategy", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=15) //Detrended Price Oscillator for price cycles period_ = input.int(50, title="Price Length", minval=1) barsback = period_/2 + 1 ma = ta.ema(close, period_) dpo = close - ma[barsback] // Rounded ALMA Calculations for gaussian smoothing almaSource = dpo almaWindowSize = input(title="Smoothing Length", defval=50) lagLength = input(title="Lag Length", defval=25) almaSmoothed = ta.alma(almaSource, almaWindowSize, 0.85, 6) almaLag = almaSmoothed[lagLength] // Reversion entry conditions entryL = ta.crossover(almaSmoothed, almaLag) and almaSmoothed < 0 exitL = ta.crossunder(almaSmoothed, almaLag) or ta.crossunder(almaSmoothed, 0) entryS = ta.crossunder(almaSmoothed, almaLag) and almaSmoothed > 0 exitS = ta.crossover(almaSmoothed, almaLag) or ta.crossover(almaSmoothed, 0) // Long entry and exit if entryL strategy.entry("Long", strategy.long) if exitL strategy.close("Long") // Short entry and exit if entryS strategy.entry("Short", strategy.short) if exitS strategy.close("Short") // Plot the oscillator plot(almaSmoothed, title="GDPO", color=color.green) plot(almaLag, title="Lag", color=color.white) hline(0, title="Zero Line", color=color.white) bgcolor(entryL ? color.new(color.green, 40) : na) bgcolor(entryS ? color.new(color.red, 40) : na) plotshape(series=ta.crossunder(almaSmoothed, almaLag) or ta.crossunder(almaSmoothed, 0), style=shape.xcross, location=location.top, color=color.white, size=size.tiny) plotshape(series=ta.crossover(almaSmoothed, almaLag) or ta.crossover(almaSmoothed, 0), style=shape.xcross, location=location.bottom, color=color.white, size=size.tiny) //Strategy by KP