Stratégie de rupture de la tendance à double MA

Auteur:ChaoZhang est là., Date: 2024-01-08 16:43:38 Je suis désolé
Les étiquettes:

img

Résumé

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 logique de la stratégie

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.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. La conception de la double MA est simple et pratique, facile à comprendre et à maîtriser;
  2. Un jugement fiable de la tendance en combinant des MAs rapides et lents;
  3. L'entrée de la barre d'inversion améliore le taux de gain des transactions;
  4. La méthodologie globale est conservatrice et stable, adaptée à tous les délais;
  5. Il soutient le déplacement du stop loss vers le contrôle des risques;
  6. Considère spécialement les caractéristiques du marché des cryptos en ajoutant des opportunités de pyramide de survente pour obtenir des rendements excessifs.

Analyse des risques

La stratégie comporte également certains risques:

  1. Pendant les périodes de double MA liées à la fourchette, il y aura plusieurs petits gains et pertes.
  2. L'entrée de la barre d'inversion peut avoir un faible taux de gain dans certains délais.
  3. Le marché des crypto-monnaies présente une forte volatilité et une forte probabilité de déclenchement d'un stop loss.
  4. Les opportunités de pyramides survendues ne sont pas nombreuses, avec une volatilité de rendement élevée.

Pour faire face à ces risques, des optimisations peuvent être apportées dans les aspects suivants:

  1. Ajouter plus de conditions d'entrée pour éviter des coups de fouet inefficaces;
  2. Ajuster le délai ou ajouter d'autres indicateurs de filtrage;
  3. Optimiser les algorithmes de stop loss pour le suivi près de la ligne médiane;
  4. Évaluer les performances réelles des stratégies pyramidales survendues.

Directions d'optimisation

Les principaux aspects pour optimiser cette stratégie sont les suivants:

  1. 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.

  2. Reconnaissance des modèles: Ajoutez d'autres indicateurs tels que KDJ, MACD pour identifier des signaux d'inversion plus fiables.

  3. Optimisation des pertes par arrêtDévelopper des algorithmes de stop loss flottants ou à retardement pour réduire les risques d'être arrêté.

  4. 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.

  5. Taille de la position: Ajustez dynamiquement la taille des positions en fonction des conditions du marché.

Conclusion

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)

Plus de