Stratégie de suivi de la moyenne mobile dynamique


Date de création: 2023-11-24 16:59:25 Dernière modification: 2023-11-24 16:59:25
Copier: 0 Nombre de clics: 608
1
Suivre
1617
Abonnés

Stratégie de suivi de la moyenne mobile dynamique

Aperçu

L’idée centrale de cette stratégie est d’utiliser les moyennes mobiles dynamiques pour suivre la tendance, de définir des arrêts de perte et de faire des jugements de signaux de plus-value en combinaison avec les instructions de la technique des hacks. L’indicateur ATR est utilisé pour calculer les moyennes mobiles dynamiques et la position des arrêts.

Principe de stratégie

La stratégie commence par calculer l’indicateur ATR, puis combine les sources de prix et les paramètres d’entrée pour calculer une moyenne mobile. Un signal plus/moins est généré lorsque le prix est supérieur/inférieur à la moyenne mobile.

Plus précisément, on calcule d’abord l’indicateur ATR et le paramètre nLoss. Ensuite, on calcule le prix du cycle actuel et la position de stop du cycle précédent, en comparant les deux pour mettre à jour la ligne de stop. Lorsque le prix franchit la ligne de stop du cycle précédent, un signal plus/zéro est généré.

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans l’utilisation d’une moyenne mobile dynamique pour suivre les variations de prix en temps réel. Cela permet de mieux capturer les tendances et de réduire les possibilités de stop-loss que les moyennes mobiles fixes traditionnelles. En outre, en combinaison avec les arrêts ATR, les arrêts peuvent être ajustés de manière flexible en fonction de l’amplitude des fluctuations du marché, afin de contrôler efficacement les risques.

Les risques et les solutions

Le risque principal de cette stratégie est que le prix peut avoir des sauts plus importants, ce qui provoque de faux signaux de rupture de la ligne de rupture. En outre, une mauvaise configuration des conditions peut également entraîner des transactions trop fréquentes.

La solution consiste à optimiser le nombre d’étapes des moyennes mobiles, à ajuster la taille de l’ATR et du coefficient de stop-loss, à réduire la probabilité de faux signaux. Des conditions de filtrage peuvent également être définies pour éviter des transactions trop intenses.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Tester les moyennes mobiles de différents types et périodes pour trouver la meilleure combinaison de paramètres

  2. Optimisation des paramètres de cycle ATR pour équilibrer la sensibilité au stop-loss

  3. Ajout de conditions et indicateurs de filtrage supplémentaires pour améliorer la qualité du signal

  4. Ajuster le seuil de stop-loss pour optimiser le ratio risque/revenu

Résumer

L’idée centrale de cette stratégie est de suivre les variations de prix en temps réel sur des moyennes mobiles dynamiques, d’utiliser l’indicateur ATR pour définir dynamiquement les positions de stop-loss et de contrôler strictement les risques tout en suivant la tendance. La stratégie peut être adaptée à un système de quantification très pratique grâce à l’optimisation des paramètres et à la modification des règles.

Code source de la stratégie
/*backtest
start: 2022-11-23 00:00:00
end: 2023-11-05 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT","stocks":0}]
*/

//@version=5
strategy(title='UT Bot v5', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 
//Edited and converted to @version=5 by SeaSide420 for Paperina
// Inputs
AllowBuy = input(defval=true, title='Allow Buy?')
AllowSell = input(defval=false, title='Allow Sell?')
h = input(false, title='Signals from Heikin Ashi Candles')
//revclose = input(defval=true, title='Close when reverse signal?')
Price = input(defval=open, title='Price Source (recommended OPEN to avoid repainting)')
smoothing = input.string(title="Moving Average Type", defval="HMA", options=["SMA", "EMA", "WMA", "HMA"])
MA_Period = input(2, title='This changes the MAPeriod')
a = input.float(1, title='This changes the sensitivity',step=0.1)
c = input(11, title='ATR Period')
TakeProfit = input.int(defval=50000, title='Take Profit ($)', minval=1)
StopLoss = input.int(defval=50000, title='Stop Loss ($)', minval=1)
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, Price, lookahead=barmerge.lookahead_off) : Price
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2
pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ma_function(src, MA_Period) =>
    switch smoothing
        "SMA" => ta.sma(src, MA_Period)
        "EMA" => ta.ema(src, MA_Period)
        "WMA" => ta.wma(src, MA_Period)
        => ta.hma(src, MA_Period)
thema = ma_function(src, MA_Period)
above = ta.crossover(thema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, thema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
plot(thema,title="The M.A.",color=color.green,linewidth=2)
plot(xATRTrailingStop,title="The M.A.",color=color.red,linewidth=2)
plotshape(buy,  title = "Buy",  text = "Buy",  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, size = size.tiny)
plotshape(sell, title = "Sell", text = "Sell", style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, size = size.tiny)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
strategy.close_all(when=strategy.openprofit>TakeProfit,alert_message="Close- TakeProfit", comment = "TP")
strategy.close_all(when=strategy.openprofit<StopLoss-(StopLoss*2),alert_message="Close- StopLoss", comment = "SL")
strategy.close("buy", when =  sell and AllowSell==false , comment = "close buy")
strategy.close("sell", when =  buy and AllowBuy==false, comment = "close sell")
strategy.entry("buy", strategy.long, when = buy and AllowBuy)
strategy.entry("sell", strategy.short, when = sell and AllowSell)