Stratégie de prévision des tendances adaptatives à plusieurs cycles

Auteur:ChaoZhang est là., Date: 2024-02-01 14:34:38 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie utilise des moyennes mobiles adaptatives multicycliques et des indicateurs d'évaluation des risques en zigzag, combinés à des points de phase dans l'opération du marché, pour prédire les tendances et les signaux de trading de sortie.

Principe de stratégie

La logique de base de la stratégie est divisée en deux lignes principales. La première ligne principale utilise des moyennes mobiles adaptatives nAMA avec différents paramètres pour construire un système de jugement de filtrage à cycles multiples. La deuxième ligne principale utilise le système d'évaluation des risques en zigzag avec différents paramètres pour construire un système d'évaluation des risques à cycles multiples. Enfin, les deux lignes principales sont combinées. Lorsque la ligne de cycle court dépasse la ligne de cycle long, un signal d'achat est généré. Lorsque la ligne de cycle court est inférieure à la ligne de cycle long, un signal de vente est généré.

Plus précisément, la première ligne principale définit des moyennes mobiles adaptatives de 10 cycles et 4, 24 paramètres respectivement. La deuxième ligne principale définit des lignes d'évaluation du risque en zigzag de 7 cycles et 4, 300 paramètres respectivement. Enfin, la ligne de 10 cycles dans la première ligne principale est comparée à la ligne de 31 cycles dans la deuxième ligne principale pour former un signal de trading. Lorsque la ligne de 10 cycles dépasse la ligne de 31 cycles, un signal d'achat est généré. Lorsque la ligne de 10 cycles tombe en dessous de la ligne de 31 cycles, un signal de vente est généré.

En outre, la stratégie définit également un module de confirmation volume-prix. Les signaux de trading ne sont valables que lorsque le volume de trading est supérieur au volume de trading moyen de 6 cycles. Cela peut filtrer les faux signaux dans une certaine mesure. Enfin, la stratégie dessine des points de phasing de différents niveaux de cycle comme signaux de référence.

Analyse des avantages stratégiques

Le plus grand avantage de cette stratégie est l'application de structures adaptatives à cycles multiples, qui peuvent adapter les cycles en fonction des conditions du marché afin d'ajuster dynamiquement les cycles.

En outre, la stratégie utilise un filtrage conjoint à plusieurs cycles des systèmes d'évaluation des risques en zigzag pour contrôler efficacement les risques de négociation et éviter d'établir des positions pendant les phases à haut risque.

Analyse des risques stratégiques

Le plus grand risque de cette stratégie est qu'elle nécessite le même jugement directionnel de plusieurs lignes de cycle, de sorte que la capacité de capturer les marchés inversés à court terme est faible.

En outre, la phase du cycle principal du système d'évaluation des risques des moyennes mobiles adaptatives et des zigzags est relativement courte par rapport au marché plus large, et il y a un certain décalage en raison des niveaux plus longs.

Directions d'optimisation de la stratégie

  1. Réduire les principaux paramètres de cycle de la moyenne mobile adaptative et de la ligne d'évaluation des risques en zigzag à 5 cycles et à 20 cycles afin de mieux capturer l'inversion de marché à court terme.

  2. Augmenter les paramètres des cycles principaux à 20 cycles et à 50 cycles afin de réduire le décalage en raison de facteurs de marché plus stables.

  3. Optimiser les paramètres du canal de négociation à 0,5 fois le canal ATR pour réduire la possibilité de négociation bruyante.

  4. Ajouter des indicateurs de vérification des résultats tels que le MACD pour améliorer la fiabilité du signal.

Résumé

Cette stratégie utilise de manière complète plusieurs indicateurs techniques tels que les moyennes mobiles adaptatives, les évaluations des risques en zigzag et l'analyse volume-prix pour construire un système de décision de trading adaptatif à cycles multiples.


/*backtest
start: 2023-01-25 00:00:00
end: 2024-01-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Best Rabbit Strategy", shorttitle="Rabbit God",overlay=true)
Length = input(10, minval=1)
xPrice = close
xvnoise = abs(xPrice - xPrice[1])
Fastend = input(2)
Slowend = input(30)
nfastend = 2/(Fastend + 1)
nslowend = 2/(Slowend + 1)
nsignal = abs(xPrice - xPrice[Length])
nnoise = sum(xvnoise, Length)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
nAMA = nz(nAMA[1]) + nsmooth * (xPrice - nz(nAMA[1]))

Length2 = input(10, minval=1)
xPrice2 = close
xvnoise2 = abs(xPrice2 - xPrice2[1])
Fastend2 = input(4)
Slowend2 = input(24)
nfastend2 = 2/(Fastend2 + 1)
nslowend2 = 2/(Slowend2 + 1)
nsignal2 = abs(xPrice2 - xPrice2[Length2])
nnoise2 = sum(xvnoise, Length2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) 
nAMA2 = nz(nAMA2[1]) + nsmooth2 * (xPrice2 - nz(nAMA2[1]))

price = input(hl2)
len = input(defval=7,minval=1)
FC = input(defval=4,minval=1)
SC = input(defval=300,minval=1)
len1 = len/2
w = log(2/(SC+1))
H1 = highest(high,len1)
L1 = lowest(low,len1)
N1 = (H1-L1)/len1
H2 = highest(high,len)[len1]
L2 = lowest(low,len)[len1]
N2 = (H2-L2)/len1
H3 = highest(high,len)
L3 = lowest(low,len)
N3 = (H3-L3)/len
dimen1 = (log(N1+N2)-log(N3))/log(2)
dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
alpha1 = exp(w*(dimen-1))
oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
oldN = (2-oldalpha)/oldalpha
N = (((SC-FC)*(oldN-1))/(SC-1))+FC
alpha_ = 2/(N+1)
alpha = alpha_<2/(SC+1)?2/(SC+1):(alpha_>1?1:alpha_)
out = (1-alpha)*nz(out[1]) + alpha*price

price2 = input(hl2)
len2 = input(defval=31,minval=1)
FC2 = input(defval=40,minval=1)
SC2 = input(defval=300,minval=1)
len12 = len2/2
w2 = log(2/(SC2+1))
H12 = highest(high,len12)
L12 = lowest(low,len12)
N12 = (H1-L1)/len12
H22 = highest(high,len2)[len12]
L22 = lowest(low,len2)[len12]
N22 = (H22-L22)/len12
H32 = highest(high,len2)
L32 = lowest(low,len2)
N32 = (H32-L32)/len2
dimen12 = (log(N12+N22)-log(N32))/log(2)
dimen2 = iff(N12>0 and N22>0 and N32>0,dimen12,nz(dimen12[1]))
alpha12 = exp(w*(dimen2-1))
oldalpha2 = alpha12>1?1:(alpha12<0.01?0.01:alpha12)
oldN2 = (2-oldalpha2)/oldalpha2
N4 = (((SC2-FC2)*(oldN2-1))/(SC2-1))+FC2
alpha_2 = 2/(N4+1)
alpha2 = alpha_2<2/(SC2+1)?2/(SC2+1):(alpha_2>1?1:alpha_2)
out2 = (1-alpha2)*nz(out2[1]) + alpha2*price2

tf = input(title="Resolution",  defval = "current")
vamp = input(title="VolumeMA",  defval=6)
vam = sma(volume, vamp)

up = high[3]>high[4] and high[4]>high[5] and high[2]<high[3] and high[1]<high[2] and volume[3]>vam[3]
down = low[3]<low[4] and low[4]<low[5] and low[2]>low[3] and low[1]>low[2] and volume[3]>vam[3]
fractalup =  up ? high[3] : fractalup[1] 
fractaldown = down ? low[3] : fractaldown[1]

fuptf = request.security(syminfo.tickerid,tf == "current" ? timeframe.period : tf, fractalup)
fdowntf = request.security(syminfo.tickerid,tf == "current" ? timeframe.period : tf, fractaldown)

plot(fuptf, "FractalUp", color=lime, linewidth=1, style=cross, transp=0, offset =-3, join=false)
plot(fdowntf, "FractalDown", color=red, linewidth=1, style=cross, transp=0, offset=-3, join=false)

buyEntry= nAMA[0]>nAMA2[0] and out[0]>out2[0]
sellEntry= nAMA[0]<nAMA2[0] and out[0]<out2[0]

if (buyEntry)
    strategy.entry("Buy", strategy.long, comment="Long Position Entry")


if (sellEntry)
    strategy.entry("Sell", strategy.short, comment="Short Position Entry")

Plus de