Komponente Stop-Loss- und Take-Profit-Strategie auf der Grundlage von Zufallseinträgen

Schriftsteller:ChaoZhang, Datum: 2024-01-24 15:38:49
Tags:

img

Übersicht

Die Hauptidee dieser Strategie besteht darin, den Einstiegspunkt zufällig zu bestimmen und drei Gewinnpunkte und einen Stop-Loss-Punkt festzulegen, um Risiken zu managen und den Gewinn und Verlust jedes Handels zu kontrollieren.

Strategie Logik

Diese Strategie verwendet die zufällige Zahl rd_number_entry zwischen 11 und 13 um den Long-Entry-Punkt zu bestimmen, und verwendet rd_number_exit zwischen 20 und 22 um das Schließen von Positionen zu bestimmen.Gleichzeitig werden drei Take-Profit-Punkte gesetzt. Der erste Take-Profit-Punkt ist der Einstiegspreis plus atr(14)tpx, der zweite Take-Profit-Punkt ist der Einstiegspreis plus 2tpx, und der dritte Take-Profit-Punkt ist der Einstiegspreis plus 3Das Prinzip des Shorting ist ähnlich, mit der Ausnahme, dass die Eintrittsentscheidung verschiedene rd_number_entry-Werte annimmt und die Richtung von Take Profit und Stop Loss entgegengesetzt ist.

Das Risiko kann durch Anpassung von tpx (Take-Profit-Koeffizient) und slx (Stop-Loss-Koeffizient) kontrolliert werden.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Die Verwendung der zufälligen Eingabe kann die Wahrscheinlichkeit einer Kurvenanpassung verringern
  2. Die Einstellung mehrerer Stop-Loss- und Take-Profit-Punkte kann das Risiko eines einzigen Handels kontrollieren.
  3. Die Verwendung von ATR zur Festlegung von Take Profit und Stop Loss erlaubt es, auf Marktvolatilität zu basieren.
  4. Das Handelsrisiko kann durch Anpassung der Koeffizienten kontrolliert werden

Risikoanalyse

Zu den Risiken dieser Strategie gehören außerdem:

  1. Zufälliger Eintrag kann Trends übersehen
  2. Wenn der Stop-Loss zu klein ist, kann er leicht gestoppt werden
  3. Wenn der Profit zu groß ist, kann er nicht ausreichen.
  4. Unpassende Parameter können zu größeren Verlusten führen

Die Risiken können durch Anpassung der Gewinn- und Stop-Loss-Koeffizienten und die Optimierung der Logik des zufälligen Einsatzes verringert werden.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Verbesserung der Logik der zufälligen Eingabe und Einbeziehung von Beurteilungen zu Trendindikatoren
  2. Optimierung der Gewinn- und Stop-Loss-Koeffizienten, um die Gewinnquote vernünftiger zu machen
  3. Steigern Sie die Positionskontrolle, um in verschiedenen Phasen verschiedene Gewinnbereiche zu nutzen
  4. Optimieren von Parametern mit Algorithmen für maschinelles Lernen

Schlussfolgerung

Diese Strategie basiert auf einem zufälligen Eintrag und setzt mehrere Take-Profit- und Stop-Loss-Punkte, um das Risiko eines einzigen Handels zu kontrollieren. Aufgrund der hohen Zufälligkeit kann die Wahrscheinlichkeit einer Kurvenanpassung reduziert werden. Das Handelsrisiko kann durch Parameteroptimierung reduziert werden. Es gibt noch viel Raum für weitere Optimierung und Forschung.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Random Strategy with 3 TP levels and SL", overlay=true,max_bars_back = 50)

tpx = input(defval = 0.8, title = 'Atr multiplication for TPs?')
slx = input(defval = 1.2, title = 'Atr multiplication for SL?')
isLong = false
isLong := nz(isLong[1])

isShort = false
isShort := nz(isShort[1])

entryPrice = 0.0
entryPrice := nz(entryPrice[1])
tp1 = true
tp1 := nz(tp1[1])
tp2 = true
tp2 := nz(tp2[1])

sl_price = 3213.0
sl_price := nz(sl_price[1])

sl_atr = atr(14)*slx
tp_atr = atr(14)*tpx

rd_number_entry = 1.0
rd_number_entry := (16708 * nz(rd_number_entry[1], 1) % 2147483647)%17

rd_number_exit = 1.0
rd_number_exit := ((16708 * time % 2147483647) %17)


//plot(rd_number_entry)

shortCondition = (rd_number_entry == 13? true:false) and (year >= 2017) and not isLong and not isShort
longCondition = (rd_number_entry == 11 ? true:false) and (year >= 2017) and not isShort and not isShort
//Never exits a trade:
exitLong = (rd_number_exit == 22?true:false) and (year >= 2018) and not isShort
exitShort = (rd_number_exit ==  22?true:false) and (year >= 2018) and not isLong


//shortCondition = crossunder(sma(close, 14), sma(close, 28)) and year >= 2017
//longCondition = crossover(sma(close, 14), sma(close, 28)) and year >= 2017

//exitLong = crossunder(ema(close, 14), ema(close, 28)) and year >= 2017
//exitShort = crossover(ema(close, 14), ema(close, 28)) and year >= 2017

if (longCondition and not isLong)
    strategy.entry('Long1', strategy.long)
    strategy.entry('Long2', strategy.long)
    strategy.entry('Long3', strategy.long)
    isLong := true
    entryPrice := close
    isShort := false
    tp1 := false
    tp2 := false
    sl_price := close-sl_atr

if (shortCondition and not isShort)
    strategy.entry('Short1', strategy.short)
    strategy.entry('Short2', strategy.short)
    strategy.entry('Short3', strategy.short)
    isShort := true
    entryPrice := close
    isLong := false
    tp1 := false
    tp2 := false
    sl_price := close+sl_atr
    
if (exitShort and isShort)
    strategy.close('Short1')
    strategy.close('Short2')
    strategy.close('Short3')
    isShort :=  false

if (exitLong and isLong)
    strategy.close('Long1')
    strategy.close('Long2')
    strategy.close('Long3')
    isLong :=  false

if isLong
    if (close > entryPrice + tp_atr) and not tp1
        strategy.close('Long1')
        tp1 := true
        sl_price := close - tp_atr
    if (close > entryPrice + 2*tp_atr) and not tp2
        strategy.close('Long2')
        tp2 := true
        sl_price := close - tp_atr
    if (close > entryPrice + 3*tp_atr)
        strategy.close('Long3')
        isLong := false
    if (close < sl_price)
        strategy.close('Long1')
        strategy.close('Long2')
        strategy.close('Long3')
        isLong := false

if isShort
    if (close < entryPrice - tp_atr) and not tp1
        strategy.close('Short1')
        sl_price := close + tp_atr
        tp1 := true
    if (close < entryPrice - 2*tp_atr) and not tp2
        strategy.close('Short2')
        sl_price := close + tp_atr
        tp2 := true
    if (close < entryPrice - 3*tp_atr)
        strategy.close('Short3')
        isShort := false
    if (close > sl_price)
        strategy.close('Short1')
        strategy.close('Short2')
        strategy.close('Short3')
        isShort := false
plot(atr(14)*slx)
plot(sl_price)

Mehr