Handelsstrategie basierend auf T3-gleitendem Durchschnitt und ATR


Erstellungsdatum: 2023-11-07 17:18:05 zuletzt geändert: 2023-11-07 17:18:05
Kopie: 1 Klicks: 809
1
konzentrieren Sie sich auf
1617
Anhänger

Handelsstrategie basierend auf T3-gleitendem Durchschnitt und ATR

Überblick

Die Strategie nutzt eine Kombination aus T3 Moving Averages, ATR-Indikatoren und Hyperbole, um Kauf- und Verkaufssignale zu identifizieren und Trend-Tracking-Trades zu realisieren. Die Strategie hat den Vorteil, schnell zu reagieren und das Handelsrisiko zu kontrollieren.

Grundsätzliche Analyse

Indikatorberechnung

  • T3 Moving Average: Berechnung eines T3 Moving Averages mit einem glatten Parameter T3 ([default 100]) zur Bestimmung der Trendrichtung.

  • ATR: Berechnung des ATR (Average True Range) zur Bestimmung der Größe der Stop-Loss-Stoppposition.

  • ATR Mobile Stop: Eine mobile Stop-Line basierend auf dem ATR, die sich an Preisänderungen und Schwankungen anpassen kann, um Trends zu verfolgen.

Transaktionslogik

  • Kaufsignal: Ein Kaufsignal wird erzeugt, wenn der ATR-Stop-Line-Streck über den Schlusskurs und unter dem T3-Durchschnitt durchbrochen wird.

  • Verkaufssignal: Ein Verkaufssignal wird erzeugt, wenn die ATR-Stoplinie unterhalb des Schlusskurses und über dem T3-Durchschnitt durchbrochen wird.

  • Stop-Loss-Prämien: Nach dem Eintritt werden die Stop-Loss- und Stop-Prämien auf Basis des ATR-Wertes und der vom Benutzer festgelegten Rendite-Risiko-Ratio berechnet.

Ein- und Ausstiegsstrategien

  • Nach dem Kauf wird der Stop-Loss-Preis als Einstiegspreis abzüglich des ATR-Wertes und der Stop-Loss-Preis als Einstiegspreis plus der ATR-Wert multipliziert mit der Rendite des Risikos angegeben.

  • Nach dem Verkauf wird der Stop-Loss-Preis als Einstiegspreis plus der ATR-Wert und der Stop-Stop-Preis als Einstiegspreis minus der ATR-Wert multipliziert mit der Rendite des Risikos angegeben.

  • Wenn der Preis einen Stop-Loss oder einen Stop-Stop auslöst, wird die Off-Position aufgegeben.

Analyse der Stärken

Schnelle Reaktion

Der T3-Durchschnittsparameter setzt die 100 als Default-Wert ein und ist empfindlicher als der allgemeine Moving Average und kann schneller auf Preisänderungen reagieren.

Risikokontrolle

Der mobile Stop-Loss, der mit dem ATR berechnet wird, ist auf Basis von Marktfluktuationen und Trail-Preisen berechnet, um das Risiko zu vermeiden, dass der Stop-Loss durchbrochen wird. Die Stop-Stop-Loss-Position ist auf der Grundlage des ATR und kann die Risiko-Rendite pro Handel kontrollieren.

Trendverfolgung

Die ATR-Mobilstop-Linie ist in der Lage, Trends zu verfolgen und wird nicht ausgelöst, selbst wenn der Preis kurzfristig rückläufig ist, wodurch falsche Signale reduziert werden.

Parameteroptimierung

Die T3-Durchschnitts- und ATR-Zyklen können optimiert werden, um die Parameter für verschiedene Märkte anzupassen und die Strategie zu stabilisieren.

Risikoanalyse

Die Gefahr eines Durchbruchs

Bei einem heftigen Trend kann der Preis die Stop-Line direkt überschreiten und zu Verlusten führen. Die ATR-Zyklen und die Stop-Distanz können entsprechend erweitert werden, um diese zu mildern.

Trendumkehrrisiko

Bei einem Trendwechsel kann der Preis einen Verlust verursachen, wenn er die bewegliche Stop-Loss-Linie überschreitet. Der Trend kann in Kombination mit anderen Indikatoren beurteilt werden, um den Handel in der Nähe des Wendepunkts zu vermeiden.

Risiken der Parameteroptimierung

Die Parameteroptimierung erfordert eine umfangreiche Unterstützung durch historische Daten, und es besteht das Risiko einer Überoptimierung. Die Optimierungsparameter sollten in einer Kombination aus mehreren Märkten und mehreren Zeiträumen verwendet werden und dürfen nicht auf einen einzigen Datensatz angewiesen sein.

Optimierungsrichtung

  • Verschiedene T3-Durchschnitts-Periodenparameter testen, um die optimale Kombination aus Sensitivität und Stabilität zu finden

  • Testen von ATR-Zyklusparametern, um die optimale Balance zwischen Risikokontrolle und Gewinntrends zu finden

  • Vermeidung von Trendwende-Fehlern in Kombination mit RSI, MACD und anderen Indikatoren

  • Trainieren von optimalen Parametern mithilfe von maschinellen Lernmethoden, um die Grenzen der künstlichen Optimierung zu verringern

  • Erweiterte Positionsmanagementstrategien und bessere Risikokontrolle

Zusammenfassen

Diese Strategie integriert die Vorteile der T3-Mittellinie und der ATR-Indikatoren, um schnell auf Preisänderungen zu reagieren und Risiken zu kontrollieren. Durch die Optimierung von Parametern und die Kombination mit anderen Indikatoren können die Strategie-Stabilität und die Handels-Effizienz weiter verbessert werden.

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