Stratégie de moyenne mobile dynamique

Auteur:ChaoZhang est là., Date: 2023-11-23 11h39 et 24h
Les étiquettes:

img

Résumé

Cette stratégie s'appelle Strategy de moyenne mobile dynamique. L'idée principale est d'utiliser la direction de la moyenne mobile et sa relation avec le prix pour déterminer la tendance. Entrez sur le marché en fonction de la direction de la tendance et fermez des positions quand il n'y a pas de tendance.

Principe de stratégie

La stratégie utilise les prix de source sur une longue période pour calculer la moyenne mobile, où les prix de source peuvent être OHLC4, HLC3, prix de clôture, etc. La moyenne mobile résultante est définie comme sma. Ensuite, la ligne longue et la ligne courte sont tracées en fonction du pourcentage de la valeur moyenne mobile pour déterminer si nous sommes actuellement dans une tendance haussière ou baissière.

Plus précisément, la ligne courte est calculée comme suit: shortline = sma * ((100 + shortlevel) / 100), où shortlevel est un nombre positif défini par l'utilisateur, représentant le pourcentage que la ligne courte est au-dessus de la moyenne mobile.

Ainsi, la valeur de la ligne courte est toujours supérieure à la moyenne mobile, et la valeur de la ligne longue est toujours inférieure à la moyenne mobile. Lorsque le prix traverse au-dessus de la ligne courte, cela représente le début d'une tendance à la hausse. À ce moment-là, si needlong permet long, il placera un ordre long au niveau du prix de la ligne longue. Lorsque le prix traverse au-dessous de la ligne longue, cela représente le début d'une tendance à la baisse.

Indépendamment du long ou du court, lorsque le prix revient à la moyenne mobile, cela signifie que la tendance se termine.

Donc la direction de la tendance et les entrées correspondantes et existe sont déterminées par la relation dynamique entre les lignes longues / courtes et la ligne moyenne mobile.

Les avantages

Le plus grand avantage de cette stratégie est qu'en définissant dynamiquement les lignes longues et courtes, elle peut capturer relativement flexiblement la direction de la tendance principale.

Deuxièmement, la moyenne mobile elle-même a un effet de filtrage dans une certaine mesure, ce qui évite d'être piégée dans une certaine mesure par les fluctuations de haute fréquence.

Les risques

Le plus grand risque de cette stratégie est que la performance des moyennes mobiles diffère dans différentes périodes. Normalement, la moyenne mobile est suffisante pour représenter la direction de la tendance, mais dans certaines conditions de marché extrêmes, la moyenne mobile pourrait être pénétrée à court terme, provoquant des entrées erronées, ou une divergence supérieure, etc. Dans ce cas, des moyennes mobiles à plus longue période sont nécessaires pour assurer l'exactitude du jugement de la tendance.

Un autre aspect du risque est que les moyennes mobiles ont elles-mêmes une forte inertie. Pour certaines fluctuations de prix courtes et intenses, il est difficile pour les moyennes mobiles de répondre dans le temps, manquant ainsi des points d'entrée ou de sortie. La période doit être réduite pour accélérer la vitesse de réaction de la moyenne mobile.

Amélioration

La stratégie peut être encore optimisée dans les aspects suivants:

  1. Ajoutez une logique de stop-loss. Puisque les moyennes mobiles ont un retard dans le jugement des tendances, il est impossible d'éviter complètement d'être pris au piège.

  2. Optimiser les paramètres des lignes longues / courtes. Actuellement, les pourcentages de déviation des lignes longues / courtes par rapport à la moyenne mobile sont fixes. Ceux-ci peuvent être testés sur différents ensembles de données pour trouver des valeurs optimales.

  3. En plus des positions longues/courtes, les algorithmes peuvent également juger de la force de la tendance, afin d'éviter les erreurs de faibles signaux de tendance.

  4. Essayez d'appliquer des moyennes mobiles à d'autres produits de négociation pour vérifier les performances des produits croisés.

Conclusion

Cette stratégie détermine la tendance et place les trades longs/courts correspondants en définissant dynamiquement des points d'entrée et de sortie basés sur des moyennes mobiles. Cette méthode de génération dynamique de signaux de trading basés sur des moyennes mobiles est plus flexible et intelligente pour capturer les tendances des prix par rapport aux niveaux de déclenchement statiques. Elle résout également le problème du manque de rapidité des moyennes mobiles elles-mêmes. Avec un backtesting systématique et une optimisation des paramètres, cette stratégie peut générer de bons profits.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's ShiftMA Strategy v1.1", shorttitle = "ShiftMA str 1.1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, title = "Length")
src = input(ohlc4, title = "Source")
shortlevel = input(10.0, title = "Short line (red)")
longlevel = input(-5.0, title = "Long line (lime)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//SMAs
sma = sma(src, per) 
//sma = lowest(low, per)
shortline = sma * ((100 + shortlevel) / 100)
longline = sma * ((100 + longlevel) / 100)
plot(shortline, linewidth = 2, color = red, title = "Short line")
plot(sma, linewidth = 2, color = blue, title = "SMA line")
plot(longline, linewidth = 2, color = lime, title = "Long line")

//plot(round(buy * 100000000), linewidth = 2, color = lime)
//plot(round(sell * 100000000), linewidth = 2, color = red)

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0 and needlong
    strategy.entry("L", strategy.long, lot, limit = longline, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size == 0 and needshort
    strategy.entry("S", strategy.short, lot, limit = shortline, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size > 0 
    strategy.entry("Close", strategy.short, 0, limit = sma, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size < 0 
    strategy.entry("Close", strategy.long, 0, limit = sma, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Plus de