
L’idée centrale de cette stratégie est de capturer les points d’entrée et de sortie de la tendance en utilisant la moyenne T3 et l’ATR pour adapter les arrêts de mouvement, qui appartiennent à la stratégie de suivi de la tendance. Un signal de transaction est généré lorsque le prix franchit la moyenne T3 et utilise les valeurs ATR pour définir des points d’arrêt et d’arrêt au point de rupture.
La stratégie est principalement composée de l’indicateur de moyenne T3, de l’indicateur ATR et du mécanisme de stop-loss mobile ATR.
La ligne moyenne T3 est une moyenne mobile à lentilles qui réduit le retard de la courbe et permet de réagir plus rapidement aux variations de prix. Elle génère un signal d’achat lorsque le prix se déplace en dessous de la ligne moyenne et un signal de vente lorsque le prix se déplace en dessous de la ligne moyenne.
L’indicateur ATR est utilisé pour calculer le degré de volatilité du marché et pour définir un stop loss. Plus l’ATR est élevé, plus le marché est volatile et plus le stop loss doit être large. Plus l’ATR est faible, plus le stop loss doit être petit.
Le mécanisme de stop mobile ATR consiste à ajuster la position de la ligne de stop en temps réel en fonction de la valeur ATR, afin que la ligne de stop puisse suivre le cours et rester dans une plage raisonnable. Cela empêche à la fois que la distance de stop trop proche soit secouée et que la distance de stop trop large ne puisse pas contrôler efficacement le risque.
Cette stratégie, qui utilise de manière intégrée les indicateurs T3 pour déterminer la direction, les indicateurs ATR pour calculer la volatilité et le mécanisme d’arrêt mobile ATR, permet une capture de tendance et un contrôle du risque plus efficaces.
Cette stratégie présente les avantages suivants:
L’application de la ligne moyenne T3 améliore la précision de la capture des tendances.
L’indicateur ATR calcule dynamiquement les fluctuations du marché, les arrêts de perte et les arrêts de vente plus raisonnables.
ATR est un mécanisme mobile de stop-loss qui permet aux lignes de stop-loss de suivre les prix en temps réel et de contrôler efficacement les risques.
L’intégration de mécanismes de jugement et de stop loss pour l’automatisation du suivi des tendances.
Il est possible de connecter une plateforme de trading externe via un webhook pour automatiser les commandes.
Cette stratégie comporte aussi des risques:
Les paramètres de la ligne moyenne de T3 sont mal configurés et risquent de manquer des opportunités de tendance supérieure. Vous pouvez tester les paramètres de différentes périodes pour trouver les paramètres optimaux.
Les valeurs ATR sont calculées de manière inexacte, la distance de stop est trop grande ou trop petite pour contrôler efficacement le risque. Les paramètres de cycle ATR peuvent être ajustés en fonction des caractéristiques de volatilité du marché.
En cas de fortes fluctuations, la ligne de stop-loss peut être franchie et entraîner des pertes excessives. Une ligne de perte globale raisonnable peut être définie pour éviter des pertes individuelles excessives.
Dans des situations de répétition bidirectionnelle, il peut arriver que le stop-loss soit fréquemment déclenché. La distance de stop-loss mobile de l’ATR peut être libérée de manière appropriée.
Cette stratégie peut être optimisée dans les domaines suivants:
Optimiser les paramètres de la ligne moyenne de T3 pour trouver le cycle de lissage le plus approprié.
Tester différents paramètres du cycle ATR et calculer la valeur ATR qui reflète le mieux les fluctuations du marché.
Optimisation de la portée de l’arrêt mobile de l’ATR pour éviter que l’arrêt ne soit trop sensible.
Ajouter des conditions de filtrage appropriées pour éviter les échanges fréquents sur les marchés à oscillation bidirectionnelle.
L’analyse des tendances, combinée à des indicateurs de jugement, améliore la précision de la direction des bénéfices.
Optimiser automatiquement les paramètres à l’aide de l’apprentissage automatique.
Cette stratégie intègre l’utilisation d’une ligne moyenne T3 pour déterminer la direction de la tendance, l’indicateur ATR pour calculer les arrêts de perte et le mécanisme d’arrêt mobile ATR pour ajuster la distance de perte, pour réaliser un suivi automatique des tendances et un contrôle efficace des risques. C’est une stratégie de suivi de tendance fiable. Dans la pratique, il est toujours nécessaire de tester et d’optimiser en permanence pour trouver la combinaison de paramètres la plus adaptée à l’environnement actuel du marché, afin d’obtenir de meilleurs résultats.
/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='UT Bot Alerts (QuantNomad) Strategy', 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 and buySignal3, alert_message=OCOMarketLong)
strategy.entry("Short", strategy.short, when=sell and sellSignal3, 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')