Dynamische Trendstrategie für die Verschwemmung

Schriftsteller:ChaoZhang, Datum: 2024-02-29 11:24:18
Tags:

img

Übersicht

Die Dynamic Engulfing Trend Strategie ist eine Handelsstrategie, die lange oder kurze Positionen auf der Grundlage von Engulfing-Mustern in die Richtung des Trends nimmt. Diese Strategie verwendet den Average True Range (ATR) zur Messung der Marktvolatilität, den Supertrend-Indikator zur Bestimmung der Markttrendrichtung und tritt in Trades ein, wenn sich die Engulfing-Muster mit der Trendrichtung ausrichten.

Strategie Logik

  1. Berechnung des ATR zur Messung der Marktvolatilität.
  2. Berechnung des Supertrend-Indikators zur Ermittlung des Markttrends.
  3. Definition der Bedingungen für Aufwärtstrend und Abwärtstrend.
  4. Identifizieren Sie bullish engulfing (in Aufwärtstrend) und bearish engulfing (in Abwärtstrend).
  5. Berechnen Sie die Stop Loss- (SL) und Take Profit- (TP) -Levels anhand der Absorptionsmuster.
  6. Trades eingehen, wenn sich die Abnahme-Muster mit der Trendrichtung decken.
  7. Exit-Trades, wenn der Preis die SL- oder TP-Level erreicht.
  8. Zeichnen Sie die Verschwemmungsmuster auf der Karte.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Verbesserte Signalqualität durch Kombination von Verschwemmungsmustern mit Trend.
  2. Fähigkeit, Trendumkehrungen bei präzisen Einträgen zu erkennen.
  3. Lange/kurze Signale für ein besseres Timing.
  4. Die Strategie "Stopp" folgt dem Trend bei gleichzeitiger Risikomanagement.
  5. Modularer Code-Rahmen für einfache Optimierungen.

Risikoanalyse

Es gibt auch einige Risiken, die zu berücksichtigen sind:

  1. Verzehrmuster können sich als falsche Ausbrüche erweisen.
  2. Schwierig, optimale Parameter wie Mustergröße, Dauer usw. zu bestimmen.
  3. Eine unvollkommene Trendbestimmung kann zu falschen Signalen führen.
  4. Die Stop-Loss- und Take-Profit-Level beruhen auf Diskretion und können subjektiv sein.
  5. Die Leistung hängt von der Einstellung der Parameter ab, basierend auf historischen Daten.

Die Risiken können gemildert werden, indem

  1. Ich füge Filter hinzu, um falsche Ausbruchssignale zu entfernen.
  2. Anpassungsfähige ATR für robuste Parameterberechnungen.
  3. Verbesserung der Trendbestimmung durch maschinelles Lernen.
  4. Optimale Parameter durch genetische Algorithmen finden.
  5. Zur Gewährleistung der Robustheit wird über längere Zeitspannen geprüft.

Optimierungsrichtlinien

Es gibt Raum für weitere Optimierungen:

  1. Maschinelles Lernen kann die Trendbestimmung verbessern.
  2. Neue Mustererkennungsmethoden ermöglichen eine bessere Identifizierung von Schluckmustern.
  3. Die neuesten Stop-Loss-/Take-Profit-Strategien können die Level dynamisch optimieren.
  4. Hochfrequenzdaten können kurzfristige Systeme entwickeln.
  5. Parameter Abstimmung für verschiedene Instrumente.

Schlussfolgerung

Zusammenfassend lässt sich sagen, dass die Dynamic Engulfing Trend-Strategie die hochwertigen Engulfing-Mustersignale mit einer genauen Trendbestimmung kombiniert, um ein Handelssystem mit präzisen Einträgen und angemessenen Stop-Losses und Gewinnentnahme zu generieren. Weitere Verbesserungen bei Parametern, Risikomanagement und Technologieintegration können seine Stabilität und Rentabilität verbessern.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © Malikdrajat


//@version=4
strategy("Engulfing with Trend", overlay=true)

Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)

atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2

up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")

// Define Downtrend and Uptrend conditions
downtrend = trend == -1
uptrend = trend == 1


// Engulfing 
boringThreshold = input(25, title="Boring Candle Threshold (%)", minval=1, maxval=100, step=1)
engulfingThreshold = input(50, title="Engulfing Candle Threshold (%)", minval=1, maxval=100, step=1)
stopLevel = input(200, title="Stop Level (Pips)", minval=1)


// Boring Candle (Inside Bar) and Engulfing Candlestick Conditions
isBoringCandle = abs(open[1] - close[1]) * 100 / abs(high[1] - low[1]) <= boringThreshold
isEngulfingCandle = abs(open - close) * 100 / abs(high - low) <= engulfingThreshold

// Bullish and Bearish Engulfing Conditions
bullEngulfing = uptrend and close[1] < open[1] and close > open[1] and not isBoringCandle and not isEngulfingCandle
bearEngulfing = downtrend and close[1] > open[1] and close < open[1] and not isBoringCandle and not isEngulfingCandle

// Stop Loss, Take Profit, and Entry Price Calculation
bullStop = close + (stopLevel * syminfo.mintick)
bearStop = close - (stopLevel * syminfo.mintick)
bullSL = low 
bearSL = high
bullTP = bullStop + (bullStop - low)
bearTP = bearStop - (high - bearStop)

// Entry Conditions
enterLong = bullEngulfing and uptrend
enterShort = bearEngulfing and downtrend

// Exit Conditions
exitLong = crossover(close, bullTP) or crossover(close, bullSL)
exitShort = crossover(close, bearTP) or crossover(close, bearSL)

// Check if exit conditions are met by the next candle
exitLongNextCandle = exitLong and (crossover(close[1], bullTP[1]) or crossover(close[1], bullSL[1]))
exitShortNextCandle = exitShort and (crossover(close[1], bearTP[1]) or crossover(close[1], bearSL[1]))

// Strategy Execution
strategy.entry("Buy", strategy.long, when=enterLong )
strategy.entry("Sell", strategy.short, when=enterShort )

// Exit Conditions for Long (Buy) Positions
if (bullEngulfing and not na(bullTP) and not na(bullSL))
    strategy.exit("Exit Long", from_entry="Buy", stop=bullSL, limit=bullTP)

// Exit Conditions for Short (Sell) Positions
if (bearEngulfing and not na(bearTP) and not na(bearSL))
    strategy.exit("Exit Short", from_entry="Sell", stop=bearSL, limit=bearTP)

// Plot Shapes and Labels
plotshape(bullEngulfing, style=shape.triangleup, location=location.abovebar, color=color.green)
plotshape(bearEngulfing, style=shape.triangledown, location=location.abovebar, color=color.red)

// Determine OP, SL, and TP
plot(bullEngulfing ? bullStop : na, title="Bullish Engulfing stop", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearStop : na, title="Bearish Engulfing stop", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bullEngulfing ? bullSL : na, title="Bullish Engulfing SL", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearSL : na, title="Bearish Engulfing SL", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bullEngulfing ? bullTP : na, title="Bullish Engulfing TP", color=color.green, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearTP : na, title="Bearish Engulfing TP", color=color.green, linewidth=3, style=plot.style_linebr)



Mehr