
Diese Strategie ist eine Ausstiegsstrategie, die einen Stufenstop mit einem Schlupfpunkt-Stop kombiniert. Sie verschiebt den Stop-Loss nach Erreichen des ersten Stop-Loss-Gleichgewichtspunkts und den Stop-Loss nach Erreichen des zweiten Stop-Loss-Gleichgewichtspunkts, wodurch ein Stufenstop-Slip-Mechanismus erreicht wird. Dies kann einen Teil des Gewinns sperren und gleichzeitig einen großen Gewinnraum behalten.
Die Strategie umfasst die folgenden Komponenten:
Konkret wurde zunächst ein Stop-Loss-Distanz von 100 Punkten und drei Stop-Stopp-Distanzen von 100/200/300 Punkten festgelegt. Dann wurde eine Funktion definiert, die den Gewinn basierend auf dem aktuellen Preis und dem Kurs der Position berechnet.curProfitInPts, und die Funktion, die den Stop-Loss-Preis berechnet, basierend auf der PunktabstandcalcStopLossPrice。
Das ist die entscheidende Logik.getCurrentStageFunktion, die beurteilt, ob der aktuelle Handelsplatz besteht, und ob der Gewinn einen bestimmten Stop-Point überschritten hat, wenn er überschritten wird, geht es in die nächste Phase. Zum Beispiel geht es in die zweite Phase, wenn der Stop-Point 100 erreicht ist, und in die dritte Phase, wenn der Stop-Point 200 erreicht ist.
Schließlich wird der Stop-Loss-Preis je nach Phase geändert, um einen Slipp-Stop zu erreichen. Der Stop-Loss in der ersten Phase bleibt bei der ursprünglichen Einstellung, die Stop-Loss in der zweiten Phase wechselt zu einem Gewinn-Verlust-Gleichgewicht, die Stop-Loss in der dritten Phase wechselt zum ersten Stop-Loss-Punkt.
Diese Stufenstop-Slip-Point-Strategie hat folgende Vorteile:
Die Strategie birgt auch Risiken:
Die Strategie kann in folgenden Richtungen optimiert werden:
/*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)