
La stratégie de rupture de tendance à double MA est une stratégie de trading quantitatif qui utilise des moyennes mobiles de deux cycles différents pour la détermination de la tendance et l’entrée. La stratégie consiste principalement à déterminer la direction de la tendance globale à partir d’une MA lente et à filtrer l’entrée à l’aide d’une MA rapide.
La stratégie est principalement composée des éléments suivants:
Les tendances sont les suivantes:En calculant une MA de 21 cycles, définie comme une MA lente et relativement stable, on peut déterminer la direction de la tendance générale. Une MA proche de cette valeur est une tendance à la hausse lorsque le prix augmente, et une MA proche de cette valeur est une tendance à la baisse lorsque le prix baisse.
Filtre d’entrée:Calculer une MA de 5 cycles, définie comme une MA rapide. Un signal de transaction n’est généré que lorsque le prix franchit une MA lente et une MA rapide. Cette conception vise principalement à filtrer la possibilité d’une fausse rupture supplémentaire.
Filtre de ligne K:La stratégie ne fait plus que lorsque la ligne K de la période est négative ou vide lorsque la ligne K de la période est positive. Cela tient compte du fait que l’utilisation d’une ligne K inversée permet d’obtenir un taux de réussite plus élevé. En combinaison avec l’indicateur RSI rapide, il est également possible d’éviter d’entrer dans des zones de survente ou de survente excessive.
Filtre pour le stockage:Pour le marché de la crypto-monnaie, la stratégie a ajouté une condition de mise en surpoids pour une rupture de volatilité de trois fois plus, en sélectionnant des opportunités de dépassement lors d’une baisse à grande échelle.
La conception de l’arrêt des dommages:La stratégie prend en charge le stop-loss mobile. Lorsque la position est ouverte, le stop-loss est mis à jour en temps réel en fonction du pourcentage de stop-loss défini.
Cette stratégie présente les avantages suivants:
Cette stratégie comporte aussi des risques:
Les risques peuvent être optimisés de la manière suivante:
La stratégie peut être optimisée principalement dans les domaines suivants:
Optimisation des paramètres: Optimisation de la combinaison de paramètres cycliques de l’AM rapide et lente par une rétroaction plus systématique, améliorant le ratio de risque-bénéfice global.
Reconnaissance des modèles: Ajout d’autres indicateurs comme KDJ, MACD, etc. pour identifier des signaux de retour plus fiables.
Optimisation des pertes: Développer des algorithmes de stop-loss flottants, de suivi des stops, etc., afin de réduire la probabilité que le stop-loss soit déclenché.
Apprentissage automatiqueLes règles de trading sont générées automatiquement à l’aide d’une méthode d’apprentissage automatique.
Déplacement quantitatif: Adapter automatiquement la stratégie de gestion de position en fonction de l’état du marché.
La stratégie de rupture de tendance à double MA est une stratégie de suivi de tendance plus simple et pratique dans l’ensemble. Comparée aux algorithmes d’apprentissage automatique complexes, la stratégie est plus facile à interpréter et à maîtriser, et sa fiabilité est plus élevée. Avec l’optimisation des paramètres, l’extension des fonctionnalités et l’introduction de l’apprentissage automatique, la stratégie a un grand potentiel d’amélioration et constitue un bon point de départ pour la négociation quantifiée.
/*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)