Cette stratégie s'appelle
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.
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.
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.
La stratégie peut être encore optimisée dans les aspects suivants:
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.
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.
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.
Essayez d'appliquer des moyennes mobiles à d'autres produits de négociation pour vérifier les performances des produits croisés.
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()