Stratégie de croisement de tendance combinée d'inversion de la moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-11-28 13h47:05
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie combinée qui combine l'inversion de tendance et les stratégies de croisement de moyenne mobile pour générer des signaux de trading plus précis.

La logique de la stratégie

La stratégie se compose de deux parties:

  1. 123 Stratégie d'inversion: aller long lorsque le prix de clôture augmente pendant 2 jours consécutifs et que le stochastique lent de 9 jours est inférieur à 50; aller court lorsque le prix de clôture tombe pendant 2 jours consécutifs et que le stochastique rapide de 9 jours est supérieur à 50.

  2. Stratégie de moyenne de Bill Williams: Calculer les moyennes mobiles de prix médianes de 13, 8 et 5 jours et aller long lorsque les MAs plus rapides dépassent les MAs plus lents; aller court lorsque les MAs plus rapides dépassent les MAs plus lents.

Enfin, un signal de trading réel n'est généré que lorsque les deux stratégies s'accordent sur la direction; sinon aucun commerce.

Analyse des avantages

La stratégie de combo filtre le bruit en utilisant des validations de tendance doubles, améliorant ainsi la précision du signal.

Analyse des risques

Les risques sont les suivants:

  1. Le double filtre peut manquer quelques bons échanges.
  2. Des paramètres de MA incorrects peuvent induire en erreur les tendances
  3. Les stratégies d'inversion elles-mêmes comportent des risques de perte

Les risques peuvent être réduits en optimisant les paramètres de l'AM ou la logique d'entrée/sortie.

Directions d'optimisation

La stratégie peut être optimisée par:

  1. Tester différentes combinaisons d'AM pour trouver les paramètres optimaux
  2. Ajout d'un stop-loss à des pertes limitées
  3. Intégration du volume pour identifier la qualité du signal
  4. Utiliser l'apprentissage automatique pour optimiser automatiquement

Conclusion

Cette stratégie combine deux filtres de tendance et des MAs pour filtrer efficacement les bruits et améliorer la précision des décisions.


/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/06/2019
// This is combo strategies for get 
// a cumulative signal. Result signal will return 1 if two strategies 
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// 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
// This indicator calculates 3 Moving Averages for default values of
// 13, 8 and 5 days, with displacement 8, 5 and 3 days: Median Price (High+Low/2).
// The most popular method of interpreting a moving average is to compare 
// the relationship between a moving average of the security's price with 
// the security's price itself (or between several moving averages).
//
// 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

BillWilliamsAverages(LLength, MLength,SLength, LOffset,MOffset, SOffset ) =>
    xLSma = sma(hl2, LLength)[LOffset]
    xMSma = sma(hl2, MLength)[MOffset]
    xSSma = sma(hl2, SLength)[SOffset]
    pos = 0
    pos := iff(close < xSSma and xSSma < xMSma and xMSma < xLSma, -1,
    	   iff(close > xSSma and xSSma > xMSma and xMSma > xLSma, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Bill Williams Averages. 3Lines", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LLength = input(13, minval=1)
MLength = input(8,minval=1)
SLength = input(5,minval=1)
LOffset = input(8,minval=1)
MOffset = input(5,minval=1)
SOffset = input(3,minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posBillWilliamsAverages = BillWilliamsAverages(LLength, MLength,SLength, LOffset, MOffset, SOffset)
pos = iff(posReversal123 == 1 and posBillWilliamsAverages == 1 , 1,
	   iff(posReversal123 == -1 and posBillWilliamsAverages == -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 ? red: possig == 1 ? green : blue ) 

Plus de