Stratégie de trading avec système de moyenne mobile multi-chronologie


Date de création: 2023-12-12 16:07:18 Dernière modification: 2023-12-12 16:07:18
Copier: 1 Nombre de clics: 648
1
Suivre
1621
Abonnés

Stratégie de trading avec système de moyenne mobile multi-chronologie

Aperçu

Cette stratégie utilise un système homogène de plusieurs axes temporels, combiné à plusieurs indicateurs techniques tels que l’indicateur RSI, pour réaliser une commutation automatique à plusieurs intervalles. La stratégie est appelée Multi-Timeframe Moving Average System Trading Strategy. L’idée principale est de déterminer la tendance des prix dans différentes périodes de temps, pour générer des signaux de négociation plus fiables.

Principe de stratégie

La stratégie utilise plusieurs indicateurs de la même ligne, tels que JMA, TEMA et DEMA, pour calculer la tendance des prix sur différentes périodes, telles que 15 minutes, 30 minutes et 60 minutes. Par exemple, le mouvement de la ligne moyenne calculé par JMA sur 15 périodes est utilisé pour juger de la tendance des prix au cours de cette période. La stratégie compare ensuite le mouvement des prix sur différentes périodes pour déterminer s’il existe une divergence entre la ligne longue et la ligne courte.

Plus précisément, les variables trend, trend2 et trend3 de la stratégie représentent respectivement les tendances des prix à 15, 30 et 60 minutes. Si les prix se retournent à 15 minutes et que les prix ne se retournent pas à 30 minutes et 60 minutes, un signal de transaction est généré en jugeant qu’il existe un écart entre la courte et la longue ligne.

La stratégie est basée sur l’idée que, en comparant les relations entre plusieurs cycles, on peut filtrer les faux signaux et produire des signaux de trading plus fiables.

Analyse des avantages

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

  1. L’utilisation de l’analyse multi-axes pour améliorer la fiabilité du signal et filtrer les faux signaux;
  2. La prise en compte d’indicateurs multiples dans un jugement global, afin d’éviter les problèmes liés à un seul indicateur;
  3. La commutation automatique de plusieurs têtes aériennes, sans intervention humaine, réduit la difficulté de l’opération.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. L’analyse multi-axes augmente l’incertitude quant au moment de la transaction et peut entraîner une perte de l’heure optimale de la transaction.
  2. Dans le même temps, la combinaison d’indicateurs multiples et la mauvaise configuration des paramètres d’indicateur peuvent entraîner une baisse de la qualité du signal de transaction.
  3. Il y a un risque d’optimisation du multi-couple automatique, et l’efficacité du disque dur pourrait être plus faible que celle de la rétro-analyse.

Pour atténuer ces risques, nous pouvons prendre les mesures suivantes:

  1. Ajustez les paramètres de l’axe temporel pour s’assurer que les signaux de courte ligne arrivent en temps opportun avec vez;
  2. Les paramètres de l’indicateur sont constamment optimisés grâce à une grande quantité de données;
  3. L’intervention appropriée dans le marché réel pour éviter les transactions aveugles des systèmes automatisés.

Direction d’optimisation

Il y a encore de la place pour optimiser cette stratégie:

  1. Il est possible d’introduire des algorithmes d’apprentissage automatique pour optimiser automatiquement les paramètres multi-indicateurs par le biais de la formation du modèle.
  2. Il est possible d’ajouter des réglages de points de glissement adaptatifs pour ajuster la taille des points de glissement en fonction des fluctuations du marché, ce qui améliore l’efficacité du disque dur;
  3. Les mécanismes de confirmation de la quantité peuvent être introduits pour éviter les pertes causées par un renversement rapide de la tendance.

Résumer

Cette stratégie permet de déterminer les relations longues et courtes entre les mouvements de prix sur une plus grande partie du temps, de générer des signaux de négociation en combinaison avec une analyse intégrée de plusieurs indicateurs, de réaliser un commutation automatique de plusieurs têtes vides et de mesurer les résultats. Nous avons également constaté qu’il y avait une certaine marge d’amélioration de cette stratégie.

Code source de la stratégie
/*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)