Drei- und Vier-Bar-Breakout-Umkehrstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-18 10:39:53
Tags:

img

Übersicht

Die Three Bar und Four Bar Breakout Reversion Strategie identifiziert drei oder vier K-Linienbarren mit starker Dynamik und nimmt gegentrendtrendige Trades ein, nachdem mehrere kleine K-Bars Support/Widerstandsniveaus bilden und Umkehrsignale auftauchen.

Strategie Logik

Die Kernlogik dieser Strategie umfasst:

  1. Erkennen Sie große Abstandsbalken (Gap Bars): Brechen 1,5 x ATR, mit einem Körperanteil über 65%. Sie gelten als stark angetrieben.

  2. Erkennen von Low-Range-Bars (Collecting Bars): Ein oder zwei nachfolgende Small-Range-Bars nach Gap Bars, mit hohen/niedrigen Niveaus, die denen von Gap Bars nahe kommen. Sie repräsentieren eine Verlangsamung der Dynamik und Konsolidierung und bilden Support/Widerstandsniveaus.

  3. Erkennen Sie Umkehrsignalbalken: Wenn ein Balken nach der Konsolidierung durch das Hoch/Tief der vorherigen Balken bricht, kann es als Umkehrsignal betrachtet werden.

  4. Stop-Loss und Take-Profit: Setzen Sie den Stop-Loss unter/über den Gap Bars Tief-/Hochpunkten.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Identifizieren Sie Trends und Umkehrungen unter Verwendung von Rohpreisaktionen, keine Indikatoren sind erforderlich.

  2. Strenge Regeln für Gap- und Collecting-Bars sorgen für eine genaue Erfassung realer Trends und Konsolidierungen.

  3. Das Beurteilen der Umkehrstangen nach Körpern reduziert die falschen Signale.

  4. Jeder Handel benötigt nur 3 bis 4 Baren, hohe Frequenz mit kurzer Haltezeit.

  5. Klare Regeln für Stop Loss und Take Profit erleichtern das Risikomanagement.

Risikoanalyse

Die wichtigsten Risiken:

  1. Abhängig von Parameter-Einstellungen erhöhen lose Parameter falsche Signale und verlieren Trades.

  2. Anfällig für gefälschte Ausbrüche und nicht in der Lage, alle falschen Signale auszufiltern.

  3. Das Risiko, nach fehlgeschlagenen Ausbruchversuchen in Konsolidierungen gefangen zu sein, ist in solchen Fällen schwer zu reduzieren.

  4. Ein breiter Stop-Loss-Bereich bedeutet, dass man manchmal große Verluste erleidet, wenn man gefangen ist.

Zur Verringerung der Risiken:

  1. Optimierung der Parameter für die Identifizierung von Gap Bars und Collecting Bars.

  2. Fügen Sie Filter wie Bestätigungsbalken vor dem Einlegen von Positionen hinzu.

  3. Optimieren Sie Stop-Loss-Algorithmen, damit sie sich besser anpassen können.

Optimierungsrichtlinien

Hauptoptimierungsrichtungen:

  1. Zusätzliche Filter aus Verbundwerkstoffen, um falsche Ausbrüche zu vermeiden, die z. B. eine Volumenerhöhung erfordern.

  2. Kombination mit gleitenden Durchschnitten, wobei nur Signale aufgenommen werden, wenn die wichtigsten MA-Level durchbrochen werden.

  3. Erfordern Sie eine Einigung über mehrere Zeitrahmen vor dem Eintritt in den Handel.

  4. Dynamische Anpassung der Gewinnziele anhand der Marktvolatilität und der Risikopräferenz.

  5. Kombination mit dem Marktregierungs-Identifikationssystem, nur in Trendumgebungen Aktivierung der Strategie.

Diese Optimierungen können die Stabilität und Rentabilität weiter verbessern.

Schlussfolgerung

Die Three Bar und Four Bar Breakout Reverssion Strategie zielt darauf ab, hochwertige Trendbewegungen und Umkehrtrades zu erfassen. Sie hat den Vorteil kurzer Halteperioden und hoher Frequenz. Es gibt auch inhärente Risiken, die durch kontinuierliche Optimierung reduziert werden müssen. Durch die effektive Identifizierung selbstständiger Trend- und Umkehrsignale aus der Rohpreisaktion ist diese Strategie für weitere Forschung und Anwendung geeignet.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Three (3)-Bar and Four (4)-Bar Plays Strategy", shorttitle="Three (3)-Bar and Four (4)-Bar Plays Strategy", overlay=true, calc_on_every_tick=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 1, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 1, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

garBarSetting1 = input(defval = 1.5, minval = 0.0, maxval = 100.0, title = "Gap Bar Size", type = input.float)
garBarSetting2 = input(defval = 0.65, minval = 0.0, maxval = 100.0, title = "Gap Bar Body Size", type = input.float)
TopSetting = input(defval = 0.10, minval = 0.0, maxval = 100.0, title = "Bull Top Bar Size", type = input.float)

profitMultiplier = input(defval = 2.0, minval = 1.0, maxval = 100.0, title = "Profit Multiplier", type = input.float)

// ========== 3-Bar and 4-Bar Play Setup ==========
barSize = abs(high - low)
bodySize = abs(open - close)

gapBar = (barSize > (atr(1000) * garBarSetting1)) and (bodySize >= (barSize * garBarSetting2))  // find a wide ranging bar that is more than 2.5x the size of the average bar size and body is at least 65% of bar size

bullTop = close > close[1] + barSize[1] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (first collecting bull bar)
bullTop2 = close > close[2] + barSize[2] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (first collecting bear bar)
bearTop = close < close[1] - barSize[1] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (second collecting bull bar)
bearTop2 = close < close[2] - barSize[2] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (second collecting bear bar)

collectingBarBull = barSize < barSize[1] / 2 and low > close[1] - barSize[1] / 2 and bullTop  // find a collecting bull bar
collectingBarBear = barSize < barSize[1] / 2 and high < close[1] + barSize[1] / 2 and bearTop  // find a collecting bear bar
collectingBarBull2 = barSize < barSize[2] / 2 and low > close[2] - barSize[2] / 2 and bullTop2  // find a second collecting bull bar
collectingBarBear2 = barSize < barSize[2] / 2 and high < close[2] + barSize[2] / 2 and bearTop2  // find a second collecting bear bar

triggerThreeBarBull = close > close[1] and close > close[2] and high > high[1] and high > high[2]  // find a bull trigger bar in a 3 bar play
triggerThreeBarBear = close < close[1] and close < close[2] and high < high[1] and high < high[2]  // find a bear trigger bar in a 3 bar play
triggerFourBarBull = close > close[1] and close > close[2] and close > close[3] and high > high[1] and high > high[2] and high > high[3]  // find a bull trigger bar in a 4 bar play
triggerFourBarBear = close < close[1] and close < close[2] and close < close[3] and high < high[1] and high < high[2] and high < high[3]  // find a bear trigger bar in a 4 bar play

threeBarSetupBull = gapBar[2] and collectingBarBull[1] and triggerThreeBarBull  // find 3-bar Bull Setup
threeBarSetupBear = gapBar[2] and collectingBarBear[1] and triggerThreeBarBear  // find 3-bar Bear Setup
fourBarSetupBull = gapBar[3] and collectingBarBull[2] and 
   collectingBarBull2[1] and triggerFourBarBull  // find 4-bar Bull Setup
fourBarSetupBear = gapBar[3] and collectingBarBear[2] and 
   collectingBarBear2[1] and triggerFourBarBear  // find 4-bar Bear Setup

labels = input(title="Show Buy/Sell Labels?", type=input.bool, defval=true)

plotshape(threeBarSetupBull and labels, title="3-Bar Bull", text="3-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(threeBarSetupBear and labels, text="3-Bar Bear", title="3-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
plotshape(fourBarSetupBull and labels, title="4-Bar Bull", text="4-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(fourBarSetupBear and labels, text="4-Bar Bear", title="4-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

alertcondition(threeBarSetupBull or threeBarSetupBear or fourBarSetupBull or fourBarSetupBear, title="3-bar or 4-bar Play", message="Potential 3-bar or 4-bar Play")
float sl = na
float tp = na
sl := nz(sl[1], 0.0)
tp := nz(tp[1], 0.0)
plot(sl==0.0?na:sl,title='SL', color = color.red)
plot(tp==0.0?na:tp,title='TP', color = color.green)
if (true)
    if threeBarSetupBull and strategy.position_size <=0
        strategy.entry("3 Bar Long", strategy.long, when=threeBarSetupBull)
        sl :=low[1]
    if threeBarSetupBear and strategy.position_size >=0
        strategy.entry("3 Bar Short", strategy.short, when=threeBarSetupBull)
        sl :=high[1]
    if fourBarSetupBull and strategy.position_size <=0
        strategy.entry("4 Bar Long", strategy.long, when=fourBarSetupBull)
        sl :=min(low[1], low[2])
    if fourBarSetupBear and strategy.position_size >=0
        strategy.entry("4 Bar Short", strategy.short, when=fourBarSetupBear)
        sl :=max(high[1], high[2])

if sl !=0.0
    if strategy.position_size > 0
        tp := strategy.position_avg_price + ((strategy.position_avg_price - sl) * profitMultiplier)
        strategy.exit(id="Exit", limit=tp, stop=sl)

    if strategy.position_size < 0
        tp := strategy.position_avg_price - ((sl - strategy.position_avg_price) * profitMultiplier)
        strategy.exit(id="Exit", limit=tp, stop=sl)

Mehr