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.
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.
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.
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.
La stratégie peut être optimisée dans les aspects suivants:
Tester différents types et périodes de moyennes mobiles pour trouver des combinaisons optimales de paramètres
Optimiser le paramètre de la période ATR pour équilibrer la sensibilité au stop loss
Ajouter des filtres et des indicateurs supplémentaires pour améliorer la qualité du signal
Ajuster les valeurs stop-loss/take profit pour optimiser le ratio risque-rendement
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)