Octa-EMA und Ichimoku Cloud Chart Quantitative Handelsstrategie


Erstellungsdatum: 2023-12-11 14:52:05 zuletzt geändert: 2023-12-11 14:52:05
Kopie: 1 Klicks: 456
1
konzentrieren Sie sich auf
1237
Anhänger

Octa-EMA und Ichimoku Cloud Chart Quantitative Handelsstrategie

Überblick

Die Strategie verwendet einen Index-Moving-Average mit acht verschiedenen Perioden und die Ichimoku-Cloud-Chart als primären Handelssignal und kann effektiv in einem 1-stündigen, 4-stündigen oder Tageszeitrahmen funktionieren.

Strategieprinzip

Die Kernprinzipien der Strategie basieren auf zwei Teilen:

  1. 8 Index-Moving Averages (Octa-EMA)

Die Strategie verwendet acht EMAs mit verschiedenen Perioden, nämlich 5, 11, 15, 18, 21, 24, 28 und 34. Diese acht EMAs werden als Octa-EMA bezeichnet. Wenn EMAs mit kürzeren Perioden über EMAs mit längeren Perioden liegen, ist dies ein Mehrkopf-Trend.

  1. Ichimoku-Wolkenkarten

Der Ichimoku-Cloud-Diagramm enthält Umschaltlinien, Referenzlinien, Verzögerungslinien und Führungslinien A/B. Der Cloud-Diagramm entscheidet hauptsächlich über die Trendrichtung und bietet Unterstützungswiderstand. Wenn der Preis oben auf dem Cloud-Diagramm einen mehrseitigen Trend zeigt, ist er unten auf dem Cloud-Diagramm ein ungebundener Trend.

Die Handelssignale für diese Strategie basieren auf den beiden Komponenten oben. Ein Kaufsignal wird erzeugt, wenn alle 8 EMAs in einer mehrköpfigen Reihenfolge sind (kurze EMA über der langen EMA) und der Preis höher ist als der von Ichimoku. Ein Verkaufsignal wird erzeugt, wenn die EMA-Reihenfolge in eine leere Reihenfolge umgestellt wird (kurze EMA unter der langen EMA).

Strategische Stärkenanalyse

Diese Strategie hat folgende Vorteile:

  1. Doppelte Filter können falsche Signale reduzieren
  2. Ichimoku Cloud Diagramm, um die Richtung des Trends zu bestimmen und einen Abwärtstrend zu vermeiden
  3. Artikel 8 EMA-Cross-Portfolio-Beschlüsse zur Verbesserung der Genauigkeit
  4. Funktioniert in mehreren Zeiträumen
  5. Große Optimierungsmöglichkeiten für verschiedene Sorten

Strategische Risikoanalyse

Die Strategie birgt auch Risiken:

  1. Bei Erschütterungen kann es zu einer höheren Frequenz kommen.
  2. Die Kaufbedingungen sind strenger und man könnte einen Teil des Kaufs verpassen.
  3. Wird nicht wirksam, wenn kurz- und mittelfristige Trends nicht übereinstimmen
  4. Fehlende Einstellung der EMA-Parameter kann zu Signalverzögerungen führen

Das Risiko kann durch Anpassung der EMA-Parameter oder Optimierung der Aufnahmebedingungen verringert werden, aber auch in Kombination mit anderen Indikatoren.

Richtung der Strategieoptimierung

Die Strategie kann in folgenden Bereichen optimiert werden:

  1. Anpassung der EMA-Parameter zur Optimierung der entsprechenden Perioden
  2. Erhöhung der mittleren und leeren Indikatoren zur Gewährleistung der Genauigkeit von Trendbeurteilungen
  3. In Kombination mit anderen Indikatoren wie MACD, KDJ und anderen, optimieren Sie die Eintrittszeit
  4. Erhöhung der Stop-Loss-Strategie und Kontrolle von Einmalverlusten
  5. Testen Sie die Wirkung von verschiedenen Varianten, um die beste Kombination zu finden
  6. Automatische Suche nach optimalen Parametern mithilfe von Machine Learning-Algorithmen

Zusammenfassen

Octa-EMA ist im Vergleich zur Ichimoku Cloud-Grafik-Handelsstrategie insgesamt eine stabilere und zuverlässigere Trendverfolgungsstrategie. Es verwendet die EMA-Kombination von Trendurteilen und Ichimoku-Filtersignalen, wodurch eine niedrigere Fehlentscheidungsrate erzielt wird, wenn die Parameter optimiert werden. Die Strategie kann in verschiedenen Sorten wie Aktien, Devisen, Edelmetalle verwendet werden und kann in mehreren Zeitzyklen ausgeführt werden.

Strategiequellcode
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Fukuiz

strategy(title='Fukuiz Octa-EMA + Ichimoku', shorttitle='Fuku octa strategy', overlay=true, process_orders_on_close=true, 
     default_qty_type= strategy.cash , default_qty_value=1000, currency=currency.USD, initial_capital=10000 ,commission_type = strategy.commission.percent,commission_value=0.25)


//OCTA EMA ##################################################


// Functions
f_emaRibbon(_src, _e1, _e2, _e3, _e4, _e5, _e6, _e7, _e8) =>
    _ema1 = ta.ema(_src, _e1)
    _ema2 = ta.ema(_src, _e2)
    _ema3 = ta.ema(_src, _e3)
    _ema4 = ta.ema(_src, _e4)
    _ema5 = ta.ema(_src, _e5)
    _ema6 = ta.ema(_src, _e6)
    _ema7 = ta.ema(_src, _e7)
    _ema8 = ta.ema(_src, _e8)
    [_ema1, _ema2, _ema3, _ema4, _ema5, _ema6, _ema7, _ema8]

showRibbon = input(true, 'Show Ribbon (EMA)')
ema1Len = input(5, title='EMA 1 Length')
ema2Len = input(11, title='EMA 2 Length')
ema3Len = input(15, title='EMA 3 Length')
ema4Len = input(18, title='EMA 4 Length')
ema5Len = input(21, title='EMA 5 Length')
ema6Len = input(24, title='EMA 6 Length')
ema7Len = input(28, title='EMA 7 Length')
ema8Len = input(34, title='EMA 8 Length')

[ema1, ema2, ema3, ema4, ema5, ema6, ema7, ema8] = f_emaRibbon(close, ema1Len, ema2Len, ema3Len, ema4Len, ema5Len, ema6Len, ema7Len, ema8Len)

//Plot

ribbonDir = ema8 < ema2
p1 = plot(ema1, color=showRibbon ? ribbonDir ? #1573d4 : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 1')
p2 = plot(ema2, color=showRibbon ? ribbonDir ? #3096ff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 2')
plot(ema3, color=showRibbon ? ribbonDir ? #57abff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 3')
plot(ema4, color=showRibbon ? ribbonDir ? #85c2ff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 4')
plot(ema5, color=showRibbon ? ribbonDir ? #9bcdff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 5')
plot(ema6, color=showRibbon ? ribbonDir ? #b3d9ff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 6')
plot(ema7, color=showRibbon ? ribbonDir ? #c9e5ff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 7')
p8 = plot(ema8, color=showRibbon ? ribbonDir ? #dfecfb : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 8')
fill(p1, p2, color.new(#1573d4, 85))
fill(p2, p8, color.new(#1573d4, 85))

//ichimoku##################################################

//color
colorblue = #3300CC
colorred = #993300
colorwhite = #FFFFFF
colorgreen = #CCCC33
colorpink = #CC6699
colorpurple = #6633FF

//switch
switch1 = input(false, title='Chikou')
switch2 = input(false, title='Tenkan')
switch3 = input(false, title='Kijun')

middleDonchian(Length) =>
    lower = ta.lowest(Length)
    upper = ta.highest(Length)
    math.avg(upper, lower)

//Functions
conversionPeriods = input.int(9, minval=1)
basePeriods = input.int(26, minval=1)
laggingSpan2Periods = input.int(52, minval=1)
displacement = input.int(26, minval=1)
Tenkan = middleDonchian(conversionPeriods)
Kijun = middleDonchian(basePeriods)
xChikou = close
SenkouA = middleDonchian(laggingSpan2Periods)
SenkouB = (Tenkan[basePeriods] + Kijun[basePeriods]) / 2

//Plot
A = plot(SenkouA[displacement], color=color.new(colorpurple, 0), title='SenkouA')
B = plot(SenkouB, color=color.new(colorgreen, 0), title='SenkouB')
plot(switch1 ? xChikou : na, color=color.new(colorpink, 0), title='Chikou', offset=-displacement)
plot(switch2 ? Tenkan : na, color=color.new(colorred, 0), title='Tenkan')
plot(switch3 ? Kijun : na, color=color.new(colorblue, 0), title='Kijun')
fill(A, B, color=color.new(colorgreen, 90), title='Ichimoku Cloud')

//Buy and Sell signals
fukuiz = math.avg(ema2, ema8)
white = ema2 > ema8
gray = ema2 < ema8
buycond = white and white[1] == 0
sellcond = gray and gray[1] == 0
bullish = ta.barssince(buycond) < ta.barssince(sellcond)
bearish = ta.barssince(sellcond) < ta.barssince(buycond)
buy = bearish[1] and buycond and fukuiz > SenkouA[displacement] and fukuiz > SenkouB
sell = bullish[1] and sellcond and fukuiz > SenkouA[displacement] and fukuiz > SenkouB
sell2=ema2 < ema8
buy2 = white and fukuiz > SenkouA[displacement] and fukuiz > SenkouB

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//Back test

startYear = input.int(defval=2017, title='Start Year', minval=2000, maxval=3000)
startMonth = input.int(defval=1, title='Start Month', minval=1, maxval=12)
startDay = input.int(defval=1, title='Start Day', minval=1, maxval=31)
endYear = input.int(defval=2023, title='End Year', minval=2000 ,maxval=3000)
endMonth = input.int(defval=12, title='End Month', minval=1, maxval=12)
endDay = input.int(defval=31, title='End Day', minval=1, maxval=31)

start = timestamp(startYear, startMonth, startDay, 00, 00)
end = timestamp(endYear, endMonth, endDay, 23, 59)
period() => time >= start and time <= end ? true : false

if buy2 
    strategy.entry(id='long', direction=strategy.long, when=period(), comment='BUY')

if sell2
    strategy.close(id='long', when=period(), comment='SELL')