Ichimoku Cloud, MACD und Stochastische Multi-Zeitrahmen-Trend-Tracking-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-05 10:30:45 Uhr
Tags:

img

Übersicht

Diese Strategie integriert Ichimoku Cloud, gleitenden Durchschnitt, MACD, Stochastic und ATR Indikatoren, um Trends über mehrere Zeitrahmen hinweg zu identifizieren und zu verfolgen.

Strategie Logik

  1. Ichimoku Cloud beurteilt mittelfristige und langfristige Trendrichtungen. Der CLOSE-Preis über Ichimokus Wendelinie und Basislinie ist ein bullisches Signal, und der unter ihnen ist ein bärisches Signal.

  2. Das MACD-Histogramm, das über die MACD-Signallinie geht, ist ein Aufwärtssignal und das unterhalb ist ein Bärensignal.

  3. Stochastic KD beurteilt überkaufte/überverkaufte Zonen. Ein Überschreiten der K-Linie über 20 ist ein bullisches Signal, und ein Überschreiten unter 80 ist ein bärisches Signal.

  4. Ein schließender Kurs, der über MA liegt, ist ein bullisches Signal, und ein schließender Preis, der darunter liegt, ist ein bärisches Signal.

  5. Integration von Signalen aus den oben genannten Indikatoren, um einige falsche Signale auszufiltern und nachhaltige Trendsignale mit hoher Wahrscheinlichkeit zu bilden.

  6. Verwenden Sie ATR, um den Stop-Loss- und Take-Profit-Preis zu berechnen.

Vorteile

  1. Identifizieren Sie Trends über mehrere Zeitrahmen hinweg, um die Genauigkeit des Signals zu verbessern.

  2. Um falsche Signale wirksam auszufiltern, werden häufig Indikatorkombinationen verwendet.

  3. ATR-basierte Stop-Loss & Take-Profit-Limits für jeden Handelsverlust.

  4. Die angepasste Strenge der Einreisebedingungen richtet sich nach den unterschiedlichen Risikobereitschaften.

Risiken

  1. Der Trend, der der Natur folgt, erkennt keine Umkehrungen, die durch schwarze Schwanereignisse verursacht werden.

  2. Idealer ATR-Stop-Loss ist im Live-Handel schwer zu replizieren.

  3. Eine unsachgemäße Einstellung der Parameter kann zu einem Überschreiten oder zu einer unzureichenden Signalgenauigkeit führen.

  4. Parametertweak ist notwendig, um unterschiedlichen Produkten und Marktumgebungen gerecht zu werden.

Verbesserungsbereiche

  1. Einführung von maschinellem Lernen zur Beurteilung von Trendumkehrpunkten.

  2. Optimierung der ATR-Multiplikatorparameterwerte für verschiedene Produkte.

  3. Einbeziehen Sie andere Faktoren wie Lautstärkungsänderungen, um die Genauigkeit des Durchbruchssignals zu verbessern.

  4. Optimieren Sie die Parameter weiter, basierend auf den Backtest-Ergebnissen, um die besten Parameterkombinationen zu finden.

Zusammenfassung

Diese Strategie nutzt Ichimoku Cloud, MACD, Stochastic und mehr für die Identifizierung von Trends in mehreren Zeitrahmen, um Trends zu erfassen und dabei zu vermeiden, von Schwarzschwanenereignissen gefangen zu werden.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FXFUNDINGMATE

//@version=4
strategy(title="FXFUNDINGMATE TREND INDICATOR", overlay=true)

//Ichimoku Cloud
conversionPeriods = input(9, minval=1, title="Conversion Line Length")
basePeriods = input(26, minval=1, title="Base Line Length")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Length")
displacement = input(26, minval=1, title="Displacement")
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)[displacement - 1]
leadLine2 = donchian(laggingSpan2Periods)[displacement - 1]


//macd
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)

fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


//kd
periodK = input(5, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)


//atr
atrlength = input(title="Atr Length", defval=8, minval=1)
SMulti = input(title="Stop loss multi Atr", defval=1.0)
TMulti = input(title="Take profit multi Atr", defval=1.0)
smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
ma_function(source, length) =>
	if smoothing == "RMA"
		rma(source, length)
	else
		if smoothing == "SMA"
			sma(source, length)
		else
			if smoothing == "EMA"
				ema(source, length)
			else
				wma(source, length)
atr = ma_function(tr(true), atrlength)


operation_type = input(defval = "Both", title = "Position side", options = ["Long", "Short", "Both"])
operation = operation_type == "Long" ? 1 : operation_type == "Short" ? 2 : 3
showlines = input(true,  title="Show sl&tp lines")

// MA
sma_len = input(100, title="MA Length", type=input.integer)
sma = sma(close, sma_len)

longCond = crossover(k, 20) and macd > 0 and close > sma and close > leadLine1 and close > leadLine2
shortCond = crossunder(k, 80)  and macd < 0 and close < sma and close < leadLine1 and close < leadLine2

entry_price  = float(0.0) //set float
entry_price := strategy.position_size != 0 or longCond or shortCond ? strategy.position_avg_price : entry_price[1]
entry_atr = valuewhen(longCond or shortCond, atr,0)
short_stop_level     = float(0.0)   //set float
short_profit_level   = float(0.0)   //set float
long_stop_level      = float(0.0)   //set float
long_profit_level    = float(0.0)   //set float
short_stop_level    := entry_price + SMulti * entry_atr
short_profit_level  := entry_price - TMulti * entry_atr
long_stop_level     := entry_price - SMulti * entry_atr
long_profit_level   := entry_price + TMulti * entry_atr


//  Strategy Backtest Limiting Algorithm
i_startTime = input(defval = timestamp("1 Jan 2020 00:00 +0000"), title = "Backtesting Start Time", type = input.time)
i_endTime = input(defval = timestamp("31 Dec 2025 23:59 +0000"), title = "Backtesting End Time", type = input.time)
timeCond = true

if (operation == 1 or operation == 3)
    strategy.entry("long" , strategy.long , when=longCond and timeCond, alert_message = "Long")
    strategy.exit("SL/TP", from_entry = "long" , limit = long_profit_level , stop = long_stop_level , alert_message = "Long exit")

if (operation == 2 or operation == 3)
    strategy.entry("short", strategy.short, when=shortCond and timeCond, alert_message="Short")
    strategy.exit("SL/TP", from_entry = "short", limit = short_profit_level , stop = short_stop_level , alert_message = "Short exit")
    
if time > i_endTime  
    strategy.close_all(comment = "close all", alert_message = "close all")
    
plot(showlines and strategy.position_size <= 0 ? na : long_stop_level,    color=color.red,  style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size <= 0 ? na : long_profit_level,  color=color.lime, style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_stop_level,   color=color.red,  style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_profit_level, color=color.lime, style=plot.style_linebr, linewidth = 2)

//}



Mehr