La tendance croisée de la pente de l' EMA à la suite de la stratégie

Auteur:ChaoZhang est là., Date: 2023-10-17 à 17h02h30
Les étiquettes:

img

Résumé

Cette stratégie utilise le croisement des pentes de deux EMA de longueurs différentes pour générer une tendance suivant les signaux.

Les conditions qui font entrer la stratégie sur le marché sont les suivantes:

  • Pente rapide > Pente lente et prix > EMA 200: long
  • Pente rapide < Pente lente et prix < EMA 200: courte

Quand les pentes simples se croisent dans la direction opposée, il ferme la position.

La stratégie fonctionne mieux sur Bitcoin et les altcoins les plus liquides et capitalisés, mais fonctionne également bien sur les actifs volatils, en particulier s'ils sont souvent tendance. Ça fonctionne mieux sur une période de 4 heures.

Il existe également un filtre de volatilité en option, qui n'ouvre la position que si la différence entre les deux pistes est supérieure à une valeur spécifique.

Ça va être sympa!

La logique de la stratégie

Le noyau de cette stratégie est de comparer les pentes de deux EMA de longueurs différentes.

Tout d'abord, on calcule des EMA de longueur de 130 et 400, puis on calcule les pentes de chacune, puis on calcule des EMA de longueur 3 sur chaque pente pour obtenir des courbes de pente lissées.

Lorsque la pente rapide de l'EMA traverse au-dessus de la pente lente de l'EMA, un signal d'achat est généré.

Pour filtrer le bruit, une EMA de 200 périodes peut être utilisée comme filtre de tendance, en tenant compte des signaux longs uniquement lorsque le prix est au-dessus de la EMA et des signaux courts uniquement lorsque celui-ci est en dessous.

En outre, un filtre de volatilité peut être utilisé, générant des signaux uniquement lorsque la différence entre les deux pentes est supérieure à un seuil, afin d'éviter les cas où les pentes se croisent mais où la volatilité est insuffisante.

Lorsque les pentes rapides et lentes se croisent inversement, les positions sont fermées pour arrêter les profits/pertes.

Analyse des avantages

  1. L'utilisation de croix de pente pour générer des signaux peut effectivement suivre les tendances

  2. La modification des combinaisons de périodes EMA peut s'adapter aux différentes conditions du marché

  3. Le filtre de tendance évite d'être induit en erreur par l'action de prix houleuse

  4. Le filtre de volatilité filtre les faux signaux

  5. Logie simple et claire, facile à comprendre et à mettre en œuvre

  6. Peut être utilisé sur plusieurs délais

Analyse des risques

  1. Des ouvertures et des fermetures fréquentes peuvent se produire sur des marchés à large éventail

  2. Les périodes de mise en marché EMA inappropriées pourraient manquer les points tournants de la tendance

  3. Les paramètres doivent être adaptés à l'évolution des conditions du marché

  4. Comme pour les systèmes d'AM, les grandes tendances peuvent s'inverser à des extrêmes

Directions d'optimisation

  1. Essayez différentes combinaisons de périodes EMA pour trouver les paramètres optimaux

  2. Choisir des paramètres en fonction des caractéristiques des actifs et des conditions du marché

  3. Envisager d'ajouter des stratégies de stop loss pour contrôler le risque

  4. Considérer l'ajustement dynamique des périodes EMA

  5. Tester différentes valeurs de seuil de volatilité

  6. Efficacité des essais dans les délais

Résumé

La stratégie a une logique claire et facile à comprendre, utilisant des croix de pente EMA pour générer des signaux et suivre efficacement les tendances. Les filtres de tendance et de volatilité réduisent les transactions bruyantes.


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

//@version=4
// strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false)

//definizione input

start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00)
end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00)

average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

len1=input(130,title="Fast MA Length")
len2=input(400,title="Slow MA Length")

smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"])
smoothingavglen = input (3,title="Smoothing MAs Length")

trendfilter=input(true,title="Trend Filter")
trendfilterperiod=input(200,title="Trend Filter MA Period")
trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

volatilityfilter=input(false,title="Volatility Filter")
volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA")

//variabili

m1 = if average == "EMA" 
    ema(close,len1)
else
    sma(close,len1)

m2=if average == "EMA" 
    ema(close,len2)
else
    sma(close,len2)

slp1=(m1-m1[1])/m1
slp2=(m2-m2[1])/m2

e1=if smoothingavg == "EMA" 
    ema(slp1,smoothingavglen)
else
    sma(slp1,smoothingavglen)

e2=if smoothingavg == "EMA" 
    ema(slp2,smoothingavglen)
else
    sma(slp2,smoothingavglen)

plot(e1,color=color.yellow)
plot(e2,color=color.red)
//plot (abs(e1-e2),color=color.white)
//plot (ema(e1-e2,9),color=color.yellow)

//variabili accessorie e condizioni

TrendConditionL=if trendfiltertype =="EMA"
    close>ema(close,trendfilterperiod)
else
    close>sma(close,trendfilterperiod)
    
TrendConditionS=if trendfiltertype =="EMA"
    close<ema(close,trendfilterperiod)
else
    close<sma(close,trendfilterperiod)
    
VolatilityCondition = abs(e1-e2) > volatilitydelta

ConditionEntryL= if trendfilter == true
    if volatilityfilter == true
        e1>e2 and TrendConditionL and VolatilityCondition
    else
        e1>e2 and TrendConditionL
else
    if volatilityfilter == true
        e1>e2 and VolatilityCondition
    else 
        e1>e2

ConditionEntryS= if trendfilter == true
    if volatilityfilter == true
        e1<e2 and TrendConditionS and VolatilityCondition
    else 
        e1<e2 and TrendConditionS
else
    if volatilityfilter == true
        e1<e2 and VolatilityCondition
    else
        e1<e2

ConditionExitL=crossunder(e1,e2)
ConditionExitS=crossover(e1,e2)

if true
    if ConditionExitS
        if strategy.position_size < 0
            strategy.close("SLPShort")

if true
    if ConditionExitL
        if strategy.position_size > 0
            strategy.close("SLPLong")

if true
    if ConditionEntryL
        strategy.entry ("SLPLong",long=true)
        
if true
    if ConditionEntryS 
        strategy.entry("SLPShort",long=false)

Plus de