Umkehrtrendfang und dynamische Stop-Loss-Kombi-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-05 09:54:13
Tags:

img

Übersicht

Diese Strategie kombiniert eine Umkehrtrend-Fangstrategie mit einer dynamischen Stop-Loss-Strategie, um Umkehrtrends zu erfassen und gleichzeitig Risiken mit dynamischen Stops zu kontrollieren.

Strategie Logik

Strategie zur Aufnahme einer Umkehrtrend

Diese Strategie basiert auf den Werten K und D des Stochastischen Oszillators. Sie erzeugt Kaufsignale, wenn der Preis zwei aufeinanderfolgende Tage fällt, während K über D steigt. Sie erzeugt Verkaufssignale, wenn der Preis zwei Tage steigt, während K unter D fällt. Dies fängt Preisumkehrtrends ein.

Dynamische Stop-Loss-Strategie

Diese Strategie setzt einen dynamischen Stop-Loss basierend auf Preisvolatilität und Verzerrung. Sie berechnet die Fluktuation des höchsten Höchst- und des niedrigsten Tiefstands in letzter Zeit und beurteilt, ob es sich auf der Grundlage der Verzerrung in einem oberen oder unteren Kanal befindet, und setzt dann den dynamischen Stop-Preis entsprechend. Dies passt die Stop-Position basierend auf den Marktbedingungen an.

Die beiden Strategien arbeiten zusammen, um Umkehrsignale zu erkennen und dynamische Stopps zu setzen, um Risiken zu kontrollieren.

Analyse der Vorteile

  • Umkehrpunkte des Fangpreises, geeignet für den Umkehrhandel
  • Dynamische Stopps passen sich dem Marktumfeld an
  • Doppelsignalbestätigung vermeidet falsche Signale
  • Risiken kontrollieren und Gewinne sichern

Risikoanalyse

  • Das Risiko eines Rückschaltfehlers, wenn das Rückschaltsignal versagt.
  • Parameterrisiko: Falsche Parameter können die Leistung beeinträchtigen.
  • Liquiditätsrisiko. Einige Produkte haben eine geringe Liquidität, um Verluste zu stoppen.

Die Risiken können durch Parameteroptimierung, strengen Stop-Loss und die Wahl von Produkten mit guter Liquidität kontrolliert werden.

Optimierungsrichtlinien

  • Optimierung der stochastischen Parameter für die beste Kombination
  • Optimieren Sie die Stoppparameter für die beste Stoppposition
  • Filter hinzufügen, um die Öffnung auf den Marktbereichen zu vermeiden
  • Hinzufügen von Positionsgrößen zur Begrenzung des maximalen Verlusts

Umfassende Optimierungen ermöglichen es der Strategie, Umkehrungen zu erfassen und gleichzeitig Risiken zu kontrollieren.

Zusammenfassung

Die Strategie kombiniert Trendumkehr und dynamische Stopps für einen stabilen kurzfristigen Handel.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 07/12/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
//  The Kase Dev Stops system finds the optimal statistical balance between letting profits run, 
//  while cutting losses.  Kase DevStop seeks an ideal stop level by accounting for volatility (risk),
//  the variance in volatility (the change in volatility from bar to bar), and volatility skew 
//  (the propensity for volatility to occasionally spike incorrectly).
//  Kase Dev Stops are set at points at which there is an increasing probability of reversal against 
//  the trend being statistically significant based on the log normal shape of the range curve.  
//  Setting stops will help you take as much risk as necessary to stay in a good position, but not more.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

KaseDevStops(Length, Level) =>
    pos = 0.0
    RWH = (high - low[Length]) / (atr(Length) * sqrt(Length))
    RWL = (high[Length] - low) / (atr(Length) * sqrt(Length))
    Pk = wma((RWH-RWL),3)
    AVTR = sma(highest(high,2) - lowest(low,2), 20)
    SD = stdev(highest(high,2) - lowest(low,2),20)
    Val4 = iff(Pk>0, highest(high-AVTR-3*SD,20), lowest(low+AVTR+3*SD,20))
    Val3 = iff(Pk>0, highest(high-AVTR-2*SD,20), lowest(low+AVTR+2*SD,20))
    Val2 = iff(Pk>0, highest(high-AVTR-SD,20), lowest(low+AVTR+SD,20))
    Val1 = iff(Pk>0, highest(high-AVTR,20), lowest(low+AVTR,20))
    ResPrice = iff(Level == 4, Val4,
                 iff(Level == 3, Val3,
                  iff(Level == 2, Val2,
                     iff(Level == 1, Val1, Val4))))
    pos := iff(close < ResPrice , -1, 1)
    pos

strategy(title="Combo Backtest 123 Reversal & Kase Dev Stops", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthKDS = input(30, minval=2, maxval = 100)
LevelKDS = input(title="Trade From Level", defval=4, options=[1, 2, 3, 4])
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posKaseDevStops = KaseDevStops(LengthKDS, LevelKDS)
pos = iff(posReversal123 == 1 and posKaseDevStops == 1 , 1,
	   iff(posReversal123 == -1 and posKaseDevStops == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Mehr