Stratégie de trading adaptative à moyenne mobile avec arrêt mobile


Date de création: 2024-02-21 16:07:20 Dernière modification: 2024-02-21 16:07:20
Copier: 1 Nombre de clics: 687
1
Suivre
1617
Abonnés

Stratégie de trading adaptative à moyenne mobile avec arrêt mobile

Aperçu

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.

Principe de stratégie

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.

Les avantages

Cette stratégie présente les avantages suivants:

  1. L’application de la ligne moyenne T3 améliore la précision de la capture des tendances.

  2. L’indicateur ATR calcule dynamiquement les fluctuations du marché, les arrêts de perte et les arrêts de vente plus raisonnables.

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

  4. L’intégration de mécanismes de jugement et de stop loss pour l’automatisation du suivi des tendances.

  5. Il est possible de connecter une plateforme de trading externe via un webhook pour automatiser les commandes.

Les risques et les solutions

Cette stratégie comporte aussi des risques:

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

  2. 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é.

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

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

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Optimiser les paramètres de la ligne moyenne de T3 pour trouver le cycle de lissage le plus approprié.

  2. Tester différents paramètres du cycle ATR et calculer la valeur ATR qui reflète le mieux les fluctuations du marché.

  3. Optimisation de la portée de l’arrêt mobile de l’ATR pour éviter que l’arrêt ne soit trop sensible.

  4. Ajouter des conditions de filtrage appropriées pour éviter les échanges fréquents sur les marchés à oscillation bidirectionnelle.

  5. L’analyse des tendances, combinée à des indicateurs de jugement, améliore la précision de la direction des bénéfices.

  6. Optimiser automatiquement les paramètres à l’aide de l’apprentissage automatique.

Résumer

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.

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