Stratégie de suivi des moyennes mobiles dynamiques

Auteur:ChaoZhang est là., Date: 2023-11-24 16:59:25
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est d'utiliser la moyenne mobile dynamique pour le suivi de la tendance, de définir un stop loss et de prendre des bénéfices, et de combiner les techniques de chandelier Heikin Ashi pour le jugement du signal long / court.

Principaux

La stratégie calcule d'abord l'indicateur ATR, puis combine la source de prix d'entrée et les paramètres pour calculer la moyenne mobile dynamique.

Plus précisément, l'indicateur ATR et le paramètre nLoss sont d'abord calculés. Ensuite, le prix de la période en cours et la position de stop loss de la période précédente sont comparés pour mettre à jour la ligne de stop loss. Lorsque le prix traverse la ligne de stop loss de la période précédente, des signaux longs / courts pos et des couleurs correspondantes sont générés. Lorsque les signaux de trading sont déclenchés, des marques de flèches sont tracées. Enfin, les positions sont fermées en fonction de la logique stop loss / take profit.

Analyse des avantages

Le plus grand avantage de cette stratégie est l'utilisation de moyennes mobiles dynamiques pour suivre les changements de prix en temps réel. Cela capture les tendances mieux que les moyennes mobiles fixes traditionnelles et réduit les risques de stop loss. De plus, la combinaison de stop loss basé sur ATR permet un ajustement flexible de la position de stop loss basé sur la volatilité du marché pour contrôler efficacement les risques.

Risques et solutions

Le principal risque de cette stratégie est que le prix puisse augmenter ou diminuer considérablement, provoquant de faux signaux lorsque le stop loss est atteint.

Les solutions comprennent l'optimisation de la période moyenne mobile, l'ajustement de l'ATR et du coefficient de stop loss pour réduire la probabilité de faux signaux.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Tester différents types et périodes de moyennes mobiles pour trouver des combinaisons optimales de paramètres

  2. Optimiser le paramètre de la période ATR pour équilibrer la sensibilité au stop loss

  3. Ajouter des filtres et des indicateurs supplémentaires pour améliorer la qualité du signal

  4. Ajuster les valeurs stop-loss/take profit pour optimiser le ratio risque-rendement

Conclusion

L'idée de base de cette stratégie est d'utiliser des moyennes mobiles dynamiques pour suivre les changements de prix en temps réel, en utilisant l'indicateur ATR pour définir dynamiquement des positions stop loss, en contrôlant strictement le risque tout en suivant les tendances.


/*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)

Plus de