Stratégie de moyenne mobile avec stop suiveur


Date de création: 2023-10-24 11:21:57 Dernière modification: 2023-10-24 11:21:57
Copier: 0 Nombre de clics: 699
1
Suivre
1617
Abonnés

Stratégie de moyenne mobile avec stop suiveur

Aperçu

L’idée centrale de la stratégie est de concevoir un système de trading automatique qui utilise des moyennes mobiles et un mécanisme de suivi des arrêts de perte pour tirer profit des tendances tout en contrôlant les retraits.

Principe de stratégie

  1. Cette stratégie permet aux utilisateurs de choisir parmi plusieurs types de moyennes mobiles, y compris les moyennes mobiles simples, les moyennes mobiles indicielles, les moyennes mobiles de coût, etc. Les utilisateurs peuvent choisir les types de moyennes mobiles selon leurs préférences.

  2. L’utilisateur doit définir la durée de la moyenne mobile. Généralement, dans les transactions à courte ou moyenne durée, la moyenne mobile est comprise entre 20 et 60 périodes.

  3. Après avoir sélectionné une moyenne mobile, la stratégie calcule cette moyenne mobile en temps réel. Lorsque le prix augmente et franchit la moyenne mobile, faites plus; lorsque le prix baisse et franchit la moyenne mobile, faites moins.

  4. La stratégie utilise un mécanisme de suivi des arrêts. Après l’ouverture de la position, la stratégie surveille en permanence la relation entre la moyenne mobile et le prix, en ajustant dynamiquement la position de la ligne d’arrêt. Plus précisément, la position de la ligne d’arrêt équivaut à la moyenne mobile plus / moins le pourcentage d’arrêt défini par l’utilisateur.

  5. L’utilisateur peut définir un pourcentage d’arrêt. Plus la valeur est grande, plus la portée de l’arrêt est large, pour éviter que l’arrêt ne soit trop sensible; plus la valeur est petite, plus l’arrêt est strict, ce qui réduit le risque. Le pourcentage d’arrêt est généralement entre 2% et 5%.

  6. Après avoir ouvert la position, si le prix revient à la moyenne mobile, la position est fermée.

Avantages stratégiques

  • Il est possible d’ouvrir des positions en cours de tendance pour gagner plus d’argent.
  • Un mécanisme de suivi des arrêts de perte permet d’ajuster la position des arrêts en fonction de la situation, pour éviter que les arrêts de perte soient trop petits pour être enfermés.
  • Vous pouvez choisir différentes moyennes mobiles et pourcentages de stop-loss en fonction de vos préférences en matière de risque
  • Prise en charge de plusieurs types de moyennes mobiles, permettant de trouver les meilleurs paramètres en testant
  • La logique de la stratégie est simple et claire, facile à comprendre et à modifier

Analyse des risques

  • Les prix peuvent se replier près des moyennes mobiles lors d’une correction, ce qui entraîne de fréquentes prises de positions nettes.
  • Si la marge de stop est trop élevée, les pertes peuvent s’amplifier
  • Les paramètres optimaux pour les moyennes mobiles et les pourcentages de stop-loss peuvent varier selon les variétés et les périodes de temps.
  • Cette tactique devrait être évitée avant les événements importants.

Les risques peuvent être optimisés et maîtrisés par:

  • Utilisez cette stratégie pour les variétés et les périodes de tendance
  • Ajustez la moyenne mobile périodique en utilisant une moyenne mobile périodique à longueur moyenne
  • Réduire le pourcentage d’arrêt approprié et maîtriser le risque
  • Tests sur différentes variétés pour trouver les meilleurs paramètres
  • Arrêt des transactions avant les nouvelles majeures

Direction d’optimisation

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

  1. Ajouter la confirmation d’autres indicateurs pour éviter de négocier fréquemment lors de la liquidation. Des indicateurs tels que MACD, KD peuvent être ajoutés et des positions peuvent être ouvertes uniquement lorsqu’ils émettent des signaux simultanément.

  2. Il est possible de combiner plusieurs moyennes mobiles. Par exemple, en utilisant simultanément une ligne de 5 jours et une ligne de 20 jours, il est possible d’ouvrir une position lorsque les deux moyennes mobiles sont orientées dans la même direction.

  3. Paramètres de test pour les différentes variétés, définir les paramètres optimaux. Les paramètres de chaque variété et de chaque cycle sont différents et doivent être testés séparément.

  4. Augmentation des stratégies de gestion des positions. Par exemple, définir un nombre fixe d’ouvertures de positions, puis les accroître et les arrêter.

  5. Réglez le nombre maximum de positions ouvertes par jour ou le temps d’intervalle entre les positions. Limitez les transactions trop fréquentes.

  6. Ajout d’algorithmes d’apprentissage automatique pour optimiser les paramètres dynamiquement en fonction des données historiques.

  7. L’utilisation de modèles d’apprentissage en profondeur pour prédire les tendances des prix.

Résumer

Cette stratégie est une stratégie de suivi de tendance très pratique dans l’ensemble. Elle utilise des moyennes mobiles pour juger de la direction de la tendance, ainsi que des stop-loss pour contrôler les risques, ce qui permet d’obtenir de meilleurs rendements dans des conditions de tendance. La stabilité et le rendement de la stratégie peuvent être encore améliorés par l’optimisation des paramètres et leur combinaison avec d’autres indicateurs ou modèles.

Code source de la stratégie
/*backtest
start: 2023-01-01 00:00:00
end: 2023-03-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//attoCryp, @HikmetSezen58
strategy("MOST Multi MAs", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
sx=input(defval = "close" ,title="Fiyat sec", options=[ "close", "high", "low", "open", "hl2", "hlc3", "hlco4", "hlcc4", "hlccc5"])
smox=input(defval = "HulleMA", title = "Hareketli Ortalama: ", options=["T3", "SMA", "EMA", "DEMA", "TEMA", "WMA", "VWMA", "SMMA", "EVWMA", "HullMA", "HulleMA", "LSMA", "ALMA", "TMA", "SSMA"])
timeFramemost = input(title="++++++++++++++++++++++++++++++++++++", defval="MOST Ayarlari:")
yuzde=input(defval=3.8, minval=0, step=0.1, title="Yuzde Oran")/100
ortalamauzunluk=input(defval=28, title="Periyot Uzunlugu", minval=1)
f=input(defval=0.4, step=0.1, title="T3 icin Factor", minval=0.01)
timeFrameadd=input(title="++++++++++++++++++++++++++++++++++++", defval="Diger Orta.Ayar:")
offsig=input(defval=4, title="LSMA icin Offset veya ALMA icin Sigma", minval=0)
offalma=input(defval=0.6, title="ALMA icin Offset", minval=0, step=0.01)
timeFramess=input(title="++++++++++++++++++++++++++++++++++++", defval="Baslangic-Bitis:")
gun_baslangic=input(defval=1, title="Baslangic Gunu", minval=1, maxval=31)
ay_baslangic=input(defval=1, title="Baslangic Ayi", minval=1, maxval=12)
yil_baslangic=input(defval=2017, title="Baslangic Yili", minval=2010)
gun_bitis=input(defval=1, title="Bitis Gunu", minval=1, maxval=31)
ay_bitis=input(defval=1, title="Bitis Ayi", minval=1, maxval=12)
yil_bitis = input(defval=2019, title="Bitis Yili", minval=2010)

// backtest icin baslangic ve bitis zamanlarini belirleme
baslangic=timestamp(yil_baslangic, ay_baslangic, gun_baslangic, 00, 00)
bitis=timestamp(yil_bitis, ay_bitis, gun_bitis, 23, 59) 
zamanaraligi() => true

//guncel fiyatti belirleme
guncelfiyat=sx=="high"?high : sx=="close"?close : sx=="low"?low : sx=="open"?open : sx=="hl2"?(high+low)/2 : sx=="hlc3"?(high+low+close)/3 : sx=="hlco4"?(high+low+close+open)/4 : sx=="hlcc4"?(high+low+close+close)/4 : sx=="hlccc5"?(high+low+close+close+close)/5 : close 

/////Ortalama Hesaplamalari/////
// Tillson T3
sm0(guncelfiyat,ortalamauzunluk,f) =>
    t3e1=ema(guncelfiyat, ortalamauzunluk)
    t3e2=ema(t3e1, ortalamauzunluk)
    t3e3=ema(t3e2, ortalamauzunluk)
    t3e4=ema(t3e3, ortalamauzunluk)
    t3e5=ema(t3e4, ortalamauzunluk)
    t3e6=ema(t3e5, ortalamauzunluk)
    c1=-f*f*f
    c2=3*f*f+3*f*f*f
    c3=-6*f*f-3*f-3*f*f*f
    c4=1+3*f+f*f*f+3*f*f
    s0=c1 * t3e6 + c2 * t3e5 + c3 * t3e4 + c4 * t3e3

// Basit ortalama
sm1(guncelfiyat,ortalamauzunluk) =>
    s1=sma(guncelfiyat, ortalamauzunluk)

// Ustel ortalama
sm2(guncelfiyat,ortalamauzunluk) =>
    s2=ema(guncelfiyat, ortalamauzunluk)

// Cift Ustel ortalama
sm3(guncelfiyat,ortalamauzunluk) =>
    s3=2*ema(guncelfiyat, ortalamauzunluk) - ema(ema(guncelfiyat, ortalamauzunluk), ortalamauzunluk)

// Uclu Ustel ortalama
sm4(guncelfiyat,ortalamauzunluk) =>
    s4=3*(ema(guncelfiyat, ortalamauzunluk) - ema(ema(guncelfiyat, ortalamauzunluk), ortalamauzunluk)) + ema(ema(ema(guncelfiyat, ortalamauzunluk), ortalamauzunluk), ortalamauzunluk)

// Agirlikli Ortalama  
sm5(guncelfiyat,ortalamauzunluk) =>
    s5=wma(guncelfiyat, ortalamauzunluk)

// Hacim Agirlikli Ortalama
sm6(guncelfiyat,ortalamauzunluk) =>
    s6=vwma(guncelfiyat, ortalamauzunluk)

// Smoothed
sm7(guncelfiyat,ortalamauzunluk) =>
    s7=0.0
    s7:=na(s7[1]) ? sma(guncelfiyat, ortalamauzunluk) : (s7[1] * (ortalamauzunluk - 1) + guncelfiyat) / ortalamauzunluk

// Hull Ortalama
sm8(guncelfiyat,ortalamauzunluk) =>
    s8=wma(2 * wma(guncelfiyat, ortalamauzunluk / 2) - wma(guncelfiyat, ortalamauzunluk), round(sqrt(ortalamauzunluk)))
    
// Hull Ustel Ortalama
sm81(guncelfiyat,ortalamauzunluk) =>
    s8=ema(2 * ema(guncelfiyat, ortalamauzunluk / 2) - ema(guncelfiyat, ortalamauzunluk), round(sqrt(ortalamauzunluk)))

// Least Square
sm9(guncelfiyat,ortalamauzunluk,offsig) =>
    s9=linreg(guncelfiyat, ortalamauzunluk, offsig)

// Arnaud Legoux
sm10(guncelfiyat, ortalamauzunluk, offalma, offsig) =>
    s10=alma(guncelfiyat, ortalamauzunluk, offalma, offsig)

// Triangular
sm11(guncelfiyat, ortalamauzunluk) =>
    s11=sma(sma(guncelfiyat, ortalamauzunluk),ortalamauzunluk)

// SuperSmoother filter
sm12(guncelfiyat,ortalamauzunluk) =>
    a1=exp(-1.414*3.14159 / ortalamauzunluk)
    b1=2*a1*cos(1.414*3.14159 / ortalamauzunluk)
    c2=b1
    c3=(-a1)*a1
    c1=1 - c2 - c3
    s12=0.0
    s12:=c1*(guncelfiyat + nz(guncelfiyat[1])) / 2 + c2*nz(s12[1]) + c3*nz(s12[2])
    
//Elastic Volume Weighted Moving Average
sm13(guncelfiyat,ortalamauzunluk) =>
    hacimtoplam=sum(volume, ortalamauzunluk)
    s13=0.0
    s13:=(nz(s13[1]) * (hacimtoplam - volume)/hacimtoplam) + (volume*guncelfiyat/hacimtoplam)

ortalamafiyat=smox=="T3"?sm0(guncelfiyat,ortalamauzunluk,f) : smox=="SMA"?sm2(guncelfiyat,ortalamauzunluk) : smox=="EMA"?sm2(guncelfiyat,ortalamauzunluk) : smox=="DEMA"?sm3(guncelfiyat,ortalamauzunluk) : smox=="TEMA"?sm4(guncelfiyat,ortalamauzunluk) : smox=="WMA"?sm5(guncelfiyat,ortalamauzunluk) : smox=="VWMA"?sm6(guncelfiyat,ortalamauzunluk) : smox=="SMMA"?sm7(guncelfiyat,ortalamauzunluk) : smox=="HullMA"?sm8(guncelfiyat,ortalamauzunluk) : smox=="HulleMA"?sm81(guncelfiyat,ortalamauzunluk) : smox=="LSMA"?sm9(guncelfiyat,ortalamauzunluk,offsig) : smox=="ALMA"?sm10(guncelfiyat, ortalamauzunluk, offalma, offsig) : smox=="TMA"?sm11(guncelfiyat,ortalamauzunluk) : smox=="SSMA"?sm12(guncelfiyat,ortalamauzunluk) : smox=="EVWMA"?sm13(guncelfiyat,ortalamauzunluk) : guncelfiyat

/////MOST'u hesaplama/////
stopfiyat=ortalamafiyat*yuzde
mostfiyat=0.0
mostfiyat:=iff(ortalamafiyat>nz(mostfiyat[1],0) and ortalamafiyat[1]>nz(mostfiyat[1],0),max(nz(mostfiyat[1],0),ortalamafiyat-stopfiyat),iff(ortalamafiyat<nz(mostfiyat[1],0) and ortalamafiyat[1]<nz(mostfiyat[1],0),min(nz(mostfiyat[1],0),ortalamafiyat+stopfiyat),iff(ortalamafiyat>nz(mostfiyat[1],0),ortalamafiyat-stopfiyat,ortalamafiyat+stopfiyat)))

mostcolor=ortalamafiyat>mostfiyat?lime:fuchsia
plot(mostfiyat, color=mostcolor, linewidth=4, title="Most-fiyat")

/////AL-SAT LONG-SHORT girislerini belirleme/////
long=ortalamafiyat>mostfiyat and ortalamafiyat[1]<mostfiyat[1]
short=ortalamafiyat<mostfiyat and ortalamafiyat[1]>mostfiyat[1]
if (long) 
    strategy.entry("AL-Long", strategy.long, when = zamanaraligi())
if (short) 
    strategy.entry("SAT-Short", strategy.short, when = zamanaraligi())