ADX-basierte einstündige TENKAN KIJUN Kreuztrend-Tracking-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-08 15:37:00 Uhr
Tags:

img

Übersicht

Dies ist eine einfache, aber profitable Trend-Tracking-Strategie, die auf einem einstündigen Zeitrahmen TENKAN und KIJUN im ICHIMOKU-System kombiniert mit dem ADX-Indikator basiert, um schwache Trending-Märkte auszufiltern, um Handelssignale zu generieren.

Strategie Logik

Die Strategie verwendet die Kreuzung der Konversionslinie (TENKAN) und der Basislinie (KIJUN) im ICHIMOKU-System, um die Markttrendrichtung zu bestimmen. Die TENKAN-Linie wird auf der Grundlage des Durchschnitts des höchsten Hochs und des niedrigsten Tiefs der letzten 18 Kerzen berechnet, was eine schnelle Konversionslinie darstellt. Die KIJUN-Linie basiert auf 58 Kerzenperioden und steht für die Standardkonversionslinie.

Wenn TENKAN über KIJUN kreuzt, ist es ein Aufwärtssignal. Wenn TENKAN unter KIJUN kreuzt, ist es ein Bärensignal. Dies zielt darauf ab, eine mittelfristige Trendwende zu erfassen.

Darüber hinaus wird der ADX-Indikator verwendet, um die Stärke des Trends zu messen.

Zusammenfassend lässt sich mit dieser Strategie mittelfristige Trendrichtung über TENKAN und KIJUN-Kreuzungen ermitteln und mit Hilfe von ADX falsche Ausbrüche ausfiltern, um langfristige Trends zu verfolgen.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Die Verwendung eines ausgereiften und zuverlässigen ICHIMOKU-Systems zur Bestimmung der Trendrichtung und der Wendepunkte.

  2. Filtern Sie schwache Markttrends aus, indem Sie ADX verwenden, um Whipsaws bei der Konsolidierung zu vermeiden.

  3. Der einstündige Zeitrahmen filtert Marktlärm und erfasst nur mittelfristige und langfristige Trends.

  4. Die Logik ist für Trend-Händler einfach und einfach zu verstehen.

  5. Solide Backtest-Ergebnisse vor allem bei hochkapitalisierten Münzen wie ETH/BTC.

Risikoanalyse

Einige Risiken bei dieser Strategie:

  1. Ichimoku-Parameter sind empfindlich, müssen für verschiedene Paare angepasst werden.

  2. ADX kann in manchen Fällen verzögert sein, was zu einem fehlenden Einstieg führt.

  3. Unterdurchschnittliche Performance in verschiedenen Märkten mit häufigen Stop-Loss-Hits.

  4. Die Leistung variiert stark zwischen verschiedenen Paaren und Zeitrahmen.

  5. Eine lange Haltung von Positionen kann riskant sein, ein angemessener Stop-Loss/Take-Profit ist erforderlich.

Die Optimierung kann über ADX-Parameter-Tuning, das Hinzufügen von Filtern wie MACD zur Verringerung falscher Signale oder die dynamische Anpassung von Parametern für Robustheit erfolgen.

Optimierungsrichtlinien

Einige wichtige Richtungen zur Verbesserung der Strategie:

  1. Dynamische Optimierung der TENKAN- und KIJUN-Parameter für eine bessere Anpassung.

  2. Suche nach besseren Trendindikatoren, die ADX ersetzen oder kombinieren können.

  3. Hinzufügen von Stop-Loss/Take-Profit, um das Risiko-Rendite-Verhältnis zu kontrollieren.

  4. Die Modellierung mit ergänzenden Indikatoren kombinieren, um die Stabilität zu verbessern.

  5. Modularisierung und Flexibilität für Parameter-Tuning auf mehr Paaren.

  6. Quantitatives Risikomanagement, z. B. maximale Abzugskontrolle gegen extreme Bewegungen.

Schlussfolgerung

Zusammenfassend ist dies eine einfache, aber praktische Trendverfolgungsstrategie, die hauptsächlich auf TENKAN/KIJUN Cross und ADX basiert, um mittelfristige bis langfristige Trends zu identifizieren und Signale zu generieren. Sie hat positive Rücktests gezeigt, insbesondere bei BTC-Paaren mit hoher Marktkapitalisierung wie ETH/BTC, mit relativ stabiler Rentabilität. Aber sie setzt auch auf Parameter-Tuning, erfordert eine Optimierung pro Paar. Risikokontrolle pro Handel ist auch notwendig, um Verluste zu begrenzen, wenn sich Trends umkehren. Insgesamt bietet dies eine wertvolle Referenz für eine Trendfolgestrategie für Algo-Händler.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-12-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="Odin's Kraken (TK Cross Strategy)", shorttitle="Odin's Kraken", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title="Source")

// define tk in ichimoku

conversionPeriods = input(18, minval=1, title="Conversion Line Periods (Tenkan)"),
basePeriods = input(58, minval=1, title="Base Line Periods (Kijun)")

donchian(len) => avg(lowest(len), highest(len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)

TK_Uptrend = crossover(conversionLine,baseLine)
TK_Downtrend = crossunder(conversionLine,baseLine)

plot(conversionLine, color=lime, title="Tenkan", linewidth=3)
plot(baseLine, color=red, title="Kijun", linewidth=3)

// define ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
th = input(title="threshold", defval=20)
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)

	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	
[plus, minus] = dirmov(dilen)
sig = adx(dilen, adxlen)

// backtesting range

// From Date Inputs
fromDay = input(defval = 3, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2018, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 3, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 9, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2019, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

// open long and short

longCondition = TK_Uptrend
if (longCondition and sig > 12 and time_cond)
    strategy.entry("LONG", strategy.long)

shortCondition = TK_Downtrend
if (shortCondition and sig > 12 and time_cond)
    strategy.entry("SHORT", strategy.short)

// close trade if backtesting criteria not met

if (not time_cond)
    strategy.close_all()




Mehr