La stratégie de rupture de tendance double MA est une stratégie de trading quantitative qui utilise deux moyennes mobiles de différentes périodes pour déterminer la tendance et générer des signaux d'entrée. Elle juge principalement la direction globale de la tendance à travers la MA lente et utilise la MA rapide pour filtrer l'entrée.
La stratégie se compose principalement des éléments suivants:
Juge de tendance: Calcule l'AM de 21 périodes, défini comme l'AM lent. Sa position est relativement stable et peut être utilisée pour juger de la direction générale de la tendance. Lorsque les prix augmentent près de cet AM, il s'agit d'une tendance à la hausse. Lorsque les prix chutent près de cet AM, il s'agit d'une tendance à la baisse.
Filtrage des entrées: Calcule le MA à 5 périodes, défini comme le MA rapide. Seulement lorsque le prix franchit à la fois le MA lent et le MA rapide, le signal de trading est déclenché. Cette conception filtre principalement la possibilité de fausses ruptures.
Filtrage par bougie: La stratégie ne va long que lorsque la bougie actuelle est baissière, ou court lorsque la bougie actuelle est haussière. Cela considère que l'utilisation de barres d'inversion pour l'entrée peut obtenir un taux de réussite plus élevé. Elle combine également l'indicateur RSI rapide pour éviter d'entrer dans des zones de surachat ou de survente.
Filtre à pyramide: pour le marché des crypto-monnaies, la stratégie comprend en outre une condition de rupture de volatilité triplée pour saisir les opportunités de survente dans les tendances à la baisse significatives.
Arrêtez la perte: La stratégie prend en charge le stop loss mobile. Après l'ouverture des positions, le stop loss sera mis à jour en temps réel en fonction du pourcentage défini.
Les avantages de cette stratégie sont les suivants:
La stratégie comporte également certains risques:
Pour faire face à ces risques, des optimisations peuvent être apportées dans les aspects suivants:
Les principaux aspects pour optimiser cette stratégie sont les suivants:
Optimisation des paramètres: un backtest systématique afin de trouver des combinaisons optimales de périodes de MA rapides et lentes afin d'améliorer les rendements ajustés au risque.
Reconnaissance des modèles: Ajoutez d'autres indicateurs tels que KDJ, MACD pour identifier des signaux d'inversion plus fiables.
Optimisation des pertes par arrêtDévelopper des algorithmes de stop loss flottants ou à retardement pour réduire les risques d'être arrêté.
Apprentissage automatique: Rassembler et étiqueter plus de données historiques pour générer automatiquement des règles de négociation à l'aide de ML.
Taille de la position: Ajustez dynamiquement la taille des positions en fonction des conditions du marché.
La stratégie de rupture de tendance double MA est généralement une stratégie de suivi de tendance simple et pratique. Par rapport aux algorithmes complexes d'apprentissage automatique, cette stratégie est plus facile à interpréter et à maîtriser, avec une plus grande fiabilité.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-07 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "Noro's Trend MAs Strategy v2.0 +CB", shorttitle = "Trend MAs str 2.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0) //Settings needlong = input(true, "long") needshort = input(true, "short") needstops = input(false, "stops") stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %") useohlc4 = input(false, defval = false, title = "Use OHLC4") usefastsma = input(true, "Use fast MA Filter") fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period") slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period") bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q") needbg = input(false, defval = false, title = "Need trend Background?") needarr = input(false, defval = false, title = "Need entry arrows?") needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)") src = useohlc4 == true ? ohlc4 : close //PriceChannel 1 lasthigh = highest(src, slowlen) lastlow = lowest(src, slowlen) center = (lasthigh + lastlow) / 2 //PriceChannel 2 lasthigh2 = highest(src, fastlen) lastlow2 = lowest(src, fastlen) center2 = (lasthigh2 + lastlow2) / 2 //Trend trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend[1] //Bars bar = close > open ? 1 : close < open ? -1 : 0 redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0 greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0 //Fast RSI fastup = rma(max(change(close), 0), 2) fastdown = rma(-min(change(close), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //CryptoBottom mac = sma(close, 10) len = abs(close - mac) sma = sma(len, 100) max = max(open, close) min = min(open, close) up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0 //Signals up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0 dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0 up2 = high < center and high < center2 and bar == -1 ? 1 : 0 dn2 = low > center and low > center2 and bar == 1 ? 0 : 0 //Lines plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA") plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2") //Arrows plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0) plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0) //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 90) //Alerts alertcondition(up == 1, title='buy', message='Uptrend') alertcondition(dn == 1, title='sell', message='Downtrend') //Trading stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1] stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1] longCondition = up == 1 or (up2 == 1 and needex == true) or up3 == 1 if (longCondition) strategy.entry("Long", strategy.long, needlong == false ? 0 : na) strategy.exit("Stop Long", "Long", stop = stoplong) shortCondition = dn == 1 if (shortCondition) strategy.entry("Short", strategy.short, needshort == false ? 0 : na) strategy.exit("Stop Short", "Short", stop = stopshort)