Die DiNapoli-Strategie für einen gedrängten Oszillator

Schriftsteller:ChaoZhang, Datum: 23.09.2023
Tags:

Übersicht

Diese Strategie erzeugt Handelssignale, die auf dem DiNapoli Detrended Oscillator basieren. Sie spiegelt überkaufte/überverkaufte Niveaus durch die Differenz zwischen Preis und gleitendem Durchschnitt wider und zielt darauf ab, Umkehrmöglichkeiten zu identifizieren.

Strategie Logik

Die wichtigsten Komponenten sind:

  1. Gleitender Durchschnitt: Berechnet die Trendbasis.

  2. Differenzindikator: Preis minus gleitender Durchschnitt bildet den Oszillator.

  3. Schwellenlinie: Das Überschreiten dieses Niveaus löst Signale aus.

  4. Langes Signal: Oszillator überschreitet Schwellenwert.

  5. Kurzsignal: Oszillatorschritt unterhalb des Schwellenwerts.

  6. Umgekehrte Option: Flips die langen/kurzen Signale.

Die Strategie zielt darauf ab, kurzfristige Umkehrungen zu erfassen, indem Abweichungen zwischen Preis und Trend ermittelt werden.

Vorteile

Im Vergleich zu anderen Umkehrstrategien sind die Vorteile:

  1. Einfache und intuitive Logik, einfach umzusetzen.

  2. Minimale Parameter, bequeme Rückprüfung.

  3. Flexibilität bei der Einstellung der Parameter für verschiedene Zeiträume.

  4. Umgekehrte Option an unterschiedliche Märkte angepasst.

  5. Löschen von Haltestellen und Ausgängen zur Risikokontrolle.

  6. Relativ geringe Auslastungen, durch Parameter einstellbar.

  7. Potenzial zur Optimierung mit maschinellem Lernen.

  8. Insgesamt ein gutes Risiko/Rendite-Profil für den kurzfristigen Handel.

Risiken

Die wichtigsten Risiken sind jedoch:

  1. Eine übermäßige Abhängigkeit von der Optimierung der Parameter führt zu einer Überanpassung.

  2. Verzögerung beim gleitenden Durchschnitt und dem Oszillator.

  3. Fehlende Bestätigung durch andere Variablen.

  4. Die Zeitwirkung kann sich auf den sich ändernden Märkten verschlechtern.

  5. Schwierig, dauerhaft Alpha zu erzeugen, erfordert häufige Anpassungen.

  6. Es ist notwendig, das Verhältnis von Gewinn und Risiko und die Glättlichkeit der Kurve zu überwachen.

  7. Eine hohe Handelsfrequenz erhöht die Transaktionskosten.

  8. Die Robustheit auf allen Märkten bedarf einer Validierung.

Verbesserungen

Auf der Grundlage der Analyse können Verbesserungen Folgendes beinhalten:

  1. Verschiedene gleitende Durchschnittsparameter testen.

  2. Ich füge Volumenbestätigung hinzu.

  3. Einführung von Stopps und Ausgängen zur Risikokontrolle.

  4. Bewertung der Robustheit auf verschiedenen Märkten und Zeitrahmen.

  5. Rollfenster-Backtest für die kontinuierliche Überprüfung.

  6. Einstellung der Positionsgröße auf niedrigere Frequenz.

  7. Maschinelles Lernen für bessere Parameter.

  8. Optimierung der allgemeinen Risikomanagementstrategien.

  9. Kontinuierliche Iterationen, um sich an sich ändernde Märkte anzupassen.

Schlussfolgerung

Zusammengefasst ist dies eine relativ einfache Strategie für die Umkehrung des Mittelwerts. Eine ordnungsgemäße Einstellung der Parameter kann anständige Ergebnisse liefern.


/*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 )

Mehr