Stratégie de négociation des moyennes mobiles sur plusieurs délais

Auteur:ChaoZhang est là., Date: le 12 décembre 2023 16:07:18
Les étiquettes:

img

Résumé

Cette stratégie adopte un système de moyenne mobile multi-temporelle, combiné avec le RSI et d'autres indicateurs techniques, pour réaliser une commutation automatique entre les positions longues et courtes.

Principaux

Les indicateurs de base de cette stratégie sont le système de moyenne mobile. La stratégie utilise plusieurs indicateurs de moyenne mobile tels que JMA, TEMA, DEMA pour calculer les tendances des prix sur différentes périodes telles que 15min, 30min, 60min. Par exemple, la tendance MA calculée par JMA dans le délai de 15min représente le jugement de la tendance des prix dans ce délai. Ensuite, la stratégie compare les tendances des prix entre différentes périodes pour identifier les divergences entre les tendances plus longues et plus courtes. Si des divergences significatives sont détectées, des signaux de trading seront générés.

Plus précisément, les variables tendance, tendance2 et tendance3 de la stratégie représentent respectivement les tendances de prix des délais de 15 minutes, 30 minutes et 60 minutes. S'il y a un renversement de prix de 15 minutes, alors que les délais de 30 minutes et 60 minutes ne sont pas encore inversés, il est jugé comme une divergence entre les tendances plus courtes et plus longues, produisant ainsi un signal de trading. Aucun signal ne sera généré si les tendances de tous les délais sont cohérentes.

En comparant les relations entre plusieurs délais et en filtrant certains faux signaux, des signaux de trading plus fiables peuvent être générés c'est l'idée de base de la stratégie.

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. Amélioration de la fiabilité du signal grâce à l'analyse de plusieurs délais et au filtrage des faux signaux;
  2. Éviter les problèmes liés à un seul indicateur en combinant plusieurs indicateurs pour des jugements complets;
  3. Transition automatique entre positions longues et courtes sans intervention manuelle, réduisant la difficulté d'exploitation.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. L'analyse sur plusieurs délais introduit une incertitude quant au moment de l'entrée dans le commerce, ce qui peut entraîner l'absence des meilleurs prix d'entrée;
  2. Des paramètres inappropriés lors de la combinaison de plusieurs indicateurs pourraient entraîner une détérioration de la qualité des signaux de négociation;
  3. Le changement automatique de position risque une sur-optimisation et une performance de négociation réelle plus faible par rapport aux backtests.

Nous pouvons prendre les mesures suivantes pour atténuer les risques susmentionnés:

  1. Paramètres de réglage des délais afin d'assurer la capture des signaux à court terme pour une entrée en temps opportun;
  2. Des tests antérieurs approfondis pour optimiser en permanence les paramètres des indicateurs;
  3. Interventions raisonnables dans le commerce réel pour empêcher le trading aveugle par des systèmes automatisés.

Directions d'optimisation

Cette stratégie peut être encore optimisée:

  1. Introduction d'algorithmes d'apprentissage automatique permettant d'optimiser automatiquement les paramètres sur plusieurs indicateurs par le biais d'une formation de modèles;
  2. ajouter des paramètres de glissement adaptatifs basés sur les niveaux de volatilité du marché afin d'améliorer les performances des transactions réelles;
  3. Incorporer des mécanismes de confirmation prix-volume pour éviter les pertes dues à des renversements rapides de tendance.

Conclusion

Cette stratégie compare les tendances des prix sur plusieurs délais pour identifier les relations à plus long terme par rapport aux relations à plus court terme, et génère des signaux de trading en analysant plusieurs indicateurs obtenant un changement automatique entre longs et shorts avec de bons résultats de backtest.


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

//@version=2
strategy("Drexel Strategy", overlay=true )
Length1=7
Length2=9
Multiplier=input(1.5,"Multiplier")
jma(src,length) =>
    beta = 0.45*(length-1)/(0.45*(length-1)+2)
    alpha = beta
    tmp0 = (1-alpha)*src + alpha*nz(tmp0[1])
    tmp1 = (src - tmp0[0])*(1-beta) + beta*nz(tmp1[1])
    tmp2 = tmp0[0] + tmp1[0]
    tmp3 = (tmp2[0] - nz(tmp4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(tmp3[1])
    tmp4 = nz(tmp4[1]) + tmp3[0]
    JMA = tmp4
    JMA
rsx(src,length) =>
    f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1
    f88 = (nz(f90_[1]) == 0.0) and (length-1 >= 5) ? length-1.0 : 5.0 
    f8 =  100.0*(src) 
    f18 = 3.0 / (length + 2.0) 
    f20 = 1.0 - f18 
    f10 = nz(f8[1])
    v8 = f8 - f10 
    f28 = f20 * nz(f28[1]) + f18 * v8 
    f30 = f18 * f28 + f20 * nz(f30[1])
    vC = f28 * 1.5 - f30 * 0.5 
    f38 = f20 * nz(f38[1]) + f18 * vC 
    f40 = f18 * f38 + f20 * nz(f40[1])
    v10 = f38 * 1.5 - f40 * 0.5 
    f48 = f20 * nz(f48[1]) + f18 * v10 
    f50 = f18 * f48 + f20 * nz(f50[1])
    v14 = f48 * 1.5 - f50 * 0.5 
    f58 = f20 * nz(f58[1]) + f18 * abs(v8) 
    f60 = f18 * f58 + f20 * nz(f60[1])
    v18 = f58 * 1.5 - f60 * 0.5
    f68 = f20 * nz(f68[1]) + f18 * v18 
    f70 = f18 * f68 + f20 * nz(f70[1])
    v1C = f68 * 1.5 - f70 * 0.5 
    f78 = f20 * nz(f78[1]) + f18 * v1C 
    f80 = f18 * f78 + f20 * nz(f80[1])
    v20 = f78 * 1.5 - f80 * 0.5
    f0 = ((f88 >= f90_) and (f8 != f10)) ? 1.0  : 0.0
    f90 = ((f88 == f90_) and (f0 == 0.0))  ? 0.0  : f90_
    v4_ = ((f88 < f90) and (v20 > 0.0000000001)) ? (v14 / v20 + 1.0) * 50.0 : 50.0
    rsx = ((v4_ > 100.0) ? 100.0 : (v4_ < 0.0) ? 0.0 : v4_)-50
    rsx
xPrice=open
emaA = ema(xPrice, Length2)  
Xprice = rsx(open,14)
XPrice = high, xprice = low
xe1 = jma(xPrice, Length1)
xe11 = jma(Xprice[1],Length1)
xe111 = jma(XPrice[1],Length1)
xe1111=jma(xprice[1],Length1)
xe2 = jma(xe1, Length1)
xe21 = jma(xe111, Length1)
xe3 = jma(xe2, Length1)
xe31 = jma(xe1111,Length2)
xe3a = jma(xe2,Length1)
xe4 = jma(xe3, Length1)
xe5 = jma(xe4, Length1)
xe6 = jma(xe5, Length1)
b = 0.7
c1 = -b*b*b
c2 = 3*b*b+3*b*b*b
c3 = -6*b*b-3*b-3*b*b*b
c3a = nz(c3a[1])
c4 = 1+3*b+b*b*b+3*b*b
TEMA = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3
DEMA = 2 * emaA - ema(emaA, Length2)
Length(mod)=>(mod*c3a)+Length2
Trend1=TEMA/DEMA
a=rsx(open,Length(2))
b1=rsx(open,Length(3))
c=rsx(open,Length(5))
d=rsx(open,Length(8))
e=rsx(open,Length(13))
f=rsx(open,Length(21))
g=rsx(open,Length(34))
h=rsx(open,Length(55))
i=rsx(open,Length(89))
j=rsx(open,Length(144))
trend1 = (((a-b1)+(c-d)+(e-f)+(g-h)+(i-j))/10)
trend = trend1>0?avg(a,b,c4,c2):trend1==0?XPrice:avg(rsx(open,24),jma(open,24),rsx(jma(open,24),24))
trend2 = trend1>0?avg(d,e,c2,c1):trend1==0?XPrice:avg(rsx(open,48),jma(open,48),rsx(jma(open,48),48))
trend3 = trend1>0?avg(d,e,c2,c1):trend1==0?xprice:avg(rsx(open,96),jma(open,96),rsx(jma(open,96),96))
bc=request.security(syminfo.tickerid,'15',trend)
bc1=request.security(syminfo.tickerid,'15',trend2)
bc2=request.security(syminfo.tickerid,'15',trend3)
bd=request.security(syminfo.tickerid,'30',trend)
bd1=request.security(syminfo.tickerid,'30',trend2)
bd2=request.security(syminfo.tickerid,'30',trend3)
be=request.security(syminfo.tickerid,'60',trend)
be1=request.security(syminfo.tickerid,'60',trend2)
be2=request.security(syminfo.tickerid,'60',trend3)
bf=request.security(syminfo.tickerid,'120',trend)
bf1=request.security(syminfo.tickerid,'120',trend2)
bf2=request.security(syminfo.tickerid,'120',trend3)
bg=request.security(syminfo.tickerid,'240',trend)
bg1=request.security(syminfo.tickerid,'240',trend2)
bg2=request.security(syminfo.tickerid,'240',trend3)
bh=request.security(syminfo.tickerid,'D',trend)
bh1=request.security(syminfo.tickerid,'D',trend2)
bh2=request.security(syminfo.tickerid,'D',trend3)
Trend=((bc-bc1)+(bd-bd1)+(be-be1)+(bf-bf1)+(bg-bg1)+(bh))
Trend11=((bc-bc1)+(bd-bd1)+(be-be1)+(bf-bf1)+(bg-bg1)+(bh1))
Trend33 = max(min(min(min(bc2,bd2),min(be2,bf2)),bg2),bh2)
AverageTrend=sma(Trend1,1000)
StdDev=Multiplier*stdev(Trend1,1000)
TopBand=AverageTrend+StdDev
BotBand=AverageTrend-StdDev
ap=open
n1=10
n2=21
esa1 = jma(ap, n1)
d1 = jma(abs(ap - esa1), n1)
x1 = trend3==Trend33
y1 = trend2==Trend11 
ci = (ap - esa1) / (0.015 * d1)
tci = jma(ci, n2)
wt1=tci
wt2=sma(wt1,4)
fast=jma(open,5)
slow=jma(open,13)
macd=fast-slow
signal=sma(macd,4)
WaveTrend1=wt1-wt2
JMACD1=macd-signal
rsi = (((rsi(open,6))-50)*3)
g1=rsi>Trend1 and WaveTrend1>Trend1 and JMACD1>Trend1
h1=g1?tci*c3a:nz(h[1])
strategy.entry("Long",true,when=x1)
strategy.close("Long",y1)
strategy.entry("Short",false,when=y1)
strategy.close("Short",x1)

Plus de