Il s'agit d'une stratégie qui identifie les renversements de prix potentiels en utilisant un oscillateur de prix décentralisé gaussien (GDPO) personnalisé combiné à des cycles de prix lissés.
La stratégie calcule d'abord l'oscillateur de prix décentralisé (DPO) en comparant le prix de clôture à une moyenne mobile exponentielle (EMA) sur une période spécifiée pour identifier les cycles de prix à court terme.
Les règles d'entrée et de sortie sont définies en fonction des événements de croisement entre le GDPO lissé et sa version retardée. Une position longue est entrée lorsque le GDPO lissé traverse le décalage et est négatif. La position longue est sortie lorsque le GDPO lissé traverse le décalage ou la ligne zéro. Une position courte est entrée lorsque le GDPO lissé traverse le décalage et est positif. La position courte est sortie lorsque le GDPO lissé traverse le décalage ou la ligne zéro.
La ligne zéro est également affichée comme référence. La couleur de fond du graphique change lorsque la stratégie entre dans une position. Les marqueurs croisés sont tracés aux points de croisement comme signaux de sortie.
La stratégie combine des techniques de détente et de lissage gaussienne pour identifier plus clairement les opportunités d'inversion par rapport aux autres oscillateurs.
La stratégie est sensible à l'ajustement des paramètres tels que la longueur de la période et les paramètres de lissage. Un backtesting intensif est nécessaire pour déterminer les paramètres optimaux, sinon des faux signaux excessifs peuvent se produire. La stratégie peut produire des pertes consécutives sur les marchés tendance. Le stop loss doit être utilisé pour contrôler la perte d'un seul commerce. Les renversements échoués sont également un risque majeur. La probabilité d'inversion doit être confirmée en utilisant les modèles de graphique et la force de la tendance.
L'optimisation peut être effectuée en ajustant dynamiquement les paramètres et en incorporant des indicateurs de tendance pour améliorer la robustesse.
La stratégie peut être optimisée sous plusieurs aspects:
Ajustez dynamiquement les paramètres de lissage pour augmenter le lissage des tendances et réduire les faux signaux.
Incorporer des indicateurs de tendance tels que l'ADX pour éviter les pertes sur les marchés en tendance.
Ajoutez des mécanismes de stop-loss comme les stops dynamiques ou de trailing.
Optimiser les conditions d'entrée en utilisant des indicateurs ou des modèles supplémentaires pour une plus grande précision d'entrée.
Optimiser la gestion des capitaux en ajustant la taille des positions et les arrêts en fonction des conditions du marché.
Testez la stratégie sur différentes périodes, comme les données quotidiennes ou hebdomadaires.
La stratégie d'inversion gaussienne décentralisée identifie les cycles à court terme en utilisant le PIBO et extrait des signaux avec un filtrage gaussien pour capturer les inversions en vertu de règles d'entrée et de sortie définies. Elle contrôle efficacement les risques de négociation d'inversion, mais nécessite une optimisation des paramètres et une validation de la tendance.
/*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