Stratégie de trading basée sur la moyenne mobile T3 et l'ATR


Date de création: 2023-11-07 17:18:05 Dernière modification: 2023-11-07 17:18:05
Copier: 1 Nombre de clics: 813
1
Suivre
1621
Abonnés

Stratégie de trading basée sur la moyenne mobile T3 et l’ATR

Aperçu

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.

L’analyse des principes

Calcul de l’indicateur

  • 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.

Logique de transaction

  • 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.

Stratégies d’entrée et de sortie

  • 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.

Analyse des avantages

Une réponse rapide

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.

Contrôle des risques

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.

Suivi des tendances

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.

Optimisation de l’espace par paramètre

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.

Analyse des risques

Le risque d’une percée

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.

Risque d’inversion de tendance

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.

Risques liés à l’optimisation des paramètres

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.

Direction d’optimisation

  • 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

Résumer

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.

Code source de la stratégie
/*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')