Stratégie typique de suivi de tendance


Date de création: 2024-01-12 14:59:18 Dernière modification: 2024-01-12 14:59:18
Copier: 0 Nombre de clics: 586
1
Suivre
1617
Abonnés

Stratégie typique de suivi de tendance

Aperçu

Une stratégie de suivi de tendance typique est la stratégie de croisement de deux moyennes. Elle utilise les moyennes EMA de deux périodes différentes, en faisant plus lorsque la moyenne de la courte période traverse la moyenne de la longue période et en faisant moins lorsque la moyenne de la courte période traverse la moyenne de la longue période, pour capturer les points de basculement de la tendance des prix.

Principe de stratégie

Le cœur de la stratégie est constitué de deux moyennes EMA de 30 cycles et 60 cycles respectivement. Les deux moyennes EMA sont calculées dans le code à l’aide de fonctions personnalisées:

emaLen1 = emaFuncOne(close, lenMA1)  
emaLen2 = emaFuncTwo(close, lenMA2)

Les signaux de négociation de la stratégie proviennent de la croisée de deux lignes équivalentes de l’EMA:

currentState = if emaLen2 > emaLen1  
    0
else
    1

previousState = if emaLastLen2 > emaLastLen1
    0  
else
    1

convergence = if currentState != previousState
    1
else 
    0

Lorsque l’EMA à court terme est portée sur l’EMA à long terme, le currentState n’est pas égal au previousState et un signal de croix apparaît. Lorsque l’EMA à court terme est inférieure à l’EMA à long terme, le State actuel n’est pas égal au State précédent et un signal de croisement apparaît.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. Les stratégies sont simples, intuitives, faciles à comprendre et à mettre en œuvre.
  2. Utilisez les propriétés de lissage de l’EMA pour filtrer efficacement le bruit du marché
  3. Le suivi automatique de la tendance est un moyen de ne pas rater de transactions

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Les signaux de croisement bi-lineaires peuvent être retardés et ne peuvent pas être saisis en temps opportun.
  2. Les tremblements de terre peuvent entraîner plusieurs signaux erronés.
  3. Une mauvaise configuration des paramètres peut entraîner une sursensibilité ou un retard excessif

L’optimisation peut être réalisée en ajustant le cycle EMA ou en ajoutant des conditions de filtrage.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Test de combinaisons de cycles EMA de différentes longueurs
  2. Filtre de faux signaux en cas d’augmentation de la quantité ou de la volatilité
  3. En combinaison avec d’autres indicateurs de confirmation de tendance, tels que le MACD
  4. Optimisation de la gestion des fonds, mise en place d’un stop loss

Résumer

La stratégie de croisement biuniversale est une stratégie de suivi de tendance simple et pratique dans l’ensemble. Elle est simple à mettre en œuvre et peut suivre automatiquement la tendance. Mais il existe également un risque de retard et de faux signaux.

Code source de la stratégie
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-11 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("ParkerMAStrat", overlay=true)

lenMA1=input(title="Length 1", defval=30)
lenMA2=input(title="Length 2",  defval=60)

x = 0

checkLines(current, last) =>

    if current > last
        x = 1
    else
        x = 0
    x
    

//plot ema based on len1
emaFuncOne(src, time_period) =>

    alpha = 2 / (time_period + 1)
    // we have defined the alpha function above
    ema = 0.0
    // this is the initial declaration of ema, since we dont know the first ema we will declare it to 0.0 [as a decimal]
    ema := alpha * src + (1 - alpha) * nz(ema[1])
    // this returns the computed ema at the current time
    // notice the use of : (colon) symbol before =, it symbolises, that we are changing the value of ema,
    // since the ema was previously declared to 0
    // this is called mutable variale declaration in pine script
    ema
    // return ema from the function

emaLen1 = emaFuncOne(close, lenMA1)

    
plot(emaLen1, color=green, transp=0, linewidth=2)
// now we plot the _10_period_ema

//plot ema based on len2
emaFuncTwo(src, time_period) =>

    alpha = 2 / (time_period + 1)
    // we have defined the alpha function above
    ema = 0.0
    // this is the initial declaration of ema, since we dont know the first ema we will declare it to 0.0 [as a decimal]
    ema := alpha * src + (1 - alpha) * nz(ema[1])
    // this returns the computed ema at the current time
    // notice the use of : (colon) symbol before =, it symbolises, that we are changing the value of ema,
    // since the ema was previously declared to 0
    // this is called mutable variale declaration in pine script
    ema
    // return ema from the function

//plot ema based on len2
emaFuncOneLast(src, time_period) =>

    alpha = 2 / (time_period + 1)
    // we have defined the alpha function above
    ema = 0.0
    // this is the initial declaration of ema, since we dont know the first ema we will declare it to 0.0 [as a decimal]
    ema := alpha * src + (1 - alpha) * nz(ema[0])
    // this returns the computed ema at the current time
    // notice the use of : (colon) symbol before =, it symbolises, that we are changing the value of ema,
    // since the ema was previously declared to 0
    // this is called mutable variale declaration in pine script
    ema
    // return ema from the function

//plot ema based on len2
emaFuncTwoLast(src, time_period) =>

    alpha = 2 / (time_period + 1)
    // we have defined the alpha function above
    ema = 0.0
    // this is the initial declaration of ema, since we dont know the first ema we will declare it to 0.0 [as a decimal]
    ema := alpha * src + (1 - alpha) * nz(ema[0])
    // this returns the computed ema at the current time
    // notice the use of : (colon) symbol before =, it symbolises, that we are changing the value of ema,
    // since the ema was previously declared to 0
    // this is called mutable variale declaration in pine script
    ema
    // return ema from the function



emaLastLen1 = emaFuncOneLast(close, lenMA1)
emaLastLen2 = emaFuncTwoLast(close, lenMA2)
emaLen2 = emaFuncTwo(close, lenMA2)

    
plot(emaLen2, color=red, transp=30, linewidth=2)
// now we plot the _10_period_ema

//now we compare the two and when green crosses red we buy/sell (line1 vs line2)

previousState = if emaLastLen2 > emaLastLen1
    0
else
    1

currentState = if emaLen2 > emaLen1
    0
else
    1

convergence = if currentState != previousState
    1
else
    0

    
lineCheck = if convergence == 1 
    checkLines(currentState, previousState)
    
if lineCheck == 1
    strategy.entry("Long", strategy.long)
else
    strategy.entry("Short", strategy.short)