Adaptive Handelsstrategie für bewegliche Stopplinien

Schriftsteller:ChaoZhang, Datum: 2024-02-21 16:07:20
Tags:

img

Übersicht

Die Kernidee dieser Strategie besteht darin, den T3 gleitenden Durchschnitt und den ATR adaptive Trailing Stop zu verwenden, um Ein- und Ausstiegspunkte entlang des Trends zu erfassen. Es gehört zu den Trendfolgestrategien. Handelssignale werden generiert, wenn der Preis durch die T3-Linie bricht, und Stop-Loss- und Take-Profit-Level werden mit dem ATR-Wert am Ausbruchspunkt festgelegt, um automatischen Stop-Loss und Take-Profit zu erzielen.

Strategieprinzip

Die Strategie besteht aus dem T3-Indikator, dem ATR-Indikator und dem ATR-Trailing Stop-Mechanismus.

Der gleitende Durchschnitt T3 ist ein glätteter gleitender Durchschnitt, der die Verzögerung der Kurve reduzieren und schneller auf Preisänderungen reagieren kann. Ein Kaufsignal wird erzeugt, wenn der Preis den gleitenden Durchschnitt von unten durchbricht. Ein Verkaufssignal wird erzeugt, wenn der Preis von oben durchbricht.

Der ATR-Indikator wird verwendet, um den Grad der Marktvolatilität zu berechnen und Stop-Loss-Levels festzulegen. Je größer der ATR-Wert, desto größer die Marktvolatilität und ein breiterer Stop-Loss sollte festgelegt werden. Je kleiner der ATR-Wert, desto kleiner die Marktvolatilität und ein engerer Stop-Loss kann festgelegt werden.

Der ATR-Trailing-Stop-Mechanismus passt die Stop-Loss-Line-Position basierend auf ATR-Werten in Echtzeit an, so dass die Stop-Loss-Line der Preisbewegung folgen und innerhalb eines angemessenen Bereichs bleiben kann. Dies verhindert, dass der Stop-Loss zu nahe und leicht ausgeschlagen wird, und verhindert auch, dass der Stop-Loss zu breit ist, um Risiken effektiv zu kontrollieren.

Durch die Nutzung des T3 zur Bestimmung der Richtung, des ATR zur Berechnung der Volatilität und des ATR-Trailing-Stop-Mechanismus wird eine relativ effiziente Trendfindung und Risikokontrolle erreicht.

Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Die Anwendung der T3-Linie verbessert die Genauigkeit der Trends.

  2. Der ATR-Indikator berechnet dynamisch die Marktvolatilität, wodurch die Stop-Loss- und Take-Profit-Levels vernünftiger werden.

  3. Der ATR-Trailing-Stop-Mechanismus ermöglicht es der Stop-Loss-Linie, die Kursbewegung in Echtzeit zu verfolgen, um das Risiko wirksam zu kontrollieren.

  4. Integriert Indikatoren und Stop-Loss-Mechanismen, um einen automatisierten Trend-Tracking-Handel zu erreichen.

  5. Kann sich über Webhook für die automatisierte Auftragsausführung mit externen Handelsplattformen verbinden.

Risiken und Lösungen

Diese Strategie birgt auch einige Risiken:

  1. Bei falschen T3-Parameter-Einstellungen können bessere Trendchancen verpasst werden.

  2. Eine ungenaue Berechnung des ATR-Wertes kann dazu führen, dass die Stop-Loss-Distanz zu groß oder zu klein ist, um das Risiko wirksam zu kontrollieren.

  3. Bei heftigen Schwankungen kann die Stop-Loss-Linie durchbrochen werden, was zu übermäßigen Verlusten führt.

  4. In den Whipsaw-Märkten kann häufige Stop-Loss-Auslösungen auftreten.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Optimieren Sie den T3-Parameter, um den am besten geeigneten Glättungszyklus zu finden.

  2. Versuche verschiedene ATR-Zyklusparameter, um den ATR-Wert zu berechnen, der die Marktvolatilität am besten widerspiegelt.

  3. Optimierung des flexiblen Bereichs der ATR-Rückhaltdistanz, um überempfindliche Haltungen zu vermeiden.

  4. Hinzufügen geeigneter Filter, um häufigen Handel auf Whipsaw-Märkten zu vermeiden.

  5. Einbeziehung von Trendbeurteilungsindikatoren zur Verbesserung der Richtungssicherheit der Rentabilität.

  6. Verwenden Sie maschinelle Lernmethoden zur automatischen Optimierung von Parametern.

Schlussfolgerung

Diese Strategie integriert die Verwendung der T3-Linie zur Bestimmung der Trendrichtung, den ATR-Indikator zur Berechnung von Stopps/Zielen und den ATR-Trailing-Stop-Mechanismus zur Anpassung der Stoppdistanz. Sie erreicht eine automatisierte Trendverfolgung und eine effiziente Risikokontrolle.


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


Mehr