Integriertes Ichimoku-Keltner-Handelssystem auf Basis einer gleitenden Durchschnittsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-20 13:40:08
Tags:

img

Übersicht

Diese Strategie integriert eine gleitende Durchschnittsstrategie, Ichimoku-Cloud-Diagramme und technische Indikatoren des Keltner-Kanals, um Trendfolgen und Durchbruchshandel zu erreichen, der für den hochfrequenten algorithmischen Handel geeignet ist.

Strategieprinzip

  1. Verwenden Sie den Keltner-Kanal, um zu beurteilen, ob der Aktienkurs die oberen und unteren Schienen des Kanals als Signal für die Eröffnung von Positionen übersteigt
  2. Ichimoku-Wolkendiagramme beurteilen die Trendrichtung und verwenden den Keltner-Kanal
  3. Die gleitende Durchschnittsstrategie sendet Schlusssignale.

Analyse der Vorteile

  1. Integration mehrerer technischer Indikatoren für ein umfassendes Urteil zur Verbesserung der Entscheidungsgenauigkeit
  2. Keltner-Kanal beurteilt Überkauf- und Überverkaufsbedingungen, um bei der Eröffnung von Positionen nicht nach Höchstwerten und Tiefwerten zu jagen
  3. Ichimoku-Wolken-Charts beurteilen die wichtigsten Trends, um gegen den Trend zu handeln.
  4. Die gleitende Durchschnittsstrategie filtert Schocks und verhindert eine übermäßige Empfindlichkeit

Risikoanalyse

  1. Die Integration mehrerer Indikatoren macht die Parameter-Einstellungen komplexer und erfordert sorgfältige Tests
  2. Die Kreuzung von Konversionslinie und Basislinie von Cloud-Charts ist nicht immer ein zuverlässiges Handelssignal
  3. Der Keltner-Kanal muss die Parameter an die Merkmale der verschiedenen Bestände anpassen.

Optimierungsrichtlinien

  1. Bewertung der Serverleistung und angemessene Verkürzung der gleitenden Durchschnittszyklen zur Erhöhung der Handelsfrequenz
  2. Prüfung der Empfindlichkeit verschiedener Bestände gegenüber Parametern und Festlegung von Anpassungsparametern
  3. Steigerung der Stop-Loss-Strategie zur Verringerung von Einzelverlusten

Zusammenfassung

Diese Strategie integriert Ichimoku-Cloud-Charts, Keltner-Kanäle und gleitende Durchschnittsstrategien mit mehreren technischen Indikatoren, um Trendverfolgung und effizienten Durchbruchshandel zu erreichen. Im Vergleich zu einem einzigen Indikator ist das Urteil dieser Strategie umfassender und genauer und vermeidet bestimmte falsche Signale. Gleichzeitig gibt es auch Probleme, dass die Parameter-Einstellungen komplexer sind und für einzelne Aktien optimiert werden müssen. Im Allgemeinen eignet sich diese Strategie für den hochfrequenten algorithmischen Handel mit signifikanten Auswirkungen.


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

//@version=3
// Author: Persio Flexa
// Description: Ichimoku Clouds with Keltner Channel, perfect for margin trading 
strategy("Ichimoku Keltner Strategy", overlay=true) 

// -- Keltner ------------------------------------------------------------------
source = close

useTrueRange = input(true)
length = input(18, minval=1) 
mult = input(1.8)

ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title="BASE", color=orange,transp=85)
plot(upper, title="UPPER", color=red)
plot(lower, title="LOWER", color=green)

//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
crossUpper = source > upper
crossLower = source  < lower

bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])

sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) 

crossBcond = false
crossBcond := crossUpper ? true 
 : na(crossBcond[1]) ? false : crossBcond[1]

crossScond = false
crossScond := crossLower ? true 
 : na(crossScond[1]) ? false : crossScond[1]

cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

// ---------------------------------------------------------------------


// -- Ichimoku

ATRlength = input(200, minval=1)
ATRMult = input(2.272, minval=1)

ATR = rma(tr(true), ATRlength)

len = input(26, minval=1, title="EMA Length")
src = input(close, title="Source")
out = ema(src, len)

emaup = out+(ATR*ATRMult)
emadw = out-(ATR*ATRMult)

conversionPeriods = input(15, minval=1),
basePeriods = input(35, minval=1)
laggingSpan2Periods = input(52, minval=1),
displacement = input(26, minval=1)

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

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

p1 = plot(leadLine1, offset = displacement, color=green,transp=85, title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=red,transp=85, title="Lead 2")
fill(p1, p2,silver) 

longCond    = crossover(conversionLine, baseLine)
shortCond   = crossunder(conversionLine, baseLine)
// -------------------------------------------------------------------------

if (crossUpper and (conversionLine > baseLine))
    strategy.entry("long", strategy.long, stop=bprice, comment="LONG")

if (crossLower and (conversionLine < baseLine))
    strategy.entry("short", strategy.short, stop=sprice, comment="SHORT")
    
strategy.close("long", when = (shortCond and source < lower))
strategy.close("short", when = (longCond and source > upper))

Mehr