Tendance croisée moyenne en mouvement suivant la stratégie

Auteur:ChaoZhang est là., Date: 2023-10-24 à 12h31h44
Les étiquettes:

img

Résumé

Cette stratégie combine des croisements de moyennes mobiles et des indicateurs de momentum pour suivre et inverser efficacement les tendances. Elle utilise d'abord des moyennes mobiles rapides et lentes pour générer des signaux longs de croix dorée et des signaux courts de croix de mort. Puis avec des indicateurs de momentum de certains paramètres, si l'élan sur le MA rapide revient après la croix d'or, la tendance est considérée comme continue et la position longue sera maintenue. Lorsque l'élan diminue, il est considéré comme un renversement de tendance et la position existante sera fermée.

La logique de la stratégie

La logique de base de cette stratégie est basée sur les signaux de tendance des croisements MA et les signaux d'inversion de tendance des indicateurs de dynamique.

  1. Calculer le prix MA rapide1 (HMA à 5 périodes) et le prix MA lent2 (HMA à 7 périodes).

  2. La croix d'or avec le prix1 passant au-dessus du prix2 génère un signal long. La croix de mort avec le prix1 passant au-dessous du prix2 génère un signal court. C'est l'utilisation courante des MA.

  3. Après le signal long, si la dynamique du prix roc1 revient, la tendance est considérée comme continue et la position longue sera maintenue.

  4. Lorsque le momentum roc1 diminue, il est considéré comme un renversement de tendance et la position existante sera fermée.

  5. Introduisez le seuil ADX pour éviter les signaux erronés lorsqu'il n'est pas dans l'état de tendance.

Analyse des avantages

Comparé aux stratégies simples de MA, le plus grand avantage de cette stratégie est l'introduction d'indicateurs de dynamique pour déterminer plus rapidement et plus précisément les renversements de tendance.

  1. Les MAs eux-mêmes retardent les changements de prix, tandis que les indicateurs de dynamique peuvent rapidement capturer les signaux d'inversion pour un stop loss ou une négociation inverse en temps opportun.

  2. Les signaux d'inversion basés sur la dynamique sont plus fiables, évitant des ordres d'ouverture/fermeture inutiles pendant les opérations de tendance.

  3. L'ADX évite les mauvais signaux sur les marchés non tendance, en gardant la stratégie plus axée sur les tendances avec des chances de gain plus élevées.

  4. La logique est simple et facile à comprendre, adaptée aux débutants du trading d'algo.

  5. Une large marge d'optimisation grâce à l'ajustement des périodes de MA, des paramètres de dynamique, etc. pour différents marchés.

Analyse des risques

Les principaux risques de cette stratégie proviennent de:

  1. La nature tardive des MAs, qui peut entraîner des signaux retardés, manquant les meilleurs points d'entrée.

  2. Faux évasions provoquant des entrées ou sorties inutiles, nécessitant une optimisation des paramètres ou des filtres supplémentaires.

  3. La détection de l'inversion de tendance repose sur l'élan, qui peut faiblir lors d'énormes fluctuations du marché.

  4. L'ADX est imparfait pour détecter les tendances et les consolidations.

  5. Aucune prise en compte des coûts de négociation.

Directions d'optimisation

La stratégie peut être encore optimisée dans les aspects suivants:

  1. Essayez d'autres types d'AM ou ajustez les paramètres d'AM pour obtenir de meilleurs effets d'assouplissement.

  2. Optimiser la longueur de l'indicateur de dynamique pour une plus grande sensibilité à la capture des renversements de prix.

  3. Définissez les filtres de prix lorsque la dynamique s'inverse pour éviter d'être induit en erreur par des fluctuations à court terme.

  4. Améliorer l'utilisation de l'ADX en utilisant différents paramètres à différents niveaux d'ADX.

  5. Mettre en place des indicateurs de volume, etc., pour améliorer la qualité du signal et filtrer les fausses éruptions.

  6. Ajoutez des mécanismes de stop loss pour contrôler les pertes d'une seule transaction.

Résumé

Cette stratégie combine les avantages des indicateurs de MA et de momentum pour suivre les tendances et capturer les renversements. Par rapport aux stratégies de suivi de tendance pure, elle peut être plus flexible pour traiter avec différentes étapes du marché, évitant les pertes du pic de tendance tout en maintenant le trading de tendance. D'autres améliorations peuvent être apportées grâce à l'optimisation des paramètres et à l'introduction de conditions auxiliaires.


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(open, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA"])

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
adxthreshold = input(20, title="ADX threshold")

dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	
sig = adx(dilen, adxlen)

//study("Average Directional Index", shorttitle="ADX", format=format.price, precision=2, resolution="")

//plot(sig, color=color.red, title="ADX")

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        f_hma(price, ma2)

//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


//longCondition = price1> price2
longCondition = price1> price2 and sig > adxthreshold
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = price1 < price2 and sig > adxthreshold
if (shortCondition)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1] and sig > adxthreshold
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1] and sig > adxthreshold
if (longexitCondition)
    strategy.close("Long")
    
    



Plus de