Stratégie combinée de capture de tendance d'inversion et de stop loss dynamique

Auteur:ChaoZhang est là., Date: 2024-02-05 09:54:13 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie combine une stratégie de capture des tendances d'inversion et une stratégie de stop loss dynamique pour capturer les tendances d'inversion tout en contrôlant les risques avec des stops dynamiques.

La logique de la stratégie

Stratégie de capture de la tendance à l'inversion

Cette stratégie est basée sur les valeurs K et D de l'oscillateur stochastique. Elle génère des signaux d'achat lorsque le prix chute pendant deux jours consécutifs tandis que K monte au-dessus de D. Elle génère des signaux de vente lorsque le prix augmente pendant deux jours tandis que K tombe en dessous de D. Cela capte les tendances d'inversion des prix.

Stratégie dynamique d'arrêt des pertes

Cette stratégie définit un stop loss dynamique en fonction de la volatilité des prix et de l'oscillation. Elle calcule la fluctuation du plus haut plus haut et du plus bas plus bas récemment et juge s'il est dans un canal supérieur ou inférieur en fonction de l'oscillation, puis fixe le prix d'arrêt dynamique en conséquence. Cela ajuste la position d'arrêt en fonction des conditions du marché.

Les deux stratégies travaillent ensemble pour détecter les signaux de renversement et définir des arrêts dynamiques pour contrôler les risques.

Analyse des avantages

  • Points de renversement du prix de capture, bons pour le trading de renversement
  • Les arrêts dynamiques s'adaptent à l'environnement du marché
  • La confirmation à double signal évite les faux signaux
  • Contrôler les risques et assurer les bénéfices

Analyse des risques

  • Risque d'échec de l'inversion. Les signaux d'inversion peuvent échouer.
  • Des paramètres incorrects peuvent affecter les performances.
  • Risque de liquidité: certains produits ont une faible liquidité pour arrêter les pertes.

Les risques peuvent être contrôlés par l'optimisation des paramètres, un stop loss strict, le choix de produits avec une bonne liquidité.

Directions d'optimisation

  • Optimiser les paramètres stochastiques pour une meilleure combinaison
  • Optimiser les paramètres d'arrêt pour une meilleure position d'arrêt
  • Ajouter des filtres pour éviter l'ouverture sur les marchés de gamme
  • Ajouter la dimension de position pour limiter la perte maximale

Des optimisations complètes permettent à la stratégie de détecter les retours en arrière tout en contrôlant les risques.

Résumé

La stratégie combine la capture de tendance inverse et les arrêts dynamiques pour des transactions stables à court terme.


/*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 )

Plus de