Koordinieren Sie die gleitende Stop-Loss-Strategie


Erstellungsdatum: 2023-11-02 16:28:55 zuletzt geändert: 2023-11-02 16:28:55
Kopie: 0 Klicks: 562
1
konzentrieren Sie sich auf
1617
Anhänger

Koordinieren Sie die gleitende Stop-Loss-Strategie

Überblick

Die Strategie nutzt den Stochastic RSI und die Preisänderungsrate, um die Richtung des Trends in die Multiple-Billings zu identifizieren, und verwendet die Koordinaten-Slipping-Stopp-Methode zur Risikomanagement.

Strategieprinzip

Zuerst berechnet die Strategie den Stochastic RSI mit einem RSI-Indikator mit einer Länge von 5 und einem Stochastic-Indikator mit einer Länge von 7. Der Stochastic RSI ist ein bullish Signal, wenn der K-Wert des Stochastic RSI über dem D-Wert liegt, und ein bearish Signal, wenn der K-Wert unter dem D-Wert liegt.

Zweitens berechnet die Strategie die Preisänderungsrate EMA ROC. Wenn die EMA ROC höher als die Hälfte der Abschwächung oder niedriger als die negative Hälfte der Abschwächung ist, wird angenommen, dass der Preis aktiv ist.

In Kombination mit dem Stochastic RSI-Hochspielsignal und dem Preisveränderungsindikator kann dann die Richtung des Trends erkannt werden. Wenn der Stochastic RSI bullish ist und der Preis aktiv bewegt sich, machen Sie mehr; wenn der Stochastic RSI bullish ist und der Preis aktiv bewegt sich, machen Sie weniger.

Die Strategie verwaltet das Risiko schließlich mit einer Koordinatenschiebe-Stopp-Methode. Nach dem Eröffnen der Position wird der Höchst- oder Tiefstpreis weiter aktualisiert, wobei der Stopp in einem bestimmten Verhältnis zum Höchst- oder Tiefstpreis liegt.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Die Verwendung des Stochastic RSI-Indikators kann Trends und Überkauf-Überverkäufe effektiv erkennen.

  2. Der Preisvolatilitätsindikator filtert die Marktschwankungen aus und verhindert falsche Signale.

  3. Die Koordinatenschiebe-Stopp-Methode maximiert den Gewinn, während gleichzeitig das Risiko kontrolliert wird.

  4. Die Optimierung der Strategieparameter ist groß und kann für verschiedene Sorten angepasst werden.

  5. Die Strategie ist einfach, klar und verständlich.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Der Stochastic RSI kann ein Falschsignal erzeugen, das in Kombination mit anderen Faktoren bestätigt werden muss.

  2. Die Koordinatenschiebe-Stopps sind möglicherweise zu radikal und werden von den Übernachtungslücken ausgeschaltet.

  3. Eine kurzfristige Umkehrung könnte dazu führen, dass ein Stop-Loss ausgelöst wird.

  4. Die Strategieparameter müssen für verschiedene Sorten optimiert werden, sonst können sie nicht wirken.

  5. Die Kosten für die Transaktion beeinflussen die Ertragsfähigkeit der Strategie und erfordern eine angemessene Häufigkeit der Transaktionen.

Optimierungsrichtung

Die Strategie kann auch in folgenden Bereichen optimiert werden:

  1. Optimierung der stochastischen RSI-Parameter zur Verringerung der Falschsignalrate. Verschiedene K-Werte und D-Werte können getestet werden.

  2. Optimierung der Parameter des Preisvariablen-Indikators und Verbesserung der Filterwirkung. Verschiedene Fensterperioden und Variationsschwellenwerte können getestet werden.

  3. In Kombination mit Trends zu beurteilen, um zu verhindern, dass ein Rückschlag verursacht wird.

  4. Optimierung des Stop-Loss-Verhältnisses und Verringerung der Risiken. Verschiedene Stop-Loss-Mengen können getestet werden

  5. Positionsmanagement, um einzelne Risiken zu steuern, z. B. eine feste Stop-Loss-Rate oder eine dynamische Anpassung der Positionen an den Kontostand.

  6. Verschiedene Sorten werden getestet, um ihre Anpassungsfähigkeit zu verbessern.

Zusammenfassen

Die Gesamtkonzeption der Strategie ist klar und einfach. Die Verwendung des stochastischen RSI zur Identifizierung der Trendrichtung und die Kombination mit dem Filtersignal der Preisänderungsrate ermöglicht die effektive Erfassung von mittleren und langen Trendchancen. Die Koordinatenschiebe-Stop-Loss-Methode kann den Gewinn abschließen und gleichzeitig das Risiko kontrollieren.

Strategiequellcode
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Sto2", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
///////////// Stochastic calc /////////////
smoothK = input(1, minval=1)
smoothD = input(7, minval=1)
lengthRSI = input(5, minval=1)
lengthStoch = input(7, minval=1)
src = input(close, title="RSI Source")

up = sma(max(change(src), 0), lengthRSI) 
down = sma(-min(change(src), 0), lengthRSI)
rsi1 = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)

///////////// Rate Of Change ///////////// 
source = close, roclength = input(14, minval=1), pcntChange = input(2, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// STRATEGY ///////////////
long = k > d and isMoving()
short = k < d and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(9.0, title='Take Profit %') / 100 
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp) 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

// Strategy
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long)
    strategy.entry("Short Entry", strategy.short, when=short)
    strategy.exit("Long Ex", "Long Entry", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("Short Ex", "Short Entry", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
    
///////////// Plotting /////////////
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
p1 = plot(k, color=color.gray, linewidth=0)
p2 = plot(d, color=color.gray, linewidth=0)
h0 = hline(100)
h1 = hline(50)
h3 = hline(0)
fill(p1, p2, color = k > d ? color.lime : color.red, transp=70)