Basierend auf einer dynamischen Kanal-Durchbruchsstrategie


Erstellungsdatum: 2024-02-27 15:15:07 zuletzt geändert: 2024-02-27 15:15:07
Kopie: 0 Klicks: 567
1
konzentrieren Sie sich auf
1617
Anhänger

Basierend auf einer dynamischen Kanal-Durchbruchsstrategie

Überblick

Die Strategie verwendet Keltner-Channel-Indikatoren in Kombination mit Moving Averages, um dynamische Durchbruch-Kauf- und Verkaufspreise festzulegen, um einen Durchbruch zu erzielen. Die Strategie identifiziert automatisch Channel-Durchbruch-Kauf- und Verkaufsmöglichkeiten.

Strategieprinzip

  1. Berechnen Sie die mittlere Bahn: Berechnen Sie die mittlere Bahn der Preise mit einem Index-Moving Average
  2. Berechnung der Kanalbandbreite: Berechnung der Kanalbandbreite anhand der realen oder durchschnittlichen realen oder durchschnittlichen Preisschwankungen
  3. Übergangs- und Untergangsstraße: Durchgangsbandbreite ± N-mal so groß wie die mittlere Umlaufbahn
  4. Eintrittsreihenfolge: Wenn der Preis die Oberbahnlinie berührt, setze den Kaufpreis auf den Durchbruch und warte auf den Durchbruch; wenn der Preis die Unterbahnlinie berührt, setze den Verkaufspreis auf den Durchbruch und warte auf den Durchbruch
  5. Ausstiegsreihenfolge: Stopp, wenn der Kauf zurück in die Mitte geht oder wenn der Höchstpreis den Einstiegspreis übersteigt; Stopp, wenn der Verkauf zurück in die Mitte geht oder wenn der niedrigste Preis unter dem Einstiegspreis liegt

Analyse der Stärken

  1. Mit dynamischen Kanälen können Sie schnell Veränderungen der Markttrends erfassen
  2. Der Einsatz von Mittelschienen hilft bei der Bestimmung der Kursbewegung
  3. N-Doppelte Bandbreite-Einstellung, die den Durchgangsbereich vernünftig macht und häufige Positionsänderungen vermeidet
  4. Der Einsatz von Durchbruchmechanismen im Einklang mit der Trendtheorie und der Entwicklung
  5. Setzen Sie Stop-Loss-Bedingungen und kontrollieren Sie die Risiken

Risikoanalyse

  1. Die Wahl der Methode zur Berechnung der mittleren Umlaufbahn beeinflusst die Channelspanne und die Preisvereinbarung.
  2. Die Einstellung von N-Faktoren zu groß oder zu klein beeinflusst die Strategie-Rendite
  3. Ein Durchbruch bei Kauf und Verkauf kann zu falschen Signalen führen und sollte streng eingestellt werden.

Optimierungsrichtung

  1. Versuche verschiedene Mittelbahn-Rechnungsmethoden, um die besten Parameter zu finden
  2. Verschiedene N-Werte testen, um die optimale Multiplikation zu finden
  3. Erhöhung der Durchbruchsbreite, um falsche Signale zu vermeiden
  4. Optimierung der Stop-Loss-Logik und strenge Kontrolle der Einzelschäden

Zusammenfassen

Diese Strategie verwendet die Wissenschaft, um die Kursentwicklung und -richtung anhand von dynamischen Kanalindikatoren zu bestimmen, um vernünftige Parameter einzustellen, um Durchbruchsignale zu erfassen, niedrige oder hohe Verkaufszahlen zu erzielen und so überschüssige Gewinne zu erzielen. Gleichzeitig wird das Risiko der Strategie kontinuierlich optimiert, so dass sie in verschiedenen Märkten stabil funktionieren kann.

Strategiequellcode
/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Keltner Strategy", overlay=true)
length = input.int(20, minval=1)
mult = input.float(2.0, "Multiplier")
src = input(close, title="Source")
exp = input(true, "Use Exponential MA")
BandsStyle = input.string("Average True Range", options = ["Average True Range", "True Range", "Range"], title="Bands Style")
atrlength = input(10, "ATR Length")
esma(source, length)=>
	s = ta.sma(source, length)
	e = ta.ema(source, length)
	exp ? e : s
ma = esma(src, length)
rangema = BandsStyle == "True Range" ? ta.tr(true) : BandsStyle == "Average True Range" ? ta.atr(atrlength) : ta.rma(high - low, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = ta.crossover(src, upper)
crossLower = ta.crossunder(src, 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 (src < ma or high >= bprice )
cancelScond = crossScond and (src > 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")