
La stratégie utilise la combinaison des moyennes mobiles T3, de l’indicateur ATR et de l’hypertropie pour identifier les signaux d’achat et de vente et pour suivre la tendance des transactions en calculant des arrêts de perte basés sur l’ATR. L’avantage de la stratégie est une réponse rapide tout en contrôlant le risque de transaction.
Moyenne mobile T3: calculer une moyenne mobile T3 avec un paramètre lisse de T3 (par défaut 100) pour déterminer la direction de la tendance.
ATR: calcul de l’ATR (la moyenne de l’amplitude réelle des fluctuations), utilisé pour déterminer la taille de la position de stop loss.
ATR mobile stop: une ligne mobile de stop est calculée en fonction de l’ATR et peut être ajustée en fonction des variations de prix et de la volatilité pour permettre le suivi de la tendance.
Signal d’achat: Un signal d’achat est généré lorsque la ligne de stop mobile ATR est franchie à la clôture et est inférieure à la moyenne T3.
Signal de vente: produit lorsque la ligne de stop mobile ATR est franchie sous le prix de clôture et au-dessus de la moyenne T3.
Stop Loss: Après l’entrée, le prix stop et stop est calculé en fonction de la valeur ATR et du rapport risque/rendement que l’utilisateur a défini.
Après l’achat, le prix d’arrêt est le prix d’entrée moins l’ATR, le prix d’arrêt est le prix d’entrée plus l’ATR multiplié par le taux de rendement du risque.
Après la vente, le prix d’arrêt est le prix d’entrée plus l’ATR, le prix d’arrêt est le prix d’entrée moins l’ATR multiplié par le taux de rendement du risque.
Lorsque le prix déclenche un stop loss ou un stop loss, la position est levée.
Le paramètre de moyenne T3 prend par défaut 100 et est plus sensible aux variations de prix que les moyennes mobiles générales.
Le stop-loss mobile calculé avec l’ATR permet d’éviter le risque de rupture du stop-loss en fonction des fluctuations du prix du trail du marché. La position de stop-loss est basée sur l’ATR et permet de contrôler le ratio de risque/rendement de chaque transaction.
La ligne de stop mobile ATR est capable de suivre la tendance, même si elle n’est pas déclenchée lors d’une reprise à court terme, ce qui réduit les signaux erronés.
Les cycles de moyenne T3 et d’ATR peuvent être optimisés pour adapter les paramètres aux différents marchés et améliorer la stabilité de la stratégie.
En cas d’extrême volatilité, le prix peut franchir directement la ligne de stop-loss et causer des pertes. Les cycles d’ATR et la distance de stop-loss peuvent être élargis de manière appropriée pour atténuer les pertes.
Lors d’un renversement de tendance, la traversée d’une ligne de stop-loss mobile peut entraîner des pertes. Vous pouvez combiner avec d’autres indicateurs pour juger de la tendance et éviter de négocier près du point de renversement.
L’optimisation des paramètres nécessite un support riche en données historiques, il existe un risque d’optimisation excessive. Les paramètres d’optimisation de la combinaison de plusieurs marchés et de plusieurs périodes de temps devraient être utilisés et ne peuvent pas dépendre d’un seul ensemble de données.
Tester différents paramètres de cycle de la moyenne T3 pour trouver la combinaison optimale de paramètres qui équilibrent la sensibilité et la stabilité
Test des paramètres ATR pour trouver le meilleur équilibre entre le contrôle des risques et les tendances des gains
Combinez les indicateurs RSI, MACD et autres pour éviter les erreurs de trading lors d’un retournement de tendance
Une méthode d’apprentissage automatique pour former les meilleurs paramètres et réduire les limites de l’optimisation manuelle
Augmentation des stratégies de gestion des positions pour une meilleure maîtrise des risques
Cette stratégie intègre les avantages de la moyenne T3 et de l’indicateur ATR, permettant de réagir rapidement aux variations de prix et de maîtriser les risques. La stabilité de la stratégie et l’efficacité des transactions peuvent être encore améliorées par l’optimisation des paramètres et la combinaison d’autres indicateurs.
/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='UT Bot Alerts (QuantNomad) Strategy w/ NinjaView', overlay=true)
T3 = input(100)//600
// Input for Long Settings
// Input for Long Settings
xPrice3 = close
xe1 = ta.ema(xPrice3, T3)
xe2 = ta.ema(xe1, T3)
xe3 = ta.ema(xe2, T3)
xe4 = ta.ema(xe3, T3)
xe5 = ta.ema(xe4, T3)
xe6 = ta.ema(xe5, T3)
b3 = 0.7
c1 = -b3*b3*b3
c2 = 3*b3*b3+3*b3*b3*b3
c3 = -6*b3*b3-3*b3-3*b3*b3*b3
c4 = 1+3*b3+b3*b3*b3+3*b3*b3
nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3
//plot(nT3Average, color=color.white, title="T3")
// Buy Signal - Price is below T3 Average
buySignal3 = xPrice3 < nT3Average
sellSignal3 = xPrice3 > nT3Average
// Inputs
a = input(1, title='Key Value. "This changes the sensitivity"')
c = input(50, title='ATR Period')
h = input(true, title='Signals from Heikin Ashi Candles')
riskRewardRatio = input(1, title='Risk Reward Ratio')
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close
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
ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossunder(ema, xATRTrailingStop)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)
barcolor(barbuy ? color.new(color.green, 90) : na)
barcolor(barsell ? color.new(color.red, 90) : na)
var float entryPrice = na
var float takeProfitLong = na
var float stopLossLong = na
var float takeProfitShort = na
var float stopLossShort = na
if buy and buySignal3
entryPrice := src
takeProfitLong := entryPrice + nLoss * riskRewardRatio
stopLossLong := entryPrice - nLoss
takeProfitShort := na
stopLossShort := na
if sell and sellSignal3
entryPrice := src
takeProfitShort := entryPrice - nLoss * riskRewardRatio
stopLossShort := entryPrice + nLoss
takeProfitLong := na
stopLossLong := na
// Strategy order conditions
acct = "Sim101"
ticker = "ES 12-23"
qty = 1
OCOMarketLong = '{ "alert": "OCO Market Long", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitLong) + '", "stop_price": "' + str.tostring(stopLossLong) + '", "tif": "DAY" }'
OCOMarketShort = '{ "alert": "OCO Market Short", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitShort) + '", "stop_price": "' + str.tostring(stopLossShort) + '", "tif": "DAY" }'
CloseAll = '{ "alert": "Close All", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '" }'
strategy.entry("Long", strategy.long, when=buy ,alert_message=OCOMarketLong)
strategy.entry("Short", strategy.short, when=sell , alert_message=OCOMarketShort)
// Setting the take profit and stop loss for long trades
strategy.exit("Take Profit/Stop Loss", "Long", stop=stopLossLong, limit=takeProfitLong,alert_message=CloseAll)
// Setting the take profit and stop loss for short trades
strategy.exit("Take Profit/Stop Loss", "Short", stop=stopLossShort, limit=takeProfitShort,alert_message=CloseAll)
// Plot trade setup boxes
bgcolor(buy ? color.new(color.green, 90) : na, transp=0, offset=-1)
bgcolor(sell ? color.new(color.red, 90) : na, transp=0, offset=-1)
longCondition = buy and not na(entryPrice)
shortCondition = sell and not na(entryPrice)
var line longTakeProfitLine = na
var line longStopLossLine = na
var line shortTakeProfitLine = na
var line shortStopLossLine = na
if longCondition
longTakeProfitLine := line.new(bar_index, takeProfitLong, bar_index + 1, takeProfitLong, color=color.green, width=2)
longStopLossLine := line.new(bar_index, stopLossLong, bar_index + 1, stopLossLong, color=color.red, width=2)
label.new(bar_index + 1, takeProfitLong, str.tostring(takeProfitLong, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny)
label.new(bar_index + 1, stopLossLong, str.tostring(stopLossLong, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny)
if shortCondition
shortTakeProfitLine := line.new(bar_index, takeProfitShort, bar_index + 1, takeProfitShort, color=color.green, width=2)
shortStopLossLine := line.new(bar_index, stopLossShort, bar_index + 1, stopLossShort, color=color.red, width=2)
label.new(bar_index + 1, takeProfitShort, str.tostring(takeProfitShort, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny)
label.new(bar_index + 1, stopLossShort, str.tostring(stopLossShort, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny)
alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')