Cette stratégie utilise principalement des moyennes mobiles doubles comme signaux d'achat et de vente pour tirer profit des renversements de tendance. Elle devient longue lorsque la moyenne mobile à court terme dépasse la moyenne mobile à long terme et devient courte lorsque la moyenne mobile à court terme dépasse la moyenne mobile à long terme.
La stratégie établit d'abord deux moyennes mobiles, une moyenne de 20 jours à court terme et une moyenne de 60 jours à long terme.
Plus précisément, lorsque l'AM à court terme dépasse l'AM à long terme, cela indique une tendance haussière, donc allez long.
La méthode d'arrêt de perte après avoir fait long ou court est l'arrêt de trailing basé sur le prix le plus élevé et le prix le plus bas pour verrouiller le profit maximum.
La logique principale du code est la suivante:
Les avantages de cette stratégie sont les suivants:
Il y a aussi des risques:
Pour lutter contre les risques:
La stratégie peut être encore optimisée dans les domaines suivants:
Ajoutez d'autres filtres comme RSI pour l'entrée multi-condition, évitant les fausses pauses.
Optimiser les périodes MA pour trouver le meilleur mélange de paramètres.
Optimiser la plage d'arrêt de perte par le calcul de backtest pour trouver la plage optimale.
Définir la logique de réentrée après la sortie de stop loss pour réduire la fréquence des transactions.
Combinez avec l'indicateur de tendance pour faire une pause lorsque la tendance est incertaine.
Ajouter la dimension de position et le stop loss dynamique basé sur les conditions du marché.
En résumé, la stratégie d'inversion de double MA est simple et pratique dans l'ensemble, en identifiant les points de basculement de la tendance grâce à des croisements de double MA. Mais il existe des risques qui nécessitent un ajustement des paramètres, une optimisation des stop-loss et l'ajout de filtres pour maximiser l'efficacité de la stratégie.
/*backtest start: 2023-09-23 00:00:00 end: 2023-10-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %") needbe = input(true, defval = true, title = "Bands Entry") needct = input(false, defval = false, title = "Counter-trend entry") needdb = input(true, defval = true, title = "Double Body") len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period") needbb = input(true, defval = true, title = "Show Bands") needbg = input(true, defval = true, title = "Show Background") src = close //PriceChannel 1 lasthigh = highest(src, len) lastlow = lowest(src, len) center = (lasthigh + lastlow) / 2 //Distance dist = abs(src - center) distsma = sma(dist, len) hd = center + distsma ld = center - distsma hd2 = center + distsma * 2 ld2 = center - distsma * 2 //Trend trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1] //Lines colo = needbb == false ? na : black plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2") plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1") plot(center, color = colo, linewidth = 1, transp = 0, title = "center") plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1") plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2") //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 80) //Body body = abs(close - open) smabody = needdb == false ? ema(body, 30) : ema(body, 30) * 2 candle = high - low //Signals bar = close > open ? 1 : close < open ? -1 : 0 up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0 dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0 up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0 dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0 if up7 == 1 or up8 == 1 strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na) if dn7 == 1 or dn8 == 1 strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)