Long- und Short-Doppeldurchbruchsstrategie


Erstellungsdatum: 2023-11-03 17:16:02 zuletzt geändert: 2023-11-03 17:16:02
Kopie: 1 Klicks: 623
1
konzentrieren Sie sich auf
1617
Anhänger

Long- und Short-Doppeldurchbruchsstrategie

Überblick

Die Strategie verwendet die Bollinger Bands, um nach brechenden Punkten zu suchen, und kombiniert diese mit dem ADX, um nachteilige Bewegungen zu filtern und Trends zu verfolgen.

Strategieprinzip

Die Strategie basiert hauptsächlich auf dem Brin-Band-Indikator, um die Obergrenze zu beurteilen. Die Brin-Band-Mitte ist ein Moving Average für den N-Tage-Schlusskurs. Die Bandbreite wird durch die Standarddifferenz berechnet.

Um fehlerhafte Transaktionen zu vermeiden, die durch einen unwirksamen Durchbruch eines nicht-trendenden Kurses verursacht werden, wird die Strategie mit dem ADX-Indikator kombiniert, um eine niedrige Volatilität zu filtern. Ein Kauf- und Verkaufssignal wird nur ausgegeben, wenn der ADX-Wert unter der festgelegten Schwelle liegt.

Die Strategie setzt auch einen Rückschlagstop und einen Aufschlagstop ein. Konkret wird bei jedem Aufschlag der niedrigste Preis der letzten N-Tage als Rückschlagstop in diese Richtung und der höchste Preis als Aufschlagstop in diese Richtung aufgezeichnet. Dies ermöglicht es, Gewinne zu sperren und gleichzeitig die Verluste durch Rückschläge zu minimieren.

Aus der Code-Logik betrachtet, berechnet die Strategie zunächst die Bollinger Bands und die ADX-Indikatorparameter. Dann wird beurteilt, ob der Preis die Bollinger Bands auf den Abwärtstransfer durchbrochen hat, und ob die ADX-Werte unterhalb der Schwelle liegen, und wenn sie erfüllt sind, wird ein Kauf- und Verkaufssignal erzeugt.

Analyse der Stärken

  • Der Brin-Band beurteilt eindeutige Blitzpunkte, um Trendchancen zu nutzen.
  • Integrierte ADX-Filterung, um nicht mit den Wellen zu treten, wenn keine Trends erkennbar sind
  • Rückschlagschutz kann einzelne Verluste wirksam kontrollieren
  • Aufwärts verfolgte Stop-Losses können einen Großteil der Gewinne sichern

Risikoanalyse

  • Die Brin-Band-Bruche ist ohne Berücksichtigung der Quantitativ-Energie-Beziehungen möglich, was zu einem False-Bruch führen könnte.
  • Die ADX-Filter-Fehler können auch Trendchancen verpassen
  • Stoppschalter, der zu nahe kommt, kann umgedreht werden
  • Die falsche Einstellung der Parameter beeinflusst auch die Strategie

Es kann in Kombination mit anderen Indikatoren für die Unterstützung von Beurteilungen in Betracht gezogen werden, um sicherzustellen, dass die VALID-Überschreitung erreicht wird; Optimierung der ADX-Filterbedingungen, um die Steigung der ADX-Kurve zu nutzen, um den Trendwendepunkt zu beurteilen; angemessene Lockerung der Stop-Loss-Stop-Range, um zu verhindern, dass zu nahe an einem Stopp gebracht wird.

Optimierungsrichtung

  • Optimierung der Längenparameter der Brin-Streifen für optimale Durchbruchseffekte
  • Optimierung der ADX-Filterbedingungen, Ausgleich von Trendurteilen und Fehlentscheidungen
  • Das ist eine sehr wichtige Frage, die wir uns stellen müssen.
  • Optimierung der Rückspiel-Stoppbreite, um eine überempfindliche Dämpfung zu verhindern
  • Optimierung der Tracking-Stop-Spanne und angemessener Abstand

Zusammenfassen

Die Gesamtkonzeption der Strategie ist klar und unkompliziert, sie nutzt die Brin-Band, um eindeutige Multiplex-Breakout-Signale zu beurteilen, und filtert Choppy-Geschäfte ohne eindeutige Trends mit dem ADX-Indikator, um Trendchancen zu sperren. Die Strategie ist leicht zu verstehen und zu implementieren, und es lohnt sich, weiter getestet und optimiert zu werden, um eine grundlegende Trendverfolgungsstrategie zu werden.

Strategiequellcode
/*backtest
start: 2023-10-26 00:00:00
end: 2023-11-02 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tweakerID

// This strategy uses Bollinger Bands to buy when the price 
// crosses over the lower band and sell when it crosses down
// the upper band. It only takes trades when the ADX is 
// below a certain level, and exits all trades when it's above it.

//@version=4
strategy("BB + ADX Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value = 0.04, initial_capital=100)

//Inputs
i_reverse=input(false, title="Reverse Trades")
i_ADXClose=input(true, title="ADX Close")
i_SL=input(false, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=.5, title="SL Expander")
i_TPExpander=input(defval=0, step=.5, title="TP Expander")

//ADX Calculations
adxlen = input(14, title="ADX Smoothing")
dilen = input(20, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
adxlevel=input(30, step=5)

//BB Calculations
BBCALC=input(false, title="-----------BB Inputs-----------")

length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
MAlen=input(defval=9)
source = close
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Entry Logic
BUY = crossover(source, lower) and sig < adxlevel
SELL = crossunder(source, upper) and sig < adxlevel

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0))*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0))*i_SLExpander)
lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))+((valuewhen(bought, atr(14), 0))*i_TPExpander))
sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0)-strategy.position_avg_price)-((valuewhen(bought, atr(14), 0))*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? LSL : isshort ? SSL : na
TP= islong ? lTP : isshort ? sTP : na

//Entries
strategy.entry("long", long=i_reverse?false:true, when=BUY)
strategy.entry("short", long=i_reverse?true:false, when=SELL)

//EXITS
if i_ADXClose
    strategy.close_all(when=sig > adxlevel)
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots	
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")
plot(upper)
plot(lower)