Adaptive Moving Stop Moving Average-Handelsstrategie


Erstellungsdatum: 2024-02-21 16:07:20 zuletzt geändert: 2024-02-21 16:07:20
Kopie: 1 Klicks: 687
1
konzentrieren Sie sich auf
1617
Anhänger

Adaptive Moving Stop Moving Average-Handelsstrategie

Überblick

Die Kernidee dieser Strategie besteht darin, die Ein- und Ausgangspunkte des Trends mit Hilfe der T3-Mittellinie und der ATR-Adaptions-Stopp-Bewegung zu erfassen. Diese Strategie gehört zu den Strategien der Trendverfolgung.

Strategieprinzip

Die Strategie besteht hauptsächlich aus einem T3-Mittellinienindikator, einem ATR-Indikator und einem ATR-Mobilstop.

Die T3-Mittellinie ist ein gleitender, beweglicher Durchschnitt, der die Verzögerung der Kurve reduziert und so schneller auf Preisänderungen reagiert. Sie erzeugt ein Kaufsignal, wenn der Preis von der Mittellinie in die Richtung unterhalb bricht, und ein Verkaufsignal, wenn der Preis von der Mittellinie in die Richtung unterhalb bricht.

Der ATR-Indikator wird verwendet, um die Höhe der Marktfluktuation zu berechnen und eine Stop-Loss-Bereich zu setzen. Je größer der ATR-Wert, desto größer ist die Marktfluktuation, und ein breiterer Stop-Loss muss eingestellt werden. Je kleiner der ATR-Wert, desto kleiner ist der Marktfluktuation, und ein engerer Stop-Loss kann eingestellt werden.

Der ATR-Mobil-Stoppmechanismus ist die Realzeit-Anpassung der Position der Stop-Line an den ATR-Wert, um die Stop-Line in der Lage zu machen, dem Preis zu folgen und sich in einem vernünftigen Bereich zu halten. So wird sowohl verhindert, dass die Stop-Line zu nahe kommt, als auch verhindert, dass die Stop-Line zu breit wird und das Risiko nicht effektiv kontrolliert wird.

Durch die Kombination von T3-Indikatoren zur Orientierung, ATR-Indikatoren zur Berechnung der Volatilität und ATR-Moving Stop-Mechanismen wurde eine effizientere Trendfangung und Risikokontrolle erreicht.

Vorteile

Diese Strategie hat folgende Vorteile:

  1. Die Verwendung der T3-Gehaltslinie verbessert die Genauigkeit der Trendfangung.

  2. Die ATR-Indikatoren berechnen dynamisch die Marktfluktuation, die Stop-Loss- und die Stop-Out-Positionen.

  3. ATR Mobile Stop-Mechanismus, der eine Stop-Line ermöglicht, die Preise in Echtzeit zu verfolgen und Risiken effektiv zu kontrollieren.

  4. Integration von Indikatoren und Stop-Loss-Mechanismen zur automatischen Trendverfolgung.

  5. Es ist möglich, eine externe Handelsplattform mit einem Webhook zu verbinden, um die Bestellung zu automatisieren.

Risiken und Lösungen

Die Strategie birgt auch einige Risiken:

  1. T3-Durchschnittsparameter sind falsch eingestellt und können eine gute Trendchance verpassen. Die Parameter für verschiedene Perioden können getestet werden, um die optimalen Parameter zu finden.

  2. Die ATR-Werte sind ungenau berechnet, die Stop-Loss-Distanz ist zu groß oder zu klein, um das Risiko effektiv zu kontrollieren. Die ATR-Zyklusparameter können in Verbindung mit Marktschwankungen angepasst werden.

  3. Bei starken Schwankungen kann die Stop-Line durchbrochen werden, was zu übermäßigen Verlusten führt. Eine angemessene Gesamtverlustlinie kann gesetzt werden, um zu große Einzelverluste zu vermeiden.

  4. Bei zweifacher Wiederholung kann ein häufiger Auslöser des Stopps auftreten. Die ATR-Strahlentfernung kann entsprechend gelockert werden.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Optimierung der Mittellinienparameter von T3 zur Suche nach der am besten geeigneten Glättungsphase.

  2. Verschiedene ATR-Zyklusparameter werden getestet, um die ATR-Werte zu berechnen, die am besten die Marktfluktuation widerspiegeln.

  3. Optimierung der Elastizitätsspanne der ATR-Mobil-Stopp-Distanz, um zu verhindern, dass der Stopp zu empfindlich ist.

  4. Um den häufigen Handel mit zweiseitigen Schwingungsmärkten zu vermeiden, wurden geeignete Filterbedingungen hinzugefügt.

  5. In Kombination mit Trend-Anzeigen erhöht sich die Genauigkeit der Gewinn- und Verlust-Anzeige.

  6. Automatische Optimierung der Parameter mittels maschineller Lernmethoden.

Zusammenfassen

Diese Strategie integriert die Verwendung von T3-Gleichlinien, um die Richtung des Trends zu bestimmen. Die ATR-Anzeige berechnet die Stop-Loss-Stopps und der ATR-Mobil-Stop-Mechanismus passt die Stop-Loss-Distanz an, um die Trends automatisch zu verfolgen und eine effiziente Risikokontrolle zu ermöglichen.

Strategiequellcode
/*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')