Cette stratégie utilise principalement des moyennes mobiles doubles comme signaux d'achat et de vente pour réaliser des profits lors d'un renversement de tendance.
La stratégie consiste d'abord à définir deux moyennes mobiles, une moyenne de 20 jours plus courte et une moyenne de 60 jours plus longue. L'intersection de la moyenne courte et de la moyenne longue est ensuite jugée pour décider de l'entrée.
Plus précisément, lorsque la courte moyenne traverse la longue moyenne, cela signifie qu'elle est actuellement en hausse; lorsque la courte moyenne traverse la longue moyenne, cela signifie qu'elle est actuellement en baisse.
La méthode de stop-loss après un surmenage est le stop-tracking, qui consiste à faire un stop trailing en fonction du prix le plus élevé et le prix le plus bas, afin de localiser le profit maximal.
La logique de base du code est la suivante:
La stratégie présente les avantages suivants:
La stratégie comporte également des risques:
L'optimisation des risques peut être effectuée de la manière suivante:
La stratégie peut être optimisée dans les domaines suivants:
L'ajout de filtrage d'autres indicateurs, la formation d'un mécanisme d'entrée multi-conditionnel, pour éviter les fausses percées. Par exemple, il est possible d'intégrer la détermination des indicateurs RSI.
Optimiser les paramètres de cycle pour trouver la meilleure combinaison de paramètres.
Optimisation de la plage d'arrêt. Une plage d'arrêt optimale peut être calculée à partir des données de retouche. Une plage d'arrêt dynamique peut également être définie.
Mettre en place un mécanisme de réentrée. Une logique de réentrée raisonnable peut être mise en place pour réduire le nombre de transactions après une sortie au stop-loss.
En combinaison avec des indicateurs de jugement des tendances, suspendre les transactions lorsque la tendance n'est pas évidente et éviter les transactions invalides.
Il s'agit d'un mécanisme de gestion des positions qui permet d'ajuster dynamiquement les positions et la portée des pertes en fonction des conditions du marché.
La stratégie d'inversion des moyennes mobiles doubles est généralement simple et pratique, et est une méthode courante et efficace pour déterminer les points de basculement de la tendance à travers la double moyenne. Cependant, il y a un certain risque, qui nécessite des tests d'optimisation des paramètres et de la plage de stop-loss, ainsi que d'autres indicateurs de filtrage à utiliser en combinaison, 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)