Aktienquant Handelsstrategie, die einen exponentiellen gleitenden Durchschnitt mit einem Trailing Stop Loss und einem prozentuale Stop Loss kombiniert

Schriftsteller:ChaoZhang, Datum: 2024-01-03 16:25:54
Tags:

img

Übersicht

Der Kern dieser Strategie besteht darin, exponentielle gleitende Durchschnitts-Crossovers als Handelssignale zu verwenden, kombiniert mit Trailing Stop Loss und Prozentsatz Stop Loss, um Gewinne zu erzielen und Risiken zu kontrollieren.

Strategie Logik

  1. Berechnen Sie schnelle EMA und langsame EMA, wobei die schnelle EMA-Periode 20 Tage und die langsame EMA-Periode 50 Tage beträgt.

  2. Nach dem Eintritt wird ein Trailing Stop Loss auf Basis der Halterichtung eingerichtet, z. B. 7% für eine Long-Position und 7% für eine Short-Position.

  3. Gleichzeitig wird der Stop-Loss-Preis anhand des Einstiegspreises und der Haltegerichtung festgelegt, z. B. 2% unter dem Einstiegspreis für den Long-Handel und 2% über dem Einstiegspreis für den Short-Handel.

  4. Vergleichen Sie den letzten Stop-Loss-Preis und den Stop-Loss-Preis, verwenden Sie den, der dem Marktpreis näher ist, als endgültigen Stop-Loss für diesen Handel, senden Sie einen Stop-Loss-Auftrag.

Vorteile

  1. Einfache und einfach zu implementierende gleitende Durchschnittshandelssignale.

  2. Ein Trailing-Stop-Loss schließt die Gewinne so weit wie möglich ein und vermeidet dabei unnötige Verluste durch falsche Signale.

  3. Der Prozentsatz des Stop-Loss ist intuitiv und leicht anzupassen, um den maximalen Verlust pro Handel zu kontrollieren.

  4. Durch die Kombination von Trailing Stops und Fixed Stops werden sowohl Gewinne erzielt als auch Risiken kontrolliert.

Risiken und Gegenmaßnahmen

  1. Bewegliche Durchschnitte können leicht falsche Signale erzeugen, zusätzliche Filter wie Lautstärke hinzufügen.

  2. Trailing Stops werden manchmal zu früh ausgelöst, entspannen den Trailing Prozentsatz ein wenig.

  3. Eine falsche Feststop-Loss-Einstellung kann zu aggressiv oder konservativ sein, müssen Sie den Prozentsatz-Parameter testen und einstellen.

  4. Mechanische Stop-Loss-Ausgänge könnten Marktumkehrmöglichkeiten verpassen, technische Indikatoren enthalten, um den Stop-Trigger zu beurteilen.

Optimierungsrichtlinien

  1. Versuchen Sie verschiedene EMA-Kombinationen, um ein optimales Gleichgewicht zu finden.

  2. Fügen Sie Indikatoren wie Lautstärke hinzu, um falsche Signale zu filtern.

  3. Testen Sie mehr Aktien, um geeignete Stop-Loss-Prozentsätze zu finden.

  4. Versuchen Sie adaptive Stopps, die sich an die Marktbedingungen anpassen.

  5. Einbeziehen Sie Indikatoren wie RSI, um den Stop-Loss-Zeitpunkt zu bestimmen.

Zusammenfassung

Diese Strategie integriert gleitende durchschnittliche Handelssignale, Trailing-Stops und Prozentsatz-Stops. Durch Parameteroptimierung kann sie stabile Gewinne mit strenger Risikokontrolle über verschiedene Aktien und Rohstoffe hinweg erzielen, die es wert sind, für Quant-Trader erforscht und kontinuierlich verbessert zu werden.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 10m
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/
// © wouterpruym1828

//@version=5
strategy(title=" Combining Trailing Stop and Stop loss (% of instrument price)",
     overlay=true, pyramiding=1, shorttitle="TSL&SL%")

//INDICATOR SECTION

// Indicator Input options+
i_FastEMA = input.int(title = "Fast EMA period", minval = 0, defval = 20)
i_SlowEMA = input.int(title = "Slow EMA period", minval = 0, defval = 50)
     
// Calculate moving averages
fastEMA = ta.ema(close, i_FastEMA)
slowEMA = ta.ema(close, i_SlowEMA)

// Plot moving averages
plot(fastEMA, title="Fast SMA", color=color.blue)
plot(slowEMA, title="Slow SMA", color=color.orange)




//STRATEGY SECTION  

// Calculate trading conditions
buy  = ta.crossover(fastEMA, slowEMA)
sell = ta.crossunder(fastEMA, slowEMA)

// STEP 1:
// Configure trail stop loss level with input options (optional)

longTrailPerc = input.float(title="Long Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

shortTrailPerc = input.float(title="Short Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

//Configure stop loss level with input options (optional)

longStopPerc = input.float(title="Long Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01

shortStopPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01


// STEP 2:
// Determine trail stop loss prices
longTrailPrice = 0.0, shortTrailPrice = 0.0

longTrailPrice := if (strategy.position_size > 0)
    stopValue = high * (1 - longTrailPerc)
    math.max(stopValue, longTrailPrice[1])
else
    0

shortTrailPrice := if (strategy.position_size < 0)
    stopValue = low * (1 + shortTrailPerc)
    math.min(stopValue, shortTrailPrice[1])
else
    999999

// Determine stop loss prices
entryPrice = 0.0

entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)


longLossPrice = entryPrice * (1 - longStopPerc)

shortLossPrice = entryPrice * (1 + shortStopPerc)


// Plot stop loss values for confirmation

plot(series=(strategy.position_size > 0) ? longTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Long Trail Stop")
plot(series=(strategy.position_size < 0) ? shortTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Short Trail Stop")

plot(series=(strategy.position_size > 0) ? longLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? shortLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Short Stop Loss")

// Submit entry orders
if (buy)
    strategy.entry("Buy", strategy.long)

if (sell)
    strategy.entry("Sell", strategy.short)


//Evaluating trailing stop or stop loss to use

longStopPrice = longTrailPrice < longLossPrice ? longLossPrice : longTrailPrice

shortStopPrice = shortTrailPrice > shortLossPrice ? shortLossPrice : shortTrailPrice

// STEP 3:
// Submit exit orders for stop price

if (strategy.position_size > 0)
    strategy.exit(id="Buy Stop", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="Sell Stop", stop=shortStopPrice)


Mehr