Schrittweise Verzögerung mit Teilgewinnstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-28 16:05:24
Tags:

img

Übersicht

Dies ist eine Exit-Strategie, die einen schrittweisen Trailing-Stop mit teilweiser Gewinnentnahme verwendet. Sie bewegt den Stop-Loss nach Erreichen der ersten Gewinnspanne auf Breakeven und bewegt sich nach Erreichen der zweiten Gewinnspanne auf den ersten Gewinn. Dies ermöglicht es, einige Gewinne zu erzielen, während das Gewinnpotenzial beibehalten wird.

Strategie Logik

Die wichtigsten Bestandteile dieser Strategie sind:

  1. Ein Stop-Loss und 3 nehmen Gewinnniveaus in Punkten.
  2. Definition von Funktionen zur Berechnung des aktuellen Gewinns in Punkten und des Stop-Loss-Preises.
  3. Definition einer Funktion zur Bestimmung der aktuellen Gewinnstufe.
  4. Änderung des Stop-Loss-Preises basierend auf der Gewinnphase auf den Trail-Preis.

Insbesondere setzt es zunächst einen Stop-Loss von 100 Punkten und nimmt Gewinne bei 100/200/300 Punkten.curProfitInPtsDie Funktion berechnet den aktuellen Gewinn anhand des aktuellen Preises und des Einstiegspreises.calcStopLossPriceDie Funktion berechnet den Stop-Loss-Preis anhand der Punktdistanz.

Die wichtigste Logik liegt in dergetCurrentStageEine Funktion, die überprüft, ob eine Position besteht und ob der Gewinn jedes Gewinnspiel überschritten hat, indem die Stufe vorangetrieben wird, wenn sie wahr ist.

Schließlich wird der Stop-Loss je nach Stufe geändert. Stufe 1 verwendet den ursprünglichen Stop, Stufe 2 Breakeven und Stufe 3 verfolgt die erste Gewinnspanne.

Analyse der Vorteile

Die Vorteile dieser schrittweisen Strategie:

  1. Ermöglicht es, gewisse Gewinne zu erzielen und gleichzeitig ein weiteres Gewinnpotenzial zu erhalten.
  2. Der Trailing Stop Loss folgt dem Preis und verringert die Wahrscheinlichkeit eines Drawdowns.
  3. Mehrstufige Gewinnaufnahme-Kontrollen riskieren besser als eine Gewinnaufnahme.
  4. Einfache und klare Logik.

Risikoanalyse

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

  1. Eine schrittweise Gewinnentnahme kann bessere Ausgangsmöglichkeiten verpassen.
  2. Wenn die Strecke zu weit ist, kann der Stopp zu früh ausgelöst werden.
  3. Die Unfähigkeit, Verluste zu reduzieren, kann auch zu größeren Verlusten führen.

Optimierung

Einige Möglichkeiten, wie diese Strategie verbessert werden kann:

  1. Verschiedene Profit- und Stoppdistanzen testen, um die Parameter zu optimieren.
  2. Überlegen Sie, wie Sie einen schnellen Stop-Loss-Mechanismus für bestimmte Situationen einführen können.
  3. Verwenden Sie technische Indikatoren, um Gewinnziele und Stopp-Levels zu bestimmen.
  4. Gleichgewicht profitable Ausgänge und Stopp-Distanzen.

/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 3m
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/
// © adolgov

// @description
// when tp1 is reached, sl is moved to break-even
// when tp2 is reached, sl is moved to tp1
// when tp3 is reached - exit

//@version=4
strategy("Stepped trailing strategy example", overlay=true)

// random entry condition
longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

// sl & tp in points
sl = input(100)
tp1 = input(100)
tp2 = input(200)
tp3 = input(300)

curProfitInPts() =>
    if strategy.position_size > 0
        (high - strategy.position_avg_price) / syminfo.mintick
    else if strategy.position_size < 0
        (strategy.position_avg_price - low) / syminfo.mintick
    else
        0
        
calcStopLossPrice(OffsetPts) =>
    if strategy.position_size > 0
        strategy.position_avg_price - OffsetPts * syminfo.mintick
    else if strategy.position_size < 0
        strategy.position_avg_price + OffsetPts * syminfo.mintick
    else
        0
        
calcProfitTrgtPrice(OffsetPts) =>
    calcStopLossPrice(-OffsetPts)

getCurrentStage() =>
    var stage = 0
    if strategy.position_size == 0 
        stage := 0
    if stage == 0 and strategy.position_size != 0
        stage := 1
    else if stage == 1 and curProfitInPts() >= tp1
        stage := 2
    else if stage == 2 and curProfitInPts() >= tp2
        stage := 3
    stage

stopLevel = -1.
profitLevel = calcProfitTrgtPrice(tp3)

// based on current stage set up exit
// note: we use same exit ids ("x") consciously, for MODIFY the exit's parameters
curStage = getCurrentStage()
if curStage == 1
    stopLevel := calcStopLossPrice(sl)
    strategy.exit("x", loss = sl, profit = tp3, comment = "sl or tp3")
else if curStage == 2
    stopLevel := calcStopLossPrice(0)
    strategy.exit("x", stop = stopLevel, profit = tp3, comment = "breakeven or tp3")
else if curStage == 3
    stopLevel := calcStopLossPrice(-tp1)
    strategy.exit("x", stop = stopLevel, profit = tp3, comment = "tp1 or tp3")
else
    strategy.cancel("x")
    
// this is debug plots for visulalize TP & SL levels
plot(stopLevel > 0 ? stopLevel : na, style = plot.style_linebr)
plot(profitLevel > 0 ? profitLevel : na, style = plot.style_linebr)

Mehr