La stratégie utilise une combinaison d’EMA à retardement zéro et d’EMA de coque pour réaliser le suivi de la tendance. L’EMA à retardement zéro élimine le retard de l’EMA ordinaire, tandis que l’EMA de coque permet d’aplanir la courbe des prix. La combinaison des deux permet de capturer plus précisément les tendances et de réaliser des transactions à suivi de la tendance à faible risque.
On commence par calculer l’EMA avec un retard de zéro heure:
EMA1 = ema(close, Period) EMA2 = ema(EMA1, Period) Difference = EMA1 - EMA2 ZeroLagEMA = EMA1 + Difference
Parmi ceux-ci, ZeroLagEMA est un EMA à retardement zéro. Il élimine le retard de l’EMA ordinaire.
On calcule ensuite la courbe de l’EMA de la coque après l’assouplissement:
n2ma = 2*wma(ZeroLagEMA, round(S_period/2)) nma = wma(ZeroLagEMA, S_period) n1 = wma(n2ma - nma, sqn)
Enfin, le rapport entre la taille de l’EMA de la coque actuelle (n1) et celle de la coque de la période précédente (n2) est calculé, la direction de la tendance est déterminée et la stratégie de négociation est définie.
Le plus grand avantage de cette stratégie est qu’elle permet de saisir avec précision la direction des tendances.
L’EMA à retardement zéro élimine le retard de l’EMA ordinaire et permet de capturer plus rapidement les variations de prix.
La Hull EMA a été doublée pour filtrer une partie du bruit et rendre la tendance de la capture plus claire.
La combinaison de ces deux facteurs peut avoir des avantages respectifs, rendant la stratégie plus précise et plus fiable que l’utilisation de l’EMA ou de l’EMA Hull individuellement.
La stratégie présente principalement les risques suivants:
Les paramètres Period et S_period sont mal configurés, ce qui peut entraîner une insensitivité de la stratégie aux réactions du marché et une perte de temps de négociation.
En cas de tremblement de terre, les EMA et les EMA de Hull peuvent produire plus de signaux croisés, ce qui nécessite une fausse rupture d’alerte.
Les prix ont augmenté de façon spectaculaire du jour au lendemain, et il n’y a pas eu de réponse efficace.
Par conséquent, il est nécessaire de tester soigneusement les paramètres, d’être prudent avec les signaux indicatifs et de prévenir les risques de sauts de prix.
Cette stratégie peut être optimisée dans les domaines suivants:
Test des combinaisons d’optimisation de paramètres dans différents marchés à différentes périodes, afin que la stratégie soit mieux adaptée à diverses situations.
En combinaison avec d’autres indicateurs de filtrage de faux signaux de rupture, tels que KDJ, MACD, etc., améliore la stabilité de la stratégie.
Augmenter les stratégies de stop-loss pour contrôler les pertes individuelles
Optimiser le timing de l’entrée et améliorer encore le taux de victoire de la stratégie. Par exemple, en combinant la direction de la tendance et en évitant les positions de revers.
La stratégie utilise une combinaison de Hull EMAs à retardement zéro pour capturer avec précision et agilité les tendances du marché et pour effectuer des transactions de suivi de tendances à faible risque. La stabilité de la stratégie peut être encore améliorée par des moyens tels que l’optimisation des paramètres, le filtrage des indicateurs et l’arrêt des pertes.
/*backtest
start: 2023-08-19 00:00:00
end: 2023-09-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// Zero Lag EMA combined with Hull moving average for smoothing purposes.
// author: email: [email protected]
strategy("Ujanja", overlay=true)
Period = input(title="Period",defval=30, minval=1)
S_period=input(title="Smoother Period",defval=176)
EMA1= ema(close,Period)
EMA2= ema(EMA1,Period)
Difference= EMA1 - EMA2
ZeroLagEMA= EMA1 + Difference
n2ma=2*wma(ZeroLagEMA,round(S_period/2))
nma=wma(ZeroLagEMA,S_period)
diff=n2ma-nma
sqn=round(sqrt(S_period))
n2ma1=2*wma(ZeroLagEMA[1],round(S_period/2))
nma1=wma(ZeroLagEMA[1],S_period)
diff1=n2ma1-nma1
sqn1=round(sqrt(S_period))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
c=n1>n2?green:red
ma=plot(n1,color=c)
longCondition = n1>n2
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = longCondition != true
if (shortCondition)
strategy.entry("Short", strategy.short)