Momentum-Kanal-folgende Strategie


Erstellungsdatum: 2023-12-25 13:14:24 zuletzt geändert: 2023-12-25 13:14:24
Kopie: 0 Klicks: 729
1
konzentrieren Sie sich auf
1621
Anhänger

Momentum-Kanal-folgende Strategie

Überblick

Die Strategie basiert auf dynamischen Kanal-Indikatoren, um Handelssignale zu erzeugen, die auf Kauf- und Verkaufssignale basieren, die auf dem Kursbruch des Kanals auf- und ablaufen. Die Strategie handelt nur mit mehreren Köpfen, und wenn ein Verkaufssignal auftritt, wird die Position platziert.

Strategieprinzip

Diese Strategie verwendet SMA-Mittelwerte und ATR-Realamplitude, um einen Dynamikkanal zu erstellen. Die Ober- und Unterbahn des Kanals sind:

Aufwärts = SMA + ATR * Faktor Unterstraße = SMA - ATR * Faktor

Wenn der Preis nach oben geht, erzeugt er ein Kaufsignal; wenn der Preis nach unten geht, erzeugt er ein Verkaufssignal.

Wenn ein Verkaufssignal auftritt, wird der vorherige Auftrag storniert und die Position auf einen leeren Stand gebracht.

Die Logik der Strategie lautet:

  1. Erstellen von Dynamikkanälen mit SMA und ATR
  2. Setzen Sie den Startpreis und bestellen Sie mehr, wenn der Preis auf die Bahn geht
  3. Wenn der Preis nach unten geht, werden die vorangegangenen Überbestellungen ausgeglichen, so dass die Position als leere Position gilt.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Die Strategie ist klar und einfach zu verstehen.
  2. Die Dynamikanalindikatoren sind intuitiv und präzise in Bezug auf Markttrends.
  3. Nur mehrere Transaktionen, um das Stop-Loss-Risiko zu vermeiden
  4. Einfache Eingabebedingungen

Risikoanalyse

Die Strategie birgt auch Risiken:

  1. In den letzten Jahren hat sich die Situation in den USA verschlechtert, was zu einem starken Anstieg der Verluste geführt hat.
  2. Das ist eine sehr schwierige Aufgabe, die ich nicht bewältigen kann.
  3. Es gibt keine Ausstiegsmechanismen, es muss ein manuelles Ausgangsspiel sein.

Gegenmaßnahmen:

  1. Optimierung der Kanalparameter und Verringerung der Fehlsignale
  2. Das ist eine sehr gute Idee, aber es ist nicht einfach.
  3. Eintritt in die Ausgangssysteme wie Mobile Stop und Trailing Stop

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Optimierungsparameter, Anpassung der Kanalzyklen, Schwankungsratefaktor usw.
  2. Hinzufügen von Hohlkopfmodule, um Verkaufssignale zu erzeugen, die auf den Preis zurückgreifen
  3. Einschließung von Stop-Loss-Mechanismen in Verbindung mit ATR-Folge-Stopp
  4. Erwägen Sie weitere Filterbedingungen, um falsche Signale zu vermeiden.
  5. Verschiedene Arten von Verträgen werden getestet

Zusammenfassen

Die Strategie basiert auf dynamischen Channel-Indikatoren, die einfach und effektiv Markttrends erfassen. Die Strategie-Logik ist klar und verständlich und erzeugt Handelssignale durch Preis-Breakout-Kanal. Obwohl nur mehrere Köpfe und kein Ausstiegsmechanismus unzureichend sind, können Verbesserungen durch Parameteroptimierung, Hinzufügen von Leerlaufmodulen, Hinzufügen von Stop-Loss-Methoden usw. vorgenommen werden.

Strategiequellcode
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Keltner Channel Strategy", overlay=true)
source = close

useTrueRange = input(true)
length = input(20, minval=1)
mult = input(1.0)

ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)

bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])

sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) 

crossBcond = false
crossBcond := crossUpper ? true 
 : na(crossBcond[1]) ? false : crossBcond[1]

crossScond = false
crossScond := crossLower ? true 
 : na(crossScond[1]) ? false : crossScond[1]

cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

if (cancelBcond)
    strategy.cancel("KltChLE")

if (crossUpper)
    strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")

if (cancelScond)
    strategy.cancel("KltChSE")

if (crossLower)
    strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)